Personal macOS dotfiles for zsh, tmux, kitty, Neovim, and Rectangle.
.
├── zsh/
│ ├── .zshrc # symlink target for ~/.zshrc
│ └── .p10k.zsh # symlink target for ~/.p10k.zsh
├── .tmux.conf # symlink target for ~/.tmux.conf
├── kitty/
│ └── kitty.conf # symlink target for ~/.config/kitty/kitty.conf
├── nvim/ # symlink target for ~/.config/nvim
└── RectangleConfig.json # imported via Rectangle's UI
Install these before linking the configs — the shell, tmux, and editor configs reference them directly and will warn or break without them.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"brew install zsh tmux neovim kitty lsd git make gnupg
brew install --cask rectangle| Tool | Used by |
|---|---|
tmux |
.tmux.conf |
neovim |
nvim/ config (with Lazy.nvim) |
kitty |
kitty/kitty.conf |
lsd |
ls alias in .zshrc |
gnupg |
GPG_TTY export for signed commits |
git, make |
telescope-fzf-native build inside Neovim |
rectangle |
RectangleConfig.json |
Required by kitty.conf and the Neovim UI icons.
brew install --cask font-jetbrains-mono-nerd-font.zshrc sets export ZSH="$HOME/.oh-my-zsh" and sources $ZSH/oh-my-zsh.sh. Without it, the shell will start but the theme and plugins below won't load.
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattendedThe plugins=(...) array in .zshrc enables these oh-my-zsh built-ins (no extra install needed): git, node, tmux. They ship with oh-my-zsh itself.
.zshrc sets ZSH_THEME="powerlevel10k/powerlevel10k" and sources ~/.p10k.zsh (which is symlinked from zsh/.p10k.zsh in this repo). The instant-prompt block at the top of .zshrc also depends on it.
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git \
"${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"Listed in the plugins=(...) array in .zshrc. Provides fish-style "ghost text" suggestions from history as you type.
git clone https://github.com/zsh-users/zsh-autosuggestions \
"${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions".zshrc runs autoload -Uz compinit && compinit -C and adds ~/.zfunc to fpath. compinit is built into zsh — nothing to install — but if you have custom completion functions, drop them in ~/.zfunc.
.tmux.conf ends with run '~/.tmux/plugins/tpm/tpm' and uses tmux-sensible, tmux-yank, tmux-resurrect, and tmux-gruvbox.
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpmAfter linking the config, install plugins from inside tmux with prefix + I (prefix is Ctrl-a).
.zshrc sources $HOME/.nvm/nvm.sh.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bashThese are referenced in .zshrc only when present — install only what you actually use:
- Go —
brew install go(config exportsGOPATH=$HOME/go) - Rust / cargo —
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh - pnpm —
curl -fsSL https://get.pnpm.io/install.sh | sh - - Pulumi —
curl -fsSL https://get.pulumi.com | sh - Google Cloud SDK — install via the official installer into
$HOME/google-cloud-sdk
From the repo root:
# zsh
ln -sf "$PWD/zsh/.zshrc" ~/.zshrc
ln -sf "$PWD/zsh/.p10k.zsh" ~/.p10k.zsh
# tmux
ln -sf "$PWD/.tmux.conf" ~/.tmux.conf
# kitty
mkdir -p ~/.config/kitty
ln -sf "$PWD/kitty/kitty.conf" ~/.config/kitty/kitty.conf
# Neovim
ln -sf "$PWD/nvim" ~/.config/nvimBack up any pre-existing files first if you want to keep them.
Open Rectangle → preferences → Import → select RectangleConfig.json.
- zsh: open a new terminal. Powerlevel10k will start its config wizard on first run; settings are written to
~/.p10k.zsh(already symlinked to this repo, so they'll persist). - tmux: start
tmux, then pressCtrl-athenIto install plugins via TPM. - Neovim: launch
nvim. Lazy.nvim bootstraps itself, then installs all plugins listed undernvim/lua/plugins/. Mason auto-installs the language servers listed innvim/CLAUDE.md. - kitty: quit and relaunch so the font and key bindings take effect.
- The
tmuxandkittyconfigs include a workaround that mapsShift+EntertoESC [13;2uso apps like Claude Code receive a literal newline instead of submitting. kitty.confremapsCtrl+Shift+6toCtrl+^for Neovim alternate-buffer switching on Corne keyboards.- tmux prefix is
Ctrl-a(not the defaultCtrl-b).