- Lua 87.6%
- TeX 11.9%
- Shell 0.5%
| after/ftplugin | ||
| lua/weeheavy | ||
| CHEATSHEET.md | ||
| CHEATSHEET.pdf | ||
| init.lua | ||
| lazy-lock.json | ||
| logo.png | ||
| mkcheatsheet.sh | ||
| README.md | ||
| sample.png | ||
| tmpl.tex | ||
| vars.yml | ||
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.9.x
- Install macOS/Windows dependencies documented in
init.lua - Clone this Git repository to
~/.config/nvimwhen on macOS/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 in the table down
Speed
Output from lazy.nvim profiling (:Lazy profile) on a MacBook Pro M2 Max,
macOS 14.
Start and open init.lua
Around 20% of the plugins are lazy-loaded.
Startuptime: 81.44ms
Based on the actual CPU time of the Neovim process till UIEnter.
This is more accurate than `nvim --startuptime`.
LazyStart 11.34ms
LazyDone 23.66ms (+12.32ms)
UIEnter 81.44ms (+57.78ms)
Starting with an empty file
Around 65% of the plugins are lazy-loaded.
Startuptime: 35.89ms
Based on the actual CPU time of the Neovim process till UIEnter.
This is more accurate than `nvim --startuptime`.
LazyStart 11.55ms
LazyDone 24.74ms (+13.18ms)
UIEnter 35.89ms (+11.15ms)
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 |
| nightfox.nvim | Theme with treesitter/lsp support | https://github.com/EdenEast/nightfox.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 |
| nvim-web-devicons | filetype glyphs (icons) for plugins | https://github.com/nvim-tree/nvim-web-devicons |
| 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 |
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 | n/a |
| LSP | Go | gopls | n/a | |
| LSP | Terraform | terraform-ls | n/a | |
| Linter | Ansible | ansible-lint | yamllint vs. ansible-lint | |
| Linter | YAML | yamllint | yamllint vs. ansible-lint | |
| 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
