Personal dotfiles managed by chezmoi.
macOS or Linux:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/cruznick/configs/main/install.sh)"What bootstrap does:
- Installs Homebrew on macOS if needed
- Installs chezmoi if needed
- Verifies or repairs the chezmoi source
- Creates
~/.config/dotfiles/overrides.tomlif missing - Runs
chezmoi apply - Runs optional setup hooks without blocking bootstrap
- Applies the active Homebrew Brewfile groups on macOS when Homebrew is available
Effective config resolves in this order:
profiles/defaults.tomlprofiles/personal.tomlorprofiles/work.toml~/.config/dotfiles/overrides.toml~/.config/dotfiles/work-contexts/*.toml- environment variables
Merge rules:
- maps deep-merge
- scalars replace
- lists replace
Profile model:
profile = personal | workprovider = gh | gl
work is a generic support mode only. Concrete work identity still comes from
local work-context files and path-based matching, not from a single global
profile switch.
Local machine selection lives in:
# ~/.config/dotfiles/overrides.toml
profile = "personal"
provider = "gh"
work_contexts = []
primary_machine = false
[identity]
# Optional for built-in Personal/Private/Employee vaults with unique item titles.
# Recommended for shared/custom vaults or ambiguous SSH item names.
op_vault = ""Notes:
- local work contexts are discovered from
~/.config/dotfiles/work-contexts/*.toml work_contexts = [...]is an optional local filter- work contexts affect only Git and direnv-related behavior
[identity].op_vaultis machine-local and may be needed for repo-managed 1Password SSH key export/pinning
Manual app-export artifacts live under apps/.
apps/istat-menus/apps/rectangle-pro/
These are reference exports only.
- They are not managed by
chezmoi apply - They are not part of bootstrap
- They must be exported and imported manually
See apps/README.md.
Homebrew state is declarative and Brewfile-driven.
Source of truth:
homebrew/Brewfile.corehomebrew/Brewfile.devhomebrew/Brewfile.appshomebrew/Brewfile.extrashomebrew/Brewfile.work
The active machine Brewfile is rendered from those repo-tracked group files using the current effective config. The install hook and audit helper both consume that rendered Brewfile.
Default group enablement:
homebrew_core = truehomebrew_dev = truehomebrew_apps = truehomebrew_extras = falsehomebrew_work = false
Machine-local group selection uses the existing override file:
# ~/.config/dotfiles/overrides.toml
[optional_integrations]
homebrew_core = true
homebrew_dev = true
homebrew_apps = true
homebrew_extras = false
homebrew_work = falseWorkflows:
- Update declared brew state:
dots-brew update - Install/sync declared brew state:
dots-brew sync - Preview sync work:
dots-brew plan - Cleanup undeclared packages explicitly:
dots-brew cleanup - Show active groups and drift summary:
dots-brew status - Audit drift:
dots-brew auditordots-brew audit --missing - Show active groups:
dots-brew groups - Add a package/app: edit the right file under
homebrew/Brewfile.*, then runchezmoi applyordots-brew sync - Remove a package/app: remove it from the right file under
homebrew/Brewfile.*, then runchezmoi applyordots-brew sync
Operational rule:
- direct
brew installis fine for testing, but persistent state must be added tohomebrew/Brewfile.* chezmoi applyanddots-brew syncdo not uninstall undeclared packages- destructive removal of undeclared packages is manual-only via
dots-brew cleanup chezmoiis intentionally left unmanaged by Brewfiles because bootstrap installs it separately
See docs/HOMEBREW.md.
dots-debug --json
dots-profileStable keys in dots-debug --json:
active_profileactive_providerselected_work_contextsoverride_fileenv_overridesoptional_integrations
dots-apply
dots-update
dots-diff
dots-edit
dots-debug --json
dots-profile
dots-brew update
dots-brew plan
dots-brew cleanup
dots-brew status
dots-brew audit --missingThese never block baseline bootstrap:
- Homebrew package sync if Homebrew is unavailable during apply or bundle operations fail
- Homebrew extras
- zinit
- asdf
- 1Password SSH public key export
If a dependency or secret is missing, bootstrap logs a warning and continues.
Concrete work contexts are local-only and live in:
~/.config/dotfiles/work-contexts/*.toml
Create one with:
dots-work createSecrets remain local-only:
- 1Password vault/account setup
- SSH private keys
- direnv
.envrc - tokens and credentials
Public keys may be exported to ~/.ssh/signing-pubs/ as SSH/signing selector files, but export is optional and non-fatal.
See docs/SSH-KEYS.md.
Legacy .chezmoidata/companies.toml support is transitional only during migration.
It is no longer the source of truth and will be removed after migration is complete.