My Neovim configuration
  • Lua 87.6%
  • TeX 11.9%
  • Shell 0.5%
Find a file
2024-10-17 16:13:06 +02:00
after/ftplugin fix(help): hide colorcolumn 2024-08-20 10:36:51 +02:00
lua/weeheavy feat(lsp-zero): switch to 4.x branch, add additional YAML/TOML schemas 2024-09-25 12:18:51 +02:00
mkcheatsheet chore: move cheatsheet generation to subfolder 2024-10-17 16:13:06 +02:00
CHEATSHEET.md chore: move cheatsheet generation to subfolder 2024-10-17 16:13:06 +02:00
CHEATSHEET.pdf chore: move cheatsheet generation to subfolder 2024-10-17 16:13:06 +02:00
init.lua housekeeping 2024-03-05 21:26:01 +01:00
lazy-lock.json chore: update lazy plugins 2024-10-15 12:34:38 +02:00
README.md docs: add wit.nvim to todo 2024-09-23 10:42:58 +02:00
sample.png update demo screenshot 2024-03-06 07:35:10 +01:00

My Neovim configuration

Motivation

After doing my first steps with https://github.com/nvim-lua/kickstart.nvim, I decided to roll my own, custom, "lightweight" Neovim configuration in order to better understand Neovim and its configuration/customization, package managers, plugins etc. and have "my own" config that only includes things I really need. More on the "why's" are explained in my blog post.

Installation

  1. Install Neovim 0.10. or newer
  2. Install the dependencies documented in init.lua
  3. Clone this Git repository to
    1. ~/.config/nvim on macOS or Linux
    2. c:\Users\foobar\AppData\Local\nvim when on Windows

Finishing touches

  • Create a $HOME/.ignore file and add big, useless directories to it, so Telescope/ripgrep/fd can ignore those. My current list of files/directories is available in lua/weeheavy/plugins/telescope-fzf-native.lua
  • Install Mason LSP/linter/formatters from the table down below

Speed

It's not too important. Still, I try to balance increasing startup time with the usefullness of a plugin.

Output from lazy.nvim profiling (:Lazy profile) on a MacBook Pro M2 Max, macOS 14 on Neovim 0.10.1.

Start and open init.lua

Around 10% of the plugins are lazy-loaded.

 Startuptime: 96.76ms

Based on the actual CPU time of the Neovim process till UIEnter.
This is more accurate than `nvim --startuptime`.
  LazyStart 13.3ms
  LazyDone  41.06ms (+27.76ms)
  UIEnter   96.76ms (+55.71ms)

Starting with an empty file

Around 50% of the plugins are lazy-loaded.

Startuptime: 49.82ms

Based on the actual CPU time of the Neovim process till UIEnter.
This is more accurate than `nvim --startuptime`.
  LazyStart 13.75ms
  LazyDone  40.39ms (+26.64ms)
  UIEnter   49.82ms (+9.43ms)

Plugins

Name Purpose URL
lazy.nvim Package manager https://github.com/folke/lazy.nvim
telescope.nvim Find, Filter, Preview, Pick https://github.com/nvim-telescope/telescope.nvim
telescope-fzf-native.nvim Fuzzy finder for Telescope https://github.com/nvim-telescope/telescope-fzf-native.nvim
nvim-treesitter Parser/syntax highlighting https://github.com/nvim-treesitter/nvim-treesitter
nvim-treesitter-context Shows current line context https://github.com/nvim-treesitter/nvim-treesitter-context
nvim-treesitter-textobjects ? https://github.com/nvim-treesitter/nvim-treesitter-textobjects
oil.nvim file explorer, (bulk file creation/rename) https://github.com/stevearc/oil.nvim
tokyonight.nvim Theme with treesitter/lsp support https://github.com/folke/tokyonight.nvim
lualine.nvim Status line https://github.com/nvim-lualine/lualine.nvim
gitsigns.nvim Git change indicator https://github.com/lewis6991/gitsigns.nvim
which-key.nvim Shows contextual key bindings https://github.com/folke/which-key.nvim
vim-illuminate Highlight similar words (w/ LSP, Treesitter, regex) https://github.com/RRethy/vim-illuminate
lsp-zero.nvim LSP for mere mortals https://github.com/VonHeikemen/lsp-zero.nvim
nvim-lspconfig Component of lsp-zero.nvim https://github.com/neovim/nvim-lspconfig
cmp-nvim-lsp Dependency of lsp-zero.nvim https://github.com/hrsh7th/cmp-nvim-lsp
conform.nvim Formatter configuration, replacement for null-ls https://github.com/stevearc/conform.nvim
mason.nvim Install/manage LSP/DAP servers, linters and formatters https://github.com/williamboman/mason.nvim
mason-lspconfig.nvim Bridges mason.nvim with the lspconfig plugin https://github.com/williamboman/mason-lspconfig.nvim
zen-mode.nvim Distraction-free coding for Neovim https://github.com/folke/zen-mode.nvim
twilight.nvim Dims inactive portions of the code you're editing https://github.com/folke/twilight.nvim
todo-comments.nvim Highlights NOTE:, FIXME: etc. and makes them findable via Telescope https://github.com/folke/todo-comments.nvim
mini.nvim I use the icons https://github.com/echasnovski/mini.nvim
flash.nvim Navigation and Treesitter selection w/ search labels https://github.com/folke/flash.nvim
copilot.lua The better github.com/github/copilot.vim https://github.com/zbirenbaum/copilot.lua
copilot-cmp transforms zbirenbaum/copilot.lua into a cmp source. https://github.com/zbirenbaum/copilot-cmp
nvim-lint Narrow-scope linter plugin to use via Neovim diagnostic framework https://github.com/mfussenegger/nvim-lint
snipe.nvim Buffer navigation https://github.com/leath-dub/snipe.nvim

Looks

This is how it looks like:

My Neovim setup

Mason essentials

This lists the LSPs/linter/formatters I consider ok for my use cases. Tools may support many more languages than I document in the "Language" column. The formatters installed here are used via conform.nvim.

Type Language Name Benefits Issues
LSP Markdown marksman Autocompletes links https://github.com/artempyanykh/marksman/issues/327
LSP Go gopls n/a
LSP Terraform/OpenTofu terraform-ls n/a
LSP Terraform/OpenTofu tflint n/a
LSP Ansible ansible-language-server Ansible knowhow Search yaml.ansible in prefs.lua
LSP Bash bash-language-server Incorporates ShellCheck n/a
LSP YAML yaml-language-server n/a
Linter Ansible ansible-lint yamllint vs. ansible-lint
Linter YAML yamllint yamllint vs. ansible-lint
Linter Terraform/OpenTofu tflint
Linter any woke Makes you aware of woke language
Formatter Markdown, YAML prettier Markdown table formatting! n/a
Formatter Lua stylua Formats Lua n/a
Formatter Bash shfmt Formats Bash scripts n/a

Key bindings

See CHEATSHEET

Open issues/TODOs

Please don't upload to GitHub