A starter template for LazyVim.
Neovim configuration based on LazyVim with catppuccin, blink.cmp, Snacks picker, and language extras for TypeScript (biome), Python (pyrefly), Rust, Go, and more.
- Backup existing config (optional but recommended):
mv ~/.config/nvim ~/.config/nvim.bak- Clone this repository:
git clone https://github.com/azwpayne/nvim.git ~/.config/nvim- Start Neovim: The first launch will automatically install plugins and set up the configuration.
After pulling config or changing lazyvim.json extras:
:Lazy sync— install/update plugins and refreshlazy-lock.json.:Lazy clean— remove plugins no longer in the spec (safe after sync; confirms before delete).- Restart Neovim (or
:Lazy reloadwhere appropriate) so new extras load.
Optional headless sync (non-interactive install/update only; still run :Lazy clean in a UI session if orphans remain):
nvim --headless "+Lazy! sync" +qa- Octo /
gh: rungh auth login(and ensureghis onPATH) before:Octo …. - Sidekick (CLI-only): extra
ai.sidekickwithnes.enabled = false(no Copilot LSP / no:LspCopilotSignIn). Install and log into CLI tools you use (claude / codex / cursor / opencode); then<leader>aatoggle,<leader>asselect/attach.
- lazy.nvim — plugin manager
- LazyVim — batteries-included Neovim distribution
- catppuccin — colorscheme
- blink.cmp — completion (LazyVim default)
- Snacks picker — fuzzy finder (LazyVim default; replaces Telescope)
- Treesitter — syntax highlighting
- mason.nvim — LSP/tool installer (core ensures stylua/shfmt; util.dot adds shellcheck)
- which-key — keybinding popup helper
- lualine — status line
typescript (+ biome), json, python (pyrefly), rust, go, cmake, docker, yaml, markdown, toml (taplo)
- dap.core / dap.nlua — debugging
- test.core — neotest
- util.dot — dotfiles / shell (bashls, shellcheck)
- util.octo — GitHub issues/PRs in Neovim (pulls in
lang.git) - ai.sidekick — AI CLI bridge only (
nes.enabled = falseinlua/plugins/sidekick.lua); no Copilot / noai.copilot/ noai.copilot-native - coding.yanky — better yank/paste ring
- coding.mini-surround — surround text objects
- editor.inc-rename — incremental LSP rename UI
- editor.refactoring — extract/inline refactorings (
<leader>r…; needs Neovim ≥ 0.12) - ui.treesitter-context — sticky Treesitter context (current scope at top of window)
- editor.harpoon2 — mark/jump file list (enable if you live in a small hot-file set)
- editor.overseer — task runner UI (enable if you drive builds/tests from Neovim often)
- lang.tailwind — Tailwind LSP/class tools (enable only for heavy Tailwind projects)
After :Lazy sync, smoke-test:
| Extra / area | Quick check |
|---|---|
| dap.core / dap.nlua | Open Lua/Python/Go; :DapToggleBreakpoint, step once |
| test.core | In a test file, neotest run nearest (default LazyVim test keys) |
| util.dot | Open a shell script; bashls / shellcheck diagnostics appear |
| coding.yanky | Yank twice, cycle paste ring |
| coding.mini-surround | Surround a word (gs / LazyVim surround keys) |
| editor.inc-rename | LSP rename shows incremental UI |
| editor.refactoring | <leader>rs opens refactor select (Neovim ≥ 0.12) |
| ui.treesitter-context | Nested function/class: sticky context line at window top |
| lang.toml | Open Cargo.toml / pyproject.toml; taplo attached |
| util.octo | :Octo works after gh auth login |
| ai.sidekick | <leader>aa toggles CLI; <leader>as selects claude/codex/cursor/opencode; no Copilot sign-in |
| Keymap | Description |
|---|---|
jk |
Exit insert mode |
LazyVim defaults (buffer, file, search, UI, etc.) are unchanged.
scrolloff = 8colorcolumn = "120"showmatch = truemodeline = false(security)vim.g.lazyvim_python_lsp = "pyrefly"- Tabs/indent default to LazyVim (2 spaces)
- Plugins: add specs under
lua/plugins/(seecolorscheme.lua,mason.lua) - Options:
lua/config/options.lua - Keymaps:
lua/config/keymaps.lua - Autocmds:
lua/config/autocmds.lua
Apache-2.0 - See the LICENSE file for details.