Skip to main content

Sources and scope

Package managers are split by source-of-truth and by whether they can branch on .isWork.

Package sources at a glance

SourceList fileHookScoped
Homebrewhome/.chezmoitemplates/brews/ -> home/readonly_dot_Brewfile.tmplrun_onchange_after_03-install-brew-packages.fish.tmplYes
misehome/dot_config/mise/config.toml.tmplrun_onchange_after_05-install-mise-runtimes.sh.tmplYes
Cargohome/readonly_dot_default-cargo-cratesrun_onchange_after_05-update-cargo-crates.sh.tmplNo
Gohome/readonly_dot_default-golang-pkgs.tmplrun_onchange_after_05-update-golang-pkgs.sh.tmplYes
Ruby gemshome/readonly_dot_default-gemsrun_onchange_after_05-update-gems.sh.tmplNo
yarnhome/readonly_dot_default-yarn-pkgsrun_onchange_after_05-update-yarn-pkgs.sh.tmplNo
uv Python versionshome/readonly_dot_python-versionrun_onchange_after_05-install-uv-versions.sh.tmplNo
uv toolshome/readonly_dot_default-uv-tools.tmplrun_onchange_after_06-update-uv-tools.sh.tmplYes
gh extensionsmanaged list in hookrun_onchange_after_05-install-gh-extensions.fish.tmpln/a
Custom GitHub/source packageshome/readonly_dot_default-custom-packages.tmplrun_onchange_after_05-install-custom-packages.sh.tmplYes

All hooks live under home/.chezmoiscripts/.

Scope-aware package lists

SourceScoping model
Homebrewper-category partials under brews/shared/, brews/personal/, and brews/work/; profile membership is the directory
Gotemplate conditionals in readonly_dot_default-golang-pkgs.tmpl
uv Pythonshared .python-version list
uv toolstemplate conditionals in readonly_dot_default-uv-tools.tmpl
Custom packagestemplate conditionals in readonly_dot_default-custom-packages.tmpl
Shared everywhereCargo crates, yarn globals, Ruby gems

Example personal-only Go entry:

{{ if ne .isWork true }}
github.com/owner/personal-only-tool
{{ end -}}