Case study

Neovim Configuration

My Lua configuration for Neovim, with project navigation, Git tools, language servers, and formatting integrated into a Ghostty and tmux workflow.

Neovim editing Rust code in a tmux session

Purpose

This is my daily editor configuration for writing code and Markdown in a terminal. It is set up around Ghostty and tmux, with shared pane navigation and shortcuts for finding files, moving between a few active buffers, and reviewing Git changes.

Configuration structure

init.lua loads editor options, autocommands, keymaps, and lazy.nvim. Files under lua/config/ define editor-wide behavior; files under lua/plugins/ group plugins by workflow, including language tooling, Git, navigation, and Markdown.

Language servers attach when a file opens. Other plugins load on commands, keybindings, or editor events. Completion is loaded at startup. The repository also records the terminal assumptions in docs/terminal.md.

Editing workflow

The main tools and how they fit together.

Language tools

Mason installs language servers, nvim-lspconfig configures them, and blink.cmp combines LSP, path, snippet, and buffer completion. Treesitter provides syntax parsing and highlighting.

Conform handles filetype-specific formatting with an LSP fallback. Format-on-save is enabled except for C and C++.

Review and notes

Gitsigns shows changes beside the code; Fugitive provides Git commands inside the editor. Trouble collects diagnostics and Undotree exposes edit history.

render-markdown.nvim displays Markdown structure in the buffer, and todo-comments highlights TODO and FIXME notes.