A starter template for LazyVim. Refer to the documentation to get started.
Warning
This overwrites ~/.config/nvim. If you have an existing Neovim config, back it up first:
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bak
mv ~/.cache/nvim ~/.cache/nvim.bakgit clone https://github.com/itsgitz/nvim ~/.config/nvimThen install the prerequisites below before first launch — otherwise plugin/LSP installation will fail partway through with missing-tool errors. Once those are in place, just start Neovim and let it bootstrap:
nvimlazy.nvim installs itself and syncs all plugins on that first run; Mason then installs
each language's LSP server the first time you open a file of that type.
Mason (LazyVim's package manager) will auto-install most LSP servers, but it downloads and runs prebuilt binaries — it does not provide the underlying language runtimes or compilers. Missing tools show up as cryptic LSP/Mason errors on a fresh machine, so install these first.
On Debian/Ubuntu, scripts/install-prereqs.sh automates the
apt-installable pieces (build tools, ripgrep, fd, PHP, Composer, Zig) and reports the status
of the rest (Node.js, Go, Rust, Python, lazygit — install these with whatever version
manager you prefer). It's safe to re-run:
./scripts/install-prereqs.shOn any other OS, follow the manual table below.
| Tool | Why |
|---|---|
| Neovim >= 0.11 | This config uses vim.lsp.config() (lua/config/options.lua), added in 0.11. |
git |
Plugin manager (lazy.nvim) and Mason both shell out to git. |
| A Nerd Font | Icons in the statusline, file explorer, completion menu, etc. Set it as your terminal font. |
ripgrep (rg) |
Live grep / search in Telescope. |
fd (fd-find on Debian/Ubuntu) |
Fast file finding in Telescope. |
A C compiler (gcc or clang) + make |
Builds telescope-fzf-native and any Mason package compiled from source. |
unzip, tar, curl (or wget) |
Used by Mason to download and extract packages. |
Node.js + npm |
Runtime for several Mason-installed LSP servers (see below) and other npm-based tools. |
lazygit (optional) |
Powers the <leader>gg git UI keymap from LazyVim core. |
Only the languages actually configured under lua/plugins/ are listed —
each maps to a real LSP/formatter entry, so skipping one for a language you don't use is fine.
| Language | Config | LSP / formatter | Needs installed manually |
|---|---|---|---|
| C / C++ | c.lua |
clangd (auto-installed by Mason) |
A C/C++ toolchain (gcc/clang) on your PATH so clangd can resolve system headers and compile_commands.json builds work. |
| TypeScript / JavaScript | vtsls.lua |
vtsls (auto-installed by Mason) |
Node.js + npm (see Core). |
| Prisma | prisma.lua |
prismals (auto-installed by Mason) |
Node.js + npm (see Core). |
| Zig | zig.lua |
zls (auto-installed by Mason) |
The Zig toolchain on your PATH so zls can resolve the standard library. |
| PHP / Laravel | php.lua, lang-extras.lua |
intelephense (auto-installed by Mason, via lazyvim.plugins.extras.lang.php) + formatting: Pint → falls back to php-cs-fixer |
PHP CLI + Composer. On Debian/Ubuntu, prefer the ondrej/php PPA over the distro repo — it packages multiple PHP versions side by side (php8.1, php8.3, ...) switchable via update-alternatives, which the stock repo can't do (scripts/install-prereqs.sh uses it). Pint comes from the project's vendor/bin/pint (run composer require laravel/pint --dev); if it's absent, install php-cs-fixer globally (e.g. composer global require friendsofphp/php-cs-fixer) as the fallback. intelephense itself needs Node.js to run. |
| Smarty | smarty.lua |
Syntax/indent only (smarty.vim) |
Nothing extra — pure Vimscript plugin, no external binary. |
| HTML/CSS (Emmet) | emmet.lua |
emmet-vim |
Nothing extra — pure Vimscript plugin, no external binary. |
| Rust | lang-extras.lua |
rust-analyzer (auto-installed by Mason, via lazyvim.plugins.extras.lang.rust) |
The Rust toolchain (cargo, rustc) on your PATH — rust-analyzer needs it to build and analyze your project. |
| Python | lang-extras.lua |
pyright + ruff (auto-installed by Mason, via lazyvim.plugins.extras.lang.python) |
Python 3 on your PATH. A per-project virtualenv is picked up automatically if present. |
| Go | lang-extras.lua |
gopls (auto-installed by Mason, via lazyvim.plugins.extras.lang.go) |
The Go toolchain on your PATH — gopls shells out to it for builds/go.mod resolution. |
| Svelte | lang-extras.lua |
svelte-language-server (auto-installed by Mason, via lazyvim.plugins.extras.lang.svelte, which pulls in the TypeScript extra too) |
Node.js + npm (see Core). |
:checkhealthand:Masoninside Neovim are the fastest way to confirm what's actually missing after installing the above. You don't need to install any LSP server binary yourself — Mason installs/updates them automatically once the language is configured; you only need the underlying compiler/runtime listed in the table above.- Treesitter parsers (
lua/plugins/treesitter.lua) are downloaded as precompiled binaries (prefer_git = false), so they don't require a C compiler.ensure_installedcoverslua, typescript, javascript, tsx, astro, json, yaml, php, go, html, python, blade, vue, css, c, cpp, bash, graphql, zig, rust, ron, prisma, svelte. - Clipboard on a remote/SSH box:
lua/config/options.luasetsvim.g.clipboardto use OSC 52 instead ofxclip/xsel(which need a local X/Wayland display this box doesn't have). Yanks tunnel through the terminal's escape codes back to your local clipboard — this needs an OSC-52-capable terminal (kitty, WezTerm, iTerm2, Windows Terminal, tmux withset -g allow-passthrough on, ...). No package to install.