Files
branderson 237a56fb6c Fix basedpyright install failure on Debian
Debian ships venv's ensurepip in a separate python3-venv package. Without
it, `python3 -m venv` exits 1, so mason cannot build the venv it installs
basedpyright into, and mason-lspconfig reports a failed install on every
startup.

Add python3-venv to the apt package list, and guard the basedpyright entry
in ensure_installed the same way the npm-sourced servers are already
guarded, so a machine missing it gets one warning instead of a failed
install every time.
2026-08-17 14:36:39 -07:00
..
2026-07-02 13:51:49 -07:00
2026-07-10 16:21:34 -07:00

nvim config map

Lua config managed by lazy.nvim. Leader is ,, local leader is \.

Layout

  • init.lua — bootstraps lazy.nvim, loads config/ then plugins/
  • lua/config/options.lua — vim.opt settings
  • lua/config/keymaps.lua — keymaps not tied to a specific plugin
  • lua/config/autocmds.lua — autocommands
  • lua/plugins/*.lua — one lazy.nvim spec file per topic (each file returns a plugin spec table; lazy.nvim loads every file in the directory automatically)
  • ftplugin/*.lua — filetype-specific settings (Python, vimwiki)
  • lua/util.lua — small helper functions (ranger(), delete_trailing_ws()) used from keymaps

Plugins

Navigation & editing (plugins/editor.lua)

  • neo-tree.nvim — file explorer sidebar
    • <leader>t — toggle
    • <leader>cd — cd to current file's directory and open
  • telescope.nvim — fuzzy finder for files/buffers/grep/LSP symbols
    • <leader>. — jump to symbol
    • <leader>; — jump to buffer
    • <leader>be — jump to buffer, sorted by most recently used
    • <leader>ag — live grep
    • <leader>? — fuzzy-search all keybindings
  • flash.nvim — jump to any visible location via search-like labels
    • <leader>/ — jump
    • <leader>s — search jump
    • <leader><leader>s — treesitter jump
    • <leader>f — forward jump
  • nvim-surround — add/change/delete surrounding pairs (quotes, tags, brackets)
    • ys, cs, ds — plugin defaults
  • nvim-autopairs — auto-close brackets/quotes, automatic
  • nvim-treesitter-context — sticky header showing enclosing function/class while scrolling, automatic
  • mini.align — align text on a character
    • ga=, ga:
  • mini.bufremove — close a buffer without closing its window/split
    • <leader><leader>c
  • vim-visual-multi — multiple cursors
    • <C-n> — add cursor on word
  • vim-tmux-navigator — move between nvim splits and tmux panes; also works from inside :terminal buffers (e.g. the Claude Code terminal)
    • <C-h/j/k/l> — move left/down/up/right
  • emmet-vim — Emmet expansion, HTML/CSS files only

UI (plugins/ui.lua)

Completion & LSP

  • blink.cmp — completion engine (LSP, path, buffer sources) — plugins/completion.lua
  • mason.nvim / mason-lspconfig.nvim — installs/manages LSP servers — plugins/lsp.lua
  • nvim-lspconfig — LSP client config for ts_ls, svelte, html, cssls, basedpyright, ruff, bashls — plugins/lsp.lua
  • rustaceanvim — Rust LSP setup (rust_analyzer), replaces the standard lspconfig flow for Rust — plugins/rust.lua
    • <localleader>rr — cargo run

LSP buffer keymaps (set on LspAttach, see plugins/lsp.lua):

  • K — hover
  • gd — definition
  • gy — type definition
  • gi — implementation
  • gr — references
  • rn — rename
  • ff (visual) — format selection

Debugging (plugins/dap.lua)

  • nvim-dap — Debug Adapter Protocol client
    • <leader>db — toggle breakpoint
    • <leader>dc — continue / start debugging
    • <leader>di / <leader>do / <leader>dO — step into / over / out
    • <leader>dr — toggle REPL
    • <leader>dq — terminate session
  • nvim-dap-python — configures nvim-dap for Python using debugpy. Requires :MasonInstall debugpy; without it, debugging is skipped with a warning.

Formatting & linting (plugins/format.lua)

  • conform.nvim — format-on-save (prettier, ruff_format, rustfmt, stylua per filetype)
  • nvim-lint — async linting on save/insert-leave (eslint_d, shellcheck)

Treesitter (plugins/treesitter.lua)

nvim-treesitter — syntax highlighting, folding, and indentation for the installed parser list. Uses core Neovim's built-in vim.treesitter.start()/foldexpr rather than the old treesitter modules.

Git (plugins/git.lua)

  • gitsigns.nvim — git change signs in the gutter, hunk stage/preview/blame
  • vim-fugitive — Git commands
    • :Git, :Gdiffsplit, :Gvdiffsplit, :Gread, :Gwrite, :Gclog

AI (plugins/ai.lua)

  • snacks.nvim — utility library (terminal provider etc.), dependency for claudecode.nvim
  • claudecode.nvim — Claude Code terminal integration. Diffs render as a single unified (VS Code-style, red/green interleaved) buffer in one new split next to your active pane, and keyboard focus stays in the Claude terminal instead of jumping to the diff.
    • <leader>ac — toggle
    • <leader>af — focus
    • <leader>ab — add current buffer
    • <leader>as (visual) — send selection
    • <leader>aa / <leader>ad — accept/deny diff

Wiki / notes (plugins/vimwiki.lua)

  • vimwiki — personal wiki across 4 notebooks (bradwiki, work, private, shared under ~/synced-notebooks/)
    • <leader>m... — wiki keymaps (vim.g.vimwiki_map_prefix)
  • vim-zettel — Zettelkasten-style note linking on top of vimwiki
  • vim-table-mode — markdown/wiki table formatting
    • :TableModeToggle, or <leader><leader>t... prefix
  • markdown-preview.nvim — live browser preview for markdown/vimwiki
    • <localleader>v — toggle preview

Misc (plugins/misc.lua)

  • aerial.nvim — code outline/symbol sidebar
    • <leader>ct — toggle
  • undotree — visual undo history tree
    • <leader>u — toggle
  • persistence.nvim — session save/restore per project
    • restore from the dashboard's s button
  • which-key.nvim — shows available keybindings as you type a prefix (e.g. pause after <leader>), automatic

Dashboard

The start screen (shown on launch, reopen with <leader><leader>o) is alpha-nvim, configured in plugins/ui.lua. It shows a random fortune | cowthink header plus buttons:

  • e — new file
  • f — find file (Telescope)
  • g — live grep (Telescope)
  • s — restore last session (persistence.nvim)
  • q — quit

Buffer navigation

<leader>be fuzzy-searches open buffers via Telescope, sorted by most recently used, excluding the current buffer. <leader>; does the same but in default Telescope order. Both are fuzzy-filterable as you type.