A zero-framework, minimalist, and hyper-fast Neovim 0.12 configuration. This setup is the result of a complete migration from Neovim 0.11 and LazyVim, moving away from third-party abstraction layers in favor of pure native APIs.
vim.packPackage Management: Leveraging the new built-in Neovim 0.12 plugin manager. No morelazy.nvimorpacker.nvimoverhead.- Native LSP Configuration: Using the state-of-the-box declarative
vim.lsp.configandvim.lsp.enable()patterns. - Native Autocomplete: Powered by the new 0.12
'autocomplete'option for a "batteries-included" feel. - Native Undo Tree: Persistent, visual undo history accessible via
:Undotree. - Decoupled Architecture: Every plugin has its own isolated configuration file in
lua/plugins/. Clean, readable, and modular. - Optimized for Swift/iOS: Full development support for Apple's ecosystem including
sourcekit-lsp, Treesitter, and custom Swift-specific indentation.
- Theme: Catppuccin Mocha (Black background variant)
- Explorer: Neo-tree
- Fuzzy Finder: Telescope
- IDE Features: nvim-lspconfig, Mason, Conform, nvim-lint
- Syntax: nvim-treesitter (
mainbranch; parsers compiled via thetree-sitterCLI) - Others: Bufferline, Trouble, Dropbar, Molten
~/.config/nvim/
├── init.lua # Core entry point
├── lua/
│ ├── config/
│ │ ├── options.lua # Native 0.12 options (autocomplete, etc.)
│ │ ├── keymaps.lua # Decoupled keybindings
│ │ ├── autocmds.lua # Standard autocommands
│ │ └── providers.lua # Early language provider setup
│ └── plugins/
│ ├── init.lua # Central vim.pack plugin hub
│ ├── lspconfig.lua # Native 0.12 LSP configuration
│ └── [plugin].lua # Exactly one plugin configuration per file
└── docs/
└── LSP-REFERENCE.md # Consolidated research for all languages
- Clone:
git clone https://github.com/your-username/nvim-config ~/.config/nvim - Bootstrap: Launch Neovim. The
vim.packmanager will automatically detect and install all plugins on the first run. - Update Plugins: Run
:lua vim.pack.update(). This will open a confirmation buffer; review the changes and run:wto apply the updates. - Restart: Use the new 0.12
:restartcommand to apply structural changes without quitting Neovim.
nvim-treesitter tracks its main branch (the rewrite). Two things differ from the old master branch:
-
setup()no longer readsensure_installed/auto_install/highlight/indent. Parsers are installed withrequire("nvim-treesitter").install{...}and highlighting is turned on per-buffer withvim.treesitter.start()(both handled inlua/plugins/treesitter.lua). -
Parsers are compiled from source, so the
tree-sitterCLI must be onPATH. On macOS the CLI is a separate Homebrew formula from the library:brew install tree-sitter-cli # NOT `tree-sitter`, which is library-only
If you see nvim-treesitter parser missing <lang> or files open with no syntax highlighting, install the CLI, then run :lua require("nvim-treesitter").install{ "typescript", ... } (or just reopen Neovim; missing parsers install on startup).
Two independent causes, both handled in the current config:
- Server not attached yet. The LSP keymaps wait for
LspAttachbefore opening Trouble, so firing on a freshly-opened buffer no longer fails silently. - Cursor sitting on a symbol whose only location is the current line (e.g. an interface property whose definition equals its single reference). Trouble hides current-line results by default; this config sets
include_current = trueon thelspmode so those symbols still show. Cursor-follow speed is controlled byupdatetime(set to250inlua/config/options.lua).
Distributed under the MIT License. See LICENSE for more information.
Copyright (c) 2026 Gaston Morixe.