Neovim config that's just enough. No bloat, no framework — flat plugin files, native LSP, deliberate keybindings.
git clone https://github.com/harunnoir/enough-nvim.git ~/.config/nvim
nvim --headless "+Lazy! sync" +qa # plugins + Mason
For a full automated setup:
./bin/install.sh # prereqs, plugins, Mason
./bin/install.sh --minimal # plugins only
./bin/lang/python.sh # pynvim, pytest, uv
~/.config/nvim/
├── init.lua entry point
├── lazy-lock.json locked plugin versions
├── bin/install.sh bootstrap installer
├── lua/
│ ├── config/
│ │ ├── init.lua config startup order
│ │ ├── lazy.lua lazy.nvim bootstrap
│ │ ├── options.lua editor options
│ │ ├── diagnostics.lua diagnostic display policy
│ │ ├── autocmds.lua autocommands / filetype settings
│ │ └── neovide.lua Neovide GUI config
│ ├── maps/ all keybindings by workflow
│ │ ├── core.lua native editor primitives
│ │ ├── nav.lua movement, files, and windows
│ │ ├── edit.lua formatting and editing tools
│ │ ├── lsp.lua LSP and diagnostic actions
│ │ ├── git.lua Git actions
│ │ ├── debug.lua debugger actions
│ │ └── extras.lua tasks, bookmarks, AI, and utilities
│ ├── lsp/
│ │ ├── init.lua server list and activation
│ │ └── servers.lua native vim.lsp.config definitions
│ └── plugins/ one file per concern
│ ├── core.lua treesitter, ufo
│ ├── ts.lua treesitter text objects
│ ├── mini.lua mini.nvim modules
│ ├── lsp.lua mason, tiny-inline-diagnostic, nvim-lint, fidget, symbol-usage
│ ├── cmp.lua blink.cmp and completion sources
│ ├── edit.lua conform, treesj, trouble, dial
│ ├── nav.lua flash, harpoon, oil, glance, smart-splits, marks
│ ├── git.lua gitsigns, gitgraph
│ ├── debug.lua nvim-dap, dap-ui, python/go debugger
│ ├── ai.lua 99 AI chat
│ ├── themes.lua colorscheme selection and setup
│ ├── ui.lua snacks, noice, slimline
│ ├── terminal.lua Snacks terminal integration
│ ├── extras.lua haunt, undotree, nerdy, overseer
│ ├── lang.lua language-specific extras
│ └── 42.lua 42 School tooling
| Key |
Mode |
Action |
<leader>w |
n |
Save |
<leader>q / <leader>Q |
n |
Quit / Quit all |
<leader>cf |
n,v |
Format buffer |
<C-h/j/k/l> |
n |
Move to split |
<A-h/j/k/l> |
n |
Resize split |
<leader><leader>h/j/k/l> |
n |
Swap buffer with split |
<leader>sv/sh/sx/se |
n |
Split vertical/horizontal/close/equalize |
<leader>z |
n |
Toggle maximize |
<BS> |
n |
Alternate buffer |
| Key |
Mode |
Action |
gs / gS |
n,x,o |
Flash jump / Flash treesitter |
w/e/b/ge |
n,o,x |
Spider word motions |
<leader>ff / fg / fw |
n |
Files / Grep / Grep word |
<leader>fr / f. / fh |
n |
Recent / Resume / Help |
<leader>fk / fl / fp |
n |
Keymaps / Buffer lines / Projects |
<leader>bb / bd |
n |
List buffers / Delete buffer |
<leader>a / <leader>e |
n |
Harpoon add / menu |
<leader>1-4 |
n |
Harpoon jump 1–4 |
- |
n |
Oil file explorer |
| Key |
Mode |
Action |
K |
n |
Hover documentation |
gD/gR/gY/gM |
n |
Glance defs/refs/type/impl |
<leader>ca |
n,v |
Code actions |
<leader>cr |
n |
Rename symbol |
<leader>cs / cS |
n |
Symbols / Workspace symbols |
[d / ]d |
n |
Prev / next diagnostic |
<leader>xx / <leader>xX |
n |
Trouble diagnostics (all / buffer) |
<leader>xs / <leader>xl |
n |
Trouble symbols / LSP refs |
| Key |
Action |
<leader>dc / di / do / dO |
Continue / Into / Over / Out |
<leader>dr |
Run to cursor |
<leader>db / dB |
Toggle / conditional breakpoint |
<leader>du |
Toggle DAP UI |
<leader>dti / dtc |
Test method / class (Python) |
| Key |
Action |
<leader>Gg |
Lazygit |
<leader>Gb |
Blame line |
<leader>Gh |
Preview hunk |
<leader>Gs |
Stage hunk |
<leader>Gu |
Unstage hunk |
<leader>Gl |
Git graph |
<leader>GB |
Git browse |
| Key |
Mode |
Action |
sa + m + c |
n |
Add surround |
sd + t |
n |
Delete surround |
sr + t + c |
n |
Replace surround |
ga / gA |
n,x |
Align / align preview |
<C-a> / <C-x> |
n |
Increment / decrement |
gc |
n,v |
Toggle comment |
<A-S-j/k> |
n,v |
Move line down/up |
<Tab> / <S-Tab> |
v |
Indent / outdent |
<leader>sj |
n |
Toggle split/join (treesj) |
| Key |
Action |
<C-\> |
Toggle terminal (vertical) |
<Esc><Esc> |
Exit terminal mode |
<leader>p |
Yank history |
<leader>u |
Toggle undo tree |
<leader>in |
Browse nerd icons |
<leader>ha |
Annotate (haunt) |
<leader>9v / <leader>9s |
AI visual / search prompt |
<leader>or/t/oo/ox/os/oa |
Overseer task runner |
zR / zM |
Open / close all folds |
Switch via the theme variable at the top of lua/plugins/themes.lua.
Available: limei (default), solarized, gruvbox-material, gruvbox,
gruvbox-new, zen, vague, miasma, kanagawa, and farout.
make format # format Lua
make check # verify formatting and Lua syntax
make test # load the complete config headlessly
Built with lazy.nvim. Unix philosophy-inspired.