An opinionated, fast, and feature-rich Neovim editor configuration with pre-configured LSPs, formatters, linters, and modern UI plugins — batteries included & zero host pollution.
Quick Start • Overview • Language Matrix • Plugins • Keymaps • Flake Integration
nvim.nix provides an instant, IDE-grade Neovim environment completely packaged with Nix. Rather than relying on global system packages or manual plugin managers, all runtime binaries — including Language Servers (LSP), Formatters, Linters, and CLI Tools — are declaratively managed and injected directly into Neovim's isolated $PATH.
|
LSPs, formatters, and tools run in Nix wrapper isolation — leaving your operating system completely pristine. |
Modular configuration files live in standard Lua under |
Execute immediately on any Linux or macOS machine with standard Nix installed using a single |
Tip
No installation needed! Try out the full Neovim setup in an isolated environment without altering your system configuration.
nix run github:GDR/nvim.nixnix profile install github:GDR/nvim.nixAll language servers, code formatters, and static linters are pre-wired and automatically invoked on file load or save.
| Language / Tech | Language Server (LSP) | Formatter (conform.nvim) |
Linter (nvim-lint) |
|---|---|---|---|
| 🦀 Rust | rust-analyzer |
rustfmt |
— |
| 🐹 Go | gopls |
gofumpt |
— |
| 🐍 Python | pyright |
black |
— |
| ⚡ C / C++ | clangd |
clang-format |
— |
| ❄️ Nix | nil |
nixpkgs-fmt |
— |
| 🌐 TypeScript / JS | typescript-language-server |
prettier |
— |
| 🌙 Lua | lua-language-server |
stylua |
— |
| 🐚 Bash / Shell | bash-language-server |
shfmt |
shellcheck |
| 📦 Bazel / Starlark | starpls |
buildifier |
buildifier |
Bundled CLI Utilities:
ripgrep(fast text search),fd(fast file discovery),git(gutter status & blame),tree-sitter(grammar parser generation).
nvim.nix features a curated collection of modern Neovim plugins configured for speed, visual beauty, and ergonomic editing.
| Extension / Plugin | Description |
|---|---|
🌆 tokyonight.nvim / 🐱 catppuccin |
Sleek, vibrant dark & light color palettes |
📊 lualine.nvim |
Ultra-fast statusline with git branch, LSP status & diagnostics |
📑 bufferline.nvim |
VS Code-style buffer tabbar with icons and quick tab switching |
💎 noice.nvim |
Complete UI overhaul for cmdline, search popups, and floating messages |
🍿 snacks.nvim |
Feature-packed dashboard, indent guides, git browse, and input overlays |
⌨️ which-key.nvim |
Interactive keybinding popup helper displaying available shortcuts |
👗 dressing.nvim |
Enhanced modal dialogs for vim.ui.select and vim.ui.input |
📝 render-markdown.nvim |
Beautiful inline markdown rendering inside Neovim buffers |
🪟 smart-splits.nvim |
Multiplexer-aware split navigation (tmux / WezTerm / Kitty) |
🔔 nvim-notify |
Smooth, animated notification manager |
| Extension / Plugin | Description |
|---|---|
🌲 neo-tree.nvim |
Sidebar file explorer with Git status indicators and file icons |
🔍 telescope.nvim |
Modular fuzzy finder over files, buffers, git commits, and LSP symbols |
⚡ telescope-fzf-native |
Native C-based fzf sorter for instant Telescope search results |
🛢️ oil.nvim |
Edit directory layouts directly like a standard text buffer |
⚡ flash.nvim |
Lightning-fast target labels for jumping across visible text |
🔎 grug-far.nvim |
Project-wide search and replace interface with live previews |
📑 outline-nvim |
Tree view sidebar displaying functions, classes, and variables |
💾 persistence-nvim |
Automated session saving and workspace restoration |
⚙️ direnv.vim |
Automatic project environment switcher via direnv |
| Extension / Plugin | Description |
|---|---|
⚡ blink-cmp |
High-performance asynchronous autocompletion engine |
🌳 nvim-treesitter |
Tree-sitter AST syntax parser with all language grammars pre-installed |
📌 nvim-treesitter-context |
Sticky headers displaying current function/class context at buffer top |
✂️ luasnip |
Snippet engine with code expansions and custom snippets |
🧰 mini.nvim |
Essential modules: mini.surround (brackets/quotes), mini.ai, mini.pairs |
🚜 refactoring.nvim |
Automated code refactoring (extract variable/function, inline) |
🌙 lazydev.nvim |
Full Lua LSP completions for Neovim config & plugin development |
| Extension / Plugin | Description |
|---|---|
🐙 gitsigns.nvim |
Git diff indicators in sign column, line blame, & hunk actions |
👁️ diffview.nvim |
Dedicated tabbed Git diff and file revision history viewer |
🏛️ neogit |
Magit-inspired full Git control panel inside Neovim |
📦 vim-bazel |
Bazel target building and automated test runner |
| Extension / Plugin | Description |
|---|---|
🤖 avante.nvim |
Cursor-like AI code completion & side-by-side editing assistant |
Below are some essential keymaps configured out of the box (press <Space> for the which-key menu):
| Shortcut | Action |
|---|---|
<C-h> / <C-j> / <C-k> / <C-l> |
Navigate between split windows |
<Shift-h> / <Shift-l> |
Switch to previous / next buffer |
<leader>bd |
Close current buffer |
<leader>w |
Save current file |
<leader>q |
Quit Neovim |
<leader>fn |
Open new buffer |
<leader>cd |
Open floating line diagnostics |
[d / ]d |
Jump to previous / next diagnostic |
<leader>ur |
Redraw screen & clear search highlights |
<leader>R |
Soft restart Neovim runtime |
Add nvim.nix as an input in your flake.nix to integrate it into your NixOS or Home Manager system setup:
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nvim.url = "github:GDR/nvim.nix";
};
outputs = { self, nixpkgs, nvim }: {
# Access the wrapped Neovim package for your architecture:
# nvim.packages.${system}.default
};
}nvim.nix/
├── flake.nix # Flake outputs (packages, apps, checks)
├── dotfiles/
│ ├── package.nix # nix-wrapper-modules package wrapper definition
│ ├── plugins.nix # Plugin specs & runtime LSP environment
│ └── nvim/ # Modular Lua Neovim configuration files
│ ├── init.lua # Main entry point
│ └── lua/
│ ├── config/ # Keymaps, options, and autocommands
│ └── plugins/ # Per-plugin Lua configurations
└── tests/ # Automated flake health checks
MIT © Damir Garifullin