Config for zsh, vim, tmux, and git. Optimized for jumping between projects and branches, using Claude Code and Vim. Works on macOS and Linux (Ubuntu).
- Cross-platform: keep base.zsh universal, platform-specific code in mac.zsh/linux.zsh
- Git-centric: sessions, branches, and navigation derive from git context
- Short aliases, small composable functions that chain together
- Minimal UI: transparent backgrounds, no chrome
- Local overrides via .local files, never committed
- Self-bootstrapping: new machine setup should just be symlinks
zshrc # entry point — detects OS, sources platform + base
zsh/
base.zsh # cross-platform config (aliases, functions, prompt, tools)
mac.zsh # macOS-specific (Homebrew, NVM, etc.)
linux.zsh # Linux-specific (antidote, keychain, etc.)
zsh_plugins.txt # antidote plugin list
zshrc.local.example # template for machine-local overrides
tmux.conf
vimrc
kitty.conf
gitconfig
claude/settings.json # symlinked to ~/.claude/settings.json
~/.zshrc.local is sourced automatically but never committed — use it for machine-local or sensitive config. See zshrc.local.example for a template.
mkdir -p ~/Projects ~/workspace ~/worktrees
git clone https://github.com/ncherro/dotfiles ~/Projects/dotfilesbrew install antidote fzf ripgrep zsh-git-prompt zsh-completions nvm gh tmux
# Symlink configs
ln -s ~/Projects/dotfiles/zshrc ~/.zshrc
ln -s ~/Projects/dotfiles/tmux.conf ~/.tmux.conf
ln -s ~/Projects/dotfiles/vimrc ~/.vimrc
mkdir -p ~/.config/kitty
ln -s ~/Projects/dotfiles/kitty.conf ~/.config/kitty/kitty.conf
mkdir -p ~/.claude
ln -s ~/Projects/dotfiles/claude/settings.json ~/.claude/settings.json
# Vim plugins
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# Git
cp ~/Projects/dotfiles/gitconfig ~/.gitconfigOpen a new shell, launch vim and run :PlugInstall, then edit ~/.gitconfig to set your name and email.
# Antidote (zsh plugin manager)
git clone --depth=1 https://github.com/mattmc3/antidote.git ~/.antidote
sudo apt install zsh fzf ripgrep keychain gh tmux vim xclip
# Symlink configs
ln -s ~/Projects/dotfiles/zshrc ~/.zshrc
ln -s ~/Projects/dotfiles/tmux.conf ~/.tmux.conf
ln -s ~/Projects/dotfiles/vimrc ~/.vimrc
mkdir -p ~/.claude
ln -s ~/Projects/dotfiles/claude/settings.json ~/.claude/settings.json
# Vim plugins
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
# Git
cp ~/Projects/dotfiles/gitconfig ~/.gitconfigOpen a new shell, launch vim and run :PlugInstall, then edit ~/.gitconfig to set your name and email.
WSL only: sudo apt install wslu — needed for ghr/ghp to open URLs in the Windows browser.
Using One Dark via terminal / kitty color preferences.
| Function | Description |
|---|---|
gwt |
Git worktree in ~/worktrees |
gco |
Git checkout with auto-prefix for new branches |
ghr |
Open the current repo in the browser |
ghp |
Open the current branch's PR in the browser |
tls |
List tmux sessions, highlighting ones running processes |
tatt |
Attach to a tmux session by fuzzy name match |
tat |
Attach or create a tmux session named after the repo/branch |
tks |
Kill all tmux sessions |
cd. |
cd to the git repo root |
ws |
cd into ~/workspace |
wt |
cd into ~/worktrees |