โโโโ โโโโโโโโโโโ โโโโโโโ โโโโโโโโโโโโโโโ
โโโโโ โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โโโโโโ โโโโโโโโโ โโโ โโโ โโโโโโ โโโ โโโ
โโโโโโโโโโโโโโโโ โโโ โโโ โโโโโโ โโโ โโโ
โโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโ โโโโโโโโโโโโโ โโโโโโโ โโโโโโโโโโโโโโโโโโ
A modern, LazyVim-based Neovim configuration optimized for web development, AI-assisted coding, and multi-language support.
- LazyVim Foundation: Built on LazyVim for a solid, well-maintained base
- AI Integration: Claude Code, Codeium, and Supermaven support
- Multi-Language: Go, Python, TypeScript, PHP/Laravel, Rust, and more
- Hybrid Formatting: Biome-first with Prettier fallback
- Custom Theme: Eldritch colorscheme with custom lualine statusline
- Modern UI: Snacks.nvim for explorer, picker, dashboard, and terminal
- Quick Start
- Architecture
- Plugin Categories
- Keybindings Reference
- Language Support
- Configuration Guide
- Workflows
- Neovim >= 0.10.0
- Git
- A Nerd Font (for icons)
- Node.js (for LSP servers)
- Ripgrep (for search)
This configuration is part of a dotfiles repository managed with GNU Stow:
# Clone the dotfiles repository
git clone https://github.com/yourusername/dotfiles ~/.dotfiles
# Stow the nvim package
cd ~/.dotfiles
make stow pkg=nvim
# Or manually
stow -v nvim- Open Neovim:
nvim - Lazy.nvim will automatically install all plugins
- Run
:Masonto install LSP servers and formatters - Run
:LazyExtrasto enable additional language packs
lua/
โโโ config/ # Core configuration
โ โโโ lazy.lua # Plugin manager bootstrap
โ โโโ options.lua # Vim options
โ โโโ keymaps.lua # Custom keybindings
โ โโโ autocmds.lua # Autocommands
โ โโโ filetypes.lua # Custom filetype associations
โ
โโโ plugins/ # Plugin configurations
โโโ disabled.lua # Disabled plugins (neo-tree)
โ
โโโ ai/ # AI assistants
โ โโโ claudecode.lua
โ โโโ opencode.lua
โ โโโ windsurf.lua
โ
โโโ coding/ # Code editing
โ โโโ emmet.lua
โ โโโ surround.lua
โ
โโโ editor/ # Editor enhancements
โ โโโ git.lua
โ โโโ ghostty.lua
โ โโโ multicursor.lua
โ
โโโ formatting/ # Code formatters
โ โโโ prettier.lua
โ
โโโ linting/ # Linters
โ โโโ biome.lua
โ
โโโ languages/ # Language-specific configs
โ โโโ go.lua
โ โโโ python.lua
โ โโโ typescript.lua
โ โโโ php.lua
โ โโโ laravel.lua
โ โโโ astro.lua
โ โโโ docker.lua
โ โโโ jinja.lua
โ โโโ mdx.lua
โ โโโ tailwind.lua
โ โโโ intelephense.lua
โ
โโโ ui/ # UI customization
โ โโโ colorscheme.lua
โ โโโ eldritch.lua
โ โโโ lualine.lua
โ โโโ treesitter-context.lua
โ โโโ lualine/
โ โโโ neoed.lua # Theme adapter
โ โโโ eldritch.lua # Eldritch theme
โ โโโ rose-pine.lua # Rose Pine theme
โ
โโโ utils/ # Utilities
โโโ snacks.lua
init.lua- Entry point, loadsconfig.lazyconfig/lazy.lua- Bootstraps lazy.nvim, loads filetypes- LazyVim base plugins load
- Custom plugin specs load (in directory import order)
config/options.lua- Vim optionsconfig/keymaps.lua- Keybindings (VeryLazy)config/autocmds.lua- Autocommands (VeryLazy)
| Plugin | Description | Key Binding |
|---|---|---|
| claudecode.nvim | Claude Code integration | <C-A-S-c> |
| codeium | AI code completion | (via LazyExtras) |
Claude Code Configuration (lua/plugins/ai/claudecode.lua):
- Floating window (80% width/height)
- Rounded border
--dangerously-skip-permissionsmode enabled
| Plugin | Description | Key Bindings |
|---|---|---|
| multicursor.nvim | Multiple cursors | <C-S-l>, <C-A-down/up> |
| gitsigns.nvim | Git integration | Current line blame enabled |
| flash.nvim | Motion plugin | <leader>jj |
Formatter Priority (from lua/plugins/formatting/prettier.lua):
- Biome (primary for JS/TS/JSON/CSS)
- Prettier (fallback for Biome-supported, primary for HTML/MD)
- yamlfmt (YAML files)
| Component | Plugin | Configuration |
|---|---|---|
| Colorscheme | eldritch.nvim | Dark theme with dim inactive |
| Statusline | lualine.nvim | Custom NEO.ED theme |
| File Explorer | snacks.explorer | Right sidebar, hidden files |
| Picker | snacks.picker | Default layout |
| Dashboard | snacks.dashboard | Custom NEO.ED header |
| Terminal | snacks.terminal | Borderless float |
See CHEATSHEET.md for the complete keybindings reference.
From lazyvim.json:
AI:
ai.claudecode- Claude Code integrationai.codeium- AI completion
Coding:
coding.mini-surround- Surround text objectsdap.core- Debug adapter protocol
Editor:
editor.harpoon2- Quick file navigationeditor.mini-files- File browsereditor.snacks_explorer- Snacks file explorereditor.snacks_picker- Snacks picker
Formatting:
formatting.biome- Biome formatter/linter
Languages:
lang.angular- Angularlang.astro- Astrolang.docker- Docker/Composelang.elixir- Elixirlang.go- Golang.helm- Helm chartslang.json- JSONlang.markdown- Markdownlang.php- PHPlang.python- Pythonlang.rust- Rustlang.svelte- Sveltelang.tailwind- Tailwind CSSlang.terraform- Terraformlang.toml- TOMLlang.typescript- TypeScriptlang.vue- Vuelang.yaml- YAML
Utilities:
util.dot- Dotfile supportutil.mini-hipatterns- Pattern highlighting
LSP: gopls with enhanced settings
- gofumpt formatting
- Inlay hints (parameters, types, values)
- Static analysis (nilness, unused params/writes)
- Semantic tokens
Testing: neotest-golang
LSP: Pyright + Ruff
- Pyright for type checking
- Ruff for linting (replaces ESLint behavior)
DAP: debugpy integration
Virtual Environments: venv-selector.nvim
LSP: vtsls (not tsserver)
- Complete function calls
- Auto-update imports on file move
- Inlay hints
- Move to file refactoring
DAP: js-debug-adapter
Custom Icons: eslintrc, package.json, tsconfig, etc.
LSP: Intelephense
- Blade template support
- Large file support (5MB)
Tools: PHPStan, Pint, blade-formatter
DAP: php-debug-adapter
Plugin: adalessa/laravel.nvim
- Artisan commands
- Route navigation
- Make generators
- View finder
-- UI
opt.cursorline = true -- Highlight current line
opt.cursorcolumn = true -- Highlight current column
opt.scrolloff = 999 -- Keep cursor centered
opt.wrap = true -- Wrap long lines
-- Files
opt.swapfile = false -- No swap files
opt.backup = false -- No backup files
opt.undofile = true -- Persistent undo
-- Timing
o.timeoutlen = 250 -- Key sequence timeout
-- Platform
g.codeium_arch = "arm64"
g.codeium_os = "Darwin"| Extension/Pattern | Filetype |
|---|---|
.njk |
htmldjango |
.webc |
htmldjango |
.conf |
sh |
*.blade.php |
blade |
*.svg |
html |
- YAML Frontmatter: Enables YAML syntax in template files
- Help Windows: Opens help in vertical split
- Auto Resize: Equalizes splits on window resize
- No Auto Comment: Disables automatic comment continuation
- Dotenv Syntax: Highlights
.envfiles asdosini
Colorscheme: Eldritch (lua/plugins/ui/eldritch.lua)
- Transparent: false
- Dim inactive: true
- Dark sidebars and floats
- Custom background:
#171928
Statusline: Custom lualine theme (lua/plugins/ui/lualine/neoed.lua)
- Centered filename
- Mode indicator (left and right)
- Project directory
- Git branch and diff
- Diagnostics
- Macro recording indicator
- Start Neovim - Dashboard shows recent files, dotfiles shortcuts
- Open Project - Use
<leader>fffor file picker - Navigate Files - Use Snacks explorer (right sidebar)
- Edit with Multi-Cursor -
<C-n>for next match - Format on Save - Biome/Prettier automatically formats
- Open Lazygit:
<leader>gg - View inline blame (automatic via gitsigns)
- Stage changes in Lazygit
- Commit with conventional messages
- Set breakpoints
- Start debug session with language-specific commands
- Use DAP UI for inspection
- Toggle Claude Code:
<C-A-S-c> - Floating window appears (80% size)
- Ask questions or request code changes
- Claude Code can read/modify files directly
- Open Laravel picker:
<leader>LL - Run Artisan commands:
<leader>La - Navigate routes:
<leader>Lr - Generate code:
<leader>Lm
:Lazy " Open plugin manager
:Lazy sync " Sync plugins
:Lazy health " Check plugin health:LspInfo " Check LSP status
:LspLog " View LSP logs
:Mason " Manage LSP servers:LazyProfile " Profile startup time:source % " Reload current file
" Or restart NeovimPart of the dotfiles repository. See main repository for license information.
Generated documentation for NOE.ED Neovim configuration