Personal dotfiles for macOS. Symlink-based: the repo holds the source of truth; install.sh symlinks files into place and runs brew bundle.
git clone [email protected]:RoderickOxen/dotfiles.git ~/projects/dotfiles
cd ~/projects/dotfiles
./install.shOptional work-only packages (kept out of this repo via .gitignore):
INSTALL_WORK_BUNDLE=yes ./install.sh # only if Brewfile.work exists locallydotfiles/
├── Brewfile # brew/cask/font packages
├── install.sh # bootstrap script
├── home/ # files that live in $HOME
│ ├── .zshrc
│ ├── .zshenv
│ ├── .zprofile
│ └── .p10k.zsh
├── config/
│ ├── ghostty/
│ │ └── config.ghostty # symlinked to ~/Library/Application Support/com.mitchellh.ghostty/
│ └── lazygit/
│ └── config.yml # symlinked to ~/.config/lazygit/
└── opencode/
├── opencode.jsonc # symlinked to ~/.config/opencode/opencode.jsonc
├── opencode-mem.jsonc # symlinked to ~/.config/opencode/opencode-mem.jsonc
└── agents/ # symlinked to ~/.config/opencode/agents/
Deliberately excluded:
- Secrets —
.ssh/,.aws/, API tokens, history files - OpenCode auth —
~/.local/share/opencode/auth.jsonand MCP OAuth tokens stay per-machine - OpenCode skills — these come from
mattpocock/skills. Bootstrap them separately with the snippet ininstall.sh's exit message .gitconfig— work email vs personal email; managed per-machine
The repo IS your config. Edit files in ~/projects/dotfiles/; symlinks reflect the change immediately. Commit and push when you want it on other machines.
cd ~/projects/dotfiles
git status
git add -A && git commit -m "tweak: …" && git pushOn the other machine:
cd ~/projects/dotfiles && git pull && exec zsh