Personal macOS dotfiles managed with Dotbot.
This repo installs shell and tool configuration by symlinking tracked files into $HOME. It also includes a few companion workflows for Homebrew package management and Mackup-based app settings restore.
installbootstraps the Dotbot submodule and appliesinstall.conf.yamlzsh/contains the main shell setup, sourced helper files, and prompt/tooling configgit/,vim/,ssh/,gpg/,conda/,hg/,pypi/,cursor/,starship/hold symlinked app configsclaude/holds Claude Code settings — permissions deny rules and sandbox config based on trailofbits/claude-code-config and own researchhomebrew/contains Homebrew bootstrap andBrewfilehelpersmackup/stores macOS application preferences managed with Mackup
install.conf.yaml currently links:
~/.zshenv,~/.zshrc,~/.zprofile~/.gitconfig,~/.gitconfig.local,~/.gitignore~/.vimrc~/.ssh/config~/.gnupg/gpg.conf,~/.gnupg/gpg-agent.conf~/.condarc,~/.hgrc,~/.hgrc.local,~/.pypirc~/.config/starship.toml~/.cursor/sandbox.json
Clone the repo with submodules, then run the installer:
git clone --recurse-submodules <repo-url> ~/dev/projects/dotfiles
cd ~/dev/projects/dotfiles
./installUseful variants:
./install -v
./install --force-colorThe installer syncs and initializes the bundled dotbot/ submodule automatically before applying links.
The shell setup is centered on zsh:
zsh/zshenv.symlinkloads Homebrew andfnmzsh/zprofile.symlinkreapplies Homebrew after macOSpath_helperzsh/zshrc.symlinkloadszinit, cachesstarship init, and sources allzsh/*.zshhelper files
This repo currently expects a Homebrew-installed zinit at /opt/homebrew/opt/zinit/zinit.zsh and uses starship for the prompt.
Bootstrap Homebrew:
homebrew/install.shManage packages from homebrew/Brewfile:
cd homebrew
make install-packages
make dumpRestore or back up macOS app settings:
cd mackup
make restore
make backup- Put machine-specific or sensitive values in
.localfiles such asgit/gitconfig.local.symlink - Keep new managed files in their domain directory with a
.symlinksuffix - Add new links in
install.conf.yamlusing repo-relative paths - Use
create: truewhen a target parent directory may not exist
Examples already ignored from git include git/gitconfig.local.symlink, hg/hgrc.local.symlink, and pypi/pypirc.symlink.
- Create the source file in the appropriate directory with a
.symlinksuffix. - Add a mapping in
install.conf.yaml. - Run
./install. - Verify the symlink and the target application behavior.
- Do not edit
dotbot/; it is a vendored submodule. - Avoid committing secrets, private keys, tokens, or machine-specific credentials.