This is what I've found to work well for me. This README.md was mostly generated by cursor-agent.
nvim/
├── init.lua # Entry point
├── nvim-pack-lock.json # vim.pack lockfile (created/updated by Nvim 0.12+)
├── lua/
│ ├── config/
│ │ ├── init.lua # Core config, keymaps, custom commands
│ │ ├── pack.lua # vim.pack plugin list
│ │ ├── options.lua # Neovim options
│ │ ├── lsp.lua # Diagnostics + LSP completion on attach
│ │ ├── builtin.lua # :Undotree / :DiffTool + diagnostic lists
│ │ ├── ui2.lua # Experimental core UI
│ │ └── plugins/
│ │ ├── init.lua # Load order for plugin setup
│ │ ├── mini/ # mini.nvim modules (icons, clue, …)
│ │ └── *.lua # Other plugin setup files
└── queries/
└── all/
└── textobjects.scm # (legacy) custom TS queries; optional
Managed with Neovim 0.12+ built-in vim.pack (:help vim.pack). After changing lua/config/pack.lua, restart Nvim; use :lua vim.pack.update() to pull updates (confirm with :write in the review buffer). Commit nvim-pack-lock.json for reproducible installs.
- tokyonight.nvim — Colorscheme
- plenary.nvim — Lua utilities (Telescope dependency)
- telescope.nvim + telescope-fzf-native.nvim — Fuzzy finding (
<leader>f…), full-screen horizontal layout, fzf-native sorter - mini.nvim —
mini.icons,mini.statusline,mini.hipatterns(hex colors),mini.clue,mini.splitjoin,mini.ai,mini.indentscope,mini.surround - oil.nvim — Buffer-style directory browser (
<leader>-),icon+sizecolumns; uses mini.icons for glyphs - mason.nvim + mason-lspconfig.nvim — LSP server install + attach via nvim-lspconfig
- lazydev.nvim —
lua_lsergonomics for config/plugins - tree-sitter-manager.nvim — Install/update Tree-sitter parsers and queries (needs tree-sitter CLI, git, and a C compiler on your PATH)
- snacks.nvim — Image preview only (
imageenabled; other snacks disabled) - conform.nvim — Formatting
Built-in (via :packadd, not vim.pack): nvim.undotree, nvim.difftool — see lua/config/builtin.lua.
- Experimental ui2 —
require('vim._core.ui2').enable()for messages/cmdline (:help ui2) - Insert completion —
'autocomplete'+vim.lsp.completion.enable()onLspAttach(:help lsp-completion) - Diagnostics — Signs via
vim.diagnostic.config(signs.text), quickfix/location list on<leader>xw/<leader>xb
Format on save via Conform, with :FormatDisable / :FormatEnable / :FormatToggle / :FormatStatus (global or ! for buffer). Formatters: Prettier, stylua, rustfmt, ruff/black/isort as before.
tree-sitter-manager.nvim installs parsers on startup (ensure_installed) and adds parser/query dirs to 'runtimepath'. Highlighting uses vim.treesitter.start() in a FileType autocommand (TSM’s own highlighter is off so Neovim can map filetypes like typescriptreact to parsers correctly). Indent is filetype-based, not nvim-treesitter’s indentexpr. Use :TSManager to install/remove parsers. mini.ai provides extra textobjects with default mappings.
Mason ensures lua_ls, rust_analyzer, and zls; mason-lspconfig uses automatic enable (vim.lsp.enable) with default configs.
Telescope on <leader>f… (full-width layout, fzf-native sorting). mini.clue shows key hints; <leader>? opens buffer-local normal-mode keymaps. oil.nvim on <leader>- (current buffer’s directory, or cwd); inside Oil, <CR> opens entries, - goes to the parent directory (:help oil-actions for the rest). Motion/search uses mini.ai defaults and built-in /.
4-space indent, relative numbers, persistent undo, inlay hints enabled globally, rounded floating borders, etc.
- Neovim 0.12+ required (
vim.pack, ui2, built-in undotree/difftool). - git required for
vim.packand Tree-sitter parser installs. - tree-sitter CLI plus a C compiler (clang/gcc) required for tree-sitter-manager.nvim to build parsers.
- ripgrep recommended for Telescope
live_grep. - Clone to
~/.config/nvim, start Neovim — plugins install understdpath('data')/site/pack/core/opt. Commit the generatednvim-pack-lock.jsononce satisfied.
If you previously used nvim-treesitter with parsers under stdpath('data')/site/parser and …/site/queries, remove those two directories once before the first run with tree-sitter-manager (old layouts could be symlinks into the removed plugin and will break query copies).
- Use
:hand<leader>f?(Telescope help tags). :Undotree,:DiffTool— see:help package-undotree/:help difftool.
