Some setup notes about my config for my future self and any travelers.
- LSPs are configured in the /lsp directory as they should be in Neovim 0.11+
- The LSP servers and formatters are installed as OS packages
I prefer the Codebook LSP for spell checking code. Spell checkers in general don't understand coding conventions, this spell checker does taking language syntax into consideration before making a suggestion.
- codebook
- Disable Neovim spell check when in use, otherwise default back to Neovim's builtin spell check. See options.lua for the auto command snippet.
Markdown linting, completions, goto definition, references, renames, diagnostics, and more.
- marksman
Dprint can format various common file types for consistency using it's plugin system.
- dprint
- typescript
- json
- markdown
- toml
- dockerfile
- jupyter
- markup (HTML, Vue, Svelte, Astro, XML, etc)
- YAML
Note: Plugins should be installed with a global config (
dprint init --global), and optionally a per project override config.
I only really use this for Neovim configuration, basic LSP with a lua style formatter.
- lua_ls
- stylua
Python requires multiple LSPs for different things. ruff is primarily used for formatting/linting and basedpyright is used for type checking, completions, go to definition, etc (everything else).
- basedpyright
- Ruff (documentation hover is disabled in favor of basedpyright)
Rustup manages the Rust toolchain. Once Rustup is installed, its relevant components are added to Neovim.
- rustup
- rust-analyzer
- clippy (swapped for 'cargo check')
- rustfmt
- rust-analyzer
LSP for Docker that provides some nice features for the ecosystem.
- docker-language-server
Note: The Docker Language Server relies on some features that are dependent on Buildx. If Buildx is not available as a Docker CLI plugin then those features will not be available.
Schema validation from the JSON Schema Store. This works well with things like Docker Compose.
- yaml-language-server
lazy.nvim is being used to manage plugins (not to be confused with Lazy.nvim).
Some of my favorite themes that don't bother my eyes.
- Kanso
- Vague (Customized)
Markdown Preview is being used to render markdown in a Github like format.
- Markdown Preview (requires yarn to build, browser based preview)
- Markview (inline terminal based preview)
Blink is being used to power completions via LSPs/snippets. I chose this over nvim-cmp because it is much easier to setup and works well enough.
- Blink
Conform is used with my formatters for keymap consistency.
- Conform
Treesitter is being used for highlighting, indentation, and incremental selection.
Neovim smartindent is disabled when using this.
- Treesitter
- TODO: Treesitter text objects to jump between functions and such.
Snacks picker is being used to fuzzy find over buffer, files, grep, diagnostics, etc.
- Snacks Picker
I like a customizable inline LSP code action popup.
- Tiny code action (disabled)
- Snacks Picker
Jump to to a location in view directly.
- Flash
Manipulate matching character pairs easily.
- Nvim Surround
Gitsigns is being used to work with hunks in the buffer as well as mark changes, Neogit is used for everything else.
- Git signs
- Neogit
- Diffview
- Todo comments
Center windows while gaining some scratch buffers. I use the scratch buffers similarly to the Jetbrains scratch file feature.
- No Neck Pain
Explore and modify file trees quickly.
- Snacks Explorer
- Oil Nvim
Configure the lua-ls language server for editing Neovim configuration (configures the lsp for the Neovim environment quick and easily).
- LazyDev
Switch around bookmarked buffers easily.
- Arrow buffer manager