Skip to content

Dotfiles

Daily-use lifecycle for this dotfiles install — update, apply, dry-run, check-updates, plus the verify health check. Operations on the installed state, not the source.

For maintainer work (tests, contract specs, smoke tests, docs site, hook infra) reach for the maint:: subtree — just maint <module> <recipe> (e.g. just maint test bats test, just maint test contract test).

Common workflows

Top-level just update is the routine system refresh — it chains dotfiles::update, sys::pm::update (refresh + install on every detected package manager), and dotfiles::verify.

update (this module) is the chezmoi-side slice: checks pinned external plugins for newer GitHub releases, upgrades the chezmoi binary itself, then pulls the latest dotfiles via chezmoi update. OS package refresh lives in sys::pm::*.

check-updates compares the version tags pinned in .chezmoiexternals/externals.toml.tmpl against the latest GitHub release (or tag) for each plugin. It does not change anything — use it to decide whether to bump tags manually.

apply writes chezmoi's current source state to your home. dry-run shows what would change.

verify checks that core binaries are on $PATH, Brewfile dependencies are satisfied, shell config files and zshrc.d modules exist, Oh My Zsh plugins are installed, and the git hook layer is wired up — .pre-commit-config.yaml, .commitlintrc.yaml, the .betterleaks.toml symlink and its personal-config target, plus the pre-commit framework's dispatcher scripts at .git/hooks/<stage>. A failure means something is missing or broken — read the output to see which check failed. The maint::test orchestrator shells out to the same dotfiles-verify.sh script, so this is the single source of truth.

For destructive teardown (remove all chezmoi-managed files + state), see just maint purge — it's a framework-level operation, not a routine lifecycle one.