Personal Neovim (LazyVim), tmux, and Starship config.
- Neovim ≥ 0.9 (LazyVim requirement)
- tmux
- Starship
- git, curl, a C compiler (for Treesitter), and ripgrep + fd (LazyVim defaults expect them)
- A Nerd Font set as your terminal font (LazyVim and Starship use font icons)
- Optional:
himalayaCLI — needed for the email plugin to actually do anything
On macOS:
brew install neovim tmux starship ripgrep fd-
Clone this repo (path doesn't matter, examples assume
~/writing/dotfiles):git clone <this-repo> ~/writing/dotfiles
-
Run the setup script:
cd ~/writing/dotfiles ./setup.sh
It symlinks
nvim/→~/.config/nvim,tmux/.tmux.conf→~/.tmux.conf, andstarship/starship.toml→~/.config/starship.toml, then checks the required tools above and prints thebrew installline for anything missing. It's idempotent (safe to re-run) and refuses to clobber a pre-existing non-emptyinit.lua,init.vim,.tmux.conf, orstarship.toml— back the file up and re-run if it warns. -
Hook Starship into your shell. The setup script tells you exactly what to paste; for reference:
# zsh — append to ~/.zshrc eval "$(starship init zsh)" # bash — append to ~/.bashrc (or ~/.bash_profile on macOS login shells) eval "$(starship init bash)"
Open a new shell to pick it up.
-
Launch
nvim. On first run,nvim/lua/config/lazy.luabootstrapslazy.nvimitself (clones it into Neovim's data dir), then installs every plugin undernvim/lua/plugins/. Thefzfplugin'sbuildstep compiles the fzf binary automatically. -
Start tmux with
tmux. Reload after editing.tmux.confwithprefix r(C-b rby default — the prefix is not remapped).
nvim/— Neovim config layered on LazyVim. Custom plugins live innvim/lua/plugins/:tmux.lua—vim-tmux-navigatorfor Ctrl-h/j/k/l pane navigation (paired withtmux/.tmux.conf).himalaya.lua—himalaya-vimemail client.fzf.lua—junegunn/fzf+fzf.vim.
tmux/.tmux.conf— terminal defaults (mouse off), the tmux side of seamless Vim/tmux Ctrl-h/j/k/l navigation, and TPM-managed session persistence (tmux-resurrect + tmux-continuum).starship/starship.toml— Starship prompt config. Reloads automatically on the next prompt render — no command needed.scripts/— source-or-standalone helpers used bysetup.sh:starship.sh(binary install + shell wiring) andtmux.sh(TPM clone, headless plugin install, persistent-history wiring).git/gitignore_global— global gitignore (symlinked to~/.gitignore_global, wired viacore.excludesfile); keepsSession.vimout ofgit statuseverywhere.
tmux sessions survive reboots. setup.sh clones TPM and installs tmux-resurrect + tmux-continuum headlessly (no prefix + I needed, though it still works).
- Automatic: continuum autosaves every 15 minutes and restores the last saved state when the tmux server starts after a reboot — windows, panes, working directories, and visible pane text included.
- Manual: save with
prefix + Ctrl-s, restore withprefix + Ctrl-r. - Neovim: panes that were running nvim reopen it from a
Session.vimwritten automatically on exit (only when inside tmux).Session.vimfiles are globally gitignored viagit/gitignore_global. - Shell history: restored panes keep up-arrow history.
setup.shwires persistent history into~/.bashrc(histappend+history -aon every prompt) or~/.zshrc(INC_APPEND_HISTORY), depending on$SHELL— tmux-resurrect itself no longer supports history saving. Re-runnable standalone for other shells:./scripts/tmux.sh --no-config.
Inside Neovim: :Lazy sync (LazyVim also has checker.enabled = true, which notifies of updates automatically).
There is no vim-plug in this setup — lazy.nvim is the only plugin manager. If you see references to Plug anywhere, it's stale.
See CLAUDE.md for architecture notes when editing.