This repo is organized as GNU Stow packages so a fresh clone can bootstrap itself.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/rui-ad-monte/dotfiles/main/scripts/install.sh)"The installer clones this repo into ~/dotfiles and runs scripts/bootstrap.sh.
It stops with an error if ~/dotfiles already exists and is not empty.
The bootstrap script will:
- install Homebrew if it is missing
- install shared packages from
Brewfile.common - install platform packages from
Brewfile.darwinorBrewfile.linux - stow the dotfiles into
$HOME - install TPM for tmux plugins
- create
~/.config/zsh/local.zshfrom the example file if it does not exist yet
shell/manages~/.zshenvtmux/manages~/.tmux.confxdg/manages shared~/.config/*files like zsh, nvim, zed, ghostty, starship, and opencodemacos/manages macOS-only config like Karabiner
Tracked zsh config lives in xdg/.config/zsh/.
shell/.zshenvpoints zsh to~/.config/zshxdg/.config/zsh/.zshrcloads modular files fromxdg/.config/zsh/rc.d/xdg/.config/zsh/.zshrcalso sources local~/.zshrcat the end for CLI installers that append there~/.config/zsh/local.zshis for machine-local env vars, secrets, and overrides
Keep secrets out of git by editing ~/.config/zsh/local.zsh, not the tracked files. If a CLI installer appends to ~/.zshrc, those lines will still run after the tracked config loads.
If you change the repo layout later, run:
./scripts/stow.shIf you intentionally changed a managed file in $HOME and want to bring that version back into the repo before re-stowing, use:
./scripts/stow.sh --adopt--adopt makes the existing managed file under $HOME become the repo version, so review the resulting git diff before committing.
opencode.jsonstays tracked in git; only local runtime files underxdg/.config/opencode/are ignoredBrewfile.darwininstalls GUI apps like Ghostty, Karabiner-Elements, and Rectangle- Node version management uses
fnm; the shell keeps annvmcompatibility function that forwards common commands tofnm scripts/bootstrap.shmigrates~/.nvm/alias/defaultintofnmwhen that file exists- Ghostty uses
MesloLGS Nerd Font Mono; install it manually if you want the exact same font locally - Neovim plugins bootstrap themselves on first launch through LazyVim