Minimal, boring, modern dotfiles.
- Prefer defaults over cleverness
- One tool at a time
- No plugin unless it earns its keep
- Vim muscle memory everywhere
- Easy to delete, easy to rebuild
| Tool | Purpose |
|---|---|
| zsh | Shell with vi-mode, history, minimal aliases |
| starship | Prompt (git-aware, fast) |
| nvim | Editor with LSP, Treesitter, Telescope |
| tmux | Terminal multiplexer with Solarized theme |
| zoxide | Smarter cd (replaces it via alias cd='z') |
| fzf | Fuzzy history search (Ctrl-R) and file picker (Ctrl-T) |
| zsh-autosuggestions | Fish-style history completions (press → to accept) |
| zsh-syntax-highlighting | Red/green command validation as you type |
brew install neovim tmux fzf zoxide ripgrep starship \
zsh-autosuggestions zsh-syntax-highlightingripgrep is required for Telescope's live grep (<leader>fg).
git clone <this repo> ~/src/dotfiles
cd ~/src/dotfiles
./install.shgit clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpmThen open tmux and press prefix + I (capital I) to install plugins.
Open nvim — lazy.nvim auto-installs all plugins on first launch.
Language servers (TypeScript, Python, Go, Rust, Bash) install automatically via Mason.
| Key | Action |
|---|---|
prefix + | |
Split pane vertically |
prefix + - |
Split pane horizontally |
prefix + h/j/k/l |
Navigate panes (vim-style) |
prefix + r |
Reload tmux config |
prefix + [ then v |
Enter copy mode, start selection |
y (in copy mode) |
Copy selection |
prefix + Ctrl-s |
Save session (tmux-resurrect) |
prefix + Ctrl-r |
Restore session (tmux-resurrect) |
Navigation
| Key | Action |
|---|---|
<leader>ff |
Find files (Telescope) |
<leader>fg |
Live grep across project (Telescope) |
<leader>fb |
Find open buffers (Telescope) |
<leader>fd |
Browse diagnostics (Telescope) |
LSP (active when a language server is attached)
| Key | Action |
|---|---|
gd |
Go to definition |
gD |
Go to declaration |
gr |
List references |
K |
Hover docs |
<leader>rn |
Rename symbol |
<leader>ca |
Code action |
[d / ]d |
Previous / next diagnostic |
Other
| Key | Action |
|---|---|
<leader>sc |
Open scratchpad (~/.scratchpad.md) |
<leader>tw |
Toggle word wrap |
jj (insert mode) |
Exit insert mode |
Both tmux and Neovim follow the macOS system appearance setting automatically:
- macOS dark mode → Solarized Dark
- macOS light mode → Solarized Light
- SSH / Linux → Solarized Dark (fallback —
defaultscommand not available)
tmux re-checks appearance whenever it gains focus. Neovim re-checks on FocusGained.
Theme files are tmux/solarized-dark.conf and tmux/solarized-light.conf.
Edit the hex values in either file, then reload with prefix + r.
To use a completely different theme, create tmux/mytheme.conf following the same
structure (status-style, window-status-*, pane-border-*, etc.), then edit
tmux/theme.sh to source your file.
The colorscheme plugin is maxmx03/solarized.nvim in nvim/init.lua. To switch:
- Replace the plugin entry in
require("lazy").setup({...})with your chosen plugin. - Update
apply_solarized()to call the new colorscheme name. - Remove or adapt the
vim.o.backgroundline if the new theme doesn't use it.
Run :Lazy inside Neovim to manage plugins interactively.
These install automatically on first nvim launch:
| Language | Server |
|---|---|
| TypeScript / JS | ts_ls |
| Python | pyright |
| Go | gopls |
| Rust | rust_analyzer |
| Bash | bashls |
To add a new language server:
- Open nvim and run
:Mason - Find the server, press
ito install - Add the server name to
ensure_installedinnvim/init.luaso it auto-installs on new machines
Create ~/.zshrc.local for anything that shouldn't live in the repo (work tokens,
machine-specific paths, etc.). It's sourced automatically and is gitignored.
- Oh My Zsh / Prezto
- Heavy Neovim distros (LazyVim, AstroNvim)
- Auto-formatters / linters wired up globally (add per-project as needed)
- Anything I don't use weekly