A high-performance, modular Neovim configuration optimized for development workflow.
- Startup Time: ~38ms (excellent!)
- Plugin Count: ~30 carefully selected plugins
- Memory Usage: Optimized with lazy loading
- LSP Languages: 4+ pre-configured (Lua, Python, Go, TypeScript)
├── init.lua # Main entry point with error handling
├── lua/
│ ├── config/ # Core configuration
│ │ ├── init.lua # Config loader
│ │ ├── options.lua # Neovim settings (optimized)
│ │ ├── keymaps.lua # Key mappings (table-driven)
│ │ ├── autocmds.lua # Auto commands (organized)
│ │ └── health.lua # Configuration health checks
│ ├── lsp/ # LSP system (modular)
│ │ ├── loader.lua # Modern LSP loader
│ │ ├── configs/ # Language-specific configs
│ │ ├── notifications.lua # Notification control
│ │ └── ...
│ └── plugins/ # Plugin specifications
├── selene.toml # Lua linting configuration
└── startup.log # Performance profiling
- vim.loader.enable() for faster module loading
- Lazy loading for all non-essential plugins
- Disabled unused providers (Perl, Ruby, Node, Python)
- Large file detection with automatic optimization
- Smart plugin loading based on events
- Automatic tool installation via Mason
- Custom linter configurations (e.g., selene with config file)
- Notification control system (quiet by default)
- Modern API usage (Neovim 0.11+ compatible)
- Error handling with graceful degradation
- OneDark theme with vivid variant
- Blink completion with Copilot integration
- Noice UI for better command/message experience
- Trouble diagnostics with floating preview
- Lualine with LSP status and file icons
:LspShowConfigs
- Show all loaded language configurations:LspShowTools
- Display available tools by type:LspInstallMissing
- Install missing tools automatically:LspShowCustomLinters
- View custom linter configurations:ConfigHealth
- Run configuration health check:ProfileStartup
- Profile startup performance
:Lazy
- Open plugin manager:Lazy sync
- Update all plugins:Lazy profile
- Profile plugin loading times
- Monitor startup: Use
:ProfileStartup
regularly - Lazy load plugins: Use
event
,cmd
, orkeys
triggers - Disable unused features: Check disabled providers in options.lua
- Large files: Auto-optimization kicks in for files >1MB
- LSP notifications: Disabled by default (use
:LspToggleAllNotifications
) - Treesitter: Disabled for large files automatically
- Plugin caching: Enabled in lazy.nvim configuration
- Health checks: Run
:ConfigHealth
periodically - Tool management: Use
:LspInstallMissing
for new projects - Custom linters: Add to
lua/lsp/configs/
withlint_config
- Create config:
:LspNewConfig <language>
- Edit template: Add LSP, formatters, linters
- Custom linter config (if needed):
lint_config = {
tool_name = {
cmd = "command",
args = { "--config", "path/to/config" },
stdin = false,
}
}
Plugins are in lua/plugins/
with lazy loading:
return {
"plugin/name",
event = "VeryLazy", -- or cmd, keys, ft
opts = { }, -- or config = function() end
}
Keymaps use table-driven approach in lua/config/keymaps.lua
:
{ "n", "<leader>x", ":command", "Description" }
- Configuration loading: Validates all modules load correctly
- Plugin status: Verifies essential plugins are functional
- External tools: Checks availability of rg, fd, git
- LSP configurations: Counts available language configs
- Startup performance: Tracks and reports timing
- Startup profiling: Automatic with vim-startuptime
- Plugin profiling: Built into lazy.nvim
- Large file detection: Auto-optimization for 1MB+ files
- Memory usage: Lazy loading minimizes footprint
- Run health check:
:ConfigHealth
- Profile startup:
:ProfileStartup
- Check tool availability:
:LspShowTools
- Install missing tools:
:LspInstallMissing
- Customize keymaps: Edit
lua/config/keymaps.lua
- Add languages: Use
:LspNewConfig <name>
- Slow startup: Run
:ProfileStartup
and check lazy loading - LSP not working: Use
:LspInfo
and:ConfigHealth
- Missing tools: Run
:LspInstallMissing
- Notifications: Toggle with
:LspToggleAllNotifications
Enable verbose logging for troubleshooting:
vim.lsp.set_log_level("debug") -- In any config file
Configuration Health: Run :ConfigHealth
to verify optimal setup!