Neovim configuration
My personal Neovim configuration — the actual .config/nvim folder, a submodule of my dotfiles repo.
Uses plain lua files and the native vim.pack() package manager.
Everything is organized as small, self-contained features under plugin/, each one owning its keymaps, commands and options.
Third-party plugins
- oil.nvim — file explorer that edits the filesystem like a normal buffer. Replaces netrw for local browsing; deletions go to the trash, and git status shows in the sign column (oil-git-status.nvim).
- fzf-lua — fuzzy finder for files, grep, buffers, help tags and tags.
- gitsigns.nvim — diff signs in the gutter, plus hunk navigation, staging, preview and blame.
- vim-fugitive — the git command layer for anything beyond hunks.
- nvim-treesitter — syntax-aware highlighting, folding and text objects.
- nvim-lspconfig — language server setup (Lua, Bash, Markdown, Vim, Python).
- render-markdown.nvim — in-buffer rendering of markdown (headings, code blocks, …).
- solarized.nvim — the colorscheme, with my own highlight tweaks.
- lualine.nvim — the statusline, matched to the colorscheme.
- nvim-web-devicons — file-type icons used across oil, fzf and lualine.
- nvim-autopairs — auto-closes brackets and, for markdown,
**bold**/~~strike~~. - vim-surround — add, change and delete surrounding quotes, brackets and tags.
- link.vim — move URLs out of the way into reference-style links.
- nvim-dap + one-small-step-for-vimkind — debug the Lua running inside Neovim itself.
Custom features
Everything below is written from scratch, no plugin behind it.
- Follow — one
gfthat opens whatever is under the cursor: markdown links, wiki-links, URLs,nvim-help://andman://schemes;]u/[ujump between them. - Notes — turns a notes directory into a wiki of markdown files linked by wiki-links: completion inside
[[…]], fuzzy pickers by tag/name/section, and renames that update every link pointing to the note. - Autoreload — silent, opt-in per-buffer reload of files changed on disk, instead of Neovim's usual prompt.
- Format on write — runs the right stdin formatter per filetype (
shfmt,stylua,mdformat,black), toggleable per buffer. - Sessions — save / load / restart sessions, with a JSON sidecar for what
:mksessioncan't restore (tab names, help windows). - Terminal — opens in insert mode, follows output, keeps terminal mode on click, and guards against quitting Neovim while a background job is still running.
- Autocompletion — automatic completion menu in both insert and command-line mode, driven by
<Tab>. - Smooth scroll — animates the half-page scroll on
<C-u>/<C-d>. - Extmarks — highlights arbitrary patterns from the treesitter tree (currently
TODOin comments), easily extended to more. - Snippets — a per-filetype snippet registration engine, keyed by trigger word.
- Text transforms — transform the visual selection in place (currently URL encode/decode), easily extended to more.
- Spell — quick toggles between English, French, or both.
- Lorem ipsum — insert a placeholder string of a given word count.
Layout
init.lua— bootstrap: global options, and the odd keymaps / commands that belong to no single feature.plugin/— one file per feature, auto-loaded at startup (00-plugin.luainstalls the third-party plugins first).lua/dotfiles/— the reusable engine modules that features build on.after/ftplugin/— per-filetype tweaks;after/queries/— treesitter query overrides.plugin/99-local.lua— untracked machine-local overrides, loaded last.
