Skip to main content
This Neovim configuration uses lazy.nvim as its plugin manager, providing fast startup times, lazy loading capabilities, and a clean plugin architecture.

Plugin manager setup

The plugin manager is bootstrapped automatically on first launch. The configuration lives in lua/core/lazy.lua:
lua/core/lazy.lua
-- Bootstrap lazy.nvim package manager
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
  local lazyrepo = "https://github.com/folke/lazy.nvim.git"
  local out =
    vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
  if vim.v.shell_error ~= 0 then
    vim.api.nvim_echo({
      { "Failed to clone lazy.nvim:\n", "ErrorMsg" },
      { out, "WarningMsg" },
      { "\nPress any key to exit..." },
    }, true, {})
    vim.fn.getchar()
    os.exit(1)
  end
end
vim.opt.rtp:prepend(lazypath)
If lazy.nvim is not installed, it will be automatically cloned from GitHub on first startup.

Configuration structure

Plugins are organized into modular files and automatically imported:
lua/core/lazy.lua
require("lazy").setup({
  spec = {
    { import = "plugins" },
    { import = "plugins.languages" },
    { import = "plugins.lsp" },
  },
  -- ... other options
})

Core plugins

Main plugin configurations in lua/plugins/*.lua

Language-specific

Language support in lua/plugins/languages/*.lua

LSP plugins

LSP configurations in lua/plugins/lsp/*.lua

Lazy.nvim features

UI customization

lua/core/lazy.lua
ui = {
  border = "rounded",
  backdrop = 80,
  title_pos = "left",
}

Automatic updates

Plugins are automatically checked for updates every 10 hours:
lua/core/lazy.lua
checker = {
  enabled = true,
  notify = false,
  frequency = 360, -- check for updates every 10 hours
  check_pinned = true,
}

Performance optimization

Several built-in plugins are disabled to improve performance:
lua/core/lazy.lua
performance = {
  rtp = {
    disabled_plugins = {
      "gzip",
      "tarPlugin",
      "tohtml",
      "tutor",
      "zipPlugin",
    },
  },
}

Plugin categories

The configuration includes plugins for:

Completions

Blink.cmp for intelligent code completion

Git integration

Gitsigns, Neogit, and CodeDiff for version control

Snacks.nvim

Multi-purpose plugin for pickers, explorer, and utilities

Treesitter

Syntax highlighting and code understanding

UI enhancements

Statusline, tabline, and visual helpers

Editing tools

Autopairs, comments, and motion plugins

Productivity

TODO comments, timers, and clipboard management

Managing plugins

Common commands

:Lazy
Opens the lazy.nvim UI showing all installed plugins, their status, and available updates.
:Lazy sync
Installs missing plugins and updates existing ones.
:Lazy clean
Removes plugins that are no longer in the configuration.
:Lazy update <plugin-name>
Updates a single plugin by name.

Lock file

Plugin versions are tracked in lazy-lock.json for reproducible installations:
lazy-lock.json
{
  "blink.cmp": { "branch": "main", "commit": "4b18c32adef2898f95cdef6192cbd5796c1a332d" },
  "snacks.nvim": { "branch": "main", "commit": "9912042fc8bca2209105526ac7534e9a0c2071b2" },
  "nvim-treesitter": { "branch": "main", "commit": "cb2cb74f3c3cbbcc17e79cada2060165d616d849" }
}
The lock file ensures all collaborators use the same plugin versions. Commit this file to version control.

Development mode

For local plugin development:
lua/core/lazy.lua
dev = {
  path = "~/myCodes",
}
Plugins in ~/myCodes are automatically detected and used in development mode.

Next steps

Completion setup

Configure Blink.cmp for intelligent completions

Git workflow

Learn the Git integration features

Build docs developers (and LLMs) love