Personal dotfiles managed with chezmoi.
sh -c "$(curl -fsLS get.chezmoi.io)" -- init --apply sandudoroganThis single command:
- Installs chezmoi
- Clones this repository to
~/.local/share/chezmoi - Runs all initialization scripts (Homebrew, packages, NVM, Rust, etc.)
- Applies dotfiles to your home directory
exec zsh -lThe initialization scripts install (macOS only):
| Category | Packages |
|---|---|
| Homebrew | Auto-installed if missing |
| CLI Tools | git, neovim, tmux, fzf, ripgrep, eza, bat, ranger, lazygit, lazydocker, htop, etc. |
| Clojure | clojure, babashka, clojure-lsp |
| Languages | NVM + Node.js LTS, Rust (rustup) |
| GUI Apps | Alacritty, Docker Desktop, Zathura |
| Python | pipx, fanficfare, bpytop |
| Shell | oh-my-zsh, fzf keybindings |
| Themes | Alacritty themes, JetBrains Mono Nerd Font |
See .chezmoidata/packages.yaml for the complete list.
chezmoi edit ~/.config/tmux/tmux.confThis opens the source file in your editor. After saving:
chezmoi applychezmoi add ~/.config/someapp/config.tomlchezmoi diffcd ~/.local/share/chezmoi
git add -A
git commit -m "description of changes"
git pushOr use chezmoi's built-in git commands:
chezmoi git add -A
chezmoi git commit -m "description of changes"
chezmoi git pushOn other machines, pull and apply the latest changes:
chezmoi updateThis runs git pull and chezmoi apply in one command.
Scripts run in this order during chezmoi apply:
| Order | Script | Type | Purpose |
|---|---|---|---|
| 00 | install-homebrew | onchange | Install/update Homebrew |
| 10 | install-packages-darwin | onchange | Install brew packages |
| 20 | install-nvm | once | Install NVM + Node.js |
| 21 | install-rustup | once | Install Rust |
| 30 | install-pipx-packages | onchange | Install pipx packages |
| dotfiles applied | |||
| 90 | post-install | once | fzf, themes, oh-my-zsh |
- onchange: Re-runs when
.chezmoidata/packages.yamlchanges - once: Runs only on first apply (tools have their own update mechanisms)
~/.local/share/chezmoi/
├── .chezmoidata/
│ └── packages.yaml # Declarative package list
├── .chezmoi.toml.tmpl # Chezmoi configuration
├── dot_config/ # ~/.config/* files
├── dot_local/ # ~/.local/* files
├── run_onchange_before_* # Re-run on package changes
├── run_once_* # One-time setup scripts
└── tests/ # BATS test suite (ignored by chezmoi)
chezmoi apply --dry-run --verboseRemove the script from chezmoi's state:
chezmoi state delete-bucket --bucket=scriptState
chezmoi applychezmoi apply --forceInstall scripts are tested with BATS to verify template rendering and script correctness.
brew install bats-core
brew tap kaos/shell
brew install bats-assert bats-supportcd ~/.local/share/chezmoi
./tests/run_tests.shTests verify templates render correctly and contain expected content (URLs, flags, paths) without actually running installers.