macOS development environment managed with GNU Stow. Dual-shell setup (zsh + fish).
git clone https://github.com/jurmarcus/dotfiles.git ~/dotfiles
cd ~/dotfiles
./bootstrap/bootstrap.sh
exec zsh # or: exec fishdotfiles/
├── bootstrap/ # Setup scripts
├── brew/ # Modular Homebrew (host-based)
├── zsh/ # Zsh config
├── fish/ # Fish config
├── templates/ # Shared MCP templates
├── nvim/ # Neovim (NvChad)
├── ghostty/ # Terminal
├── tmux/ # Multiplexer
├── starship/ # Prompt
├── git/ # Git + delta
├── karabiner/ # Keyboard remaps
├── ssh/ # SSH config
├── claude/ # Claude Code commands
└── stow/ # Stow settings
Both zsh and fish are configured identically with modern CLI replacements:
| Original | Replacement | Original | Replacement |
|---|---|---|---|
| ls | eza | cd | zoxide |
| cat | bat | top | btop |
| grep | rg | diff | delta |
| find | fd | vim | nvim |
Zsh: Flat .zshrc with plugins from Homebrew
Fish: Modular config.fish + functions/ directory
| Language | Runtime | Commands |
|---|---|---|
| Python | uv | py, py-init, pyr, pyt, pya |
| TypeScript | bun | ts-init, tsr, tst, tsa |
| MCP | both | py-init-mcp, ts-init-mcp |
- Editor: Neovim (NvChad) + VSCodium
- Terminal: Ghostty
- Multiplexer: Tmux
- Prompt: Starship (Catppuccin Frappe)
- VCS: Sapling (
sl) + Git + Lazygit - History: Atuin
restow # Re-stow all packages
brewsync # Sync Homebrew packages
brewsync clean # Sync + remove orphans
stow -R <pkg> # Re-stow single package- Fork repo
- Create host profile:
brew/.config/brew/hosts/$(hostname).brew - Enable modules in host file
- Run
./bootstrap/bootstrap.sh
All configs live in ~/dotfiles/ and are symlinked via Stow. Never edit files in ~/ directly.