My personal dotfiles managed by chezmoi.
- 🏠 Single command setup for new machines
- 🔄 Easy sync across multiple machines
- 🎯 Profile-based configs (work/personal)
- 🔐 Age encryption and Keeper CLI integration for sensitive files
- 📦 Declarative package management with Brewfile
- ⚙️ Automated macOS defaults configuration
- 🐚 Modular zsh config phased loading, plugin compilation, and Starship prompt
sh -c "$(curl -fsLS get.chezmoi.io)" -- -b "$HOME/.local/bin" init --apply ekweibleDuring init, you'll be prompted to select a profile.
The only new-machine setup step not covered by the above is installing the WK CLI and running login. That will install and symlink the remaining work-specific dotfiles.
# Pull latest and apply
chezmoi update
# Edit a file
chezmoi edit ~/.zshrc
# Add a new file
chezmoi add ~/.newconfig
# Commit changes
chezmoi cd && git add . && git commit -m "Update config" && git push- Uses
.chezmoirootto keep dotfiles organized inhome/subdirectory - Profile-based templating for work/personal differences
- Brewfile with automatic installation on changes
- Age encryption and Keeper CLI integration for sensitive files (SSH config, etc.)
Zsh configuration uses a consolidated structure for easier maintenance:
- All path configs in one file (
path.zsh) - All aliases in one file with profile conditionals (
aliases.zsh.tmpl) - All functions in one file (
functions.zsh) - Clear section headers within each file for easy navigation
- macOS (Darwin)
- Homebrew (auto-installed during init)
- age (auto-installed during init)
- V1: Originally forked from atomantic's dotfiles.
- V2: Overall setup inspired by Zach Holman's dotfiles.
- V2: A minimal zsh theme and some iTerm2 configuration inspired by Stefan Judis' iTerm2 + zsh setup.
- V3: A simplified approach that relies on brew bundle for declarative dependencies, mackup for syncing config/settings, and shell config and shell scripts for everything else.
- V4: To improve shell startup time, switched from zplug to custom zsh plugin
management (thanks to zsh-bench!) and switched to
starship.rs for the shell prompt. To improve organization, switched
to a module-based layout with directories containing zsh config for each thing
(like a language or tool) that gets auto-loaded by
.zshrc. - V5: Migrate to chezmoi as it takes care of most of the automation that was previously being managed in this repo while still supporting profile-specific files and configs. This allowed me to consolidate to a single repo (plus one private repo for work) and to get rid of Mackup, which I had some trouble with over the years.
Huge thanks to all of these people and the resources they've shared!
MIT