Skip to content

Repository files navigation

lazyvimx

Tip

πŸ‡·πŸ‡Ί Русская вСрсия: README.ru.md

An enhancement layer on top of LazyVim: 49 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

🎨 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/b understand 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 by motions.better-move-between-words: luarocks.nvim builds the luautf8 rock for non-ASCII subword motions and fails without a system Lua

πŸš€ Choose Your Setup

New to lazyvimx? Ready-to-use configurations live in examples/:

Quick Start

πŸ’‘ Real-world example: the author's configuration.

  1. Create ~/.config/nvim/init.lua:
local lazy_opts = {
	spec = { { "aimuzov/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)
  1. Start Neovim:
nvim

On first launch lazyvimx installs LazyVim and all required plugins by itself.

  1. Configure lazyvimx (optional):

Option A β€” opts right in init.lua:

local lazy_opts = {
  spec = {
    {
      "aimuzov/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 {
  "aimuzov/lazyvimx",
  opts = {
    colorscheme = "catppuccin",
    bufferline_groups = {
      -- ["group name"] = "lua-pattern",
    },
  },
}

All options, including light/dark theme variants (colorscheme_households), are covered in Configuration.

  1. 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 (50 + 5 core)
β”‚   β”‚   β”œβ”€β”€ core/             # Bundles: all, overrides, extras, keys, colorschemes
β”‚   β”‚   β”œβ”€β”€ ui/               # Interface (21)
β”‚   β”‚   β”œβ”€β”€ 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

🎨 Highlighted Extras

Interface

  • ui.better-diagnostic β€” single-line diagnostics at the cursor
  • ui.better-float β€” consistent floating window style
  • ui.symbol-usage β€” symbol usage counters
  • ui.better-explorer β€” the Yazi file manager
  • ui.winbar β€” file path above the window

Navigation

  • motions.langmapper β€” Russian layout without switching
  • motions.better-move-between-words β€” subword motions (needs Lua 5.1/LuaJIT in PATH, see Prerequisites)
  • motions.sibling-swap β€” swapping tree-sitter nodes
  • motions.splitting-joining-blocks β€” splitting/joining code blocks

Git

  • git.gitlab β€” GitLab MR review inside the editor
  • git.conflicts β€” visual conflict resolution
  • git.remote-view β€” opening remote repositories locally

More

  • buf.remote-mounts β€” safe editing over sshfs
  • coding.comments β€” context-aware commenting and JSDoc generation
  • test.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 preview
  • gr β€” references in a peek window
  • H / L β€” previous/next buffer
  • <leader>fy β€” the Yazi file manager
  • w / 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 block
  • gx / 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

  1. Don't break LazyVim β€” every enhancement is optional and enabled via extras
  2. One style β€” a shared theme and visual language across all plugins
  3. Smart defaults β€” works out of the box, configurable when desired
  4. Attention to detail β€” from window borders to cursor behavior

πŸ“Š Stats

  • 50 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

Repo 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)

About

No description, website, or topics provided.

Resources

Contributing

Stars

12 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages