Personal configuration for my macOS development environment. Managed with GNU Stow, bootstrapped with Homebrew. Arch Linux support is planned.
Theme across every tool: Tokyo Night.
| Tool | Module |
|---|---|
| Alacritty | alacritty/ |
| bat | bat/ |
| Ghostty | ghostty/ |
| Git | git/ |
| Lazygit | lazygit/ |
| Neovim (LazyVim) | nvim/ |
| Tmux | tmux/ |
| Wezterm | wezterm/ |
| Zsh | zsh/ |
| VS Code profile | vscode/ (imported manually) |
Package manifest lives in Brewfile — brews, casks, VS Code extensions, and npm globals.
- macOS on Apple Silicon
- Internet access (
setup.shwill install Homebrew and Xcode CLT if missing)
git clone git@github.com:khrystuk/dotfiles.git ~/Documents/dotfiles
cd ~/Documents/dotfiles
./setup.shWhat setup.sh does, in order:
- Triggers the Xcode CLT installer if missing.
- Installs Homebrew if missing, then loads its environment.
- Runs
brew bundleagainstBrewfile. - Applies macOS defaults (disable press-and-hold, Dock tile size, Spaces ordering) and restarts the Dock.
- Stows every config module into
$HOME. - Prompts for git
user.name/user.emailon first run and writes them to~/.gitconfig.local(untracked, never committed). - Clones TPM into
~/.tmux/plugins/tpm. - Builds
bat's theme cache so the bundledtokyonight_nighttheme loads.
The script is idempotent — every step short-circuits when the work is already done, so re-running it on an existing setup is safe.
A few things setup.sh can't do for you:
- Tmux plugins — open tmux once and press
Prefix + Ito install the plugins declared in~/.tmux.conf. - VS Code profile — in VS Code, run
Profiles: Import Profile…and selectvscode/Default.code-profile.
Each top-level directory is a Stow module. Stow mirrors the module's contents into $HOME as symlinks:
dotfiles/git/.gitconfig → ~/.gitconfig
dotfiles/zsh/.zshrc → ~/.zshrc
dotfiles/nvim/.config/nvim/ → ~/.config/nvim/
Files at the repo root (Brewfile, setup.sh, README.md, .stow-local-ignore) are not deployed.
The committed git config does not contain personal details. The [include] directive pulls them in from an untracked, machine-local file:
git/.gitconfig— shared config (delta, pager, merge style, theme).~/.gitconfig.local—[user]block with name and email, generated bysetup.sh.
To change identity later, edit ~/.gitconfig.local directly or delete it and re-run setup.sh.
cd ~/Documents/dotfiles
git pull
brew bundle --file=BrewfileIf a new stow module was added upstream, re-run ./setup.sh to link it.
cd ~/Documents/dotfiles
stow -d "$PWD" -t "$HOME" -D alacritty bat ghostty git lazygit nvim tmux wezterm zshThis removes the symlinks. Installed Homebrew packages, the repo itself, and ~/.gitconfig.local are untouched.