Skip to content
Gerrrt edited this page Jun 14, 2026 · 1 revision

Neovim Config

Core ships a complete lazy.nvim-based Neovim configuration under nvim/, namespaced under lua/gerrrt/. It is vendored into every OS repo unchanged — the only OS-specific bit (the clipboard backend) is resolved at runtime through Core's clip shims, not branched in Lua.

Entry point and bootstrap

The load chain is deliberately thin:

nvim/init.lua            → require("gerrrt")
lua/gerrrt/init.lua      → require("gerrrt.config.lazy")
lua/gerrrt/config/lazy.lua → bootstraps lazy.nvim, then loads config + plugins

config/lazy.lua clones lazy.nvim (pinned to its stable branch) on first run, prepends it to the runtime path, loads the config modules in order, then calls lazy.setup importing every spec under gerrrt.plugins.

The config modules, loaded before plugins:

Module Responsibility
config/globals.lua leader keys, vim.g.* flags (incl. dotfiles_offline)
config/options.lua vim.opt settings
config/keymaps.lua global, non-plugin keymaps
config/autocmds.lua autocommands
config/clipboard.lua wires the clip / clip-paste provider
config/providers.lua python/node provider config

Performance and offline posture

Two deliberate choices, both visible in config/lazy.lua:

  • Disabled built-in runtime plugins (netrwPlugin, gzip, tarPlugin, zipPlugin, tohtml, tutor) so they're never sourced at startup — nvim-tree owns file exploration.
  • DOTFILES_OFFLINE=1 (set via globals.luavim.g.dotfiles_offline) disables lazy.nvim's background update checker, so an engagement box never phones home with unattended git fetch of plugin repos.

Plugins

The plugin set lives one-file-per-plugin under lua/gerrrt/plugins/. Highlights:

  • UI/themetokyonight (the palette shared with tmux + starship), lualine, bufferline, which-key, mini.nvim.
  • Navigationnvim-tree, harpoon (<leader>1-4), flash, fzf-lua, vim-tmux-navigator (seamless C-h/j/k/l between nvim splits and tmux panes).
  • Gitgitsigns, vim-fugitive.
  • LSP/completionnvim-lspconfig, blink-cmp, conform (format), nvim-lint, lazydev, trouble.
  • Treesitternvim-treesitter (pinned to main; needs tree-sitter-cli ≥ 0.26.1 — see PORTING-MATRIX).
  • Languagesrustaceanvim, plus DAP (nvim-dap-ui).
  • Editingnvim-spectre, ccc (colors), zen-mode.

Exact versions are pinned in nvim/lazy-lock.json; the weekly freshness gate flags when they drift behind upstream (see Maintenance & Updates).

LSP servers

Server configs live under lua/gerrrt/servers/: lua_ls, ts_ls, ruff + ty (Python), gopls, clangd, rust (via rustaceanvim), bashls, yamlls, jsonls, dockerls, tailwindcss, emmet_ls, solidity_ls_nomicfoundation.

Keymaps worth knowing

Leader-based, discoverable via which-key. A sample from config/keymaps.lua:

Key Action
j / k wrap-aware down/up
<Esc> clear search highlight
n / N next/prev search result, centered
<C-d>/<C-u> half-page scroll, centered
<leader>p paste without yanking (visual)
<leader>sv/sh split vertically / horizontally
<leader>rc edit init.lua
<leader>1-4 harpoon jump (owned by harpoon)
]b / [b next / previous buffer (bufferline)

Window movement (C-h/j/k/l) is intentionally owned by vim-tmux-navigator, so it crosses seamlessly into tmux panes.

Health check

:checkhealth gerrrt (lua/gerrrt/health.lua) gives an actionable clipboard report: it runs the same clip / clip-paste ladder Neovim's provider uses and tells you exactly which backend is missing and how to install it, instead of the opaque "clipboard provider" error. It's the Neovim counterpart to the shell's core-doctor.

See also

  • tmux — the vim-tmux-navigator integration and shared tokyonight palette.
  • Maintenance & Updates — how the lazy-lock pins are kept fresh.

Clone this wiki locally