A super-minimal Neovim configuration contained in a single init.lua.
It keeps Neovim close to the defaults while adding only the essentials: sensible editor options, syntax highlighting, language-server support, fast file search, image support, and a few practical keymaps. There is no configuration framework, completion engine, statusline, dashboard, or file explorer.
- Neovim 0.12+ for the built-in
vim.packpackage manager - Git for downloading plugins
- A Nerd Font is recommended for file icons
- A terminal supporting the Kitty graphics protocol for images, such as Kitty, Ghostty, or WezTerm
- ImageMagick for converting non-PNG images
- The language-server executables you want to use; this configuration does not install them
Back up an existing configuration, then clone this repository:
mv ~/.config/nvim ~/.config/nvim.bak
git clone <repository-url> ~/.config/nvim
nvimOn first launch, Neovim installs the plugins and Tree-sitter parsers automatically. FFF downloads a prebuilt search binary, or builds one when necessary.
Replace <repository-url> with this repository's Git URL.
Plugins are installed with Neovim's native vim.pack.add() API.
| Plugin | Purpose |
|---|---|
| nvim-treesitter | Fast, accurate syntax highlighting |
| fff | Fuzzy file finding and live grep |
| nvim-web-devicons | File-type icons used by plugins |
| snacks.nvim | Inline terminal image rendering |
| lean.nvim | Lean language support and mappings |
| nvim-lspconfig | Language-server configurations |
Tree-sitter parsers are installed for Lua, Python, JavaScript, TypeScript, HTML, CSS, JSON, Bash, Zig, Odin, Go, Go templates, C, C++, and Rust.
The PackChanged autocommand performs plugin-specific setup after installs and updates:
- Downloads or builds the FFF native binary.
- Runs
TSUpdatefor Tree-sitter parsers.
Plugin revisions are recorded in nvim-pack-lock.json for reproducible installs. Do not edit this file manually.
Neovim's built-in LSP client is enabled for:
- Python (
pyrefly) - Go and Go templates (
gopls) - Rust (
rust_analyzer) - JavaScript and TypeScript (
tsc) - JSON (
jsonls) - HTML (
html) - CSS (
cssls) - Lua (
lua_ls)
gopls recognizes .gotmpl and .gohtml template files. lua_ls is configured for Neovim's LuaJIT runtime unless the workspace supplies its own .luarc.json or .luarc.jsonc.
The configuration enables:
- Absolute and relative line numbers
- System clipboard integration
- Cursor-line highlighting
- Four-space indentation with spaces
- Persistent undo in
~/.cache/nvim/undodir - Visible whitespace characters
- Recursive file lookup through
path=** - True-color support and Neovim's built-in
retroboxcolorscheme
Line wrapping, swap files, and backup files are disabled.
The leader key is Space.
| Mode | Key | Action |
|---|---|---|
| Normal | <Space>ff |
Find files with FFF |
| Normal | <Space>fg |
Live grep with FFF |
| Normal/Visual | <Space>fw |
Grep the word under the cursor or selected text |
| Normal | Alt-h |
Open a terminal below the current window |
| Terminal | Esc |
Return to Normal mode |
| Visual | J |
Move the selected lines down |
| Visual | K |
Move the selected lines up |
Run the native package update UI from Neovim:
:lua vim.pack.update()Review and confirm the changes. The lockfile and plugin-specific setup hooks are updated automatically.
.
├── init.lua # Complete Neovim configuration
├── nvim-pack-lock.json # Locked plugin revisions
└── README.md
This config provides a small editing foundation rather than a complete IDE. It includes language-server integration, but formatting, linting, debugging, snippets, and autocompletion are intentionally left out. Add only the tools you actually need and keep the setup understandable.