What
Three plugins that fill genuine gaps in the current setup. These are distinct from the suggestions in #287 (flash.nvim, grug-far.nvim).
1. nvim-dap (mfussenegger/nvim-dap) — interactive debugging
Gap: The config runs 7 LSP servers (rust_analyzer, gopls, clangd, pyright, pyrefly, ts_ls, sourcekit) for language intelligence, but has zero debugging support. :Compile and makeprg exist for builds, but there is no way to set breakpoints, step through code, or inspect variables.
Fit: rust_analyzer, gopls, and clangd all ship DAP (Debug Adapter Protocol) adapters (codelldb for Rust/C, the built-in Go delve adapter, etc.). nvim-dap uses the same language processes already running — no new servers needed. Add nvim-dap-ui for a floating panel (variables, call stack, breakpoints) to match the existing float-heavy UI (filetree.lua, server.lua, noice.nvim).
Pairs naturally with the refactoring.nvim setup — extract/inline plus debug is a full editing workflow.
2. lazydev.nvim (folke/lazydev.nvim) — Neovim Lua API type annotations
Gap: lua-language-server (luals) is configured (plugin_config.lua:94–107) but without type stubs for the Neovim Lua API. This means vim.api.*, vim.lsp.*, vim.treesitter.*, vim.uv.*, and all Neovim globals are untyped — no completions, no hover docs, no jump-to-definition for Neovim built-ins.
Fit: lazydev.nvim injects the official Neovim Lua type annotations into luals at startup. Working on this very config (options.lua, plugin_config.lua, treesitter.lua, lib/async.lua) becomes dramatically faster: accurate vim.* completions, inline docs on hover, and type errors caught before reloading. Zero runtime overhead — it only affects the language server.
3. aerial.nvim (stevearc/aerial.nvim) — persistent code outline
Gap: <leader>ls opens fzf LSP document symbols (a one-shot jump popup). There is no persistent "where am I in this file" outline. With large files (e.g. plugin_config.lua at 517 lines), navigating by treesitter-textobject jumps (]f/[f) is useful but slow.
Fit: aerial.nvim adds a toggleable sidebar showing the symbol tree (functions, classes, types) backed by LSP + treesitter — the same sources already in place. The sidebar is consistent with the floating filetree style. It complements rather than replaces fzf: aerial is for orientation ("I'm 40% into this file, inside class Foo"), fzf is for jumping ("go to bar()").
Works immediately with the existing LSP setup and treesitter parsers; requires no new servers.
Where to add
lua/config/plugins.lua — add to package_list
lua/config/plugin_config.lua — setup calls and keymaps (suggest <leader>db for dap, <leader>o for aerial)
What
Three plugins that fill genuine gaps in the current setup. These are distinct from the suggestions in #287 (flash.nvim, grug-far.nvim).
1. nvim-dap (
mfussenegger/nvim-dap) — interactive debuggingGap: The config runs 7 LSP servers (rust_analyzer, gopls, clangd, pyright, pyrefly, ts_ls, sourcekit) for language intelligence, but has zero debugging support.
:Compileandmakeprgexist for builds, but there is no way to set breakpoints, step through code, or inspect variables.Fit: rust_analyzer, gopls, and clangd all ship DAP (Debug Adapter Protocol) adapters (
codelldbfor Rust/C, the built-in Go delve adapter, etc.). nvim-dap uses the same language processes already running — no new servers needed. Addnvim-dap-uifor a floating panel (variables, call stack, breakpoints) to match the existing float-heavy UI (filetree.lua, server.lua, noice.nvim).Pairs naturally with the refactoring.nvim setup — extract/inline plus debug is a full editing workflow.
2. lazydev.nvim (
folke/lazydev.nvim) — Neovim Lua API type annotationsGap:
lua-language-server(luals) is configured (plugin_config.lua:94–107) but without type stubs for the Neovim Lua API. This meansvim.api.*,vim.lsp.*,vim.treesitter.*,vim.uv.*, and all Neovim globals are untyped — no completions, no hover docs, no jump-to-definition for Neovim built-ins.Fit: lazydev.nvim injects the official Neovim Lua type annotations into luals at startup. Working on this very config (
options.lua,plugin_config.lua,treesitter.lua,lib/async.lua) becomes dramatically faster: accuratevim.*completions, inline docs on hover, and type errors caught before reloading. Zero runtime overhead — it only affects the language server.3. aerial.nvim (
stevearc/aerial.nvim) — persistent code outlineGap:
<leader>lsopens fzf LSP document symbols (a one-shot jump popup). There is no persistent "where am I in this file" outline. With large files (e.g.plugin_config.luaat 517 lines), navigating by treesitter-textobject jumps (]f/[f) is useful but slow.Fit: aerial.nvim adds a toggleable sidebar showing the symbol tree (functions, classes, types) backed by LSP + treesitter — the same sources already in place. The sidebar is consistent with the floating filetree style. It complements rather than replaces fzf: aerial is for orientation ("I'm 40% into this file, inside class Foo"), fzf is for jumping ("go to bar()").
Works immediately with the existing LSP setup and treesitter parsers; requires no new servers.
Where to add
lua/config/plugins.lua— add topackage_listlua/config/plugin_config.lua— setup calls and keymaps (suggest<leader>dbfor dap,<leader>ofor aerial)