A personal Neovim setup built on top of LazyVim. It is tuned for a keyboard-first workflow across Python, systems languages, writing, debugging, Git, and AI-assisted editing.
- LazyVim foundation with a small, modular plugin layout in
lua/plugins/. - Python workflow with
ty,ruff, LazyVim's Python extra, rounded LSP docs, andblink.cmpcompletion. - AI assistance through copilot.lua and claude-code.nvim.
- Debugging with nvim-dap, nvim-dap-ui, and completion inside the DAP REPL.
- Writing support for Markdown, LaTeX, and Typst, including GitHub-style Markdown preview, VimTeX, Skim integration, and Typst live preview.
- Navigation and project flow with Oil, Yazi, tmux pane navigation, Bufferline tabs, Diffview, and Git conflict helpers.
- Polished UI using transparent Tokyonight, Noice borders, Snacks dashboard customization, color previews, and Tailwind completion colors.
| Python editing and diagnostics | Lazy plugin manager |
|---|---|
![]() |
![]() |
- Neovim 0.11.2 or newer.
- Git and a working C/C++ toolchain for plugins that compile native code.
- Optional but recommended:
ripgrepandfdfor fast search.yazifor the floating file manager integration.tmuxfor seamless pane navigation.ruffandtyfor the Python setup.latexmk, XeLaTeX, and Skim on macOS for VimTeX.typstfor Typst preview workflows.- GitHub Copilot authentication if you want inline AI suggestions.
Back up any existing Neovim config first:
mv ~/.config/nvim ~/.config/nvim_backupClone this repository:
git clone https://github.com/gemelom/nvim-config ~/.config/nvimStart Neovim and let Lazy install the plugins:
nvimThen run health checks if something does not load as expected:
:checkhealth
:LazyThese are the custom bindings added by this repo on top of LazyVim defaults.
| Key | Action |
|---|---|
<Tab> / <S-Tab> |
Cycle Bufferline tabs |
<C-h> / <C-j> / <C-k> / <C-l> |
Move between Neovim and tmux panes |
<leader>- |
Open Yazi at the current file |
<leader>cw |
Open Yazi in the current working directory |
<C-Up> |
Resume the last Yazi session |
<leader>ac |
Toggle Claude Code |
<M-Enter> |
Accept Copilot inline suggestion |
<M-]> / <M-[> |
Cycle Copilot suggestions |
<leader>do / <leader>dO |
DAP step over / step out |
<leader>mp |
Toggle GitHub Markdown preview |
<leader>mps |
Toggle single-file Markdown preview |
<leader>mpd |
Toggle Markdown details tags |
<leader>tp |
Start Typst preview |
<leader>im |
Toggle English/Chinese input method through im-select.exe |
.
├── init.lua
├── lazyvim.json
├── lua
│ ├── config
│ │ ├── autocmds.lua
│ │ ├── keymaps.lua
│ │ ├── lazy.lua
│ │ └── options.lua
│ └── plugins
│ ├── ai.lua
│ ├── dap.lua
│ ├── editor.lua
│ ├── git.lua
│ ├── lsp.lua
│ ├── markdown.lua
│ ├── typst.lua
│ ├── ui.lua
│ └── ...
└── assets
└── screenshots
Use Lazy's built-in UI:
:LazyOr sync from the command line:
nvim --headless "+Lazy! sync" +qaPlugin versions are pinned in lazy-lock.json.
pyrightis intentionally disabled inlua/plugins/lsp.lua; the active Python LSP path istyplusruff.vimtexis configured for Skim and XeLaTeX.- The input-method toggle expects
im-select.exe, which is useful for WSL/Windows-style environments.
MIT. See LICENSE.md.


