Skip to main content

Overview

This is a fully-featured Neovim configuration designed for modern software development. Built on Neovim 0.11+ with native LSP support, it provides a complete IDE-like experience while maintaining the speed and efficiency of Vim.

Modern LSP integration

Native LSP support with intelligent code completion, diagnostics, and formatting

Treesitter powered

Syntax highlighting, text objects, and code navigation with treesitter

Git workflow

Comprehensive git integration with Gitsigns, Neogit, and CodeDiff

Smart completion

Fast, intelligent completion with blink.cmp and ghost text

Key features

Language support

Pre-configured language servers for multiple languages:
  • Lua - lua_ls with full Neovim API support
  • Go - gopls with automatic setup via go.nvim
  • TypeScript/JavaScript - ts_ls with biome formatting
  • C/C++ - clangd with clang-format
  • HTML/CSS - html, cssls, tailwindcss
  • Shell - bash-language-server with shellcheck
  • And more - YAML, JSON, Markdown, Docker

Development tools

Formatting

Auto-format on save with conform.nvim supporting stylua, prettier, biome, gofumpt, and more

Linting

On-demand linting with nvim-lint supporting eslint_d, luacheck, golangci-lint, and shellcheck

Search & replace

Project-wide search and replace with grug-far.nvim powered by ripgrep

Database

SQL client with vim-dadbod supporting PostgreSQL, MySQL, SQLite, MongoDB, and Redis

Editor enhancements

-- Leader key configuration
vim.g.mapleader = " "
vim.g.maplocalleader = " "
  • Smart indentation - 4 spaces, smart tabs, auto-indent
  • Treesitter folds - Code folding based on syntax tree
  • Relative line numbers - For easy motion navigation
  • Persistent undo - Undo history saved between sessions
  • Mouse support - Full mouse support in all modes

UI features

This configuration uses true color support (24-bit RGB). Make sure your terminal supports termguicolors.
  • Custom statusline - Minimal, informative status bar
  • Treesitter context - Shows current function/class at top of window
  • Git signs - Inline git diff indicators in the gutter
  • Floating windows - Rounded borders for diagnostics and completion
  • Zero cmdheight - More screen space, cmdline overlays statusline

Core plugins

Package management

-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not (vim.uv or vim.loop).fs_stat(lazypath) then
  local lazyrepo = "https://github.com/folke/lazy.nvim.git"
  vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath })
end
vim.opt.rtp:prepend(lazypath)
Plugins are managed with lazy.nvim and organized into logical groups:
  • plugins/ - Core plugins (UI, editing, productivity)
  • plugins/languages/ - Language-specific plugins
  • plugins/lsp/ - LSP configuration and tools

Text objects and motions

Treesitter text objects provide semantic code navigation:
-- Text objects
af  -- Around function
if  -- Inside function

-- Navigation
]f  -- Next function start
[f  -- Previous function start

Configuration structure

init.lua              # Entry point, loads all modules
lua/
├── config/
│   ├── options.lua   # Editor settings
│   ├── keymaps.lua   # Global keybindings
│   └── neovide.lua   # GUI-specific settings
├── core/
│   ├── lazy.lua      # Plugin manager bootstrap
│   ├── autocmds.lua  # Autocommands
│   └── utils.lua     # Utility functions
└── plugins/
    ├── *.lua         # Plugin specifications
    ├── languages/    # Language-specific plugins
    └── lsp/          # LSP configuration
        └── init.lua  # LSP setup

Philosophy

This configuration avoids Mason for tool management. All language servers, formatters, and linters should be installed globally on your system for better control and consistency.
Key principles:
  1. Native first - Use Neovim’s built-in features when possible
  2. Explicit over magic - Clear configuration over hidden defaults
  3. Performance matters - Lazy loading and optimized for large files
  4. System tools - External tools installed globally, not in Neovim

Next steps

Installation

Install the configuration and required dependencies

Quick start

Get up and running in minutes

Build docs developers (and LLMs) love