Skip to content
This repository was archived by the owner on Aug 28, 2026. It is now read-only.

Latest commit

 

History

69 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Neovim Configuration

Personal Neovim configuration with a focus on LaTeX/typesetting workflows, scientific computing (Julia, Python), and C++ development. Built on Neovim 0.12+ with vim.lsp.config and managed via lazy.nvim.

Tech Stack

Category Tools
Plugin Manager lazy.nvim
Language Lua
Completion nvim-cmp, cmp-nvim-lsp, cmp-buffer, cmp-path, cmp-cmdline, cmp-latex-symbols, cmp-vimtex, cmp_luasnip, cmp-nvim-lsp-signature-help
Snippets LuaSnip (with custom TeX snippets)
LSP texlab, basedpyright, clangd, julials, lua_ls, marksman, R (languageserver), ts_ls, html, cssls
Treesitter nvim-treesitter
Fuzzy Finder telescope.nvim, telescope-fzf-native.nvim, telescope-ui-select.nvim, telescope-bibtex.nvim
File Explorer neo-tree.nvim (nvim-web-devicons)
Git gitsigns.nvim, vim-fugitive
Statusline vim-airline (simple theme)
Colorscheme rose-pine
LaTeX vimtex, texlab, tectonic (compiler), zathura (viewer)
Debugging nvim-dap, nvim-dap-ui, nvim-dap-virtual-text, nvim-dap-julia, nvim-nio, cppdbg
AI/LLM opencode.nvim, copilot.lua (copilot-lsp), mcphub.nvim
Markdown render-markdown.nvim (mini.nvim)
Terminal betterTerm.nvim
Navigation harpoon (harpoon2), leap.nvim
Session persistence.nvim
Utilities snacks.nvim (bigfile, indent, input, picker, quickfile, scope, statuscolumn, words)
Misc nvim-autopairs, vim-surround, undotree, trouble.nvim, csvview.nvim, cppman.nvim, cyclist.vim, image.nvim, plenary.nvim, nui.nvim, vim-dadbod, nvim-lspconfig

Project Structure

~/.config/nvim/
├── init.lua                  # Entry point — loads lazy.nvim then config
├── lazy-lock.json            # Locked plugin versions
├── .gitignore
├── lua/
│   ├── config/
│   │   ├── init.lua          # Requires all sub-configs
│   │   ├── lazy.lua          # lazy.nvim bootstrap + plugin spec import
│   │   ├── lsp.lua           # nvim-cmp setup + LSP client configs
│   │   ├── remap.lua         # Global key mappings
│   │   ├── set.lua           # Editor options (numbers, tabs, undo, etc.)
│   │   └── plugins/
│   │       ├── colors.lua    # Colorscheme + transparent background
│   │       ├── luasnip.lua   # Snippet engine setup + loader
│   │       ├── harpoon.lua   # Harpoon keymaps
│   │       ├── telescope.lua # Telescope find/grep/buffer keymaps
│   │       ├── autopairs.lua # Disable in Telescope/vim
│   │       ├── gitsigns.lua  # Gitsigns signs + on_attach mappings
│   │       ├── vimtex.lua    # Vimtex syntax only; texlab handles builds
│   │       └── render-markdown.lua # Markdown rendering options
│   └── plugins/
│       ├── *.lua             # 32 individual plugin specs (auto-imported)
├── after/ftplugin/
│   ├── cpp.lua               # C++ compile-and-run mapping
│   ├── julia.lua             # Julia run mapping
│   ├── python.lua            # Python run mapping
│   ├── tex.lua               # TeX build/forward-search mappings
│   ├── markdown.lua          # Buffer-local wrap/spell settings
│   └── text.lua              # Buffer-local wrap/spell settings
└── LuaSnip/
    ├── all.lua               # Global snippet placeholder
    └── tex/
        ├── environments.lua  # LaTeX environment snippets
        ├── math.lua          # Math autosnippets (α, β, \frac, ...)
        ├── fonts.lua         # \texttt, \textit, \textbf
        └── delimeters.lua    # Delimiter snippets (stub)

Key Features

LaTeX & Typesetting

The configuration is heavily optimized for LaTeX work using the tectonic compiler and texlab language server. Forward/inverse search works with Zathura. Build is triggered via <leader>rc and forward search via <leader>rf. Custom LuaSnip snippets under LuaSnip/tex/ provide: math autosnippets (;a → \alpha, ;b → \beta, ff → \frac{}), font commands (ttt → \texttt, tit → \textit, tbf → \textbf), and environment snippets (itemize, enumerate, figure, table, etc.). Vimtex provides syntax highlighting and text objects but delegates compilation to texlab.

Language Server Protocol

Languages configured with vim.lsp.config (Neovim 0.12+):

Language Server Notes
LaTeX / Bib texlab tectonic compiler, zathura viewer
Python basedpyright Respects $VIRTUAL_ENV / $CONDA_PREFIX
C / C++ clangd --background-index, --clang-tidy
Julia julials Uses Revise + LanguageServer.jl
Lua lua_ls LuaJIT runtime
Markdown marksman Built from source
R languageserver
TypeScript/JS ts_ls
HTML vscode-html-language-server
CSS vscode-css-language-server

Completion

nvim-cmp configured with multiple sources and smart keybindings:

  • <C-n> / <C-p> navigate or confirm single-entry; jumps in LuaSnip if no menu
  • <CR> confirms; expands luasnip if expandable
  • <C-e> aborts completion
  • Separate sources for tex (nvim_lsp + vimtex + luasnip) and txt (buffer only)
  • Cmdline completion for /, ?, and :
  • Signature help via cmp-nvim-lsp-signature-help

Debugging

nvim-dap with cppdbg (Microsoft C++ tools) and Julia debugger supports. DAP UI opens automatically on attach/launch and closes on termination. Keymaps: <Leader>dt toggle breakpoint, <Leader>dc continue, <F5> step over, <F6> step into, <F4> step out. Staged cppdbg configurations for direct launch and gdbserver attachment.

Terminal Management

Integrated terminals via betterTerm.nvim. Access up to 5 terminals with <C-0> through <C-4>, select a terminal with <leader>tt, rename with <leader>tr, and toggle tab bar with <leader>tb.

Editor Enhancements (snacks.nvim)

snacks.nvim provides lightweight quality-of-life features:

  • bigfile: performance tweaks for large files
  • indent: indent guides
  • input: enhanced vim.ui.input dialogs
  • picker: fuzzy picker integration
  • quickfile: quick file open
  • scope: cursor-aware scope detection
  • statuscolumn: enhanced status column with fold/breakpoint indicators
  • words: word highlighting

Git Integration

gitsigns.nvim with Unicode sign columns (┃, _, ‾, ┆) and a full suite of hunk operations (<leader>hs stage, <leader>hr reset, <leader>hp preview, <leader>hb blame, <leader>hd diff). Navigation with ]c / [c. vim-fugitive provides the :Git command.

Session Persistence

persistence.nvim saves and restores sessions automatically. On startup with a file argument, the last session is loaded.

File Navigation

  • Harpoon (harpoon2): mark files with <leader>a, quick menu with <C-e>, jump to slots 1-6 via <leader>1–<leader>6.
  • Telescope: <leader>ff find files, <leader>fg live grep, <leader>fb buffers, <leader>fh help, <leader>fs grep string, <leader>fa aerial outline.
  • Neo-tree: toggle file explorer with <leader>pv.
  • Leap: motion-based navigation via s.

AI Assistance

  • opencode.nvim: <leader>oa opens a full tab for AI interaction, <leader>os selects context, go / goo appends ranges or lines, <C-,> / <C-.> scrolls output. Built on opencode CLI agent framework.
  • copilot.lua + copilot-lsp: GitHub Copilot completions and LSP.
  • mcphub.nvim: MCP server hub integration.

Getting Started

Prerequisites

  • Neovim 0.12+ (uses vim.lsp.config API)
  • A Nerd Font (for icons)
  • Optional: tectonic, zathura, clangd, basedpyright-langserver, lua-language-server, marksman, julia, R, typescript-language-server

Installation

git clone [email protected]:jplaroco/nvim-config.git ~/.config/nvim
nvim --headless "+Lazy! sync" +qa

On first launch, lazy.nvim bootstraps itself automatically. LSP servers, treesitter parsers, and debug adapters may need manual installation per your system's package manager.

Note: Paths in lua/config/lsp.lua reference system-specific locations (e.g. ~/anaconda3/bin/basedpyright-langserver, ~/Apps/marksman-linux-x64). Adjust these to match your environment. C++ debugging requires the Microsoft cpptools extension downloaded to ~/ms-vscode.cpptools-<version>/.

Key Mappings Reference

General

Mode Key Action
n <C-d> Page down, center cursor
n <C-u> Page up, center cursor
n <PageDown> / <PageUp> Page down/up, center cursor
n <C-h> Previous tab
n <C-l> Next tab
n gtf Open file under cursor in new tab (<C-w>gf)
n n / N Next/prev search result, center
n j / k Smart gj/gk (wrap-aware)
n gl Go to end of line (g$)
n gh Go to start of line (g^)
n <A-h/j/k/l> Window navigation
n <C-arrows> Window resize
n <C-f> Open tmux sessionizer
n <C-LeftMouse> Smart open file path or URL under cursor

LSP

Mode Key Action
n gD Go to declaration
n gd Go to definition
n <leader>F Format buffer (LSP)
n <leader>Fp Format Python with Black

Telescope

Mode Key Action
n <leader>ff Find files
n <leader>fg Live grep
n <leader>fb Buffers
n <leader>fh Help tags
n <leader>fs Grep string (prompt)
n <leader>fa Aerial outline

Git (Gitsigns)

Mode Key Action
n ]c / [c Next/prev hunk
n <leader>hs Stage hunk
n <leader>hr Reset hunk
v <leader>hs Stage hunk (visual)
v <leader>hr Reset hunk (visual)
n <leader>hp Preview hunk
n <leader>hi Preview hunk inline
n <leader>hb Blame line
n <leader>hd Diff this
n <leader>hD Diff against index
n <leader>hS Stage buffer
n <leader>hR Reset buffer
n <leader>hQ Set quickfix list (all)
n <leader>hq Set quickfix list (buffer)
n <leader>tb Toggle blame
n <leader>tw Toggle word diff
o, x ih Select hunk (text object)

Harpoon

Mode Key Action
n <leader>a Add file to list
n <C-e> Toggle quick menu
n <leader>1–6 Go to slot 1–6
n <A-p> / <A-n> Prev / next

Quickfix / Location

Mode Key Action
n <C-k> / <C-j> Next/prev quickfix
n <leader>k / <leader>j Next/prev location
n <leader>xL Location list (Trouble)
n <leader>xQ Quickfix list (Trouble)

Snippets (LuaSnip)

Mode Key Action
i <C-k> Expand or jump forward
i, s <C-j> Jump backward
i, s <C-E> Cycle choice

Filetype-Specific

Filetype Key Action
cpp <leader>rc Compile + run with clang++
julia <leader>rc Run with julia --project %
python <leader>rc Run with python %
tex <leader>rc Build with tectonic (via texlab)
tex <leader>rf Forward search (zathura)
tex { / } Paragraph motion, center cursor

Other

Mode Key Action
n <leader>tc Toggle system clipboard
n <leader>tt Select terminal
n <leader>tr Rename terminal
n <leader>tb Toggle terminal tab bar
n <C-0>–<C-4> Toggle terminal 0–4
n <leader>u Toggle undotree
n <leader>pv Toggle neo-tree
n <leader>bn Next buffer
n <leader>xx Diagnostics (Trouble)
n <leader>xX Buffer diagnostics (Trouble)
n <leader>cs Document symbols (Trouble)
n <leader>cl LSP references (Trouble)
n <leader>dt Toggle DAP breakpoint
n <leader>dc DAP continue
n <F5> DAP step over
n <F6> DAP step into
n <F4> DAP step out
n <leader>cm Open C++ man page for word
n <leader>cc Search C++ man page
n <leader>oa Open OpenCode in new tab
n, x <leader>os Select OpenCode context
n, x go Append range to OpenCode
n goo Append line to OpenCode
n, t <C-,> / <C-.> Scroll OpenCode up/down

Plugins

All plugins are declared as individual Lua files under lua/plugins/ and auto-imported by lazy.nvim. Plugin-specific configuration lives in lua/config/plugins/. The full locked set is recorded in lazy-lock.json.

Editor Settings

  • Relative line numbers with absolute number on current line
  • 4-space tabs, expandtab, smart indentation
  • No line wrapping by default (enabled per-filetype for TeX, markdown, text)
  • Undo history persisted to ~/.vim/undodir
  • hlsearch disabled, incsearch enabled
  • cursorline, signcolumn=yes:2, scrolloff=8
  • 50ms updatetime for faster plugin responsiveness
  • Transparent background via rose-pine colorscheme

About

My Neovim config - compatible with Termux-Android

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages