dotfiles¶
Reproducible, privacy-hardened macOS configuration managed with chezmoi. One command bootstraps a clean Mac into a fully configured environment: shell, packages, git, encrypted secrets, macOS preferences, Dock, firewall, and Claude Code config. Drift is detected from the shell banner; remediation is a single mac command.
First time here?
Start with the Architecture overview for the 60-second mental model, or jump straight to the Quick start bootstrap walkthrough.
Bootstrap a clean Mac¶
Drop your age private key in ~/.config/chezmoi/key.txt (see New machine bootstrap for the full procedure), then:
Wall-clock time: ~30 minutes, mostly waiting on Homebrew downloads.
What's distinctive¶
- Matrix-tested templates. Every
.tmplrendered againstpersonal/work × arm64/amd64on every commit. Templates that break on one combination fail CI, not next month's reinstall. - Drift detection +
mac. Shell banner runs on every new terminal; daily LaunchAgent fires a clickable notification at 09:30;macis the single remediation entry point. - Age-encrypted secrets, draft-PR-only updates. Secrets live in the repo as
*.ageblobs. Pre-commit hooks (gitleaks,ggshield) and a monthly full-history audit catch leaks. Self-update workflows open draft PRs only. - Weekly self-update PRs for pinned externals.
oh-my-zshpinned by SHA; weekly workflow checks upstream, bumps the pin, opens a draft PR. (claude-code-configis a working clone at~/Development/claude-code-config, updated via its own git workflow.) - First-class Claude Code integration. Project-scoped
.claude/settings.json, chezmoi-aware subagents, slash commands, path-scoped rule files.CLAUDE.mdis the full agent brief.
Where to go¶
| If you want to … | Read … |
|---|---|
| Bootstrap a Mac | Runbook: new machine |
| Rotate a secret or the age key | Runbook: secret rotation |
Fix drift between $HOME and source | Runbook: recover from drift |
| Understand the system overview | Architecture |
| One-page command reference | Cheatsheet |
| Diagnose an error | Troubleshooting |
| Terminology | Glossary |
| Foundation choices | Decisions |
| Common questions | FAQ |
| vs other dotfiles repos | Comparison |
| Contribute | Contributing |
| Report a vulnerability | Security |
License¶
MIT. The age recipient committed in .chezmoi.toml.tmpl is mine; you cannot decrypt the *.age blobs in this repo. To fork, generate your own keypair, strip personal-only Brewfile entries, and re-encrypt your own secrets. See the FAQ for the fork procedure.