Assumes macOS (Apple Silicon).
- zsh (managed with zinit, prompt via powerlevel10k)
- neovim
- Ghostty terminal
- tmux
- slate for window tiling + Hammerspoon for app launching / automation
- Karabiner-Elements for keyboard customization
Prerequisite: the Xcode Command Line Tools (xcode-select --install) so git
is available.
$ git clone https://github.com/jdsutherland/dotfiles.git ~/.dotfiles
$ ~/.dotfiles/scripts/install.sh
scripts/install.sh is idempotent and:
- installs Homebrew (if missing),
- runs
brew bundleto install formulae, casks, and taps from theBrewfile, - runs
rcup(rcm) to symlink the dotfiles, prompting before overwriting anything that already exists (e.g. an existing~/.zshrc), - runs
mise installfor language runtimes fromconfig/mise/config.toml, - optionally applies macOS defaults (
scripts/macos.sh).
zinit installs itself on the first new shell, so it is not a separate step.
mise manages language runtimes via ~/.config/mise/config.toml — mise's
true global config, so runtimes are available in every directory (a bare
.tool-versions file only applies where mise finds it by walking up from the
current directory, e.g. it silently no-ops outside $HOME).
uv handles Python environments and dependencies; use uv venv, uv add,
and commit the resulting uv.lock in Python projects.
After updating Homebrew packages, open a new shell so mise activation takes effect.
Regenerate the Brewfile from the current install with:
$ brew bundle dump --force --describe --file=~/.dotfiles/Brewfile