A lean Neovim setup that stays out of your way while giving you a modern IDE feel. It’s built on lazy.nvim and tuned for Go, Rust, Lua, YAML, Markdown, and general scripting. Thoughtful defaults, a clean UI, and a few bespoke modules (AI prompts, lightweight git signs, code screenshots, etc.) help you get into flow quickly.
Target: Neovim 0.9+ (great on 0.10). Primary platform: macOS (portable elsewhere).
- Fast startup with on‑demand plugin loading.
- Discoverable keymaps and a friendly UI.
- Strong language tooling without bloat (LSP, completion, debug, sessions).
- Local AI workflows (review, enhance, summarize) that work on selections.
- Sensible custom helpers: Go commands, quick terminal runner, code snapshotting.
- UI: Catppuccin, lualine, which‑key, dressing, noice (+nui, +notify), Symbols Outline.
- Navigation & search: Snacks pickers (files, grep, buffers, projects, undo). Oil for a buffer‑centric file explorer. A tiny
:Finddispatcher built on Telescope. - Editing & refactors: Treesitter, mini.surround, ssr.nvim (structural search/replace), spread.nvim.
- LSP & tools: mason.nvim, mason‑lspconfig, nvim‑lspconfig, SchemaStore, neoconf, lazydev, fidget, lspkind, sessions via persistence.nvim.
- Completion: blink.cmp + friendly‑snippets (Lua dev extras via lazydev). Copilot optional via copilot.lua.
- Debugging: nvim‑dap, dap‑ui, dap‑go, dap virtual‑text, nvim‑nio.
- Git: Neogit, vim‑fugitive, diffview, and a custom lightweight “git signs” module.
- AI (local): custom Ollama integration (Ollama) with streaming UI and selection‑aware transforms.
- Extras: typing practice with typr.
Custom modules included: welcome screen · comment toggler · freeze (code → image) · git signs · Go commands · terminal runner · virtcolumn.
mkdir -p ~/.config/nvim
cd ~/.config/nvim
git clone https://github.com/jakelogemann/nvim .
nvimFirst launch bootstraps lazy.nvim and installs plugins.
Recommended system packages: git, ripgrep, curl; language toolchains as needed (go, rustup, node, python3). Optional: ollama for AI and freeze for screenshots.
- Explore files: press
-(or<leader>e) to open Oil in the current directory. Open your config dir with<leader>,. - Search files/grep/buffers:
⟨leader⟩ff,⟨leader⟩/,⟨leader⟩,via Snacks. - Git workflows:
:Neogitfor a full UI; open/close diff view with⟨leader⟩gd/⟨leader⟩gq. - LSP: rename
⟨leader⟩lr, code actions⟨leader⟩la, hoverK, diagnostics float⟨leader⟩ld. - Debug:
⟨leader⟩d…for common actions (continue, step, toggle UI). Quick toggles also onF1–F5. - Comments: toggle with
⟨leader⟩c(line or visual selection). - Run current file:
⟨leader⟩xx(dispatches for Go/Rust/Python/Shell). - AI prompts:
:Ollamaor⟨leader⟩o{p|e|c|r|s}to prompt/enhance/change/review/summarize. - Plugin management:
⟨leader⟩VlLazy UI,⟨leader⟩Vssync,⟨leader⟩Vuupdate,⟨leader⟩Vpprofile,⟨leader⟩VmMason UI,⟨leader⟩Vieditinit.lua,⟨leader⟩VMopen mason.log. - Terminals:
⟨leader⟩Tttoggle a floating terminal (ToggleTerm),⟨leader⟩Tnopen a new terminal (Snacks). - Project config & sessions:
⟨leader⟩pcNeoconf UI. Sessions:⟨leader⟩Slload,⟨leader⟩SLload last,⟨leader⟩Ssselect,⟨leader⟩Sdstop saving.
Tip: press ⟨leader⟩ to discover groups via which‑key.
LSP servers are installed and configured through mason.nvim and mason‑lspconfig with nvim‑lspconfig. YAML schemas are pre‑mapped via SchemaStore. Inlay hints are enabled when the server supports them. :Format is available per buffer.
Completion is powered by blink.cmp with snippet support from friendly‑snippets. Lua development gains typed completions via lazydev. Copilot can be toggled with :Copilot enable|disable if desired.
Debugging is ready out of the box with nvim‑dap, UI via dap‑ui, Go helpers via dap‑go, and inline values from nvim‑dap‑virtual‑text (with simple secret‑redaction).
Use :Ollama to pick a prompt or the ⟨leader⟩o… shortcuts. Works on a visual selection or whole file. Streaming output appears in a floating window with accept (Ctrl‑Enter), retry (Ctrl‑R), and quit (q). For best results, run the Ollama daemon (ollama serve). The integration will try to start it if not running.
Install the freeze CLI to render pretty images of code:
:Freeze— snapshot the whole buffer or a visual range (:'<,'>Freeze).:FreezeLine— snapshot the current line.
File names are templated (timestamp, filename, start/end lines) and can auto‑open on macOS.
Sessions are lightweight and branch‑aware by default. The session options are tuned for reliability (saving window sizes/positions, folds, terminals, and the current working directory).
- Load session:
⟨leader⟩Sl - Load last session:
⟨leader⟩SL - Select session:
⟨leader⟩Ss - Stop saving in this workspace:
⟨leader⟩Sd
- Sessions are saved only when at least one file buffer is open (need = 1).
- Storage location:
:echo stdpath('state') .. '/sessions'. - Session saving is paused when you run
:PersistenceStop.
A tiny built‑in module draws + additions, ~ changes, and - deletions with smart placement. It’s fast, debounced, and safe on large files. Toggle with :GitSignsToggle or ⟨leader⟩zg.
Notable choices (see plugin/options.lua): modern command line (cmdheight=0), global statusline, conceal by default (toggle ⟨leader⟩zc), persistent undo, and sane splits. Nerd Font icons are expected.
Project structure at a glance:
init.lua — bootstrap lazy + core modules
lua/custom/plugins/ — plugin specs (UI, LSP, cmp, tools, etc.)
plugin/*.lua — runtime config and custom features (auto‑sourced)
lua/custom/*.lua — bespoke modules (comment, utils)
lua/freeze.lua — freeze CLI wrapper
spell/ — spelling & thesaurus
- Missing syntax or LSP? Open
:Masonand ensure tools are installed. - No AI responses? Verify
ollama serveand a model are available. - Git signs missing? Make sure you’re inside a git repo and the file is tracked.
- Startup slower than expected? Temporarily enable profiling (if the optional profiler is present).
- Sessions not saving? Ensure at least one file buffer is open. You can temporarily disable saving with
⟨leader⟩Sd.
Completion via blink.
Custom Lua in this repo is MIT unless noted. Each third‑party plugin remains under its own license.
Happy hacking! 🛠️

