Skip to content

xyven1/neovim-config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Neovim Configuration

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.

Motivation

The motivation to maintain my own configuration is two fold:

  1. Support unique aspects of my workflow (NixOS, Wezterm, Neovide, etc)
  2. I understand exactly why everything works the way it does, as I wrote and maintain the entire config

Features

  • 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

How I Got Here

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.

Caveats

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.

Install Steps

  1. 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/

  1. Install Neovim >=v0.10.0 from your package manager, or use the following script: ~/.config/nvim/scripts/nvim.sh
  2. Install the dependencies listed below (ones necessary for basic functionality are marked with !)
  3. Run the command nvim and let Lazy.nvim do its thing, then run :COQdeps to install the dependencies for coq_nvim
  4. Restart Neovim, and everything should work.

External dependencies

  • !python > 3.8.2 (for coq_nvim)
  • !python3-venv (for coq_nvim)
  • !fzf
  • !ripgrep
  • direnv (for loading development environments)

Plugins

code-runner

colorscheme

comment

completion

cursorline

debugging

diagnostics

editing-support

file-explorer

formatting

fuzzy-finder

git

github

icon

indent

keybinding

lsp

lsp-installer

markdown-and-latex

motion

nvim-dev

plugin-manager

quickfix

search

session

split-and-window

startup

statusline

syntax

tabline

test

utility

Language Servers

  • nil_ls

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages