Personal dotfiles managed with dotbot.
git clone --recursive https://github.com/pmaloo/dotfiles.git ~/dotfiles
cd ~/dotfiles && ./installAll shell configs (zshrc, bashrc, functions, gitconfig) are platform-aware using $OSTYPE detection. A single set of files works on both macOS and Linux — no need for separate branches or profiles.
| Concern | macOS | Linux |
|---|---|---|
| Homebrew | /opt/homebrew |
/home/linuxbrew/.linuxbrew |
| Opener | open |
xdg-open |
| Kiro CLI | ~/Library/Application Support/kiro-cli/ |
~/.local/share/kiro-cli/ |
| Brazil | /Users/pmaloo/.brazil_completion/ |
/home/pmaloo/.brazil_completion/ |
| Casks in Brewfile | Installed | Skipped automatically |
| File | Purpose |
|---|---|
zshrc |
ZSH config (Oh My Zsh, pyenv, mise, brew — platform-aware) |
bashrc |
Bash config (platform-aware) |
vimrc |
Vim config with vim-plug plugins |
aliases |
Shared shell aliases (ls, navigation, brazil) |
functions |
Shared shell functions (mkd, o — platform-aware) |
gitconfig |
Git settings (rebase, autosquash, vimdiff, gh credential) |
gitignore |
Global gitignore patterns |
Brewfile |
Homebrew packages, casks, and taps |
Vscodefile |
VS Code extensions |
| Plugin | Purpose |
|---|---|
| dotbot-brew | Install Homebrew packages/casks from Brewfile |
| dotbot-vscode | Sync VS Code extensions from Vscodefile |
| crontab-dotbot | Manage cron jobs declaratively |
All symlink mappings are defined in install.conf.yaml. Dotbot reads this file and creates symlinks from your home directory to the repo.
- defaults:
link:
relink: true # replace existing symlinks pointing elsewhere
force: true # remove existing regular files/dirs before linking
- clean: ['~'] # remove dead symlinks in ~
- link:
~/.zshrc: zshrc # target_path: source_file_in_repo
- shell:
- [git submodule update --init --recursive, Installing submodules]- Copy or move the file into the repo:
cp ~/.tmux.conf ~/dotfiles/tmux.conf - Add a link entry to
install.conf.yaml:~/.tmux.conf: tmux.conf
- Run
./installto create the symlink
Add a line to Brewfile:
brew "ripgrep"
cask "iterm2"
Then run ./install to install it.
code --list-extensions > ~/dotfiles/Vscodefile
./installUncomment and edit the crontab section in install.conf.yaml:
- crontab:
- cron: "0 2 * * *"
command: /path/to/backup.sh
comment: nightly backup~/.config/nvim: nvim # links entire directory~/.config/ghostty:
path: ghostty
if: '[ `uname` = Linux ]'
force: trueAdd post-install commands under shell:
- shell:
- [git submodule update --init --recursive, Installing submodules]
- [vim +PlugInstall +qall, Installing vim plugins]Full dotbot docs: https://github.com/anishathalye/dotbot#configuration
After making changes:
cd ~/dotfiles
git add -A && git commit -m "description"
git pushOn another machine:
cd ~/dotfiles
git pull && ./install