A configuration for Neovim that inspires
hope and resolution 🔥
A fast, hand-crafted Neovim setup for full-stack web development:
Django · React · Tailwind CSS · HTMX · Alpine.js, with first-class Python and TypeScript support.
- Why
- ✨ Features
- 🗣️ Languages
- 📋 Requirements
- 📦 Install
- ⌨️ Keymaps
- 🔧 Customization
- 🗂️ Project structure
- 📚 Documentation
- 🤝 Contributing
- 📄 License
I wanted a config that was truly mine and that would help me be fast and accurate.
Neovim configurations are really personal. I hope this repository can be more of a source of inspiration than a complete replacement.
For that purpose, there are already excellent distributions such as:
This configuration is intended to be used primarily with:
- Native LSP: servers are configured with Neovim 0.11's built-in
vim.lsp.config/vim.lsp.enableAPI. No wrapper layers. - Zero-setup tooling: Mason installs every language server and formatter, plus the
tree-sitterCLI, the first time you start Neovim. Servers attach to open buffers as soon as their install finishes. - Fast completion: blink.cmp with LSP, paths, snippets, signature help and
[[wikilink]]completion. - Snippets: LuaSnip + friendly-snippets, plus custom snippets for Django templates, HTMX, Django Ninja and react-hook-form. Django snippets are available in Python files, and HTML snippets in JSX, Astro and Vue.
- Formatting: conform.nvim with ruff, prettier, stylua and gofmt, falling back to the LSP.
- Docstrings: generate function and class docs with neogen (JSDoc/TSDoc for JS/TS).
- Treesitter: the
main-branch rewrite of nvim-treesitter for highlighting and indentation, with 30+ parsers installed automatically. - Structural editing: text objects and motions for scopes, functions, classes, loops, arguments and calls.
- snacks.nvim pickers for files, recent files, live grep, buffer lines, diagnostics, TODOs and every LSP location (definitions, references, implementations, incoming/outgoing calls).
- Smart symbol outline: one picker for document symbols. It filters out React hook and callback noise and shows Markdown headings with per-level icons.
- Harpoon 2: pin your working set and jump to it with
<leader>1–9. The pinned files also show in the statusline. - oil.nvim to edit the filesystem like a buffer, plus a tree explorer.
- nvim-spectre for project-wide search and replace.
- lazygit in a floating window, including per-file history.
- gitsigns in the gutter and inline blame.
- A dashboard that shows your assigned GitHub issues and PRs (via
gh) andgit status.
- ruff for linting and formatting, plus ty and pyright for type checking.
- Switch virtual environments with venv-selector.
- Run pytest suites from the editor with neotest. It uses your project's
.venvautomatically.
- obsidian.nvim integration with workspaces, daily notes and templates.
- In-buffer Markdown rendering with render-markdown.nvim, plus smart bullets and centered writing.
[[wikilink]]completion that works even for loose.mdfiles outside any vault or repository.- Graph view (
:Graph): Obsidian's graph, in your terminal (braille renderer) or in your browser. It supports search filters, color groups, local graphs, and live updates as you edit. Read more →
- 🎵 MPD music player: a full MPD client with a queue, cover art, playlist management and now-playing info in the statusline. It talks to MPD directly, so you don't need
mpc. Read more → - 🎲 Solo RPG toolkit: a dice roller (exploding dice, keep-highest/lowest, advantage, fudge dice…) and random tables written in Markdown. It turns on when the working directory contains an
rpg.tomlfile.
- The Tokyo Night theme (night style).
- noice.nvim command palette, lualine global statusline, and floating file labels with incline.
- A dashboard, zen mode, indent guides, scope highlighting and notifications, all from snacks.nvim.
- which-key lists every shortcut, so you never have to memorize them.
| Area | Language servers | Formatter |
|---|---|---|
| Python / Django | ruff, ty, pyright |
ruff |
| JavaScript / TypeScript / React | vtsls, eslint |
prettier |
| HTML / Django templates | html, tailwindcss |
prettier |
| CSS / Tailwind | tailwindcss |
prettier |
| Astro / Vue | astro, vtsls |
prettier |
| Markdown | marksman |
prettier |
| Lua | lua_ls (+ lazydev) |
stylua |
| JSON / YAML / TOML | jsonls, yamlls, taplo |
prettier (JSON) |
| Docker | dockerls, docker_compose_language_service |
|
| Shell / SQL / C | bashls, sqlls, clangd |
|
| Go | gofmt |
To add a server, add it to the servers table in lua/plugins/lsp.lua.
| Requirement | Why |
|---|---|
| Neovim ≥ 0.11 | Native LSP config API and nvim-treesitter main |
git, a C compiler, make |
Plugin installation, Treesitter parsers, LuaSnip regex support |
node + npm |
Most language servers and prettier, installed by Mason |
python3 |
Python language servers installed by Mason |
ripgrep |
Live grep and :grep |
| A Nerd Font | Icons (JetBrainsMono Nerd Font is a good choice) |
Optional: lazygit, gh |
Git UI and the GitHub dashboard |
| Optional: MPD, ImageMagick | Music player and cover art |
Note
You don't need to install the tree-sitter CLI yourself: Mason installs it on first start. If you'd rather use your own, make sure the CLI is on your $PATH. On macOS that's brew install tree-sitter-cli; the plain tree-sitter formula only ships the library.
-
Back up your current config (if you have one):
mv ~/.config/nvim ~/.config/nvim.bak mv ~/.local/share/nvim ~/.local/share/nvim.bak
-
Clone NaryaVim:
git clone https://github.com/lcfd/NaryaVim ~/.config/nvim -
Start Neovim and let it install the plugins, language servers and parsers. Watch the progress with
:Lazyand:Mason. -
Check your setup with
:checkhealth.
Step-by-step instructions for each platform are in the Install wiki page.
The leader key is <Space>. Press it and wait: ⭐ which-key lists every available shortcut.
| Keys | Action |
|---|---|
<leader><space> |
Find files |
<leader>fw / <leader>fW |
Grep the project / grep the word under the cursor |
<leader>fo / <leader>fi |
Recent files / search the current buffer |
<leader>p / <leader>o |
File explorer / Oil |
- / = / <leader>1–9 |
Harpoon: add file / menu / jump |
gd gr gi gy |
Definition, references, implementation, type definition |
<leader>ds / <leader>dS |
Document / workspace symbols |
<leader>rn / <leader>ca |
Rename / code action |
<leader>ff |
Format the buffer |
<leader>gg |
Lazygit |
<leader>z |
Zen mode |
<leader>Gg / <leader>Gl |
Global / local note graph |
<leader>mm |
MPD command center |
<C-\> |
Floating terminal |
The full list is in the Keystrokes wiki page.
NaryaVim is meant to be forked and bent to your will. Every concern lives in its own file under lua/plugins/, and lazy.nvim loads them automatically: to add a plugin, drop a new spec file in that folder.
Machine-specific settings, like your Obsidian vaults, go in a git-ignored lua/options.lua. It's optional, and everything works without it. See the Options wiki page.
~/.config/nvim
├── init.lua # Entry point: options → plugins → keymaps → commands
├── lua
│ ├── config/ # Core: options, keymaps, user commands, lazy.nvim bootstrap
│ ├── plugins/ # One file per concern (lsp, completion, ui, git, testing, …)
│ ├── custom/ # Home-made modules: graph view, MPD client, RPG toolkit, …
│ └── utils/ # Small helpers
└── snippets/ # Custom VS Code-style snippets
Detailed guides are in the wiki:
- Install: platform-specific setup
- Keystrokes: every keymap
- Python: Python and Django workflow
- Markdown: notes, Obsidian and the graph view
- Options: local configuration
- Tips: fonts, terminals and more
This is a personal configuration, but issues, ideas and pull requests are welcome. If something breaks on your machine, please open an issue.
Lua code is formatted with stylua (stylua lua/).
Released under the GPL-3.0 License.
Thanks to the authors of all the plugins that make this configuration possible, and especially to folke for lazy.nvim, snacks.nvim and friends.

