Personal shell, terminal, editor, and developer-tool configuration managed with Chezmoi. The configuration is macOS-first, with partial Linux/HPC support.
Install the Xcode Command Line Tools, then Homebrew if needed:
xcode-select --install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Install Chezmoi and initialize this repository:
brew install chezmoi
chezmoi init https://github.com/WillJRoper/dotfiles.gitInstall the core packages used by the managed configuration:
brew bundle --file="$HOME/.local/share/chezmoi/Brewfile"Preview and apply the dotfiles:
chezmoi diff
chezmoi applyChezmoi installs ble.sh and the tmux plugin manager through run-once scripts.
After starting tmux, press Ctrl-a followed by I to install the configured
tmux plugins.
Brewfile.optional contains scientific, compiler, HPC, presentation, and other
heavier tools that are not required by the core configuration. Review it before
installing:
brew tap gromgit/fuse
brew trust --formula gromgit/fuse/sshfs-mac
brew bundle --file="$HOME/.local/share/chezmoi/Brewfile.optional"Install Chezmoi using the appropriate package manager or the official installer:
sh -c "$(curl -fsLS get.chezmoi.io)"
chezmoi init https://github.com/WillJRoper/dotfiles.git
chezmoi diff
chezmoi applyThe Homebrew manifests and some shell helpers are macOS-specific. Always review the diff before applying on Linux or an HPC system.
The primary shell configuration targets Homebrew Bash. To use it as the login shell on macOS:
BREW_BASH="$(brew --prefix)/bin/bash"
grep -qxF "$BREW_BASH" /etc/shells || echo "$BREW_BASH" | sudo tee -a /etc/shells
chsh -s "$BREW_BASH"A minimal .zshrc keeps Atuin available when using the macOS default shell.
Machine-local environment variables and credentials can be placed in
~/.config/dotfiles/secrets.sh. This file is intentionally not managed:
mkdir -p "$HOME/.config/dotfiles"
touch "$HOME/.config/dotfiles/secrets.sh"
chmod 600 "$HOME/.config/dotfiles/secrets.sh"- Bash aliases, functions, prompt, history, completion, and vi-style editing
- Minimal zsh initialization
- Git, Git LFS, Delta, GitHub CLI, and global ignore rules
- Neovim configuration with a pinned plugin lockfile
- tmux, TPM, session persistence, and sesh integration
- Starship, WezTerm, Atuin, btop, neofetch, Television, and The Fuck
- OpenCode agents and MCP configuration
- VS Code settings and keybindings
- Python environment helpers and utility scripts
Chezmoi maps files beneath home/ to the home directory. For example,
home/dot_config/nvim becomes ~/.config/nvim. The repository-level
.chezmoiroot declares home/ as the Chezmoi source-state root.
Pull and apply repository updates:
chezmoi updateReview local differences:
chezmoi status
chezmoi diffEdit managed source state with chezmoi edit <target> or work directly in the
directory returned by chezmoi cd. Commit and push source changes normally.
Authentication state is not committed. Configure tools separately as needed:
gh auth login
git lfs install
atuin loginGit commit signing is enabled automatically when ~/.ssh/ghub_key.pub exists.
docs/MIGRATION_CHECKLIST.md: transferring credentials, data, and unmanaged state between machinesdocs/APPLICATION_INVENTORY.md: audited application inventory from the previous workstation- Component-specific documentation is stored alongside configuration under
home/dot_config/