z e n v i m

    _   _
   | \ | | ___  
   |  \| |/ _ \ 
   | |\  |  __/ 
   |_| \_|\___| 

A minimal, modern Neovim distro — the spiritual successor to LunarVim. Engineered so you can stop configuring and start ;f-ing around.

$ bash <(curl -s https://raw.githubusercontent.com/milianor03/zenvim/main/installer/install.sh)
~12ms startup 13 hand-tuned themes 20+ LSP servers lazy.nvim 100% lazy MIT license

Features

Fast

lazy.nvim with lazy-loaded plugins and zero startup noise. First launch clones everything, then it boots in ~12ms.

🎨

Beautiful

base46-powered with 13 hand-tuned themes. Switch live with ;y — try the picker below.

🧩

Zero-friction LSP

Mason + lspconfig wired for 20+ servers out of the box, with formatters, snippets and inlay hints on attach.

📝

You are the config

A single config.lua override file bends the whole distro to your will. Read it, gut it, own it.

Themes

Click a palette to preview it live. Every theme is a real base46 palette restored from the original repo — switch them in Neovim anytime with ;y or :ZenTheme.

zenvim — colorscheme onedark
1local palette = { name = 'onedark' }
2palette.blue   = '#61AFEF' -- semantic colors
3palette.green = '#98C379'
4palette.base_30 = { base00 = '#1f2329' }
5
6require('zenvim.theme').apply_palette 'onedark'
7
8function hello()
9 return "zenvim" .. " rocks"
10end
NORMAL main.lua  main 󰒘 lua 10:12  󰘦

Requirements

Install

One-liner

$ bash <(curl -s https://raw.githubusercontent.com/milianor03/zenvim/main/installer/install.sh)

Manual

git clone --depth 1 https://github.com/milianor03/zenvim ~/.config/zenvim
ln -s ~/.config/zenvim ~/.config/nvim   # back up any existing config first!
nvim

First launch clones lazy.nvim and every plugin automatically — around ~12ms startup. Vim your way home.

Your config

Everything lives in config.lua at the repo root. Return a table overriding any built-in default — the merge happens before plugins load:

return {
  leader = ' ',
  colorscheme = 'solarized',
  transparency = true,

  keys = {
    { lhs = '<leader>ff', rhs = '<cmd>Telescope find_files<cr>', desc = 'find files' },
  },

  plugins = {
    { 'folke/todo-comments.nvim', opts = {} },
  },

  lsp = {
    servers = { 'lua_ls', 'gopls', 'ts_ls' },
  },
}

Defaults live in lua/zenvim/config.lua — read it, gut it, own it.

Add your own theme

-- lua/zenvim/palettes/vscode.lua
local palette = { name = 'vscode', none = 'NONE',
  blue = '#569cd6', -- ...
}
return palette
-- colors/vscode.lua
require('zenvim.theme').apply_palette 'vscode'

then put 'vscode' in themes and set it as colorscheme.

Keymaps

; is the leader. The full source of truth lives in lua/zenvim/core/keys.lua.

KeysAction
;fFind files (Telescope)
;ttFind files
;tgLive grep
;tcChange theme
;yPick theme (:ZenTheme)
;eNeo-tree (float)
;rNeo-tree buffers (float)
;xToggle terminal
;w / ;qSave / close
KeysAction
;liLSP implementation
;ldLSP definition
;lhLSP hover
;laCode action
;doDiagnostics float
;dlDiagnostics loclist
ss / svSplit / vsplit
Alt+← Buffer cycle
Alt+↑ / Buffer picker / close

LSP & editing

Out of the box

  • Formatters via conform: stylua, prettierd, goimports, gofmt, ruff
  • Snippets via friendly-snippets
  • Inlay hints + code lens on attach
  • Organize imports on save for Go
  • Which-key, autopairs, autotags, blink.cmp completions, flash

Per-server settings

Servers ship with tuned settings for gopls, denols, ts_ls, lua_ls, emmet_ls, jsonls (SchemaStore) and jdtls. Enabled by default: lua_ls, gopls, ts_ls, gdscript, gdshader, jsonls, emmet_ls, html, cssls and marksman.

Structure

├── config.lua                 ← your config (user override)
├── colors/                    ← thin :colorscheme wrappers (13 themes)
├── installer/install.sh       ← install / symlink to ~/.config/nvim
├── lua/zenvim/
│   ├── init.lua               ← entry: merges your config, boots core + lazy
│   ├── config.lua             ← built-in defaults
│   ├── bootstrap.lua          ← lazy.nvim setup
│   ├── core/init.lua          ← options, keymaps, autocmds
│   ├── theme.lua              ← base46 wiring, :ZenTheme
│   ├── palettes/              ← hand-tuned base46 palettes (13)
│   ├── lsp.lua                ← diagnostics + per-server settings
│   └── plugins/               ← lazy specs, one concern per file
└── tests/smoke.sh             ← headless smoke test (also runs in CI)

Development

make test   # headless smoke test
make lint   # luacheck lua/

CI runs both on every push — luacheck on Lua 5.1 and a headless Neovim smoke test that boots the distro, force-loads every plugin and applies all 13 themes.