This is my Neovim configuration. It uses recent and maintained plugins with a focus on performance and a complete developer experience. Load times in around 30ms on an 8 core laptop.
The motivation to maintain my own configuration is two fold:
- Support unique aspects of my workflow (NixOS, Wezterm, Neovide, etc)
- I understand exactly why everything works the way it does, as I wrote and maintain the entire config
- Robust and automatic session management per branch in directories, as well as the ability to create custom sessions.
- Popular and functional colorschemes preinstalled
- Modern UI with Noice, nvim-notify, and others
- Almost entirely lazy loaded
- Searchable (
<space>ek
), well documented, and thorough keymappings - LSP, DAP, and linting, all completely language agnostic
- Treesitter textobject bindings that will become staples of your workflow
The original impetus to hand crafted my own configuration was to ensure that I understood everything my Neovim configuration was capable of. Starting from a completely unmodified Neovim instance, I slowly added functionality (with packer.nvim, the, at the time, de facto plugin manager), as I needed and wanted, but only once fully understanding what I already had. I would research all plugins which provided a specific functionality, and their advantages and disadvantages, before adding them to ensure that I got the best and most up to date experience possible.
As time passed, I adopted lazy.nvim, greatly improving my config's performance with lazy loading, added dozens plugins to my config, and swapped old plugins to more modern alternatives, getting me to where I am now. While I still firmly believe that everyone should start with plain Neovim (before diving into highly complex plugins and distros), I don't know if I could recommend starting from complete scratch as I did, especially if your workflow is more typical. Newer distros such as LazyVim provide such a good baseline without sacrificing configurability.
The are many good arguments to be made for distros: time saved messing with configs, better support when things break, powerful features and customizations, and much more. Despite that, I would still very much recommend everyone spends time to fully understand Vim/Neovim completely, as well as take time to understand your all the plugins your config provides, as the real power of Neovim only unlocks when you are using every feature of your configuration to your advantage, instead of fighting with key-mappings you can't remember, and nurturing bad habits like spamming hjkl to get anywhere in your code, because you never did the built in Neovim tutorial.
While newer distros such as LazyVim have greatly improved in striking a balance between providing good defaults and setups for common needs while still allowing complete customization, I have stuck with my config as I don't really get much (at this point) from migrating to a modified distro. I would have to learn all the idiosyncrasies of that config, and then end up rewriting half of it just to suit my workflow.
This config may contain some helpful examples of how to customize and configure Neovim and particular plugins (listed below), but serves pretty much only as that, as the config is completely tailored to my immediate needs and desires. This is reflected in the number of plugins (77 total, 49 loaded with a .c
file open) vs Neovim distro's like LazyVim's (43 plugins total, 28 loaded with a .c
file open as of Aug 2024) with almost identical base functionality.
- First clone this repo into
~/.config/
with a command like the following:
git clone https://github.com/xyven1/neovim-config.git ~/.config/nvim
or if you already have a config
git clone https://github.com/xyven1/neovim-config.git ~/.config/xyven1/neovim-config
Note: if you use the second option run Neovim with NVIM_APPNAME=xyven1/neovim-config/
- Install Neovim >=v0.10.0 from your package manager, or use the following script:
~/.config/nvim/scripts/nvim.sh
- Install the dependencies listed below (ones necessary for basic functionality are marked with !)
- Run the command
nvim
and let Lazy.nvim do its thing, then run:COQdeps
to install the dependencies forcoq_nvim
- Restart Neovim, and everything should work.
- !python > 3.8.2 (for coq_nvim)
- !python3-venv (for coq_nvim)
- !fzf
- !ripgrep
- direnv (for loading development environments)
- rebelot/kanagawa.nvim
- folke/tokyonight.nvim
- Mofiqul/vscode.nvim
- olimorris/onedarkpro.nvim
- sainnhe/gruvbox-material
- JoosepAlviste/nvim-ts-context-commentstring
- folke/todo-comments.nvim
- numToStr/Comment.nvim
- danymat/neogen
- ray-x/lsp_signature.nvim
- mfussenegger/nvim-lint
- neovim/nvim-lspconfig
- hedyhli/outline.nvim
- glepnir/lspsaga.nvim
- kazhala/close-buffers.nvim
- rcarriga/nvim-notify
- ptdewey/pendulum-nvim
- kevinhwang91/nvim-ufo
- folke/noice.nvim
- nil_ls