aboutsummaryrefslogtreecommitdiffstats

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 gf that opens whatever is under the cursor: markdown links, wiki-links, URLs, nvim-help:// and man:// schemes; ]u / [u jump 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 :mksession can'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 TODO in 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.lua installs 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.