Skip to content

Bootstrap

Drew Daniels edited this page Oct 6, 2026 · 1 revision

Bootstrap

chezmoi owns both dotfiles and first-run setup. The setup path is intentionally shell-based so it is easy to inspect and rerun.

Flow

bare system
  -> chezmoi init --apply
  -> read-source-state.pre hook
     -> .install-directories.sh
     -> .install-package-manager.sh
     -> .install-password-manager.sh
  -> chezmoi applies dotfiles
  -> run_once_after_01-install-primary-packages.sh.tmpl
  -> run_once_after_02-install-secondary-packages.sh.tmpl
  -> run_once_after_03-install-stubs.sh.tmpl
  -> run_once_after_05-install-git-hooks.sh.tmpl
  -> run_once_after_06-install-codelldb.sh.tmpl
  -> run_once_after_07-install-vscode-js-debug.sh.tmpl
  -> run_once_after_08-install-vscode-chrome-debug.sh.tmpl
  -> run_once_after_09-install-vscode-xml.sh.tmpl
  -> apply.post hook

Package Data

Package lists live in the chezmoi source directory:

Platform File
macOS, Debian, Fedora/QubesOS ~/.local/share/chezmoi/.chezmoidata/packages.yaml
Arch Linux ~/.local/share/chezmoi/.chezmoidata/archpackages.jsonc

macOS uses Homebrew taps, formulae, casks, and Mac App Store apps. Arch uses pacman and yay when available. Debian uses apt plus selected cargo packages. Fedora/QubesOS uses dnf, COPR, cargo, and npm.

macOS Notes

The macOS package hook:

  • loads Homebrew with /opt/homebrew/bin/brew shellenv
  • trusts homebrew-zathura/zathura before installing zathura
  • installs kotlin-lsp as a Homebrew cask
  • installs zathura as formulae from the zathura tap
  • installs mdbtools, not the old mdb-tools name

Updating Packages

Edit the package data file, then run:

chezmoi apply

On macOS, brew bundle check runs first and brew bundle runs only when dependencies are missing or outdated.

For normal Homebrew maintenance:

hupgrade

Arch Linux maintenance still uses:

archlinux-upgrade.sh

Clone this wiki locally