First real run of tests/smoke.sh surfaced three issues:
- fish.sh: repo configs/ ships fisher.fish and nvm.fish functions, so the
new (previously always-broken) 'fisher install' hit fisher's own
conflict check and aborted. Now: check 'type -q fisher' / 'type -q nvm'
inside fish and only bootstrap what is actually missing.
- fish.sh: end-4 renamed hypr/hyprland/colors.conf to colors.lua and
moved hyprlock colors under hypr/hyprlock/ - the stale paths made the
old script abort on cp. Updated paths, warn-and-skip stays as the
safety net if upstream moves again.
- LazyVim.sh: same fisher conflict class in its fish branch - guard the
nvm.fish install with a 'type -q nvm' check.
- tests/smoke.sh: the zsh backup assertion was wrong (fresh container has
no .zshrc for run 1 to back up). Pre-seed a marker config instead and
assert both rotation (2 backups) and that neither run destroys the
original content.
Verified: tests/smoke.sh fish.sh zsh.sh -> PASS/PASS, bat.sh -> PASS;
pre-push hook green on all 9 scripts.
- swap the crossed branch tests (fish branch checked ~/.bashrc, bash branch
checked ~/.config/fish/config.fish - each never matched its shell)
- install fisher/nvm.fish via 'fish -c' instead of calling fisher from bash
- timestamped backups (nvim.bak-YYYYmmdd-HHMMSS) instead of rm -rf of all
*.bak dirs first - a re-run no longer destroys the original backup
- check git clone result and point at the preserved backup on failure
- load nvm by sourcing its init script (nvm is a function; 'command -v nvm'
never succeeded, so the whole block was dead code)
- guard nvm init sourcing under set +u, fall back to system nodejs
- idempotent rc appends (grep guard), tty-guarded Ctrl+C grace period
- set -euo pipefail with guarded/unguarded audit
- typos: prerequisites, secconds