| name | verify-shell |
| description | Verify changes to this dotfiles repo without mutating $HOME — syntax-check edited zsh/bash files, run shellcheck if present, dry-run bootstrap, and smoke-load functions in a clean shell. Use after editing any shell module, script, or function here, before committing. |
Verify shell changes
This repo has no test suite. Run these read-only checks after any change. Skip
the steps that don't apply to what you touched; never run a real
bootstrap/install-* against the live $HOME to "test".
1. Syntax-check what you edited
zsh -n system/programs.zsh
zsh -n zsh/zshrc.symlink
bash -n script/bootstrap
bash -n script/update script/install-base script/install-desktop
sh -n shell/logo.sh.symlink
2. shellcheck (if installed)
command -v shellcheck >/dev/null && shellcheck script/* git/bin/git-* || \
echo "shellcheck not installed — skipping"
*.zsh files are zsh, not POSIX — shellcheck them only with -s bash and treat
zsh-specific warnings as expected noise.
3. Smoke-load functions in a clean shell
zsh -ic 'source system/programs.zsh; type <fn>'
zsh -ic 'source system/programs.zsh; <fn>'
Confirm a missing-dependency path degrades gracefully (prints to stderr,
returns non-zero) rather than crashing.
4. Dry-run the installer (if you touched bootstrap / *.symlink / packages)
script/bootstrap --dry-run
script/update --check-updates
5. Config parse-checks (if you touched config)
git config --file git/gitconfig.symlink --list
6. Stray-character guard for docs
grep -nP '[\x{FEFF}\x{200B}\x{00A0}]' <files>
Report exactly what passed, what was skipped (and why), and any failures with
their output. Only call a change verified once the relevant checks above pass.