- CMake-first C++ workflow — configure, build, run, and test through native CMake Presets
- Full IDE stack — clangd LSP, DAP debugging, and Neotest
- In-editor reference search — cppreference, StackOverflow, GitHub, and AI search one keypress away
- Remote-ready — persistent tmux + Neovim sessions over SSH (master guide)
- Reproducible — locked plugins, stylua CI, and a prebuilt Docker image
brew install neovim git cmake ninja fzf fd ripgrep lazygit
git clone https://github.com/e-gleba/nvim-config.git ~/.config/nvim
nvimsudo apt update && sudo apt install -y neovim git cmake ninja-build fzf fd-find ripgrep
# lazygit: https://github.com/jesseduffield/lazygit#ubuntu
git clone https://github.com/e-gleba/nvim-config.git ~/.config/nvim
nvim# tools
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
scoop install neovim git cmake ninja llvm fzf fd ripgrep lazygit
# env (run once)
[Environment]::SetEnvironmentVariable("LLDB_USE_NATIVE_PDB_READER", "1", "User")
git config --global core.autocrlf false
git config --global core.eol lf
# config
git clone https://github.com/e-gleba/nvim-config.git $env:LOCALAPPDATA\nvim
nvimWarning
Do not install Neovim nightly on macOS — it causes file-reload freezes. See LazyVim #1581.
docker run -it --rm \
-v $(pwd):/workspace \
-v ~/.config/nvim:/root/.config/nvim \
ghcr.io/e-gleba/nvim-config/nvim-ci:latestnvim --headless -V1 -c 'checkhealth' -c 'qa' # verify
nvim --headless "+Lazy! sync" +qa # force syncclangd needs compile_commands.json at project root:
ln -s build/compile_commands.json compile_commands.jsonOr in CMakeLists.txt:
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)This config uses cmake-tools.nvim with native CMake Presets support.
Press <leader> and follow the which-key groups. Starting points:
| Keys | What |
|---|---|
<leader>oa / <leader>os |
Ask OpenCode about cursor context / open action picker |
go + motion |
Send range to OpenCode (dot-repeatable) |
<leader>ckp → <leader>ckg → <leader>ckb |
Pick preset → generate → build |
<leader>ckd |
Debug active target via codelldb |
<leader>bj |
Pick buffer by letter hint |
s |
Flash jump (Vimium-style labels) |
<leader>sR |
Search cppreference for word under cursor |
Mini-loop for CMake: preset, generate, build, debug — all under
<leader>ck. Full maps live in code; which-key is the reference.
Keymaps are declared in lua/config/keymaps.lua and individual plugin specs. Discover them in-editor via which-key — press <leader> and follow the groups. The code is the source of truth; this file intentionally does not duplicate it.
Stock LazyVim conventions: init.lua bootstraps, lua/config/ holds options/keymaps/autocmds, lua/plugins/ holds one spec per plugin. The repository tree is the source of truth.
| Workflow | Trigger | Result |
|---|---|---|
| Lint | Push / PR on lua/**, init.lua, lockfiles |
Pulls ghcr.io/.../nvim-ci:latest and runs stylua --check. Falls back to local build if image is absent. |
| Publish Docker | Manual dispatch, or push to main with Dockerfile changes |
Builds and pushes ghcr.io/.../nvim-ci:latest. |
| Release | Manual dispatch with version tag | Creates GitHub Release with auto-generated notes, then builds and pushes a tagged Docker image (v1.2.3). |
shaken at golden hour 🍸