████ ████
██░░██ ██░░██
██░░████████████████████░░██
████████████████████████████████
████ ████████████████ ████
██░░░░░░████████████████░░░░░░██
██░░░░░░░░░░░░ ░░░░░░░░░░░░██
░░░░░░░░░░░░░░░░░░░░░░░░░░░░
████░░░░░░░░░░░░░░░░████
██████░░░░░░░░░░░░░░░░██████ ░░░░
████████░░░░░░░░░░░░████████ ██░░░░░░
████ ████████ ████ ██████
Clainev Neovim Config
A fast, modular Neovim setup for full-stack and systems development.
TypeScript · JavaScript · React · Go · Rust · Python · PHP/Laravel · Java/Spring · Bun/Elysia · C/C++ · Dart/Flutter · SQL
Infra/DevOps: Docker · docker-compose · Kubernetes/Helm · Nginx · GraphQL · gRPC/protobuf · Bash/PowerShell · YAML/TOML
IDE: LSP + autocompletado · Debugger (DAP) · Test runner (neotest) · REST client (.http) · Database UI · Git · Sesiones
- Neovim >= 0.10
- Git
- Nerd Font — any variant
cmake(for telescope-fzf-native on Windows)node+npm(for LSP servers and formatters)ripgrep+fd(Telescope live grep)unzip/tar(Mason los usa para descomprimir LSP y formateadores)- Opcionales por stack: JDK 21+ (
jdtlsJava LSP) ·cargo-nextest(tests de Rust con neotest) ·lazydocker(UI de Docker) · Xdebug (debug de PHP)
En los tres sistemas los pasos son los mismos:
- Instalar dependencias
- Respaldar la config existente
- Clonar este repo en la carpeta de config de Neovim
- Abrir
nvim— lazy.nvim y Mason hacen el resto
Elige tu sistema operativo.
1. Dependencias:
# Debian / Ubuntu
sudo apt install git nodejs npm ripgrep fd-find cmake unzip
# Fedora
sudo dnf install git nodejs npm ripgrep fd-find cmake unzip
# Arch
sudo pacman -S git nodejs npm ripgrep fd cmake unzipOjo con la versión de Neovim. Esta config necesita >= 0.10 y los repos de Debian/Ubuntu suelen traer una más vieja. Comprueba con
nvim --version; si se queda corta, usa el AppImage oficial:curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.appimage chmod +x nvim-linux-x86_64.appimage sudo mv nvim-linux-x86_64.appimage /usr/local/bin/nvim
En Debian/Ubuntu el binario de fd se llama fdfind; enlázalo para que Telescope lo encuentre:
mkdir -p ~/.local/bin && ln -s "$(which fdfind)" ~/.local/bin/fd2. Instala una Nerd Font (p. ej. JetBrainsMono Nerd Font) y actívala en tu terminal. Sin esto los iconos se ven como cuadros.
3. Clonar y arrancar:
# Respaldar config existente (si la hay)
[ -d ~/.config/nvim ] && mv ~/.config/nvim ~/.config/nvim.bak
git clone https://github.com/dalsori/27nvim.git ~/.config/nvim
nvim1. Dependencias (con Homebrew):
brew install neovim git node ripgrep fd cmake
brew install --cask font-jetbrains-mono-nerd-fontActiva la fuente en tu terminal (Terminal.app, iTerm2, Ghostty, WezTerm…).
2. Clonar y arrancar:
# Respaldar config existente (si la hay)
[ -d ~/.config/nvim ] && mv ~/.config/nvim ~/.config/nvim.bak
git clone https://github.com/dalsori/27nvim.git ~/.config/nvim
nvimProbado en Windows 10/11 con PowerShell. No hace falta WSL.
1. Instala Scoop (si no lo tienes):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression2. Dependencias:
# Buckets
scoop bucket add extras
scoop bucket add nerd-fonts
# Core
scoop install git neovim nodejs cmake
# Nerd Font (elige una)
scoop install nerd-fonts/JetBrainsMono-NF
# Opcionales pero recomendados
scoop install lazygit ripgrep fdActiva la Nerd Font en tu terminal: Windows Terminal → Settings → tu perfil → Appearance → Font face.
3. Clonar y arrancar:
# Respaldar config existente (si la hay)
if (Test-Path $env:LOCALAPPDATA\nvim) {
Move-Item $env:LOCALAPPDATA\nvim $env:LOCALAPPDATA\nvim.bak
}
git clone https://github.com/dalsori/27nvim.git $env:LOCALAPPDATA\nvim
nvimNota:
telescope-fzf-nativenecesitacmakeen Windows. La config detecta el SO automáticamente y usa el comando de build correcto.
La primera vez que abras nvim verás cómo se instala todo: lazy.nvim se
autoinstala, descarga los plugins y después Mason baja los LSP y formateadores.
Tarda un par de minutos y es normal ver algún error transitorio mientras faltan
piezas — reinicia Neovim al terminar.
Luego:
:Copilot auth " login de la IA (avante usa GitHub Copilot por defecto)
:checkhealth " verifica dependencias externas (node, rg, fd, cmake…)
:Lazy " estado de los plugins
:Mason " estado de LSP / formateadoresLa IA no necesita API keys: usa la cuenta de GitHub Copilot. Ver AI Setup.
Cuando se publica una versión nueva de la config (temas, plugins, keymaps, la
mascota del dashboard…), actualizar es un git pull en la carpeta de config más
un sync de plugins.
Linux / macOS:
cd ~/.config/nvim
git pull
nvim --headless "+Lazy! sync" +qa # instala / actualiza / limpia plugins según lazy-lock.jsonWindows (PowerShell):
cd $env:LOCALAPPDATA\nvim
git pull
nvim --headless "+Lazy! sync" +qaDespués abre nvim normal. Si el cambio tocó LSP o formateadores, ejecuta
:Mason y revisa que no falte nada; :checkhealth sigue siendo la comprobación
rápida de siempre.
Pasa cuando editaste archivos de la config a mano. Guarda tus cambios aparte y vuelve a la versión limpia:
git stash # aparta tus cambios locales
git pull
git stash pop # reaplícalos (resuelve conflictos si los hay)Si no te importa perderlos: git reset --hard origin/main — borra cualquier
modificación local sin recuperación.
lazy-lock.json fija la versión exacta de cada plugin y viaja en el repo, así
que tras un git pull + :Lazy sync tienes exactamente el mismo set que quien
publicó la versión. Si quieres subir plugins a lo último por tu cuenta usa
:Lazy update — eso reescribe tu lazy-lock.json y puede entrar en conflicto en
el siguiente git pull.
~/.config/nvim/
├── init.lua # Entry point
└── lua/clainev/
├── options.lua # vim.opt settings
├── lazy.lua # Plugin manager bootstrap
├── keymaps.lua # Global keymaps
├── autocmds.lua # Autocommands
└── plugins/
├── ui.lua # Theme, statusline, explorer, dashboard
├── editor.lua # Telescope, Treesitter, editing utilities
├── lsp.lua # LSP servers, Mason, diagnostics, formatter
├── completion.lua # nvim-cmp, LuaSnip, SQL/cmdline completion
├── dap.lua # Debugger (nvim-dap + UI + adapters)
├── test.lua # Test runner (neotest + adapters)
├── git.lua # Gitsigns, LazyGit, Trouble
├── tools.lua # Terminal, REST client, sessions, linters
├── ai.lua # Avante (proveedor gratuito)
└── flutter.lua # Flutter tools
| Category | Plugin |
|---|---|
| Theme | catppuccin — Mocha |
| Statusline | lualine.nvim |
| Tabline | bufferline.nvim |
| Explorer | neo-tree.nvim |
| Fuzzy finder | telescope.nvim |
| Syntax | nvim-treesitter |
| LSP | nvim-lspconfig + mason.nvim |
| Completion | nvim-cmp + LuaSnip |
| Formatter | conform.nvim |
| Debugger | nvim-dap + nvim-dap-ui |
| Tests | neotest — pytest · Jest · Vitest · go test · cargo nextest · Pest |
| REST client | kulala.nvim — archivos .http |
| Database | vim-dadbod + UI + completion |
| JSON/YAML schemas | schemastore.nvim — K8s, compose, GitHub Actions |
| Extra linters | nvim-lint — hadolint |
| Sessions | persistence.nvim |
| Git | gitsigns.nvim + lazygit.nvim |
| Diagnostics | trouble.nvim |
| Terminal | toggleterm.nvim + lazydocker |
| AI | avante.nvim (proveedor gratuito por defecto) |
| Flutter | flutter-tools.nvim |
<leader> = Space
| Key | Action |
|---|---|
<C-s> |
Save |
<C-q> |
Quit |
jk |
Exit insert mode |
<C-a> |
Select all |
zz |
Quit without saving |
zw |
Save and quit |
| Key | Action |
|---|---|
<C-h/j/k/l> |
Move between windows |
<Tab> / <S-Tab> |
Next / prev buffer |
H / L |
Prev / next tab |
<leader>x |
Close buffer |
| Key | Action |
|---|---|
<leader>ff |
Find files |
<leader>fw |
Live grep |
<leader>fb |
Find buffers |
<leader>fo |
Recent files |
<leader>fh |
Help tags |
| Key | Action |
|---|---|
gd |
Go to definition |
gr |
References |
K |
Hover docs |
<leader>ca |
Code action |
<leader>rn |
Rename symbol |
<leader>lf |
Format file |
[d / ]d |
Prev / next diagnostic |
| Key | Action |
|---|---|
<leader>gg |
LazyGit |
<leader>gp |
Preview hunk |
<leader>gb |
Blame line |
<leader>gs |
Stage hunk |
<leader>gd |
Diff this |
| Key | Action |
|---|---|
<leader>e |
Toggle explorer |
<leader>th/tv/tf |
Terminal horizontal / vertical / float |
<leader>td |
LazyDocker (float) |
<leader>xx |
Trouble diagnostics |
<leader>u |
Undo tree |
<leader>Du |
Database UI (dadbod) |
<leader>Da |
Add DB connection |
<leader>sr / <leader>sl |
Restore session (cwd / last) |
| Key | Action |
|---|---|
<F5> |
Continue / Start |
<F10> / <F11> / <F12> |
Step over / into / out |
<leader>db |
Toggle breakpoint |
<leader>dB |
Conditional breakpoint |
<leader>du |
Toggle debug UI |
<leader>de |
Eval under cursor |
<leader>dt |
Terminate |
| Key | Action |
|---|---|
<leader>nn |
Run nearest test |
<leader>nf |
Run file tests |
<leader>nd |
Debug nearest test |
<leader>ns |
Toggle summary |
<leader>no |
Show output |
<leader>nw |
Watch file |
| Key | Action |
|---|---|
<leader>Rs |
Send request |
<leader>Ra |
Send all |
<leader>Rr |
Replay last |
<leader>Rc |
Copy as cURL |
| Key | Action |
|---|---|
<leader>aa |
Ask AI |
<leader>ac |
AI Chat |
<leader>ae |
AI Edit |
| Key | Action |
|---|---|
<leader>Fr |
Flutter run |
<leader>FR |
Hot reload |
<leader>Fd |
Devices |
<leader>FL |
Logs |
Installed automatically via Mason:
ts_ls · eslint · html · cssls · tailwindcss · emmet_ls · jsonls · intelephense · pyright · ruff · gopls · rust_analyzer · jdtls · lemminx · clangd · dartls · lua_ls · sqls · graphql · buf_ls · marksman · yamlls · taplo · dockerls · docker_compose_language_service · helm_ls · bashls · powershell_es
jdtls(Java) requiere JDK 21+ en el PATH. Nginx tiene highlighting vía treesitter (su LSP requiere Python <3.14).
Installed via Mason. Format on save enabled.
prettier · black · ruff (imports) · gofumpt · goimports · rustfmt · google-java-format · clang-format · stylua · php-cs-fixer · sqlfmt · shfmt · buf · dart_format
Installed via Mason:
debugpy (Python) · delve (Go) · codelldb (Rust/C/C++) · js-debug-adapter (Node/TS) · php-debug-adapter (Xdebug, puerto 9003)
Avante usa GitHub Copilot por defecto: no hace falta ninguna API key, solo una cuenta de Copilot (gratis para estudiantes y proyectos open source). Dentro de Neovim:
:Copilot authSe abre el flujo de login por navegador. La config sincroniza el token de
copilot.lua al formato que lee avante, así que con eso queda listo en Linux,
macOS y Windows por igual.
Hay otros proveedores ya configurados en lua/clainev/plugins/ai.lua: claude,
openai, gemini y groq. Exporta la key correspondiente y cambia provider
ahí. Si Copilot no está autenticado, la config cae automáticamente a gemini
para que avante arranque igual.
| Provider | Variable de entorno |
|---|---|
claude |
ANTHROPIC_API_KEY |
openai |
OPENAI_API_KEY |
gemini |
GEMINI_API_KEY |
groq |
GROQ_API_KEY |
Linux / macOS — añade a .bashrc / .zshrc:
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..." # optionalWindows — añade al $PROFILE de PowerShell:
$env:ANTHROPIC_API_KEY = "sk-ant-..."
$env:OPENAI_API_KEY = "sk-..." # optionalO de forma permanente vía: Win + R → sysdm.cpl → Advanced → Environment Variables.
CI runs on every push against Neovim stable and nightly, so an upstream breaking change surfaces here before it breaks your editor.
# Cheap: does every Lua file parse? No plugins, no network.
nvim --headless -l tests/syntax.lua
# Real: install plugins, then assert the config boots clean.
nvim --headless "+Lazy! sync" +qa
nvim --headless -c "lua dofile('tests/health.lua')" -c 'qa!'tests/health.lua checks the things that break silently: that all four root
modules load, that mapleader is set before lazy.nvim (otherwise every plugin
keymap binds to the wrong key), that OS detection ran, and that fewer than half
the plugins load at startup — if that ratio slips, something lost its
event/ft guard and startup time is quietly degrading.