An AI Engineering take on kickstart.nvim: Python/ML notebooks, TypeScript/JavaScript, Rust/C++, data & config files, Markdown docs, and an AI assistant (OpenCode) — all on a fork that stays syncable with upstream.
- Small, single-file core:
init.luais the upstream file, near-untouched. - All AI Engineering features live in
lua/custom/plugins/(the official escape hatch kickstart documents), with an explicit loader. - PR-your-features or keep your fork in sync with
nvim-lua/kickstart.nvimby fast-forwarding justmaster.
NOT a Neovim distribution — a starting point, documented top-to-bottom.
- What's inside
- Installation
- AI Engineering Stack
- Keymaps
- How it's structured
- FAQ
- Install Recipes
- Alternative Neovim installation methods
| Area | What you get | Where |
|---|---|---|
| Python / ML | basedpyright LSP (Pylance features), ruff lint+format, debugpy debugging, type checking |
lsp.lua, format.lua, debug.lua |
| Notebooks | edit .ipynb as plain text (jupytext.nvim) + run cells in a live Jupyter kernel (molten-nvim) |
notebooks.lua |
| TypeScript/JS | ts_ls LSP, inlay hints, prettierd formatting |
lsp.lua, format.lua |
| Rust | rust_analyzer with clippy + inlay hints |
lsp.lua |
| C/C++ | clangd LSP |
lsp.lua |
| Data & config | csvview.nvim (CSV/TSV), yamlls, taplo |
data.lua, lsp.lua |
| Markdown & docs | render-markdown.nvim (obsidian preset), markdownlint |
markdown.lua, format.lua |
| AI assistant | opencode.nvim — ask/review/fix/document with OpenCode |
ai.lua |
| Quality of life | oil.nvim, undotree, flash.nvim |
qol.lua |
Everything installs automatically through Mason (:Mason to inspect).
Nothing blocks: run :checkhealth and fix only the tools you actually want.
Targets the latest stable
(0.11+) and nightly.
Check your version with nvim --version. If your package manager ships an
outdated Neovim, see Alternative installation methods.
- Basic utils:
git,make,unzip, C Compiler (gcc) - ripgrep (used by Telescope)
- A Nerd Font — enabled by default in this fork
(
vim.g.have_nerd_font = true). If you don't use one, flip it back tofalse. - Clipboard tool (xclip/xsel/win32yank) depending on your platform.
- Optional, per-language tooling (used by Mason to resolve non-LSP tools):
- Python: a
python3withjupyter+ipykernel(formolten-nvim), andjupytext(forjupytext.nvim). E.g.python3 -m pip install jupyter ipykernel jupytext. Activating a virtualenv before opening Neovim makes both molten and the Python debugger use it automatically. - TypeScript/JS:
node+npm. - OpenCode: the
opencodeCLI on$PATH(see opencode.ai).opencode.nvimstarts an integrated server (opencode --port) if none is running.
- Python: a
Note
See Install Recipes for Windows and Linux specifics.
Note
Backup your previous configuration (if any exists).
Neovim's configurations are located at (depending on your OS):
| OS | PATH |
|---|---|
| Linux, MacOS | $XDG_CONFIG_HOME/nvim, ~/.config/nvim |
| Windows (cmd) | %localappdata%\nvim\ |
| Windows (powershell) | $env:LOCALAPPDATA\nvim\ |
Linux / MacOS
git clone https://github.com/Faycall1l/kickstart.nvim.git "${XDG_CONFIG_HOME:-$HOME/.config}"/nvimWindows (PowerShell)
git clone https://github.com/Faycall1l/kickstart.nvim.git $env:LOCALAPPDATA\nvimOn first launch, vim.pack will download all plugins and Mason will install the
toolchain automatically. Then run :checkhealth to see what's ready.
basedpyright— pyright fork with Pylance-ported features: completions, inlay hints, semantic tokens, type checking (basic), navigation, refactors.ruff— linting (nvim-lint) and formatting (ruff_format) on save via conform.debugpy— full debugging vianvim-dap(see Keymaps).
Editing an .ipynb:
jupytext.nvimtransparently opens notebooks aspy:percenttext — so it's readable, diffable, andbasedpyright/ruffwork inside notebook code.molten-nvimruns cells against a live Jupyter kernel. Output appears as virtual text or in a floating window; plots/images/LateX are supported.]n/[njump between cells.
The full keymaps under <leader>m ([M]olten):
| Key | Action |
|---|---|
<leader>mi |
Initialize kernel |
<leader>mc |
Re-run current cell |
<leader>ml |
Evaluate current line |
<leader>me (n/x) |
Evaluate operator / visual selection |
<leader>ms / <leader>mh |
Show / hide output |
<leader>md |
Delete cell |
<leader>mr |
Restart kernel |
csvview.nvimauto-enables on*.csv/*.tsv: Excel-like navigation (<Tab>/<Enter>), text objects (if/af). Toggle with<leader>xv, inspect with<leader>xi.- YAML / TOML get
yamlls/taploLSPs; both are formatted on save.
render-markdown.nvim (obsidian preset) turns Markdown buffers into rendered
docs. Toggle with <leader>tr. markdownlint lints Markdown via nvim-lint.
<leader>a is the [A]I Assistant group:
| Key | Action |
|---|---|
<leader>aa |
Ask OpenCode (prompt input) |
<leader>as |
Select prompt / command |
<leader>ae |
Explain @this |
<leader>ar |
Review @this |
<leader>af |
Fix @diagnostics |
<leader>at |
Add tests for @this |
<leader>ad |
Document @this |
<leader>an / <leader>ac |
New / compact session |
Context placeholders: @this, @buffer, @diagnostics, @quickfix, etc.
When OpenCode proposes an edit, the target file opens in a new tab with
:diffpatch — accept whole (da), hunk (dp), or reject (dr).
| Key | Action |
|---|---|
<F5> |
Start / continue |
<F1> / <F2> / <F3> |
Step into / over / out |
<F7> |
Toggle DAP UI |
<leader>db / <leader>dB |
Toggle / conditional breakpoint |
<leader>dc |
Continue |
<leader>ds |
Toggle UI |
<leader>dt |
Terminate |
<leader>dp |
DAP REPL |
debugpy is auto-installed via Mason; pytest is the default test runner, and the
active virtualenv is used when set.
Upstream keymaps are preserved. Added leader groups:
| Prefix | Group |
|---|---|
<leader>a |
[A]I Assistant |
<leader>m |
[M]olten |
<leader>o |
[O]il |
<leader>d |
[D]ebug |
Plus: <leader>u undotree, <leader>xv / <leader>xi csvview,
<leader>tr render-markdown, s/S/r/R flash jumps, - open oil.
Also upstream quality-of-life shortcuts still apply (<leader>f format,
<leader>sh help search, etc.) — press <space> and which-key will show them.
init.lua <- upstream, near-untouched (Nerd Font flag + loader)
lua/custom/plugins/
init.lua <- explicit, dependency-aware loader
config.lua <- PATH, Mason toolchain, which-key groups
lsp.lua <- basedpyright, ts_ls, rust_analyzer, clangd, yamlls, taplo
treesitter.lua <- extra parsers
format.lua <- conform override + nvim-lint
notebooks.lua <- jupytext.nvim + molten-nvim
data.lua <- csvview.nvim
markdown.lua <- render-markdown.nvim
debug.lua <- nvim-dap + debugpy
qol.lua <- oil.nvim, undotree, flash.nvim
ai.lua <- opencode.nvim
lua/kickstart/ <- upstream modules (health, optional plugins)
master tracks nvim-lua/kickstart.nvim. All downstream work happens on
dev/ai-engineering and feature/* branches. To resync:
git checkout master
git pull upstream master
git checkout dev/ai-engineering
git merge masterBecause the AI layer lives entirely in lua/custom/plugins/, merges stay
conflict-free almost always — that "escape hatch" directory is upstream's promise.
Plugins use the built-in vim.pack:
:lua vim.pack.update() -- install/update all plugins
:lua vim.pack.update(nil, { offline = true }) -- inspect pending updates- What if I want to update or uninstall?
- Uninstall: remove your config directory and local data directory
(e.g.
~/.config/nvimand~/.local/share/nvim). - Reinstall plugins from scratch:
rm -rf ~/.local/share/nvim/pack(or the matching path for yourNVIM_APPNAME).
- Uninstall: remove your config directory and local data directory
(e.g.
- Do I need to install all the AI tools?
- No. Mason only installs the toolchain on
:Mason/first run. Run:checkhealthand ignore warnings for languages you don't use.
- No. Mason only installs the toolchain on
- Notebooks require Jupyter — do I need the full JupyterLab?
- No.
molten-nvimneeds a kernel, i.e.jupyter+ipykernel(python3 -m pip install jupyter ipykernel).jupytextis used only when opening.ipynbfiles as text.
- No.
- Why is
init.luastill one file? Why are my plugins split?init.luastays upstream to make syncing trivial; the splitlua/custom/plugins/layer is the officially documented integration point and keeps each concern in one small file.
- What happened to
lazy.nvim?- Upstream kickstart migrated to Neovim's built-in
vim.packmanager; this fork follows that.
- Upstream kickstart migrated to Neovim's built-in
After installing all dependencies, continue with Install Kickstart.
Windows with Microsoft C++ Build Tools and CMake
Kickstart's default config is make-only for telescope-fzf-native.nvim.
If make is unavailable, a CMake fallback can be enabled in the PackChanged
hook inside init.lua (upstream documents both variants inline).
Windows with gcc/make using chocolatey
choco install -y neovim git ripgrep wget fd unzip gzip mingw make tree-sitterWSL (Windows Subsystem for Linux)
wsl --install
sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep fd-find tree-sitter-cli unzip git xclip neovimUbuntu
sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep fd-find tree-sitter-cli unzip git xclip neovimDebian
sudo apt update
sudo apt install make gcc ripgrep fd-find tree-sitter-cli unzip git xclip curl
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz
sudo rm -rf /opt/nvim-linux-x86_64
sudo mkdir -p /opt/nvim-linux-x86_64
sudo chmod a+rX /opt/nvim-linux-x86_64
sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz
sudo ln -sf /opt/nvim-linux-x86_64/bin/nvim /usr/local/bin/Fedora
sudo dnf install -y gcc make git ripgrep fd-find tree-sitter-cli unzip neovimArch
sudo pacman -S --noconfirm --needed gcc make git ripgrep fd tree-sitter-cli unzip neovimBob
Bob is a Neovim version manager:
rustup default stable && rustup update stable
cargo install bob-nvim
bob use stableHomebrew
brew install neovimFlatpak
Install flatpak then
flatpak install flathub io.neovim.nvim.
mise
mise plugins install neovim
mise use neovim@stableEnjoy your AI Engineering Neovim! ✨