Skip to content

ph1losof/nvim

Repository files navigation

My Neovim Config <3

Startuptime: 88ms

Based on the actual CPU time of the Neovim process till UIEnter.
This is more accurate than `nvim --startuptime`.
 LazyStart 6.84ms
 LazyDone  83.17ms (+76.33ms)
 UIEnter   88ms (+4.84ms)

Introduction

Most Neovim configurations pretend like they are being used to get actual work done. This one is.

This is the Neovim configuration I use daily in large production codebases. Every plugin, keymap, and option earns its place through real usage - if something breaks or slows me down, it gets fixed or removed. All plugins are actively used and I keep it as minimal as possible, but I never compromise on developer experience - if there's a better path, I always take it.

It contains a lot of "hacks" and little known tricks I've accumulated over the years to make overall experience better, which you won't find in any other dotfiles - all of this comes from battle-testing plugins in real projects and digging through countless GitHub issues to find solutions that actually work.

I actively keep it up to date with modern approaches, plugins, and ecosystem changes. Even though it is opinionated, it strikes a good balance between being ready to use now and providing good defaults as a starting point for your own configuration.

Highlights

  • 70 plugins organized across 40 separate plugin files
  • 20 language servers configured with smart root detection and conditional attachment
  • AI-augmented development via 99 and Supermaven
  • Custom tree-sitter parser (edf) for .env file syntax highlighting
  • Format on save with conform.nvim (prettier, biome, stylua, ruff, rustfmt, and more)
  • 10+ linters running via nvim-lint
  • Modern completion via blink.cmp with supermaven + 99 AI sources and LSP
  • Sensitive data masking with shelter.nvim
  • Environment variable management with ecolog2.nvim
  • REST client via kulala.nvim
  • Database interface via vim-dadbod

Languages Supported

TypeScript/JavaScript, React/Vue/Astro, Python, Rust, Lua, SQL, Bash, HTML/CSS/Tailwind, Markdown, TOML, YAML, JSON, Docker, GraphQL, Prisma, and Graphviz DOT.

Installation

Prerequisites

Required:

  • Neovim >= 0.10
  • git, make, unzip
  • C compiler (gcc or clang) — needed by tree-sitter to compile parsers
  • ripgrep — used by snacks.nvim picker for live grep
  • Node.js & npm — required by many LSP servers and tools
  • opencode CLI — required by the current 99 setup (OpenCodeProvider)
  • Nerd Font — provides icons used throughout the UI (vim.g.have_nerd_font is set to true)
  • Clipboard toolpbcopy/pbpaste (macOS), xclip/xsel (Linux), or win32yank (Windows)

Recommended:

  • mise — runtime version manager (config prepends mise shims to PATH)
  • lazygit — terminal UI for git, integrated via snacks.nvim (<leader>lg)
  • fd — faster file finding for the picker

Optional (language-specific):

  • Deno — for Deno project support (LSP activates when deno.json/deno.jsonc is present)
  • Python 3 — for Python development (pyright + ruff)
  • Rust/cargo — for Rust development (rust-analyzer + rustfmt)

Setup

  1. Clone this repository:

    git clone https://github.com/ph1losof/nvim ~/.config/nvim
  2. Open Neovim — Lazy.nvim will auto-install all plugins on first launch:

    nvim
  3. Install all LSP servers, formatters, and linters (this is a custom command defined in this config, not a built-in Mason command):

    :MasonInstallAll
  4. Verify tree-sitter parsers are installed:

    :TSUpdate

Key Bindings

Leader key is Space. Here are the most important mappings — run :map or check lua/config/mappings.lua and individual plugin files for the full list.

Navigation & Search

Key Description
<leader>ff Find files
<leader>fw Live grep
<leader><space> Find open buffers
<leader>fr Resume last search
<leader>fh Help pages
<C-n> Open file explorer (Oil)
<leader>h1h4 Jump to Harpoon mark 1–4
<leader>ha Add buffer to Harpoon

LSP & Code

Key Description
K Hover documentation
<leader>gd Go to definition
<leader>gr Find references
<leader>gI Go to implementation
<leader>gp Peek definition
<leader>rn Rename symbol
<leader>ca Code action
<leader>ol Toggle outline

AI

Key Description
<leader>aa 99 vibe
<leader>av 99 visual
<leader>as 99 search
<leader>ax 99 stop
<leader>al 99 view logs

Git

Key Description
<leader>lg Open Lazygit
<leader>lf Lazygit current file history
<leader>hs Stage hunk
<leader>hp Preview hunk
<leader>hb Git blame line
]c / [c Next / previous git change

Editing & UI

Key Description
<leader>/ Toggle comment
<leader>sr Search & replace (grug-far)
<leader>z Zen mode
<leader>u Undotree
S Quick find/replace word under cursor
U Redo
+ / - Increment / decrement number

Project Structure

~/.config/nvim/
├── init.lua                  # Entry point (leader key, loads config modules)
├── lua/
│   ├── config/
│   │   ├── lazy.lua          # Lazy.nvim bootstrap and setup
│   │   ├── options.lua       # Vim options and diagnostics
│   │   ├── mappings.lua      # Global keymaps
│   │   └── autocmds.lua      # Autocommands
│   ├── plugins/              # 38 plugin spec files (one per plugin/group)
│   └── helpers.lua           # Shared utility functions
├── snippets/                 # Custom snippets (drizzle, package.json, css)
├── patches/                  # Plugin patches (applied via patchr.nvim)
└── lazy-lock.json            # Plugin version lockfile

Thanks

When I initially started using Neovim, my starting point was NvChad. That's why you may find keybindings similar to NvChad's.

The initial transition from NvChad was done using nvim-lua/kickstart.nvim as a starting point. Over time I dropped most of it and rewrote everything from scratch, keeping only a few good parts from them. Huge thanks to kickstart for getting me started in non-distro direction.

A lot of good defaults, extras, and plugin choices in this config were inspired by LazyVim. Whenever I add a new plugin, I usually look up its source code in the LazyVim repo first — a great reference for well-thought-out Neovim defaults.

Q&A

How do I use AI tools in neovim?

on AI side the current setup incorporates 99 (via OpenCode provider) and SuperMaven. Right now my philosophy is as follows: I prefer use cli AI tools like (claude-code and opencode) in combination with tmux to have agentic experience.

Hence, I leave my workflows in neovim to be centered about more thoughtful and less agentic experience.

However, I still want AI capabilities and the ability to work quickly. And that's what 99 by ThePrimeagen got totally right. It brings that traditional feeling of copilot to the neovim, and allows you to maintain both speed and quality in a mindful way.

Windsurf.nvim vs SuperMaven.nvim

The opinion here is that SuperMaven.nvim is much better then Windsurf.nvim in their current state. Both are deprecated in their own ways.

While supermaven stated that they are going to be sunsetted, they still allow completions that are fast and intelligent.

windsurf.nvim (formerly Codeium.nvim) is a different story in a sense that it is not officially deprecated but server binaries have been deprecating plugin system in secret. Yes - I have verified it myself when was trying to force it to use newer ai models for completions but the plugin api itself is deprecated.

Today when comparing them both in their current state, two things standout:

First of all, supermaven.nvim is much much faster and seems to be more intelligent.

Second of all, supermaven.nvim doesn't have so much errors like windsurf.nvim, especially around non-modifiable buffers.

License

MIT

About

Pragmatic batteries-included Neovim config for AI-augmented coding - built for real, day-to-day work. 70 plugins, 20 LSPs, ~90ms startup.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages