Replaces the generic kickstart README with a personalized reference covering: - Requirements and installation - Plugin inventory - Full keymap reference (general, telescope, LSP, AI agent) - ThePrimeagen/99 usage (prompts, AGENT.md, skill files, debugging) - Maintenance guide (adding plugins, LSPs, formatters, updating) - Optional extras reference Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .github | ||
| doc | ||
| lua | ||
| .gitignore | ||
| .stylua.toml | ||
| LICENSE.md | ||
| README.md | ||
| init.lua | ||
README.md
nvim
Personal Neovim configuration based on kickstart.nvim. Single-file, fully documented, no magic.
Requirements
| Dependency | Purpose |
|---|---|
Neovim >= 0.10 (latest stable recommended) |
Runtime |
git, make, gcc / clang |
Plugin builds |
| ripgrep | Live grep in Telescope |
| fd-find | File finder |
claude CLI (Claude Code) |
AI agent (99) |
Clipboard tool (xclip, xsel, win32yank) |
System clipboard sync |
Install Neovim on WSL (Ubuntu/Debian):
sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep unzip git xclip neovim
Installation
# Back up any existing config first
mv ~/.config/nvim ~/.config/nvim.bak
# Clone this repo
git clone https://github.com/0xWheatyz/kickstart.nvim.git ~/.config/nvim
# Launch — Lazy will bootstrap and install all plugins automatically
nvim
Run :Lazy to check plugin status. Run :checkhealth if anything looks wrong.
Structure
Everything lives in a single file:
~/.config/nvim/
├── init.lua ← entire config (options, keymaps, plugins)
└── lua/
├── custom/plugins/ ← drop extra plugin files here (optional)
└── kickstart/plugins/ ← optional bundled extras (debug, neo-tree, etc.)
The config is intentionally kept in one file so every line is readable top-to-bottom without jumping between modules.
Plugins
| Plugin | Purpose |
|---|---|
folke/lazy.nvim |
Plugin manager |
NMAC427/guess-indent.nvim |
Auto-detect indentation |
lewis6991/gitsigns.nvim |
Git gutter signs |
folke/which-key.nvim |
Keymap hints popup |
nvim-telescope/telescope.nvim |
Fuzzy finder |
neovim/nvim-lspconfig + mason-org/mason.nvim |
LSP + auto-install |
stevearc/conform.nvim |
Formatting on save |
saghen/blink.cmp + L3MON4D3/LuaSnip |
Completion + snippets |
folke/tokyonight.nvim |
Colorscheme (tokyonight-night) |
folke/todo-comments.nvim |
Highlight TODO/FIXME/NOTE |
nvim-mini/mini.nvim |
Text objects, surround, statusline |
nvim-treesitter/nvim-treesitter |
Syntax highlighting |
ThePrimeagen/99 |
AI agent |
Keymaps
<leader> is <Space>.
General
| Key | Action |
|---|---|
<Esc> |
Clear search highlight |
<C-h/j/k/l> |
Move between splits |
<leader>q |
Open diagnostic quickfix list |
<leader>f |
Format buffer |
<leader>th |
Toggle inlay hints (when LSP supports it) |
Telescope (Search)
| Key | Action |
|---|---|
<leader>sf |
Find files |
<leader>sg |
Live grep |
<leader>sw |
Grep word under cursor (or selection) |
<leader>sh |
Search help tags |
<leader>sk |
Search keymaps |
<leader>sd |
Search diagnostics |
<leader>sr |
Resume last search |
<leader>s. |
Recent files |
<leader>sc |
Search commands |
<leader>sn |
Search Neovim config files |
<leader>/ |
Fuzzy search current buffer |
<leader>s/ |
Live grep in open files |
<leader><leader> |
Open buffer list |
LSP (active when a language server is attached)
| Key | Action |
|---|---|
grn |
Rename symbol |
gra |
Code action |
grD |
Go to declaration |
grd |
Go to definition |
grr |
Find references |
gri |
Go to implementation |
grt |
Go to type definition |
gO |
Document symbols |
gW |
Workspace symbols |
AI Agent (99)
| Key | Mode | Action |
|---|---|---|
<leader>9v |
visual | Send selection as AI request |
<leader>9s |
normal | Open search / ask AI |
<leader>9x |
normal | Cancel all in-flight requests |
In the 99 prompt:
@<filename>— fuzzy-attach a project file as context#<rulename>— autocomplete and attach a rule/skill file
AI Agent — 99
ThePrimeagen/99 is a Neovim-native AI
agent that delegates to a CLI backend. This config uses Claude Code
(claude CLI) as the provider.
Prerequisites
Claude Code must be installed and authenticated:
npm install -g @anthropic-ai/claude-code
claude login
How it works
- Open any file and make a visual selection (or just use
<leader>9sfor a free-form prompt). - Press
<leader>9v(visual) or<leader>9s(normal) to open the prompt. - Describe what you want. Use
@fileto attach context,#ruleto attach a skill/rule doc. - 99 streams the response back into the buffer as virtual text, then applies replacements inline.
- Press
<leader>9xat any time to abort.
Debugging
:lua require("99").view_logs()
Navigate log history with _99.prev_request_logs() / _99.next_request_logs().
AGENT.md (optional)
Drop an AGENT.md file in any directory (or project root) to give 99
project-specific context. It is automatically injected into every request
made from files under that directory.
project-root/
└── AGENT.md ← describes conventions, architecture, rules
Skill files (optional)
Custom rule files enable #<skill> autocompletion in the prompt. Each skill
is a folder with a SKILL.md inside:
~/.config/nvim/skills/
└── my-rule/
└── SKILL.md
Point 99 at them by adding to completion.custom_rules in the setup call
inside init.lua.
Maintaining the Config
All changes happen in ~/.config/nvim/init.lua. The file is organized in this order:
- Options —
vim.o.*/vim.opt.*settings - Keymaps —
vim.keymap.set(...)for built-in bindings - Autocommands —
vim.api.nvim_create_autocmd(...) - Plugin specs — passed to
require('lazy').setup({...})
Adding a plugin
Add an entry anywhere inside the require('lazy').setup({ ... }) table:
{ 'author/plugin-name', opts = {} },
For plugins that need configuration:
{
'author/plugin-name',
event = 'VimEnter', -- optional: defer loading
config = function()
require('plugin-name').setup {
-- options here
}
vim.keymap.set('n', '<leader>x', ...)
end,
},
Then run :Lazy sync (or restart Neovim) to install.
Updating plugins
:Lazy update
This updates all plugins and refreshes lazy-lock.json.
Adding a language server
Inside the servers table in the nvim-lspconfig config block:
local servers = {
gopls = {},
pyright = {},
ts_ls = {},
}
Mason will auto-install it. Run :Mason to check status.
Adding a formatter
Inside the conform.nvim opts.formatters_by_ft table:
formatters_by_ft = {
lua = { 'stylua' },
python = { 'black' },
javascript = { 'prettierd', 'prettier', stop_after_first = true },
},
Make sure the formatter binary is installed via Mason or your system package manager.
Switching the colorscheme
Replace the folke/tokyonight.nvim plugin entry with any other colorscheme,
and update vim.cmd.colorscheme 'theme-name' in its config function.
Checking health
:checkhealth
Covers LSP, Treesitter, Telescope, and plugin-specific diagnostics.
Optional Extras
Uncomment any of these lines near the bottom of init.lua to enable bundled
extras:
require 'kickstart.plugins.debug', -- DAP debugger UI
require 'kickstart.plugins.indent_line', -- indent guides
require 'kickstart.plugins.lint', -- async linting
require 'kickstart.plugins.autopairs', -- bracket auto-close
require 'kickstart.plugins.neo-tree', -- file tree
require 'kickstart.plugins.gitsigns', -- extra git keymaps
Drop additional plugin files under lua/custom/plugins/ and uncomment:
{ import = 'custom.plugins' },
at the bottom of the lazy setup call.