Neovim¶
The nvim addon renders a complete Neovim setup into your repo at
.config/nvim/. It is built on LazyVim with the
lazy.nvim plugin manager, themed
cyberdream like the rest of the scaffold, and pins every plugin in
lazy-lock.json so a fresh machine reproduces the exact same editor. Selecting
the addon also pulls in the lazygit config.
LazyVim extras¶
Enabled in lua/config/lazy.lua:
- Coding: blink (completion), luasnip, yanky, mini-surround
- Debugging: dap.core, dap.nlua
- Formatting / linting: prettier, eslint
- Testing: test.core (neotest)
- Util: octo (GitHub PRs/issues), mini-hipatterns, dot (dotfile filetypes)
- Languages: docker, dotnet, go, helm, json, markdown, python, sql, terraform, typescript, yaml
The update checker is disabled (updates are deliberate, via the lock file) and ~30 unused built-in plugins are removed from the runtime path for startup speed.
Options¶
Highlights from lua/config/options.lua:
- Picker/completion: snacks as the LazyVim picker,
cmp = "auto". - Clipboard over SSH: custom OSC 52 setup — yanks reach the local system clipboard even inside SSH + tmux, while pastes read the unnamed register to avoid the notorious multi-second hang.
- Python LSP:
ty(lazyvim_python_lsp = "ty"). - Visual guides:
colorcolumn = "80,120",listwith custom listchars, single global statusline (laststatus = 3), no tabline, spell checking on. - Providers: python3/perl/ruby/node providers disabled;
vim.loaderenabled.
Keymaps¶
Custom maps on top of LazyVim's defaults (lua/config/keymaps.lua):
| Keys | Action |
|---|---|
| Tab / Shift+Tab | Next / previous buffer |
| < / > | Deindent / indent the current line |
| + / - | Increment / decrement number under cursor |
| Shift+U | Redo |
| Ctrl+C | Yank the entire buffer |
| Ctrl+E | Select all |
| Alt+S | Save without formatting |
| <leader>+! / <leader>+@ | Add / remove word from spelling dictionary |
| <leader>+F+S | tmux session picker (see below) |
| <leader>+F+X | LuaSnip snippet picker |
| <leader>+S+F | Search & replace in buffer (grug-far) |
| Ctrl+H / Ctrl+J / Ctrl+K / Ctrl+L | Move across Neovim splits and tmux panes (vim-tmux-navigator) |
Custom plugins¶
lua/plugins/ adds and reshapes:
- cyberdream.nvim — the colourscheme, loaded first, with a matching lualine theme.
- auto-save — saves on
InsertLeave(500 ms debounce); toggle with <leader>+U+V. - snacks (customised) — hidden/ignored files visible in the explorer and
pickers, and a bespoke tmux session picker on <leader>+F+S: it
renders repo sessions with their agent-worktree sessions nested beneath
(worktree root discovered from
$DOTTY_WORKTREES— see Agent worktrees & re-signing), shows a git-status preview, and switches the tmux client on confirm. - grug-far — project-wide search and replace.
- vim-tmux-navigator — the tmux-side counterpart lives in the tmux config.
- ghostty — loads Ghostty's bundled Neovim runtime files.
- blink — completion without preselection.
- sqlfluff — SQL formatting and linting via conform + nvim-lint.
Autocmds strip trailing whitespace on save, stop comment continuation on new lines, toggle relative/absolute line numbers with focus and mode, and keep utility windows (lazy, mason, notify, …) unlisted and easy to close.
Language tooling¶
lua/plugins/lang/ configures LSPs and tools beyond the LazyVim extras:
| Language | Tooling |
|---|---|
| Go | gopls (semantic tokens, directory filters) + gofumpt |
| OpenTofu | tofu-ls + tflint LSP, trivy, tofu fmt |
| Protobuf | buf LSP, buf lint/format |
| XML | lemminx |
| TOML | tombi |
| Jinja | djlint (lint + format) |
| Markdown | mermaid CLI (mmdc) for diagram preview |
Updating plugins¶
lazy-lock.json pins all plugins. Updates are an explicit act: run
:Lazy update (or :Lazy sync), review, and commit the changed lock file to
your dotfiles repo — every other machine picks the same versions up on its next
:Lazy restore.