| Environment | Sample |
|---|---|
| Kitty on Arch + Hyprland | ![]() |
| Windows Terminal (Powershell 7) | ![]() |
- lazy.nvim for plugin management.
- mason-lspconfig and nvim-lspconfig for LSP setup.
- nvim-treesitter for syntax highlighting and parsing.
- nvim-treesitter-context for code context.
- nvim-cmp for code completion + LuaSnip and friendly-snippets for snippet expansion.
- telescope.nvim for fuzzy finding and browsing.
- nvim-tree.lua for file tree navigation.
- gitsigns.nvim for Git signs, delta indicators, and hunk actions.
- trouble.nvim for diagnostics and symbol lists.
- lualine.nvim for a custom statusline.
- the existing config is based on evil_lualine, modifying it to display the active language server and gruvbox-material's internal color palette.
- nvim-cokeline for bufferline.
- aerial.nvim for symbol navigation (along with Telescope).
- sainnhe/gruvbox-material for the Gruvbox theme.
- comment.nvim for commenting.
- project.nvim for project picker.
- indent-blankline.nvim for indentation guides.
- which-key.nvim for keymap guide.
- built-in editing helpers for pair insertion and visual wrapping.
- Neovim (v0.11)
- Telescope dependencies
- Treesitter
lua/config/init.luafor options and global keymapslua/config/lazy.luafor bootstrappinglazy.nvimand loading all plugin specs fromlua/pluginsinit.lua: top-level entrypointlua/config/options.lua: general editor optionslua/config/keymaps.lua: non-plugin global keymapslua/config/lazy.lua: lazy.nvim bootstrap and setuplua/plugins/*.lua: plugin specs and plugin-local configlua/modules/*.lua: helper functions used by the config
- the default
<leader>key is, shiftwidth,tabstop, andsofttabstopare all set to4expandtab,wrap, andtermguicolorsare enabledsigncolumnis always shown
By default, this uses mason-lspconfig for configuring LSP servers:
clangdelixirlsgoplsjsonlslua_lsnim_langserverpyrightts_lszls
See lua/plugins/lsp.lua to modify the default servers.
Rust integration is provided via rustaceanvim.
Gleam integration is provided directly through nvim-lspconfig as Mason does not manage it.
- Toggle keymap guides with which-key.nvim
- use
<leader>?to open guide
- use
- Bufferline + Buffer Switching (see
lua/plugins/nvim-cokeline.lua)<Tab>and<S-Tab>to move focus between buffers<leader>1to<leader>9to jump to buffers<leader>nto move/reorder buffer forward<leader>pto move/reorder buffer backward<F1>to<F9>keys to reorder buffers
- Status Line (see
lua/plugins/lualine.lua)- displays
- no. of warnings and errors (diagnostics)
- current mode (e.g., green = INSERT, red = NORMAL, blue = VISUAL)
- file encoding
- attached LSP
- line additions/updates/deletions (Git)
- displays
- Split Navigation
<C-h>,<C-j>,<C-k>,<C-l>to move between splits<leader><Left>,<leader><Down>,<leader><Up>,<leader><Right>to move between splits (via arrowkeys)
- Context Line (nvim-treesitter-context)
- run
:TSContextto toggle
- run
- File Tree
<leader>ftto toggle file tree
- Terminal
<C-\>to toggle terminal<leader>tffor floating terminal<leader>thfor horizontal terminal<leader>tvfor vertical terminal
- Incremental Selection (Treesitter)
<leader>ssto start selection<leader>sito increment selection (node_incremental)<leader>scto increment selection (scope_incremental)<leader>sdto decrement selection (node_decremental)
- Folding (Treesitter)
zRto open all foldszMto close all foldszoto open fold under cursorzcto close fold under cursor
- Telescope
- Note that the Telescope integration for this project also uses:
<leader>ffto find files<leader>fgfor live grep<leader>fbfor buffers<leader>fhfor help tags<leader>fpfor command palette<leader>fefor file browser extension<leader>fsfor document symbols<leader>fSfor workspace symbols<leader>fdfor diagnostics<leader>gcfor Git commits<leader>gbfor Git branches<leader>gsfor Git status
- aerial.nvim
- added this as an alternative way to navigate through symbols other than Telescope
<leader>fato toggle outline<leader>fAto toggle nav window]aand[ato jump to next/previous symbol
- persistence.nvim for session management
,qsto restore the current directory session,qSto select a session,qlto restore last session,qdto stop session saving for the current session
- project.nvim for project picker
- use
<leader>fjor:Telescope projectsto open picker
- use
See lua/plugins/treesitter.lua:
* default parsers:
* c
* lua
* vim
* vimdoc
* query
* markdown
* markdown_inline
* automatic parser installation is disabled
* highlighting is enabled by default, but will be disabled for files larger than 100 KB
- insert-mode and command-line completions are available
- see
lua/plugins/cmp.lua:<C-n>,<C-p>: move through completion items<C-d>,<C-f>: scroll documentation<C-Space>: trigger completion manually<C-e>: abort completion<CR>: confirm selected completion item<Tab>: select next completion item or jump/expand snippet<S-Tab>: select previous completion item or jump backward in snippet
- commenting using comment.nvim
- (NORMAL)
gccto comment current line - (VISUAL)
gcfor multiline linewise comment - (VISUAL)
gbfor multiline blockwise comment
- (NORMAL)
- see
lua/config/keymaps.luaandlua/modules/autowrap.lua:- insert mode, typing
{,(,[,<,",', or`inserts a pair - in visual mode:
<leader>": wrap selection in double quotes<leader>': wrap selection in single quotes<leader>(: wrap selection in parentheses<leader>[: wrap selection in brackets<leader>{: wrap selection in braces
- insert mode, typing
- via trouble.nvim
<leader>xxto toggle diagnostics<leader>xXto toggle buffer diagnostics<leader>csto toggle document symbols<leader>clto toggle LSP definitions and references<leader>xLto toggle location list<leader>xQto toggle quickfix list
- via lspconfig
gD: declarationgd: definitiongrr: references- note that
gris a built-in Neovim command prefix
- note that
gi: implementationK: hover documentation<C-s>: signature help<leader>D: type definition<leader>rn: rename<leader>ca: code action<leader>wa: add workspace folder<leader>wr: remove workspace folder<leader>wl: list workspace foldersso: Telescope references picker<C-k>: diagnostics float at cursor
[cand]cto navigate between hunks<leader>hsto stage hunk<leader>hrto reset hunk<leader>hSto stage buffer<leader>huto undo stage for a hunk<leader>hRto reset buffer<leader>hpto preview hunk<leader>hbfor line blame<leader>tbto toggle inline line blame<leader>hdfor diff against staged/last commit<leader>hDfor diff relative to parent commit<leader>tdto toggle visibility for deleted lines
- the configured version of Treesitter in this project uses the
masterbranch.
You will need to install Go for gopls to work.
Gleam requires installing Gleam.
One easy way to install Gleam would be to use asdf:
asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git
asdf plugin add rebar https://github.com/Stratus3D/asdf-rebar.git
asdf plugin add gleam https://github.com/vic/asdf-gleam.git
asdf set -u erlang latest
asdf set -u rebar latest
asdf set -u gleam latest
asdf installThen run:
asdf exec gleam -V
You may also install Elixir in the same manner:
asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git
# install the version compatible with your current Erlang/OTP version.
asdf install elixir 1.19.5This project is also configured to link asdf to Neovim (see init.lua). The ~/.asdf/shims directory needs to exist for nvim-lspconfig to be able to resolve gleam through asdf (and subsequently gleam lsp).
If Elixir fails to load when running asdf exec elixir, see this issue comment.
You need to install Haskell, preferably through GHCup:
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | shYou may opt out by removing hls from lua/plugins/lsp.lua.
This configuration may not work well in Windows environments when using pyenv-win. See this issue.
If rust_analyzer is not being detected, you can try to check for the ~/.local/state/nvim/lsp.log file for the following error:
"error: Unknown binary 'rust-analyzer' in official toolchain 'stable-x86_64-unknown-linux-gnu'.\n"
In this case, if you have already pre-installed Cargo and rustc, you need to manually retrieve the standard library sources:
rustup component add rust-analyzerYou need to install nimlangserver using the nimble package manager:
nimble install nimlangserverIn some cases, this may fail because some package repositories provide outdated versions of Nim. In this case, you may use choosenim to install Nim.
You will need the typescript-language-server and typescript packages globally installed:
npm install -g typescript-language-server typescriptBy default, this configuration uses Volar's default Hybrid Mode.
To use Volar, you will need to install @vue/language-server globally:
npm install -g @vue/language-serverYou may also need to set up @vue/typescript-plugin:
npm install -g @vue/typescript-pluginIf Volar fails to run whenever Vue files are being opened, you can check out this issue.

