Appendix: Stow & Deployment Audit

Stow Audit Commands

Reusable commands for auditing dots-quantum deployment on any machine:

# Generate list of stow-able packages
ls ~/atelier/_projects/personal/dots-quantum/ | grep -v -E "LICENSE|README|PRIVATE|opencode.json|scripts|setup" | sort > /tmp/available.txt

# Check which packages are stowed (maxdepth 4 for share/bin)
for pkg in $(cat /tmp/available.txt); do
    if find ~ -maxdepth 4 -type l -lname "*dots-quantum/${pkg}/*" 2>/dev/null | head -1 | grep -q .; then
        echo "✓ $pkg"
    else
        echo "✗ $pkg"
    fi
done
# Show all symlinks pointing to dots-quantum with targets
find ~ -maxdepth 4 -type l -lname "*dots-quantum*" 2>/dev/null | sort | awk -F'dots-quantum/' '{printf "%-50s → %s\n", $0, $2}'
# xargs version for one-liner audit
cat /tmp/available.txt | xargs -I{} sh -c \
    'find ~ -maxdepth 4 -type l -lname "*dots-quantum/{}/*" 2>/dev/null | head -1 | grep -q . && echo "✓ {}" || echo "✗ {}"'

SSH Config IP Verification

Always verify host IPs before re-encrypting SSH config:

# Check actual IPs on the machine
ip -4 -o addr show | awk '$2!="lo" {print $2, $4}'

# Check what the SSH config has
grep -A2 'Host modestus-razer$' ~/atelier/_projects/personal/dots-quantum/ssh/.ssh/config
grep -A2 'Host modestus-p16g$' ~/atelier/_projects/personal/dots-quantum/ssh/.ssh/config

# Fix wrong IP (sed with address range — only changes within the Host block)
sed -i '/Host modestus-razer$/,/^$/s/HostName OLD_IP/HostName NEW_IP/' ssh/.ssh/config

# Re-encrypt workflow
age -e -R ~/.age/recipients/self.txt -o ssh/.ssh/config.age ssh/.ssh/config
git add ssh/.ssh/config.age
gach << 'COMMIT'
fix(ssh): Correct host IP for <hostname>
COMMIT
git push

# On target machine — decrypt (use >| for zsh noclobber)
git pull
age -d -i ~/.age/identities/personal.key ssh/.ssh/config.age >| ssh/.ssh/config

Stow Package Audit (Apr 3)

# Check which dots-quantum packages are stowed vs missing
ls ~/atelier/_projects/personal/dots-quantum/ | grep -v -E "LICENSE|README|PRIVATE|opencode.json|scripts|setup" | sort > /tmp/available.txt
for pkg in $(cat /tmp/available.txt); do
    if find ~ -maxdepth 2 -type l -lname "*dots-quantum/${pkg}/*" 2>/dev/null | head -1 | grep -q .; then
        echo "✓ $pkg"
    else
        echo "✗ $pkg"
    fi
done
Package Status Notes

aerc

Email client

aider

AI pair programming

bash

bin

Needs stow -R -t ~ bin

btop

cava

Audio visualizer

chromium

claude

eww

Desktop widgets

fastfetch

fd

fish

Not used (zsh primary)

fzf

ghostty

git

glow

Markdown viewer — stow if needed

gpg

N/A

NOT a stow package — per-host config container (like hosts). GPG configs rsync’d directly to ~/.gnupg/. gpg-agent.conf symlinked from stowed file. Do NOT stow.

himalaya

Email — stow if using

hosts

N/A

NOT a stow package — per-host config container. Each machine manually symlinks hosts/<hostname>/env-gpu.conf to ~/.config/hypr/env-gpu.conf. Do NOT stow (creates wrong-level symlinks in ~/).

htop

Needs stow -t ~ htop

hyprland

jj

Jujutsu VCS — stow if using

kitty

lazygit

libvirt

Needs stow -t ~ libvirt

mako

mimeapps

oh-my-posh

opencode

Needs stow -t ~ opencode

powershell

ripgrep

secrets

N/A

NOT a dots-quantum package — separate git repo at ~/.secrets/ with 4 remotes (GitHub, GitLab, Gitea, Codeberg). rsync’d from Razer, git history intact.

share

Stowed at depth 4 (~/.local/share/awk/, sed/, grep-patterns/, bash/, adoc/). Audit script misses it at maxdepth 2 — use maxdepth 4.

shell

Needs stow -t ~ shell

ssh

systemd

Needs stow -t ~ systemd

thunar

Needs stow -t ~ thunar

tmux

Needs stow -t ~ tmux

vim

vscodium

Needs stow -t ~ vscodium

waybar

wofi

zathura

zsh