features/houses workflow scripts (setup, install, update, run, test, etc.). Active install/update logic lives underfeatures/install/zsh/andfeatures/update/zsh/.tools/{tool}/is the unit of configuration. Expectconfig/for dotfiles,shell/for aliases/variables, andsymlinks/for link/unlink scripts (seetools/README.md).- Work-in-progress or experimental Bash rewrites may appear under
features/**/wip/ortools/**/wip/.
features/setup/setup.zshbootstraps a new machine and runs the full install flow.uupdates everything;u "homebrew"updates a single tool (see README).symlinksrefreshes dotfile symlinks after config changes.- There is no single test runner command; CI expects
shellcheckandbatschecks. Useshellcheck -x path/to/script.zshandbats path/to/test.batsas needed.
- Shell scripts are primarily
.zshfor active workflows and.bashfor shared tooling; keep scripts executable with a shebang. - Use 2-space indentation in shell scripts (match existing files like
features/setup/setup.zsh). - Keep lint settings centralized in
.shellcheckrc; avoid inline disables when possible. - Use existing formatter configs when relevant:
.prettierrc,.stylua.toml,.taplo.toml.
- BATS tests live under
features/**/wip/tests/and use helpers intools/bats/utils.bash. - Name tests descriptively and keep them close to the feature area being validated.
- Commit messages follow a short
scope: descriptionstyle (e.g.,mise: remove broken imports,start: add ops repo case).
- Tool configs are symlinked into
~fromtools/{tool}/config/; update the repo copies, not the home-directory targets. - Symlink orchestration lives in
features/update/symlinks.zshand tool-levelsymlinks/scripts.