Personal dotfiles managed with chezmoi. Supports both personal and work-specific configurations through multiple source directories.
- 🏠 Multi-source support: Separate personal and work configurations
- 📦 Automated package management: Homebrew, Rust, and more
- 🔧 Version management: mise (Java, Node.js, Go, etc.) and rustup
- 🎨 Modern Unix tools: bat, eza, ripgrep, fd, and many more
- ⌨️ Editor configs: Neovim, Vim, Doom Emacs
- 🐚 Shell configuration: Zsh with starship prompt and modern completions
- 🤖 Claude Code integration: Pre-configured agents, commands, and contexts
On a fresh macOS machine:
# Install Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install chezmoi
brew install chezmoi# Initialize and apply dotfiles
chezmoi init --apply https://github.com/jonbarksdale/dotfiles.gitAlternatively, use chezmoi's one-liner (installs chezmoi temporarily):
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply jonbarksdale/dotfiles# Install personal dotfiles first
chezmoi init --apply https://github.com/jonbarksdale/dotfiles.git
# Clone work-specific configurations to a separate location
# (Replace with your work dotfiles repository)
git clone <work-dotfiles-repo> ~/.local/share/dotfiles-work
# Run work dotfiles setup script
cd ~/.local/share/dotfiles-work
./setup.shNote: Your personal .zshrc and .gitconfig are already configured to source work-specific override files (~/.zshrc_local, ~/.gitconfig-local) if they exist, so the work configuration integrates seamlessly.
After chezmoi init, create ~/.config/chezmoi/chezmoi.yaml to configure machine-specific behavior:
diff:
pager: "delta"
git:
autoCommit: false
autoPush: false
data:
# Set to true on machines with a Claude Max subscription.
# Controls whether session usage, weekly usage, and reset timer
# widgets appear in the ccstatusline status bar.
hasClaudeSubscription: true # or false for work/no-subscription machines| Variable | Values | Effect |
|---|---|---|
hasClaudeSubscription |
true / false |
Show/hide Claude usage widgets in status line |
- Homebrew: Package manager with 80+ packages
- Rustup: Rust toolchain
- mise: Development tool version manager (Java, Node.js, Go, Bun, Maven, Gradle)
- Editors: Neovim, Vim, Doom Emacs
- Version Control: Git with delta, GitHub CLI
- Shells: Zsh with starship prompt
- Containers: Docker, Colima
| Traditional | Modern Alternative |
|---|---|
| ls | eza, lsd, pls |
| find | fd |
| grep | ripgrep |
| cat | bat |
| top | bottom, htop |
| du | dust |
| ps | procs |
| sed | sd |
| df | duf |
- kubectl, awscli, aws-vault, localstack
- Network tools: httpie, curlie, xh, doggo, mtr
- jq, jless, gron, fx, whyq (YAML)
Edit files naturally in their normal locations:
# Edit your zsh config
vim ~/.zshrc
# Edit neovim config
vim ~/.config/nvim/init.luaAfter editing, capture and sync your changes:
# See what changed
chezmoi status
# Review changes before committing
chezmoi diff
# Capture changes
chezmoi add ~/.zshrc ~/.config/nvim
# Commit and push (from the source directory)
chezmoi cd
git add -A
git commit -m "Update shell configuration"
git pushOn your other machines:
# Pull latest changes and apply
chezmoi updateThe personal dotfiles support composition with work-specific configurations via hook files:
~/.zshrc_before- Sourced at the start of shell initialization~/.zshrc_local- Sourced at the end of shell initialization~/.gitconfig-local- Included by git config (last wins)~/.profile- Shell-agnostic environment setup
These files are optional and sourced only if they exist. If you need work-specific overrides, maintain them in a separate work dotfiles repository and use its setup script to create symlinks.
~/.local/share/chezmoi/ # Personal dotfiles (this repo)
├── .chezmoiscripts/ # Installation scripts
│ ├── run_once_before_* # Package installation
│ └── run_after_* # Post-installation setup
├── dot_config/ # XDG config files
│ ├── nvim/ # Neovim configuration
│ ├── git/ # Git configuration
│ ├── yazi/ # File manager config
│ └── ...
├── dot_zshrc # Zsh configuration
├── dot_Brewfile # Homebrew packages
└── ...
~/.local/share/dotfiles-work/ # Work dotfiles (optional, separate repo)
├── dot_zshrc_before # Work environment setup
├── dot_zshrc_local # Work shell overrides
├── dot_gitconfig-local # Work git configuration
├── setup.sh # Creates symlinks to home directory
└── ...
All Nerd Fonts are installed automatically via Homebrew:
- Victor Mono NF
- Meslo LG NF (recommended for powerline)
- JetBrains Mono NF
- Fira Code NF
- Cascadia Mono NF
- Monaspace NF
- And more...
Plus math fonts:
- Latin Modern Math
- STIX Two Math
- Noto family (emoji, sans, symbols)
chezmoi apply --dry-run --verbose# Remove chezmoi state to re-run scripts
rm -rf ~/.local/share/chezmoi/.chezmoistate
# Re-apply
chezmoi applychezmoi doctor# Check if work override files exist and are symlinked
ls -la ~/.zshrc_local ~/.gitconfig-local
# Verify work repo is present
ls -la ~/.local/share/dotfiles-workThis repo was previously managed with dotbot. The migration to chezmoi preserves all functionality while providing:
- Better multi-machine support
- Template support for per-machine customization
- Built-in git integration
- Simpler installation scripts
- Better documentation
See docs/CHEZMOI_MIGRATION.md for details on the migration process.
These are personal dotfiles, but feel free to use them as inspiration for your own setup!
MIT