A personal Neovim configuration built on LazyVim, with extra language support, GitHub Copilot, a transparent Tokyonight UI, and a focused set of coding and navigation plugins.
- Base: LazyVim 8 + lazy.nvim, with bytecode loader enabled.
- Languages: TypeScript, JSON, Markdown, Go, Tailwind CSS, Vue, SQL, Prisma, YAML, CMake — plus Treesitter grammars for Astro, GraphQL, Svelte, and more.
- AI: GitHub Copilot via LazyVim extra (
lazyvim.plugins.extras.ai.copilot). - UI: Transparent Tokyonight Storm, Snacks dashboard, bufferline (tabs), incline filename, lualine, Noice, Zen Mode.
- Coding: Incremental rename, refactoring, dial.nvim, symbols outline, blink.cmp, Mason-managed tools.
- Navigation: Telescope + fzf-native + file browser, which-key, mini.bracketed.
- Git: git.nvim, gitsigns (inline blame), git-conflict.
- Quality: ESLint + Prettier extras, Stylua, Selene, ShellCheck, shfmt.
| Requirement | Version / notes |
|---|---|
| Neovim | >= 0.9.0 (0.10+ recommended) |
| Git | Latest |
| Nerd Font | Required for icons (dashboard, bufferline, lualine) |
| ripgrep | Required for Telescope live grep |
| fd | Recommended for faster file finding |
| make / gcc | Required to build telescope-fzf-native.nvim |
| Node.js | Required for Copilot, some Mason LSPs, Prettier |
| Go | Optional — only if you use gopls |
| Shell | Configured for /bin/zsh |
Note: Mason installs LSP servers, linters, and formatters on first launch. You do not need to install them globally.
mv ~/.config/nvim ~/.config/nvim.bak
mv ~/.local/share/nvim ~/.local/share/nvim.bak
mv ~/.local/state/nvim ~/.local/state/nvim.bakgit clone git@github.com:smile-ko/nvim-config.git ~/.config/nvimHTTPS alternative:
git clone https://github.com/smile-ko/nvim-config.git ~/.config/nvimnvimlazy.nvim bootstraps itself, then installs LazyVim and all plugins. The first launch can take a few minutes.
| Stage | What it does |
|---|---|
| Bootstrap | Clones lazy.nvim into ~/.local/share/nvim/lazy/lazy.nvim |
| Plugins | Installs LazyVim, extras, and specs under lua/plugins/ |
| Mason | Ensures LSP servers and tools listed in coding.lua |
| Treesitter | Compiles parsers from ensure_installed |
~/.config/nvim/
├── init.lua # Entry point — enables loader, loads config.lazy
├── lazy-lock.json # Pinned plugin versions
├── lazyvim.json # LazyVim extras / version metadata
├── stylua.toml # Lua formatter (2 spaces, 120 columns)
├── lua/
│ ├── config/
│ │ ├── lazy.lua # lazy.nvim setup + LazyVim extras
│ │ ├── options.lua # Editor options (leader, indent, splits)
│ │ ├── keymaps.lua # Custom keymaps
│ │ └── autocmds.lua # Autocommands
│ ├── plugins/
│ │ ├── colorscheme.lua # Tokyonight Storm (transparent)
│ │ ├── coding.lua # LSP, Mason, Treesitter, blink.cmp, refactor
│ │ ├── editor.lua # Telescope, Git, which-key, hipatterns
│ │ └── ui.lua # Noice, dashboard, bufferline, lualine, zen
│ └── utils/
│ ├── discipline.lua # Optional cowboy-mode (currently unused)
│ └── debug.lua # Debug helpers
└── README.md
Leader is <Space>.
| Key | Action |
|---|---|
<Leader>p / <Leader>P |
Paste from register 0 |
<Leader>c / <Leader>d |
Change / delete without yanking |
dw |
Delete word backwards |
te |
New tab |
<Tab> / <S-Tab> |
Next / previous tab (bufferline) |
ss / sv |
Split horizontal / vertical |
sh sj sk sl |
Move between windows |
<C-w> arrows |
Resize window |
<A-j> / <A-k> |
Move line or visual block down / up |
<Leader>o / <Leader>O |
Insert line below / above, stay in insert |
:W |
Write with sudo |
| Key | Action |
|---|---|
;f |
Find files (respects .gitignore, includes hidden) |
;r |
Live grep (hidden files included) |
\\ |
Open buffers |
;t |
Help tags |
;e |
Diagnostics |
;s |
Treesitter symbols |
sf |
File browser in current buffer directory |
;; |
Resume last picker |
<Leader>fP |
Find files in the lazy.nvim plugin root |
| Key | Action |
|---|---|
<Leader>gb |
Git blame window |
<Leader>go |
Browse file / folder on remote |
gd |
Go to definition (Telescope) |
<Leader>cs |
Symbols outline |
<Leader>r |
Refactor selection (visual mode) |
<Leader>z |
Zen Mode |
<Leader>? |
Buffer-local keymaps (which-key) |
<C-a> / <C-x> |
Increment / decrement (dial.nvim) |
| Plugin | Role |
|---|---|
| tokyonight.nvim | Storm style, transparent background, sidebars, and floats |
| Plugin | Role |
|---|---|
| inc-rename.nvim | Incremental LSP rename |
| refactoring.nvim | Visual refactor picker |
| mini.bracketed | [ / ] navigation |
| dial.nvim | Increment numbers, dates, bools, let/const, semver |
| symbols-outline.nvim | Code outline sidebar |
| mason.nvim | LSP / linter / formatter installer |
| nvim-lspconfig | TypeScript, Lua, YAML, CSS, HTML, Vue, Tailwind, Go, Prisma |
| nvim-treesitter | Highlighting, indent, MDX as Markdown |
| blink.cmp | Completion with ghost text |
| Plugin | Role |
|---|---|
| mini.hipatterns | Highlight hsl(...) colors |
| git.nvim | Blame and browse |
| telescope.nvim | Fuzzy finder + file browser + fzf |
| which-key.nvim | Keymap hints (<Leader>a = AI group) |
| gitsigns.nvim | Gutter signs + inline blame |
| git-conflict.nvim | Merge conflict markers |
| Plugin | Role |
|---|---|
| noice.nvim | Cmdline, messages, LSP hover border |
| snacks.nvim | Dashboard + smooth scroll |
| bufferline.nvim | Tab-mode buffer line |
| incline.nvim | Floating filename with icon |
| lualine.nvim | Statusline with pretty path |
| zen-mode.nvim | Distraction-free editing |
Imported in lua/config/lazy.lua:
| Category | Extra |
|---|---|
| Linting | linting.eslint |
| Format | formatting.prettier |
| Lang | TypeScript, JSON, Markdown, Go, Tailwind, Vue, SQL, Prisma, YAML, CMake |
| AI | ai.copilot |
| Coding | coding.neogen |
| Util | util.mini-hipatterns |
Disabled / commented extras (easy to re-enable):
| Extra | File |
|---|---|
lang.toml |
lua/config/lazy.lua |
ai.avante |
lua/config/lazy.lua + spec in lua/plugins/coding.lua |
Remove an import line in lua/config/lazy.lua to disable an extra.
Ensured in lua/plugins/coding.lua:
| Tool | Purpose |
|---|---|
stylua |
Lua formatter |
selene / luacheck |
Lua linters |
shellcheck / shfmt |
Shell lint / format |
vue-language-server |
Vue LSP |
tailwindcss-language-server |
Tailwind LSP |
typescript-language-server |
TypeScript / JavaScript LSP |
css-lsp |
CSS LSP |
prisma-language-server |
Prisma LSP |
gopls |
Go LSP |
:Mason- Create or edit a spec under
lua/plugins/(for examplelua/plugins/myplugin.lua). - Return a lazy.nvim plugin table.
- Restart Neovim or run
:Lazy sync.
Edit lua/plugins/colorscheme.lua and the colorscheme option in lua/config/lazy.lua.
opts = {
colorscheme = "tokyonight-storm",
}- Append the Mason package name to
ensure_installedinlua/plugins/coding.lua. - Add a
serversentry under thenvim-lspconfigspec.
Defaults live in lua/config/options.lua:
| Option | Value |
|---|---|
| Leader | <Space> |
| Indent | 2 spaces |
| Wrap | Off |
| Mouse | Disabled |
scrolloff |
10 |
cmdheight |
0 on Neovim 0.8+ |
| Shell | /bin/zsh |
Cowboy-mode lives in lua/utils/discipline.lua. It is commented out in lua/config/keymaps.lua. Uncomment to warn after repeated hjkl / arrow spam:
local discipline = require("utils.discipline")
discipline.cowboy()| Command | Purpose |
|---|---|
:Lazy |
Plugin manager UI |
:LazyExtras |
Enable / disable LazyVim extras |
:Lazy sync |
Install, update, clean plugins |
:Mason |
LSP / tool installer |
:LspInfo |
Active language servers |
:checkhealth |
Diagnose Neovim, LSP, treesitter |
:IncRename |
Incremental rename |
:SymbolsOutline |
Toggle outline |
:ZenMode |
Toggle zen mode |
:Noice |
Message history |
:TSPlaygroundToggle |
Treesitter playground |
:W |
Save with sudo |
:LazyCheck failed specs, then :Lazy sync. Confirm Git and network access.
:Mason
:checkhealth lspInstall the server from Mason, or add it to ensure_installed and restart.
Install a C compiler (gcc or clang) and make, then:
:Lazy build telescope-fzf-native.nvimInstall a Nerd Font and set it as the terminal font.
Expected — plugins, Mason tools, and Treesitter parsers download and compile once. Later starts use the bytecode loader (vim.loader.enable()).
Confirm leader is <Space> (:echo mapleader). Use <Leader>? or :WhichKey to inspect mappings.
MIT