- Lua 87.6%
- TeX 11.9%
- Shell 0.5%
| after/ftplugin | ||
| lua/weeheavy | ||
| mkcheatsheet | ||
| CHEATSHEET.md | ||
| CHEATSHEET.pdf | ||
| init.lua | ||
| lazy-lock.json | ||
| README.md | ||
| sample.png | ||
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
- Install Neovim 0.10. or newer
- Install the dependencies documented in
init.lua - Clone this Git repository to
~/.config/nvimon macOS or Linuxc:\Users\foobar\AppData\Local\nvimwhen on Windows
Finishing touches
- Create a
$HOME/.ignorefile and add big, useless directories to it, so Telescope/ripgrep/fd can ignore those. My current list of files/directories is available inlua/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:
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
- https://github.com/axkirillov/hbac.nvim
- solution to search-replace visual blocks
- https://github.com/aliqyan-21/wit.nvim
