A sleek, purr-fectly crafted Neovim configuration that's fast, lightweight, and ready for serious development work. Built with carefully selected plugins and sensible defaults for developers who want power without the complexity.
- ✨ Why NyakoNvim?
- 📦 Quick Start
- Requirements
- Installation
- Language Support
- Debugging
- Key Plugins
- Learning Guide
- Contributing
- Blazing startup: Loads 40+ plugins in under 50ms thanks to lazy loading
- Optimized performance: Smart buffer management, minimal redraw times, and efficient syntax highlighting
- Instant completions: Powered by blink.cmp for zero-delay autocomplete
- Zero configuration needed: Works out of the box with sensible defaults
- Comprehensive LSP support: 8+ languages configured with auto-formatting, linting, and debugging
- Smart keybindings: Intuitive, mnemonic keymaps with which-key integration
- Session persistence: Pick up exactly where you left off
- Catppuccin Macchiato theme: Easy on the eyes with custom color tweaks (default theme)
- 6 colorscheme options: Switch between catppuccin, tokyonight, gruvbox, rose-pine, kanagawa, and onedark with
<leader>cp - Clean status line: Essential info without clutter via lualine
- Smooth animations: Enhanced UI with noice.nvim
- Smart buffer tabs: Visual buffer management with bufferline
- Full DAP debugging: Step through Python, JavaScript, Rust, C/C++, Go, and more
- Advanced fuzzy finding: Lightning-fast file/text search with fzf-lua
- Git integration: Stage hunks, blame, and diff without leaving your editor
- Treesitter magic: Syntax-aware selections, smart text objects, and code navigation
- File explorer: Tree-based file manager with fyler.nvim
- Flash navigation: Jump anywhere on screen with flash.nvim
- Auto-pairs & surround: Intelligent bracket/quote handling
- Scope-aware buffers: Tab-local buffer management
- Format on save: Consistent code style with conform.nvim
# Backup existing config (if any)
mv ~/.config/nvim ~/.config/nvim.backup
# Clone NyakoNvim
git clone https://github.com/PrajwalChigod/NyakoNvim.git ~/.config/nvim
# Install dependencies (macOS)
brew install bat ripgrep fzf fd
# Launch Neovim - plugins install automatically!
nvimThat's it! 🎉 Open a file and start coding. See full installation guide for other platforms.
NyakoNvim comes pre-configured with LSP, formatting, linting, and debugging for:
|
Systems & Scripting
|
Web & Frontend
|
Dynamic Languages
|
Full tooling support: Each language gets LSP autocomplete, formatting, linting, and debugging (where applicable). See tooling matrix for details.
- Neovim >= 0.11.0
- Git
- A terminal with true color support
- A Nerd Font (recommended for proper icon display)
The following tools are required for full functionality:
- bat - For file previewing
- rg (ripgrep) - For fast searching
- fzf - For fuzzy finding
- fd - For faster file finding performance
- C compiler - Required for Treesitter parsers (gcc, clang, or MSVC)
# Core dependencies
brew install bat ripgrep fzf fd
# C compiler is included with Xcode Command Line Tools
xcode-select --install# Core dependencies
sudo apt install bat ripgrep fzf fd-find build-essential# Core dependencies
sudo pacman -S bat ripgrep fzf fd base-devel-
Backup your existing Neovim configuration (if any):
mv ~/.config/nvim ~/.config/nvim.backup
-
Clone this repository:
git clone https://github.com/PrajwalChigod/NyakoNvim.git ~/.config/nvim -
Start Neovim:
nvim
As soon as you start nvim, you might see some errors, Don't worry, its just that plugins are not installed. Install all the plugins with command
:Lazy install
Run the setup command to create customization directories:
:SetupCustomThis creates:
lua/plugins/extras/- Directory for your custom pluginslua/config/extras/- Directory for custom keymaps, autocmds, and optionslua/config/disabled.lua- File to disable unwanted pluginslua/config/extras/keymaps.lua- Your custom keymaps (gitignored)lua/config/extras/autocmds.lua- Your custom autocommands (gitignored)lua/config/extras/options.lua- Your custom options (gitignored)
Create a new file in lua/plugins/extras/:
-- lua/plugins/extras/my-plugin.lua
return {
"author/plugin-name",
event = "VeryLazy",
config = function()
require("plugin-name").setup({
-- your config
})
end,
}Supports nested organization:
lua/plugins/extras/
├── lang/
│ ├── python.lua
│ └── typescript.lua
└── ui/
└── noice.lua
To customize a core plugin, create a file in extras/ with the same name as the core plugin:
-- lua/plugins/extras/flash.lua (overrides core/flash.lua)
return {
"folke/flash.nvim",
keys = {
{ "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" }
}
}Lazy.nvim will automatically merge your configuration with the core plugin.
Edit lua/config/disabled.lua:
return {
-- Simple format
"folke/noice.nvim",
"nvim-treesitter/nvim-treesitter-textobjects",
-- Or with full spec (for conditional disabling)
{ "folke/trouble.nvim", enabled = false },
}Use the gitignored files in lua/config/extras/ to add your customizations without modifying core files:
Add custom keymaps in lua/config/extras/keymaps.lua:
-- lua/config/extras/keymaps.lua
vim.keymap.set("n", "<leader>x", "<cmd>echo 'Hello'<cr>", { desc = "Custom command" })
vim.keymap.set("n", "<leader>X", function()
print("Custom function")
end, { desc = "Custom function" })Add custom options in lua/config/extras/options.lua:
-- lua/config/extras/options.lua
vim.opt.wrap = true
vim.opt.linebreak = true
vim.g.my_custom_variable = "value"Add custom autocommands in lua/config/extras/autocmds.lua:
-- lua/config/extras/autocmds.lua
vim.api.nvim_create_autocmd('FileType', {
pattern = 'python',
callback = function()
vim.opt_local.colorcolumn = "80"
end,
})These files are automatically loaded and are gitignored, so your customizations won't conflict with updates.
Since custom files load after core files, you can override default behavior:
Keymaps - ✅ Override by redefining:
-- Override core keymap
vim.keymap.set("n", "<leader>ce", "<cmd>edit ~/.config/nvim/init.lua<cr>", { desc = "Edit init.lua" })
-- Disable a keymap
vim.keymap.set("n", "Q", "<nop>", { desc = "Disabled" })Options - ✅ Override by reassigning:
-- Override core options
vim.opt.number = false -- Override core setting
vim.opt.relativenumber = falseAutocommands -
-- To override, clear the augroup first
local my_group = vim.api.nvim_create_augroup("FileTypeSettings", { clear = true })
vim.api.nvim_create_autocmd('FileType', {
group = my_group,
pattern = 'python',
callback = function()
vim.opt_local.tabstop = 2 -- Replaces core autocmd in this group
end,
})Note: To modify core keymaps/options/autocmds directly, edit:
lua/config/keymaps.lua- Core keymapslua/config/options.lua- Core optionslua/config/autocmds.lua- Core autocommands
lua/
├── plugins/
│ ├── core/ # Default plugins (committed to repo)
│ └── extras/ # Your custom plugins (git-ignored)
├── config/
│ ├── options.lua
│ ├── keymaps.lua
│ ├── autocmds.lua
│ ├── disabled.lua # Disable plugins (git-ignored)
│ ├── extras/ # Custom config files (git-ignored)
│ │ ├── keymaps.lua # Your custom keymaps
│ │ ├── autocmds.lua # Your custom autocmds
│ │ └── options.lua # Your custom options
│ └── ...
└── utils/
└── loader.lua # Plugin & config loader
The following are only needed if you're actively developing in these languages:
- Node.js - For running JavaScript/TypeScript projects
- Python 3 - For running Python projects
- Go - For running/building Go projects
- Rust - For running/building Rust projects
- Zig - For running/building Zig projects
brew install node python3 go rust zigsudo apt install nodejs python3 golang rustc
# Install Zig manually from https://ziglang.org/download/sudo pacman -S nodejs python go rust zigLSP servers are automatically managed by Mason. Install via :Mason in Neovim:
| Language | LSP Server | Mason Install Command |
|---|---|---|
| Lua | lua_ls |
:MasonInstall lua-language-server |
| Python | basedpyright |
:MasonInstall basedpyright |
| JavaScript/TypeScript | ts_ls |
:MasonInstall typescript-language-server |
| Rust | rust_analyzer |
:MasonInstall rust-analyzer |
| C/C++ | clangd |
:MasonInstall clangd |
| Zig | zls |
:MasonInstall zls |
| Bash/Shell | bashls |
:MasonInstall bash-language-server |
| TOML | taplo |
:MasonInstall taplo |
:MasonInstall lua-language-server basedpyright typescript-language-server rust-analyzer clangd zls bash-language-server taplo# Python debugging support (not available in Mason)
pip install debugpy
# Lua linting support (luacheck requires luarocks)
# macOS
brew install luarocks
# Ubuntu/Debian
sudo apt-get install luarocks
# CentOS/RHEL
sudo yum install luarocksDebugging is powered by nvim-dap. Install debug adapters via Mason:
| Language | Debug Adapter | Mason Install Command | External Dependencies |
|---|---|---|---|
| Python | debugpy |
:MasonInstall debugpy |
pip install debugpy |
| JavaScript | js-debug-adapter |
:MasonInstall js-debug-adapter |
Node.js runtime |
| TypeScript | js-debug-adapter |
:MasonInstall js-debug-adapter |
Node.js runtime |
| Go | delve |
:MasonInstall delve |
Go runtime |
| Rust | codelldb |
:MasonInstall codelldb |
- |
| C | codelldb |
:MasonInstall codelldb |
- |
| C++ | codelldb |
:MasonInstall codelldb |
- |
| Zig | codelldb |
:MasonInstall codelldb |
- |
| Bash/Shell | bash-debug-adapter |
:MasonInstall bash-debug-adapter |
- |
:MasonInstall debugpy js-debug-adapter delve codelldb bash-debug-adapterLinting is handled by nvim-lint. Install linters via Mason:
| Language/File Type | Linter | Mason Install Command |
|---|---|---|
| Python | ruff |
:MasonInstall ruff |
| JavaScript/TypeScript | eslint |
:MasonInstall eslint_d |
| Lua | luacheck |
:MasonInstall luacheck |
| JSON | jsonlint |
:MasonInstall jsonlint |
| YAML | yamllint |
:MasonInstall yamllint |
| Markdown | markdownlint |
:MasonInstall markdownlint-cli2 |
| Shell | shellcheck |
:MasonInstall shellcheck |
| Dockerfile | hadolint |
:MasonInstall hadolint |
:MasonInstall ruff eslint_d luacheck jsonlint yamllint markdownlint-cli2 shellcheck hadolintFormatting is handled by conform.nvim. Install formatters via Mason:
| Language/File Type | Formatter | Mason Install Command |
|---|---|---|
| Python | ruff |
:MasonInstall ruff |
| Lua | stylua |
:MasonInstall stylua |
| JavaScript/TypeScript | prettier |
:MasonInstall prettier |
| JSON | prettier |
:MasonInstall prettier |
| YAML | prettier |
:MasonInstall prettier |
| Markdown | prettier |
:MasonInstall prettier |
| CSS | prettier |
:MasonInstall prettier |
| HTML | prettier |
:MasonInstall prettier |
| C/C++ | clang-format |
:MasonInstall clang-format |
| Shell | shfmt |
:MasonInstall shfmt |
| TOML | taplo |
:MasonInstall taplo |
| SQL | sqlfluff |
:MasonInstall sqlfluff |
| Rust | Built-in via rust_analyzer |
- |
| Zig | Built-in zig fmt |
- |
:MasonInstall ruff stylua prettier clang-format shfmt taplo sqlfluffHere's what powers NyakoNvim:
| Plugin | Purpose | Why It's Awesome |
|---|---|---|
| lazy.nvim | Plugin manager | Lightning-fast lazy loading, zero config needed |
| blink.cmp | Completion | Fastest completion engine, no delays |
| fzf-lua | Fuzzy finder | Find anything instantly - files, text, commands |
| nvim-lspconfig | LSP client | Full IDE features - autocomplete, go-to-def, refactor |
| conform.nvim | Formatter | Auto-format on save, multiple formatters per file |
| nvim-lint | Linter | Real-time error detection across 10+ languages |
| nvim-dap | Debugger | Full debugging with breakpoints, watches, stepping |
| nvim-treesitter | Parser | Smart syntax highlighting, code navigation, text objects |
| gitsigns.nvim | Git integration | See changes inline, stage hunks, blame, diff |
| flash.nvim | Motion | Jump anywhere with 2 keystrokes |
| fyler.nvim | File explorer | Tree-based file manager for editing filesystem like a buffer |
| catppuccin | Theme | Beautiful, carefully crafted color scheme |
| which-key | Keybind helper | Never forget a keybinding again |
| toggleterm | Terminal | Integrated terminals - floating, split, tabbed |
NyakoNvim includes a flexible colorscheme system:
- 6 pre-configured themes: catppuccin, tokyonight, gruvbox, rose-pine, kanagawa, onedark
- Live preview picker: Press
<leader>cpto browse and preview themes with fzf-lua - Persistent selections: Theme changes are automatically saved and restored on next startup
- Smart lazy-loading: Only the active theme loads at startup for optimal performance
Complete reference matrix for all configured languages and their tooling:
| Language | LSP Server | Linter | Formatter | Debugger | Mason Install Commands |
|---|---|---|---|---|---|
| Python | basedpyright |
ruff |
ruff |
debugpy |
basedpyright, ruff, debugpy |
| JavaScript | ts_ls |
eslint |
prettier |
js-debug-adapter |
typescript-language-server, eslint_d, prettier, js-debug-adapter |
| TypeScript | ts_ls |
eslint |
prettier |
js-debug-adapter |
typescript-language-server, eslint_d, prettier, js-debug-adapter |
| Lua | lua_ls |
luacheck |
stylua |
❌ | lua-language-server, luacheck, stylua |
| Rust | rust_analyzer |
via LSP (clippy) | via LSP | codelldb |
rust-analyzer, codelldb |
| C | clangd |
via LSP | clang-format |
codelldb |
clangd, clang-format, codelldb |
| C++ | clangd |
via LSP | clang-format |
codelldb |
clangd, clang-format, codelldb |
| Zig | zls |
via LSP | zig fmt |
codelldb |
zls, codelldb |
| Bash/Shell | bashls |
shellcheck |
shfmt |
bash-debug-adapter |
bash-language-server, shellcheck, shfmt, bash-debug-adapter |
| JSON | ❌ | jsonlint |
prettier |
❌ | jsonlint, prettier |
| YAML | ❌ | yamllint |
prettier |
❌ | yamllint, prettier |
| TOML | taplo |
❌ | taplo |
❌ | taplo |
| HTML | ❌ | ❌ | prettier |
❌ | prettier |
| CSS | ❌ | ❌ | prettier |
❌ | prettier |
| Markdown | ❌ | markdownlint |
prettier |
❌ | markdownlint-cli2, prettier |
| Dockerfile | ❌ | hadolint |
❌ | ❌ | hadolint |
| SQL | ❌ | ❌ | sqlfluff |
❌ | sqlfluff |
" LSP Servers
:MasonInstall lua-language-server basedpyright typescript-language-server rust-analyzer clangd zls bash-language-server taplo
" Debug Adapters
:MasonInstall debugpy js-debug-adapter delve codelldb bash-debug-adapter
" Linters
:MasonInstall ruff eslint_d luacheck jsonlint yamllint markdownlint-cli2 shellcheck hadolint
" Formatters
:MasonInstall stylua prettier clang-format shfmt sqlfluff- TreeSitter Parsers: Automatically installed via
ensure_installedlist andauto_install = true - Rust: Uses built-in
rust fmtandclippyviarust_analyzerLSP - Zig: Uses built-in
zig fmtfor formatting - C/C++: Linting handled by
clangdLSP with clang-tidy integration - Python:
ruffhandles both linting and formatting for optimal performance - JavaScript/TypeScript: Uses same tooling (ESLint, Prettier, ts_ls)
- Open the dashboard: Launch
nvimwithout arguments to see the welcome screen - Check keybindings: Press
<Space>(leader key) and wait - which-key will show you all options - Find files:
<Space>ffto fuzzy find files,<Space>frto live grep - Explore config:
<Space>ecto browse the configuration
- Leader key:
<Space>- Most commands start here - File navigation:
<Space>ff(find files),-(file explorer) - Buffer management:
<Tab>(next buffer),<Shift-Tab>(previous buffer) - LSP actions:
gd(go to definition),grr(find references),gra(code actions) - Git:
<Space>gprefix for all git operations - Fuzzy find:
<Space>fprefix for all search operations - Colorscheme picker:
<Space>cpto browse and apply themes with live preview
📖 Full keymap reference: See KEYMAPS.md for the complete cheatsheet
- Session restore:
<Space>qsrestores your last session with all buffers and splits - Format on save: Enabled by default for all configured languages
- Insert mode LSP: Press
<C-g>in insert mode for LSP actions without leaving insert - Flash navigation: Press
sin normal mode, type 2 chars, jump anywhere instantly - Buffer pinning: Pin important buffers with
<Space>bito prevent accidental closing
NyakoNvim is a personal configuration, but suggestions and improvements are welcome! Found a bug or have an idea?
- Report issues: GitHub Issues
- Suggest features: Open a discussion or PR
- Share your setup: Fork and customize to your heart's content!
Apache 2.0 License
If NyakoNvim makes your coding life easier, consider:
- ⭐ Starring the repo
- 🐱 Sharing with fellow developers
- 💬 Spreading the word about NyakoNvim
Made with 💜 and 🐱 by developers, for developers
Happy coding! 🚀