lazyvimx
An enhancement layer on top of LazyVim: 51 optional extras and 39 plugin overrides.
The idea is simple: LazyVim stays untouched, and everything else — UI polish, navigation, git workflow, Russian keyboard support — is enabled piece by piece. Don't like an extra? Don't enable it, and it's like it doesn't exist.
📑 Table of Contents
- Features · Installation · Structure · Core Modules
- Documentation · Highlighted Extras · Keymaps · Configuration
- Integrations · Philosophy · Stats · Links
✨ Features
🎨 Interface
- Deep theme customization — Catppuccin, Tokyo Night, and Nord
- Automatic light/dark switching following the system theme (macOS)
- Consistent UI style — rounded borders, aligned window sizes, custom icons
- Enhanced dashboard with ASCII art and animation
- Symbol usage counters inline in code, JetBrains-style
- Single-line diagnostics at the cursor
🚀 Productivity
- Smart buffers — bufferline groups, auto-cleanup, per-tab isolation
- Syntax-tree navigation — moving and swapping nodes
- Subword motions —
w/e/bunderstand camelCase - Git workflow — GitLab MR review inside the editor, conflict resolution, browsing remote repositories
- JS/TS debugging via js-debug-adapter
⚙️ Quality of life
- Russian keyboard layout via langmapper — no switching to English
- Safe editing on sshfs mounts — in-place writes, no broken permissions or symlinks
- Auto-sync to chezmoi on plugin updates
- Per-project local configs (
.nvim.lua) - VSCode mode for a hybrid workflow
- Automatic Mason package updates
📦 Installation
Prerequisites
- Neovim >= 0.10.0
- Lua 5.1 or LuaJIT in
PATH(brew install luajit) — required bymotions.better-move-between-words: luarocks.nvim builds theluautf8rock for non-ASCII subword motions and fails without a system Lua
🚀 Choose Your Setup
New to lazyvimx? Ready-to-use configurations live in examples/:
- Minimal — overrides only, the fastest start
- Full-Featured — all 51 extras
- VSCode User — for the VSCode Neovim extension
- Russian Keyboard — with Russian layout support
Quick Start
💡 Real-world example: the author's configuration.
- Create
~/.config/nvim/init.lua:
local lazy_opts = {
spec = { { "lazyvimx/nvim", name = "lazyvimx", import = "lazyvimx.boot" } },
install = { colorscheme = { "catppuccin", "tokyonight" } },
checker = { enabled = true, notify = false },
change_detection = { enabled = false },
diff = { cmd = "diffview.nvim" },
ui = {
backdrop = 100,
border = "rounded",
icons = { keys = "" },
},
}
-- Bootstrap lazy.nvim
local lazy_path = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
local lazy_url = "https://github.com/folke/lazy.nvim.git"
if not vim.loop.fs_stat(lazy_path) then
vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazy_url, lazy_path })
end
vim.opt.rtp:prepend(lazy_path)
require("lazy").setup(lazy_opts)- Start Neovim:
nvimOn first launch lazyvimx installs LazyVim and all required plugins by itself.
- Configure lazyvimx (optional):
Option A — opts right in init.lua:
local lazy_opts = {
spec = {
{
"lazyvimx/nvim",
name = "lazyvimx",
import = "lazyvimx.boot",
opts = {
colorscheme = "catppuccin",
bufferline_groups = {
-- ["group name"] = "lua-pattern",
},
},
},
},
-- ... other settings
}Option B — a separate file ~/.config/nvim/lua/plugins/lazyvimx.lua:
return {
"lazyvimx/nvim",
name = "lazyvimx",
opts = {
colorscheme = "catppuccin",
bufferline_groups = {
-- ["group name"] = "lua-pattern",
},
},
}All options, including light/dark theme variants (colorscheme_households), are covered in Configuration.
- Enable extras:
Via the :LazyExtras UI (recommended) or imports in your config:
-- lua/plugins/extras.lua
return {
-- All plugin overrides
{ import = "lazyvimx.extras.core.overrides" },
-- Then whatever you need
{ import = "lazyvimx.extras.ui.better-diagnostic" },
{ import = "lazyvimx.extras.motions.langmapper" },
}🗂️ Project Structure
lazyvimx/
├── lua/lazyvimx/
│ ├── boot.lua # Bootstrap configuration
│ ├── init.lua # Main module with setup()
│ ├── extras/ # Optional modules (51 + 5 core)
│ │ ├── core/ # Bundles: all, overrides, extras, keys, colorschemes
│ │ ├── ui/ # Interface (22)
│ │ ├── motions/ # Navigation (6)
│ │ ├── buf/ # Buffers (4)
│ │ ├── git/ # Git (4)
│ │ ├── lang/ # Languages (4)
│ │ ├── perf/ # Performance (4)
│ │ ├── coding/ # Coding tools (2)
│ │ ├── linting/ # Linters (2)
│ │ ├── colorschemes/ # Colorschemes (1)
│ │ ├── dap/ # Debugging (1)
│ │ └── test/ # Testing (1)
│ ├── overrides/ # Plugin customizations (39)
│ │ ├── lazyvim/ # LazyVim (9)
│ │ ├── snacks/ # Snacks.nvim (9)
│ │ ├── bufferline/ # Bufferline (6)
│ │ └── other/ # Other plugins (15)
│ └── util/ # Utilities
│ ├── general.lua # General (colors, system theme, extras checks)
│ └── layout.lua # Sidebar and panel sizes
└── init.lua # Guard against using the repo directly🎯 Core Modules
Recommended Setup
Enable everything at once — core.all via :LazyExtras or an import:
{ import = "lazyvimx.extras.core.all" }Inside:
- overrides — all 39 plugin customizations
- extras — all feature extras
- colorschemes — additional colorschemes
- keys — custom keymaps
- plus a notification if recommended LazyVim extras are missing
Individually
{ import = "lazyvimx.extras.core.overrides" } -- Plugin overrides
{ import = "lazyvimx.extras.core.extras" } -- All extras
{ import = "lazyvimx.extras.core.keys" } -- Keymaps
{ import = "lazyvimx.extras.core.colorschemes" } -- Colorschemes📚 Documentation
- EXTRAS.md — reference for all 51 extras
- CONFIGURATION.md — configuration and options
- KEYBINDINGS.md — all keymaps
- ARCHITECTURE.md — how it all works
- API.md — utilities and functions
- FAQ.md — frequently asked questions
- TROUBLESHOOTING.md — problem solving
🎨 Highlighted Extras
Interface
ui.better-diagnostic— single-line diagnostics at the cursorui.better-float— consistent floating window styleui.symbol-usage— symbol usage countersui.better-explorer— the Yazi file managerui.winbar— file path above the window
Navigation
motions.langmapper— Russian layout without switchingmotions.better-move-between-words— subword motions (needs Lua 5.1/LuaJIT inPATH, see Prerequisites)motions.sibling-swap— swapping tree-sitter nodesmotions.splitting-joining-blocks— splitting/joining code blocks
Git
git.gitlab— GitLab MR review inside the editorgit.conflicts— visual conflict resolutiongit.remote-view— opening remote repositories locally
More
buf.remote-mounts— safe editing over sshfscoding.comments— context-aware commenting and JSDoc generationtest.jest— Jest in Neotest
⌨️ Keymaps
lazyvimx adds 60+ custom keymaps. The most used ones:
Every day:
<leader><space>— find files (smart)<leader>cr— LSP rename with live previewgr— references in a peek windowH/L— previous/next buffer<leader>fy— the Yazi file managerw/b/e— subword motions
Productivity:
d— delete without clobbering the register<C-S-j>/<C-S-k>— move lines<C-,>/<C-.>— swap parameters and array elements<leader>ct— split/join a code blockgx/gX— open a remote git repository
Git & GitLab:
<leader>gL*— the whole GitLab MR workflow (review, comments, approve, merge)go— open a file or selection in GitHub/GitLab
📖 Full list: Keybindings — with descriptions and the extra each keymap requires.
🔧 Configuration
Colorschemes
lazyvimx switches between light and dark theme variants following the system:
require("lazyvimx").setup({
colorscheme = "catppuccin",
})Variants are grouped into "households" (colorscheme_households): each theme gets a list of dark and a list of light variants. Catppuccin, Tokyo Night, and Nord are configured out of the box; a dark system picks a dark variant, a light one picks light. Details and format — in Configuration.
Buffer Groups
Custom bufferline groups:
require("lazyvimx").setup({
bufferline_groups = {
["React"] = "%.tsx$",
["Tests"] = "%.test%.",
},
})🤝 Integrations
Chezmoi
After a plugin update lazyvimx adds lazy-lock.json and lazyvim.json to chezmoi — as long as the chezmoi binary is installed.
VSCode
A mode for the VSCode Neovim extension:
- mode indicator synced to the status bar
- adjusted keymaps
- rename via native VSCode
macOS
- system theme detection for automatic colorscheme switching
- deleting files to the trash in neo-tree
🌟 Philosophy
- Don't break LazyVim — every enhancement is optional and enabled via extras
- One style — a shared theme and visual language across all plugins
- Smart defaults — works out of the box, configurable when desired
- Attention to detail — from window borders to cursor behavior
📊 Stats
- 51 optional extras across 11 categories
- 39 overrides for deep customization
- Hundreds of custom highlights for Catppuccin, Tokyo Night, and Nord
- 60+ custom keymaps
🔗 Links
📈 Activity
🤝 Contributing
Bugs and ideas go to issues. How the project works and how to write your own extra — in Contributing.
📄 License
Same license as LazyVim.
🙏 Credits
Built on top of the excellent LazyVim by folke.
Author: Aleksey Imuzov (@aimuzov)