dots-quantum: Post-Deployment Log
- Overview
- Quick Deploy for New Machines
- Diagnostic Commands
- Audit Findings (2026-03-25)
- ~/.claude — CLEAN
- ~/.local/bin — STALE OPTIMUS REFERENCES
- ~/.local/share — STALE OPTIMUS REFERENCES
- ~/.config/shell — STALE OPTIMUS REFERENCES
- ~/.gnupg — STALE OPTIMUS REFERENCES
- ~/.config — OTHER STALE OPTIMUS REFERENCES
- ~/atelier/_projects/personal — SHORTCUT SYMLINKS
- ~/dotfiles-backup-20260325/conflicts — ORPHANED BACKUP SYMLINKS
- ~/.local/bin/principia-publish — UNRELATED BROKEN SYMLINK
- Root Cause: Claude Code "Missing API key"
- Remediation Plan
- Remediation Procedure
- Post-Remediation Cleanup
- Root Cause Analysis
- Archive-Ready Status: dotfiles-optimus
- Archive Directory Structure
Overview
Machine: modestus (Arch Linux / Hyprland)
Migration: dotfiles-optimus → dots-quantum
Tool: GNU Stow
Date: 2026-03-25
This log documents the post-deployment audit performed after migrating the primary
dotfiles repo from dotfiles-optimus to dots-quantum. It captures the diagnostic
commands used, findings, and remediation actions required.
|
Learned the hard way: Always use: |
Quick Deploy for New Machines
Copy-paste ready deployment for clean machines (WSL, other workstations).
Prerequisites
# Clone dots-quantum
cd ~/atelier/_projects/personal
git clone git@github.com:EvanusModestus/dots-quantum.git
cd dots-quantum
Deploy All Packages
# CRITICAL: Must specify -t ~ since we're not in ~ or ~/parent
cd ~/atelier/_projects/personal/dots-quantum
# Core packages
stow -v -t ~ --no-folding bin # 35 scripts
stow -v -t ~ --no-folding share # awk, bash, grep, sed libraries
stow -v -t ~ --no-folding shell # .sh/.fish shell extensions
stow -v -t ~ --no-folding gpg # gpg.conf, gpg-agent.conf
# App configs
stow -v -t ~ --no-folding himalaya # email client
stow -v -t ~ --no-folding libvirt # VM config
stow -v -t ~ --no-folding thunar # file manager
stow -v -t ~ --no-folding vscodium # editor settings
stow -v -t ~ --no-folding glow # markdown viewer
stow -v -t ~ --no-folding htop # process viewer
stow -v -t ~ --no-folding jj # jujutsu VCS
# Desktop (skip on WSL/servers)
stow -v -t ~ --no-folding hyprland # Wayland compositor
stow -v -t ~ --no-folding waybar # status bar
stow -v -t ~ --no-folding wofi # launcher
Verify Deployment
# Quick sanity check - all should resolve to dots-quantum
ls -la ~/.local/bin/adoc ~/.local/bin/vault-ssh-sign ~/.config/shell/aliases.sh \
| awk '{print $NF}' | grep -q dots-quantum && echo "OK" || echo "FAILED"
Machine-Specific Configs (Hyprland)
Each machine needs its own monitors.conf and env-gpu.conf:
# Check GPU(s)
lspci | grep -i vga
# Create machine-specific configs in dots-quantum
vim ~/atelier/_projects/personal/dots-quantum/hyprland/.config/hypr/monitors.conf
vim ~/atelier/_projects/personal/dots-quantum/hyprland/.config/hypr/env-gpu.conf
Diagnostic Commands
Find broken symlinks (dangling targets)
Finds symlinks whose target does not exist on the filesystem.
find ~ -maxdepth 6 -xtype l 2>/dev/null
Find symlinks still pointing to dotfiles-optimus
Scans the full home tree and filters for any symlink target containing dotfiles-optimus.
Use this to identify stale pre-migration references that stow did not clean up.
find ~ -maxdepth 6 -type l 2>/dev/null | while read link; do
target=$(readlink "$link")
case "$target" in
*dotfiles-optimus*) echo "$link -> $target" ;;
esac
done
output example from this deployment
/home/evanusmodestus/.local/share/awk -> ../../atelier/_projects/personal/dotfiles-optimus/base/awk/.local/share/awk
/home/evanusmodestus/.local/share/bash -> ../../atelier/_projects/personal/dotfiles-optimus/base/bash-lib/.local/share/bash
/home/evanusmodestus/.local/share/grep-patterns -> ../../atelier/_projects/personal/dotfiles-optimus/base/grep-patterns/.local/share/grep-patterns
/home/evanusmodestus/.local/share/sed -> ../../atelier/_projects/personal/dotfiles-optimus/base/sed-scripts/.local/share/sed
/home/evanusmodestus/.local/bin/borg-backup-synology.sh -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/borg-backup-synology.sh
/home/evanusmodestus/.local/bin/check-all-repos.sh -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/check-all-repos.sh
/home/evanusmodestus/.local/bin/manage-all-repos.sh -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/manage-all-repos.sh
/home/evanusmodestus/.local/bin/typec-util-mount -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/typec-util-mount
/home/evanusmodestus/.local/bin/typec-util-umount -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/typec-util-umount
/home/evanusmodestus/.local/bin/gopass-audit -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/gopass-audit
/home/evanusmodestus/.local/bin/gopass-migrate -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/gopass-migrate
/home/evanusmodestus/.local/bin/gopass-personal-docs -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/gopass-personal-docs
/home/evanusmodestus/.local/bin/gopass-query -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/gopass-query
/home/evanusmodestus/.local/bin/seagate-backup-mount -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/seagate-backup-mount
/home/evanusmodestus/.local/bin/seagate-backup-umount -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/seagate-backup-umount
/home/evanusmodestus/.local/bin/seagate-primary-backup -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/seagate-primary-backup
/home/evanusmodestus/.local/bin/seagate-primary-mount -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/seagate-primary-mount
/home/evanusmodestus/.local/bin/seagate-primary-snapshot -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/seagate-primary-snapshot
/home/evanusmodestus/.local/bin/seagate-primary-umount -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/seagate-primary-umount
/home/evanusmodestus/.local/bin/seagate-sync-to-backup -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/seagate-sync-to-backup
/home/evanusmodestus/.local/bin/vault-ssh-sign -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/vault-ssh-sign
/home/evanusmodestus/.local/bin/vault-ssh-test -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/vault-ssh-test
/home/evanusmodestus/.local/bin/adoc -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/adoc
/home/evanusmodestus/.config/shell/aliases.fish -> ../../atelier/_projects/personal/dotfiles-optimus/shell/aliases/.config/shell/aliases.fish
/home/evanusmodestus/.config/shell/aliases.sh -> ../../atelier/_projects/personal/dotfiles-optimus/shell/aliases/.config/shell/aliases.sh
/home/evanusmodestus/.config/shell/atelier.fish -> ../../atelier/_projects/personal/dotfiles-optimus/shell/atelier/.config/shell/atelier.fish
/home/evanusmodestus/.config/shell/atelier.shell -> ../../atelier/_projects/personal/dotfiles-optimus/shell/atelier/.config/shell/atelier.shell
/home/evanusmodestus/.config/shell/.links -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/.links
/home/evanusmodestus/.config/shell/data-analysis.fish -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/data-analysis.fish
/home/evanusmodestus/.config/shell/data-analysis.sh -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/data-analysis.sh
/home/evanusmodestus/.config/shell/ollama.fish -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/ollama.fish
/home/evanusmodestus/.config/shell/ollama.sh -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/ollama.sh
/home/evanusmodestus/.config/shell/secure-vault.fish -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/secure-vault.fish
/home/evanusmodestus/.config/shell/secure-vault.sh -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/secure-vault.sh
/home/evanusmodestus/.config/shell/vault-wrappers.fish -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/vault-wrappers.fish
/home/evanusmodestus/.config/shell/vault-wrappers.sh -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/vault-wrappers.sh
/home/evanusmodestus/.config/shell/history-vault.fish -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/history-vault.fish
/home/evanusmodestus/.config/shell/history-vault.sh -> ../../atelier/_projects/personal/dotfiles-optimus/shell/functions/.config/shell/history-vault.sh
/home/evanusmodestus/.config/shell/bash.sh -> ../../atelier/_projects/personal/dotfiles-optimus/shell/cli-mastery/.config/shell/bash.sh
/home/evanusmodestus/.config/shell/jq-yq.sh -> ../../atelier/_projects/personal/dotfiles-optimus/shell/cli-mastery/.config/shell/jq-yq.sh
/home/evanusmodestus/.config/shell/python.sh -> ../../atelier/_projects/personal/dotfiles-optimus/shell/cli-mastery/.config/shell/python.sh
/home/evanusmodestus/.config/himalaya/config.toml -> ../../atelier/_projects/personal/dotfiles-optimus/apps/himalaya/.config/himalaya/config.toml
/home/evanusmodestus/.config/libvirt/libvirt.conf -> ../../atelier/_projects/personal/dotfiles-optimus/apps/libvirt/.config/libvirt/libvirt.conf
/home/evanusmodestus/.config/Thunar/accels.scm -> ../../atelier/_projects/personal/dotfiles-optimus/apps/thunar/.config/Thunar/accels.scm
/home/evanusmodestus/.config/Thunar/uca.xml -> ../../atelier/_projects/personal/dotfiles-optimus/apps/thunar/.config/Thunar/uca.xml
/home/evanusmodestus/.config/VSCodium/User/extensions.txt -> ../../../atelier/_projects/personal/dotfiles-optimus/editor/vscodium/.config/VSCodium/User/extensions.txt
/home/evanusmodestus/.config/VSCodium/User/keybindings.json -> ../../../atelier/_projects/personal/dotfiles-optimus/editor/vscodium/.config/VSCodium/User/keybindings.json
/home/evanusmodestus/.config/VSCodium/User/settings.json -> ../../../atelier/_projects/personal/dotfiles-optimus/editor/vscodium/.config/VSCodium/User/settings.json
/home/evanusmodestus/atelier/_projects/personal/bash -> dotfiles-optimus/base/bash
/home/evanusmodestus/atelier/_projects/personal/bin -> dotfiles-optimus/base/bin
/home/evanusmodestus/atelier/_projects/personal/fd -> dotfiles-optimus/base/fd
/home/evanusmodestus/atelier/_projects/personal/fish -> dotfiles-optimus/base/fish
/home/evanusmodestus/atelier/_projects/personal/fzf -> dotfiles-optimus/base/fzf
/home/evanusmodestus/atelier/_projects/personal/git -> dotfiles-optimus/base/git
/home/evanusmodestus/atelier/_projects/personal/gpg -> dotfiles-optimus/base/gpg
/home/evanusmodestus/atelier/_projects/personal/ripgrep -> dotfiles-optimus/base/ripgrep
/home/evanusmodestus/atelier/_projects/personal/ssh -> dotfiles-optimus/base/ssh
/home/evanusmodestus/atelier/_projects/personal/vim -> dotfiles-optimus/base/vim
/home/evanusmodestus/atelier/_projects/personal/zsh -> dotfiles-optimus/base/zsh
/home/evanusmodestus/.gnupg/gpg-agent.conf -> ../atelier/_projects/personal/dotfiles-optimus/base/gpg/.gnupg/gpg-agent.conf
/home/evanusmodestus/.gnupg/gpg.conf -> ../atelier/_projects/personal/dotfiles-optimus/base/gpg/.gnupg/gpg.conf
/home/evanusmodestus/bin/.local -> ../atelier/_projects/personal/dotfiles-optimus/base/bin/.local
/home/evanusmodestus/.dotfiles -> /home/evanusmodestus/atelier/_projects/personal/dotfiles-optimus
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/git/ignore -> ../../atelier/_projects/personal/dotfiles-optimus/base/git/.config/git/ignore
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/btop/themes/catppuccin_mocha.theme -> ../../../atelier/_projects/personal/dotfiles-optimus/apps/btop/.config/btop/themes/catppuccin_mocha.theme
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/btop/btop.conf -> ../../atelier/_projects/personal/dotfiles-optimus/apps/btop/.config/btop/btop.conf
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/config.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/config.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/cyberpunk.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/cyberpunk.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/everything.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/everything.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/glitch.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/glitch.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/hardware.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/hardware.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/hexagon.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/hexagon.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/matrix.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/matrix.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/minimal.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/minimal.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/network.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/network.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/pyramid.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/pyramid.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/rice-ultra.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/rice-ultra.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fastfetch/wave.jsonc -> ../../atelier/_projects/personal/dotfiles-optimus/apps/fastfetch/.config/fastfetch/wave.jsonc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/ghostty/config -> ../../atelier/_projects/personal/dotfiles-optimus/terminal/ghostty/.config/ghostty/config
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/kitty/kitty.conf -> ../../atelier/_projects/personal/dotfiles-optimus/terminal/kitty/.config/kitty/kitty.conf
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/kitty/kitty.conf.bak -> ../../atelier/_projects/personal/dotfiles-optimus/terminal/kitty/.config/kitty/kitty.conf.bak
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/lazygit/config.yml -> ../../atelier/_projects/personal/dotfiles-optimus/apps/lazygit/.config/lazygit/config.yml
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/mako/README.md -> ../../atelier/_projects/personal/dotfiles-optimus/wm/mako/.config/mako/README.md
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/README.md -> ../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/README.md
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/config -> ../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/config
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/scripts/notification.sh -> ../../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/scripts/notification.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/scripts/waybar-battery-info.sh -> ../../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/scripts/waybar-battery-info.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/scripts/waybar-cpu-info.sh -> ../../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/scripts/waybar-cpu-info.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/scripts/waybar-cpu-kill.sh -> ../../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/scripts/waybar-cpu-kill.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/scripts/waybar-memory-clear.sh -> ../../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/scripts/waybar-memory-clear.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/scripts/waybar-memory-info.sh -> ../../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/scripts/waybar-memory-info.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/scripts/waybar-network-info.sh -> ../../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/scripts/waybar-network-info.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/scripts/waybar-temp-info.sh -> ../../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/scripts/waybar-temp-info.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/scripts/battery-monitor.sh -> ../../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/scripts/battery-monitor.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/waybar/style.css -> ../../atelier/_projects/personal/dotfiles-optimus/wm/waybar/.config/waybar/style.css
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/wofi/README.md -> ../../atelier/_projects/personal/dotfiles-optimus/wm/wofi/.config/wofi/README.md
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/wofi/config -> ../../atelier/_projects/personal/dotfiles-optimus/wm/wofi/.config/wofi/config
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/wofi/style.css -> ../../atelier/_projects/personal/dotfiles-optimus/wm/wofi/.config/wofi/style.css
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/awklib -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/awklib
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/biz -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/biz
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/fxa -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/fxa
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/geodist -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/geodist
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/grp -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/grp
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/ip-extract -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/ip-extract
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/ly2pdf -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/ly2pdf
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/pawk -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/pawk
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/pd -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/pd
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/pd-heredoc -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/pd-heredoc
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/pd-viz -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/pd-viz
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/secrets-scan -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/secrets-scan
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/sedx -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/sedx
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/wofi-clipboard-delete.sh -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/wofi-clipboard-delete.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/wofi-power-menu.sh -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/wofi-power-menu.sh
/home/evanusmodestus/dotfiles-backup-20260325/conflicts/wofi-wifi-menu.sh -> ../../atelier/_projects/personal/dotfiles-optimus/base/bin/.local/bin/wofi-wifi-menu.sh
Audit Findings (2026-03-25)
~/.claude — CLEAN
All managed symlinks in ~/.claude/ correctly resolve to dots-quantum.
No stale optimus references. Notable: credentials.json is absent (expected —
OAuth credentials are not stow-managed).
~/.claude symlink inventory
| Symlink | Target |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~/.local/bin — STALE OPTIMUS REFERENCES
The following binaries are still symlinked into dotfiles-optimus. These are live
PATH entries and must be re-homed to dots-quantum or removed if deprecated.
| Symlink | Stale Target |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~/.local/share — STALE OPTIMUS REFERENCES
| Symlink | Stale Target |
|---|---|
|
|
|
|
|
|
|
|
~/.config/shell — STALE OPTIMUS REFERENCES
| Symlink | Stale Target |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
These are sourced at shell startup. Until re-homed, any functions defined here
load from dotfiles-optimus. This is the most likely cause of ANTHROPIC_API_KEY
not being set if it is exported from any of these files.
|
~/.gnupg — STALE OPTIMUS REFERENCES
| Symlink | Stale Target |
|---|---|
|
|
|
|
~/.config — OTHER STALE OPTIMUS REFERENCES
| Symlink | Stale Target |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
~/atelier/_projects/personal — SHORTCUT SYMLINKS
Legacy shortcut symlinks in the atelier tree pointing into dotfiles-optimus
subdirectories. These appear to be convenience links, not active config paths.
bash -> dotfiles-optimus/base/bash
bin -> dotfiles-optimus/base/bin
fd -> dotfiles-optimus/base/fd
fish -> dotfiles-optimus/base/fish
fzf -> dotfiles-optimus/base/fzf
git -> dotfiles-optimus/base/git
gpg -> dotfiles-optimus/base/gpg
ripgrep -> dotfiles-optimus/base/ripgrep
ssh -> dotfiles-optimus/base/ssh
vim -> dotfiles-optimus/base/vim
zsh -> dotfiles-optimus/base/zsh
~/dotfiles-backup-20260325/conflicts — ORPHANED BACKUP SYMLINKS
All entries under this directory are broken symlinks created by stow during the migration conflict resolution pass. They are not in any active PATH or config search path. Safe to delete once remediation of the live stale links above is confirmed complete.
~/.local/bin/principia-publish — UNRELATED BROKEN SYMLINK
Target: /home/evanusmodestus/atelier/_bibliotheca/Principia/.principia/scripts/publish.sh
Not a dotfiles-optimus reference. Broken because the Principia project has not been initialized on this machine. No action required until Principia is deployed.
Root Cause: Claude Code "Missing API key"
~/.claude/credentials.json does not exist — neither as a real file nor a symlink.
Claude Code stores its OAuth token here. The file is absent because:
-
It was not carried over during the dotfiles-quantum stow deployment (correct — credentials should never be stow-managed).
-
No prior
/loginhas been run on this machine/profile.
Secondary factor: ~/.config/shell/secure-vault.sh and vault-wrappers.sh are
still symlinked to dotfiles-optimus. If ANTHROPIC_API_KEY is exported from
either of these files, it would not be set correctly until those links are re-homed.
Remediation Plan
| Priority | Action | Status |
|---|---|---|
P0 |
Run |
⬜ Pending |
P1 |
Identify which |
⬜ Pending |
P1 |
Re-home |
⬜ Pending |
P1 |
Re-home |
⬜ Pending |
P2 |
Re-home |
⬜ Pending |
P2 |
Re-home |
⬜ Pending |
P3 |
Update or remove |
⬜ Pending |
P3 |
Remove |
⬜ Pending |
P4 |
Initialize Principia project on this machine to restore |
⬜ Pending |
Remediation Procedure
Phase 1: Migrate Missing Files to dots-quantum
These files exist in dotfiles-optimus but NOT in dots-quantum. Copy them first.
1.1 GPG configs
cp ~/atelier/_projects/personal/dotfiles-optimus/base/gpg/.gnupg/gpg.conf \
~/atelier/_projects/personal/dots-quantum/gpg/.gnupg/
cp ~/atelier/_projects/personal/dotfiles-optimus/base/gpg/.gnupg/gpg-agent.conf \
~/atelier/_projects/personal/dots-quantum/gpg/.gnupg/
Verify:
ls -la ~/atelier/_projects/personal/dots-quantum/gpg/.gnupg/
1.2 Fish shell files
dots-quantum shell is missing fish equivalents. Copy them:
cd ~/atelier/_projects/personal/dotfiles-optimus
# Copy fish files that have no equivalent in dots-quantum
cp shell/atelier/.config/shell/atelier.fish \
~/atelier/_projects/personal/dots-quantum/shell/.config/shell/
cp shell/functions/.config/shell/data-analysis.fish \
~/atelier/_projects/personal/dots-quantum/shell/.config/shell/
cp shell/functions/.config/shell/history-vault.fish \
~/atelier/_projects/personal/dots-quantum/shell/.config/shell/
cp shell/functions/.config/shell/ollama.fish \
~/atelier/_projects/personal/dots-quantum/shell/.config/shell/
cp shell/functions/.config/shell/secure-vault.fish \
~/atelier/_projects/personal/dots-quantum/shell/.config/shell/
cp shell/functions/.config/shell/vault-wrappers.fish \
~/atelier/_projects/personal/dots-quantum/shell/.config/shell/
Verify:
ls ~/atelier/_projects/personal/dots-quantum/shell/.config/shell/*.fish
1.3 App configs (himalaya, libvirt, Thunar, VSCodium)
Create package directories and copy:
# himalaya
mkdir -p ~/atelier/_projects/personal/dots-quantum/himalaya/.config/himalaya
cp ~/atelier/_projects/personal/dotfiles-optimus/apps/himalaya/.config/himalaya/config.toml \
~/atelier/_projects/personal/dots-quantum/himalaya/.config/himalaya/
# libvirt
mkdir -p ~/atelier/_projects/personal/dots-quantum/libvirt/.config/libvirt
cp ~/atelier/_projects/personal/dotfiles-optimus/apps/libvirt/.config/libvirt/libvirt.conf \
~/atelier/_projects/personal/dots-quantum/libvirt/.config/libvirt/
# Thunar
mkdir -p ~/atelier/_projects/personal/dots-quantum/thunar/.config/Thunar
cp ~/atelier/_projects/personal/dotfiles-optimus/apps/thunar/.config/Thunar/accels.scm \
~/atelier/_projects/personal/dots-quantum/thunar/.config/Thunar/
cp ~/atelier/_projects/personal/dotfiles-optimus/apps/thunar/.config/Thunar/uca.xml \
~/atelier/_projects/personal/dots-quantum/thunar/.config/Thunar/
# VSCodium
mkdir -p ~/atelier/_projects/personal/dots-quantum/vscodium/.config/VSCodium/User
cp ~/atelier/_projects/personal/dotfiles-optimus/editor/vscodium/.config/VSCodium/User/extensions.txt \
~/atelier/_projects/personal/dots-quantum/vscodium/.config/VSCodium/User/
cp ~/atelier/_projects/personal/dotfiles-optimus/editor/vscodium/.config/VSCodium/User/keybindings.json \
~/atelier/_projects/personal/dots-quantum/vscodium/.config/VSCodium/User/
cp ~/atelier/_projects/personal/dotfiles-optimus/editor/vscodium/.config/VSCodium/User/settings.json \
~/atelier/_projects/personal/dots-quantum/vscodium/.config/VSCodium/User/
Verify all app configs migrated:
for pkg in himalaya libvirt thunar vscodium; do
echo "=== $pkg ==="
find ~/atelier/_projects/personal/dots-quantum/$pkg -type f
done
Phase 2: Remove Stale Symlinks
Remove the symlinks pointing to dotfiles-optimus so stow can recreate them.
2.1 ~/.local/bin stale links
# List what will be removed
find ~/.local/bin -type l 2>/dev/null | while read link; do
target=$(readlink "$link")
case "$target" in
*dotfiles-optimus*) echo "STALE: $link" ;;
esac
done
# Remove them
find ~/.local/bin -type l 2>/dev/null | while read link; do
target=$(readlink "$link")
case "$target" in
*dotfiles-optimus*) rm -v "$link" ;;
esac
done
2.2 ~/.local/share stale links
# Remove awk, bash, grep-patterns, sed directory symlinks
for dir in awk bash grep-patterns sed; do
if [ -L ~/.local/share/$dir ]; then
rm -v ~/.local/share/$dir
fi
done
2.3 ~/.config/shell stale links
# List and remove
find ~/.config/shell -type l 2>/dev/null | while read link; do
target=$(readlink "$link")
case "$target" in
*dotfiles-optimus*) rm -v "$link" ;;
esac
done
2.4 ~/.gnupg stale links
for f in gpg.conf gpg-agent.conf; do
if [ -L ~/.gnupg/$f ]; then
rm -v ~/.gnupg/$f
fi
done
2.5 ~/.config app stale links
# himalaya
[ -L ~/.config/himalaya/config.toml ] && rm -v ~/.config/himalaya/config.toml
# libvirt
[ -L ~/.config/libvirt/libvirt.conf ] && rm -v ~/.config/libvirt/libvirt.conf
# Thunar
[ -L ~/.config/Thunar/accels.scm ] && rm -v ~/.config/Thunar/accels.scm
[ -L ~/.config/Thunar/uca.xml ] && rm -v ~/.config/Thunar/uca.xml
# VSCodium
for f in extensions.txt keybindings.json settings.json; do
[ -L ~/.config/VSCodium/User/$f ] && rm -v ~/.config/VSCodium/User/$f
done
Phase 3: Restow dots-quantum Packages
Since dots-quantum is NOT a direct child of $HOME, you MUST specify
-t ~ (target home) and --no-folding (prevent directory symlink conflicts).
|
cd ~/atelier/_projects/personal/dots-quantum
# Core packages
stow -v -t ~ --no-folding bin
stow -v -t ~ --no-folding share
stow -v -t ~ --no-folding shell
stow -v -t ~ --no-folding gpg
# App packages
stow -v -t ~ --no-folding himalaya
stow -v -t ~ --no-folding libvirt
stow -v -t ~ --no-folding thunar
stow -v -t ~ --no-folding vscodium
Without -t ~, stow defaults to parent directory as target, which would be
~/atelier/_projects/personal/ instead of ~. This causes silent failures.
|
Phase 4: Verification
4.1 Confirm no stale optimus references remain
find ~ -maxdepth 6 -type l 2>/dev/null | while read link; do
target=$(readlink "$link")
case "$target" in
*dotfiles-optimus*) echo "STALE: $link -> $target" ;;
esac
done
Expected output: Empty (no stale links).
4.2 Confirm dots-quantum symlinks work
# bin
ls -la ~/.local/bin/adoc | grep dots-quantum
# share
ls -la ~/.local/share/awk | grep dots-quantum
# shell
ls -la ~/.config/shell/aliases.sh | grep dots-quantum
# gpg
ls -la ~/.gnupg/gpg.conf | grep dots-quantum
4.3 Test shell startup
# Reload zsh
source ~/.zshrc
# Test a function from secure-vault.sh or vault-wrappers.sh
type vault-login 2>/dev/null || echo "vault-login not defined"
4.4 Commit dots-quantum changes
cd ~/atelier/_projects/personal/dots-quantum
git status --short
git add -A
git commit -m "feat: Migrate gpg, shell fish files, app configs from dotfiles-optimus
- gpg: gpg.conf, gpg-agent.conf
- shell: 6 fish files (atelier, data-analysis, history-vault, ollama, secure-vault, vault-wrappers)
- himalaya: config.toml
- libvirt: libvirt.conf
- thunar: accels.scm, uca.xml
- vscodium: extensions.txt, keybindings.json, settings.json
Completes migration from dotfiles-optimus"
Post-Remediation Cleanup
Remove backup directory (after verification)
Once all stale links are confirmed fixed:
rm -rf ~/dotfiles-backup-20260325
Remove atelier shortcut symlinks (optional)
These are convenience links, not functional configs. Remove if desired:
cd ~/atelier/_projects/personal
for link in bash bin fd fish fzf git gpg ripgrep ssh vim zsh; do
[ -L "$link" ] && rm -v "$link"
done
Update ~/.dotfiles pointer
rm ~/.dotfiles
ln -s ~/atelier/_projects/personal/dots-quantum ~/.dotfiles
Root Cause Analysis
RCA-2026-03-25-001: Stow Silent Failure Due to Incorrect Target
Date: 2026-03-25
Severity: Functional Failure (symlinks not created)
Duration: ~30 minutes to diagnose
Incident
After executing Phase 3 (restow), verification showed: - Only 16/35 bin scripts symlinked - 0/4 share directories symlinked - 0/17 shell files symlinked - 0/2 gpg files symlinked
Commands like vault-ssh-sign, adoc, and shell functions were unavailable.
Root Cause
stow without -t <target> uses the parent directory of the current working
directory as the target. Since dots-quantum is located at:
~/atelier/_projects/personal/dots-quantum
The default target was ~/atelier/_projects/personal/ instead of ~ (home).
This caused stow to either: 1. Create symlinks in the wrong location 2. Silently do nothing (no error, no output)
Fix Applied
Added -t ~ and --no-folding flags to all stow commands:
stow -v -t ~ --no-folding bin
--no-folding prevents stow from replacing directories (like ~/.local/share)
with symlinks, which would break other content in those directories.
Prevention
-
Always specify target explicitly when stow directory is not a child of target:
-
stow -t ~ <package>for home-targeted packages -
stow -t /etc <package>for system packages
-
-
Use
--no-foldingwhen target directories have mixed ownership (stow + non-stow files) -
Add verification step immediately after stow:
ls -la ~/.local/bin/adoc | grep dots-quantum || echo "FAILED" -
Document stow quirks in dots-quantum README
RCA-2026-03-25-002: Orphan Symlinks in Wrong Directory
Date: 2026-03-25
Severity: Silent Failure
Impact: 13 symlinks created in wrong location
Incident
User discovered orphan symlinks in ~/atelier/_projects/personal/ instead of ~:
~/atelier/_projects/personal/bash → dotfiles-optimus/base/bash
~/atelier/_projects/personal/bin → dotfiles-optimus/base/bin
~/atelier/_projects/personal/fd → dotfiles-optimus/base/fd
... (11 total)
~/bin/.local → dotfiles-optimus/base/bin/.local
~/.dotfiles → dotfiles-optimus
Root Cause
Earlier stow commands executed WITHOUT -t ~ flag. Stow used parent directory
(~/atelier/_projects/personal/) as target instead of home directory.
Fix Applied
Removed all 13 orphan symlinks:
cd ~/atelier/_projects/personal
for link in bash bin fd fish fzf git gpg ripgrep ssh vim zsh; do
[ -L "$link" ] && rm -v "$link"
done
rm ~/bin/.local
rm ~/.dotfiles
Prevention
ALWAYS use: stow -v -t ~ --no-folding <package>
RCA-2026-03-25-003: SSH Config Not Migrated
Date: 2026-03-25
Severity: Config Gap
Impact: SSH config managed as local file instead of symlink
Incident
User identified that ~/.ssh/config (490 lines) was a regular file, not a symlink:
$ readlink ~/.ssh/config
# (no output - not a symlink)
$ wc -l ~/.ssh/config
490
dots-quantum ssh/ package was empty - no files.
Root Cause
SSH config existed in dotfiles-optimus/base/ssh/.ssh/config but was never
copied to dots-quantum during initial migration. The dots-quantum ssh package
directory existed but contained no files.
Fix Applied
mkdir -p ~/atelier/_projects/personal/dots-quantum/ssh/.ssh
cp ~/atelier/_projects/personal/dotfiles-optimus/base/ssh/.ssh/config \
~/atelier/_projects/personal/dots-quantum/ssh/.ssh/config
rm ~/.ssh/config
cd ~/atelier/_projects/personal/dots-quantum && stow -v -t ~ --no-folding ssh
Result:
$ readlink ~/.ssh/config
../atelier/_projects/personal/dots-quantum/ssh/.ssh/config
Prevention
Before archiving dotfiles-optimus, run comprehensive audit:
# Compare package contents
diff <(ls -1 dotfiles-optimus/base/) <(ls -1 dots-quantum/)
RCA-2026-03-25-004: Waybar Too Small (Monitor Scale)
Date: 2026-03-25
Severity: Visual Bug
Impact: Waybar text unreadable on HiDPI display
Incident
After dots-quantum deployment, waybar was "super small to read" despite identical CSS (font-size: 13px) to previous working config.
Root Cause
dots-quantum/hyprland/.config/hypr/monitors.conf had:
monitor = eDP-1, preferred, 0x0, 1 # WRONG - scale 1 on HiDPI
dotfiles-optimus/hosts/modestus-razer/monitors.conf had:
monitor = eDP-1, preferred, 0x0, 2 # CORRECT - scale 2 for HiDPI
The dots-quantum config was written with scale = 1 for a HiDPI panel that
requires scale = 2.
Fix Applied
# Edit monitors.conf
sed -i 's/0x0, 1/0x0, 2/' ~/atelier/_projects/personal/dots-quantum/hyprland/.config/hypr/monitors.conf
Result: Text renders at correct size.
Architectural Gap Identified
dotfiles-optimus had per-machine configs:
hosts/
├── modestus-aw/
│ ├── env.conf
│ ├── hyprland.local.conf
│ └── monitors.conf
├── modestus-p50/
│ ├── env.conf
│ └── monitors.conf
├── modestus-razer/
│ ├── env.conf
│ ├── gpu
│ └── monitors.conf
└── modestus-x1/
├── env.conf
└── monitors.conf
dots-quantum has single monitors.conf hardcoded for modestus-razer.
TODO: Add host-specific config pattern to dots-quantum for multi-machine deployment
Archive-Ready Status: dotfiles-optimus
Final Verification (2026-03-25)
| Category | Check | Status |
|---|---|---|
Symlinks |
No active symlinks point to dotfiles-optimus |
✅ PASS |
SSH |
|
✅ PASS |
Shell |
|
✅ PASS |
Git |
|
✅ PASS |
CLI Mastery |
|
✅ PASS |
Scripts |
|
✅ PASS |
Hyprland |
|
✅ PASS |
Waybar |
|
✅ PASS |
GPG |
|
✅ PASS |
Apps |
himalaya, libvirt, thunar, vscodium → dots-quantum |
✅ PASS |
Missing from dots-quantum (Architectural Gaps)
| Gap | Impact |
|---|---|
Host-specific configs ( |
Multi-machine deployment requires manual editing of monitors.conf, env-gpu.conf |
helix editor config |
Not migrated (editor/helix in dotfiles-optimus) |
alacritty terminal |
Not migrated (terminal/alacritty in dotfiles-optimus) |
dots-quantum Private Packages (By Design)
dots-quantum gitignores these directories for security:
ssh/ # SSH config - machine-local
gpg/ # GPG config - machine-local
hosts/ # Host-specific configs - machine-local
secrets/ # Sensitive data - machine-local
These exist locally but are NOT committed to GitHub.
To deploy on a new machine: 1. Clone dots-quantum 2. Copy private packages from dotfiles-optimus (or another source) 3. Stow them locally
Recommendation
dotfiles-optimus can be archived with the following caveats:
-
Keep
hosts/directory contents for reference when deploying to other machines -
Keep
base/ssh/andbase/gpg/as private config source -
The missing editor/terminal configs (helix, alacritty) can be migrated on-demand
Archive Commands
cd ~/atelier/_projects/personal/dotfiles-optimus
# Create archive tag
git tag -a v1.0-archived -m "Final state before archiving - migrated to dots-quantum"
git push origin v1.0-archived
# Optional: Archive to tarball
tar -czf ~/atelier/_archive/dotfiles-optimus-2026-03-25.tar.gz .
GitHub Archive
# Archive the repository on GitHub (prevents accidental changes)
gh repo archive EvanusModestus/dotfiles-optimus --yes
Archive Completed (2026-03-25)
Archive locations established:
| Location | Purpose |
|---|---|
|
Local archive - full git history preserved |
GitHub (archived badge) |
Remote archive - read-only, still searchable/cloneable |
Commands executed:
# Tag final state
git tag -a v1.0-archived -m "Final state - migrated to dots-quantum 2026-03-25"
git push origin v1.0-archived
# Archive on GitHub
gh repo archive EvanusModestus/dotfiles-optimus --yes
# Move to local archive
mkdir -p ~/atelier/_archive/2026
mv ~/atelier/_projects/personal/dotfiles-optimus ~/atelier/_archive/2026/
Result:
-
Active projects directory: Only
dots-quantumremains -
dotfiles-optimus: Preserved locally + GitHub (archived)
-
Can restore if ever needed:
gh repo unarchive EvanusModestus/dotfiles-optimus
Archive Directory Structure
A new archive directory has been established for deprecated projects:
~/atelier/_archive/
└── 2026/
└── dotfiles-optimus/ # Archived 2026-03-25
Purpose: - Store deprecated repositories out of active projects path - Preserve git history for reference - Clean separation between active work and historical artifacts
Future archived projects should follow the pattern: ~/atelier/_archive/YYYY/<project-name>/