My Neovim 0.12 config. My dotfiles pull it in as a chezmoi external, so it keeps its own history. It runs in Ghostty, inside the herdr agent multiplexer.
Nothing here is built for anyone else to install. There's no bootstrap, and parts of it
assume my machine: a fish wrapper around nvim, and the palette and color scheme my
dotfiles deploy. Take whatever looks useful.
- No third-party plugin manager. Neovim's built-in
vim.packinstalls each plugin from its own file underplugin/and pins it innvim-pack-lock.json. A plugin loads at startup, right after startup, or on its first command or keymap. - mini.nvim does most of the work. It owns the picker, file explorer, sessions, statusline, and notifications. snacks.nvim covers the rest, such as indent guides, the terminal, and lazygit.
- The colors follow the terminal. The color scheme switches between dark and light when the terminal does, even in a running editor.
- It's tested and linted. A plenary spec
suite, selene, stylua, and emmylua_check run on hk git hooks.
mise pins every tool, and
mise taskslists the tasks.
Twelve plugins I wrote because nothing upstream did the job. Each directory has its own README.
| Plugin | What it does |
|---|---|
blink-omni |
Bridges a buffer's omnifunc into the blink.cmp menu — how Ghostty's config options reach completion. |
blink-pairs |
blink.pairs rules for Markdown emphasis that stay out of inline code spans, the parity check that decides when a symmetric delimiter opens a new pair, and a highlight on Markdown delimiters left without a partner. |
ftchooser |
<leader>fl picks a buffer's filetype from human names; the choice is remembered per file across restarts. |
gotoline |
:GoToLine — one floating prompt that fuzzy-finds a project file, previews it, then jumps to a line in it. |
mini-pickers |
Replacement mini.pick registry entries: document symbols as a real tree, thinned workspace symbols, per-line blame, and an rg invocation whose flags are ours. |
pack-pr |
:PackPR (<leader>Pp) — pick an open PR of one of your github.com/<owner>/ plugins, install its branch headlessly, and restart into it; a reset entry per plugin goes back to the default branch. |
pack-tweaks |
<CR> on a line in the vim.pack update buffer opens that commit or tag in the browser. |
pack-updates |
A statusline count of plugins with upstream commits you haven't pulled, checked in the background with git ls-remote and cached for a day; <leader>Pc re-checks. |
projects |
<leader>pp — a zoxide picker that relaunches Neovim in the directory you choose, session and all. |
scratch |
<leader>wt — per-project scratch files under .tmp/scratch/, picked or named on open. |
uv-scripts |
Filetype detection and a ty client pointed at the environment uv builds for a PEP 723 single-file script. |
worktrunk |
<leader>gw — worktrunk from a float: my shell's worktree picker, quick switches, remove and merge, relaunching Neovim in whichever worktree they land in; plus this file's copy from another worktree, split or diffed; and a worktree removed from under Neovim moves it into the primary one. |
