Skip to main content

Updating

Quick: One Commandโ€‹

,update

This pulls dotfiles, updates package managers (Homebrew, mise, Cargo, pnpm, Gems, Go, uv, manual packages), and reports what changed.

Useful flagsโ€‹

FlagEffect
--dry-run / -nPreview what would happen without changing anything
--only brew,pnpmUpdate only the listed categories
--skip cargo,gemsUpdate everything except the listed categories
--verbose / -vShow extra detail and per-step timings

Categories: dotfiles, brew, gh, mise, cargo, pnpm, gems, go, uv, manual.

Each step's output is relayed through a prefixed indent. The relay flushes partial lines, so an interactive prompt that ends without a newline (for example chezmoi's ... has changed since chezmoi last wrote it [overwrite,all-overwrite,skip,quit]) appears within about 0.2s and can be answered in place; the child keeps the terminal as stdin. Earlier the output went through sed, which held such prompts until a newline arrived, so the run looked stalled until Ctrl-C.

When multiple package categories run in parallel, ,update opens the dekit TUI with one job per category. Homebrew's dekit formula installs the dekit executable. Each run uses its own temporary runner and a private copy of dekit, so Homebrew can upgrade dekit mid-run. Press q or Q after reviewing the logs: unfinished jobs are stopped and count as failed, finished ones keep their exit status. Without dekit, with a single category, or on a dry run, steps run sequentially without the TUI. Manual packages run after the parallel phase has shut down; a runner error skips them and an interruption ends the update.

If quitting dekit already stopped the runner, cleanup confirms that it is absent and continues to manual packages without reporting a lifecycle failure. A failed stop with an unconfirmed shutdown still retains the temporary runner directory and prints a recovery command. To rerun only a skipped manual phase, use ,update --only manual.

Manual Steps (if you prefer granular control)โ€‹

Update Dotfiles From GitHub (Chezmoi)โ€‹

chezmoi update

This pulls changes from the source repo and applies them.

If you want to preview first:

chezmoi update --apply=false
chezmoi diff
chezmoi apply

Update Packagesโ€‹

Homebrew itself:

brew update
brew upgrade

Then re-converge your dotfiles (which can run package-management hooks):

chezmoi apply

Verificationโ€‹

,doctor # full ecosystem health check
chezmoi status
chezmoi diff

If package-related hooks ran, spot-check expected package managers:

brew bundle check --global
mise ls --current

Rollback / Undoโ€‹

  • If a specific repo change caused issues, revert that change in the source repo.
  • Re-apply the previous known-good state:
chezmoi diff
chezmoi apply