My Neovim Dotfiles
Author: | Alex |
Title: | My Neovim dotfiles |
Language: | en-US |
Number of words: | 390 |
Created: | 14:11 on Monday, 02. January 2023 |
Modified: | 02:30 on Wednesday, 04. January 2023 |
Keywords: | neovim, lua |
Excerpt: | My personal configuration (aka „dotfiles“) for the Neovim text editor. The project is hosted on GitLab and can serve as base for your own config. But I advice against using it directly, because it is fast-moving target and some changes may even break it. |
Tags: | neovim |
Page layout: | default_dyn |
Media: | 2 Object(s) |
Core features:
The configuration is built around Neovim’s native LSP implementation and uses Treesitter for advanced highlighting, nvim-cmp for autocompletion, neo-tree as file-tree and many more plugins. The goal is to create an editor configuration for software developers, using all the advanced features.
Neovim-Orgmode is also included.
Requirements
-
Neovim 0.8 or later is the minimum supported version. Some OS-level prerequisites like ripgrep and fd are necessary for optimal functionality of some plugins (particularly telescope).
-
A working C compiler might be required to install additional Tree-Sitter parsers.
-
Git is required to install and update plugins
-
A terminal with True Color support and a NERD Font is highly recommended. Without them, the visual quality will suffer greatly. I suggest either Alacritty or Kitty. Both will make Neovim look much better and increase performance of all terminal-based applications. A NERD Font comes with many symbols, icons, Unicode characters and even emojis. Without such a font, Neovim would not be able to display filetype icons, emojis and many other symbols. My NERD Font of choice (see screen shots) is Iosevka, a free monospaced font that comes with many variations- Available on the NERD Font download page
How it looks
The color theme is a modified version of sonokai and uses some
advanced features like different background colors for special windows like Neotree, terminal and outline
views. It also comes with 2 color variants, a cold
one with a blue-ish tint and a warm
variant with a
more red-ish look.
Here is the warm variant, also visible is the right sidebar with the symbol outline viewer.
LSP configuration
The configuration does not use LSPInstall. Language servers are configured manually in lua/setup_lsp
.
The paths to language servers are configured in lua/config.lua
. You can optionally enable Mason and let
it do all the installation work. I prefer a manual LSP configuration and keep the language servers
updated externally.
Pre-configured language servers:
- clangd (C, CPP, objective C)
- gopls (Go)
- tsserver (JavaScript, TypeScript)
- pyright (Python)
- cssls (CSS and SCSS)
- html-language-server
- dartls (Dart and Flutter)
- rust-analyzer (Rust, obviously)
- sumneko_lua (Lua)
- vimls (Vim Script)
- nimlsp (The Nim language)
- texlab (TeX and LaTeX)
- als (Ada)
- metals (for Scala, but this requires a lot of additional installation work)
How to use this.
The config is highly modular. Many plugins can be enabled or disabled by editing lua/config.lua
. After
changing the plugin configuration, running a PackerSync
is mandatory.
Where to get?
The project is hosted on GitLab
Issues
- Tree-Sitter: JavaScript parser is disabled, because it’s just too damn slow. You can change this in
lua/setup_treesitter.lua
. - Tree-Sitter: Indentation feature is disabled, because it can cause massive memory leaks.
See this issue. You may also change this in
lua/setup_treesitter.lua
. - Color scheme: still some inconsistencies, it’s WIP.