My Neovim configuration
Find a file
2025-09-05 09:26:47 +02:00
after/ftplugin fix: spring cleanup 2025-04-02 12:36:01 +02:00
lsp feat(lsp): switch to official Elixir LSP 2025-09-01 07:04:38 +02:00
lua/weeheavy feat: SSH target selector for oil.nvim with fzf 2025-09-05 09:26:47 +02:00
mkcheatsheet chore: move cheatsheet generation to subfolder 2024-10-17 16:13:06 +02:00
.luarc.json feat: switch to native 0.11 LSP, remove obsolete things 2025-04-01 10:53:48 +02:00
CHEATSHEET.md feat: add mini.ai 2025-05-20 15:53:29 +02:00
CHEATSHEET.pdf feat: add mini.ai 2025-05-20 15:53:29 +02:00
init.lua docs: more precise mingw make instructions 2025-04-18 23:03:51 +02:00
lazy-lock.json feat: SSH target selector for oil.nvim with fzf 2025-09-05 09:26:47 +02:00
nerdfont_symbol_ref.md docs: add Nerfont symbol reference markdown file 2025-06-11 11:56:53 +02:00
README.md docs: extend Mason section, new screenshot 2025-08-29 13:51:00 +02:00
sample.png docs: extend Mason section, new screenshot 2025-08-29 13:51:00 +02: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 15 on Neovim 0.11.0.

Start and open init.lua

Around 15% of the plugins are lazy-loaded.

LazyStart 18.67ms
LazyDone  43.52ms (+24.85ms)
UIEnter   110.71ms (+67.19ms)

Starting with an empty file

Around 50% of the plugins are lazy-loaded.

LazyStart 18.15ms
LazyDone  46.91ms (+28.76ms)
UIEnter   59.08ms (+12.17ms)

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
rose-pine Theme https://github.com/rose-pine/neovim
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
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
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
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
blink.cmp Fuzzy code completion https://github.com/Saghen/blink.cmp
diffview.nvim Git diff viewer/stager https://github.com/sindrets/diffview.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
Linter Git commits commitlint Ensure to adhere to Conventional Commit format
Linter JSON jsonlint
Linter Text proselint See source
Linter Text write-good See source
Formatter Markdown, YAML prettier Markdown table formatting n/a
Formatter Lua stylua Formats Lua n/a
Formatter Bash shfmt Formats Bash scripts n/a
Formatter HCL hclfmt For HashiCorp configuration language
Formatter many prettier See docs
Formatter YAML yamlfmt

Key bindings

See CHEATSHEET

Open issues/TODOs

Please don't upload to GitHub