Skip to content

mars-research/neovim-flake

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

neovim-flake

Nix flake for neovim with configuration options

Originally based on Jordan Isaacs' amazing neovim-flake

Try it out

$ cachix use gvolpe-nixos # Optional: this will save you CPU resources
$ nix run github:gvolpe/neovim-flake#

By default, Scala, Dhall, Elm, Nix, Haskell, and SQL lsp servers are enabled.

Screenshot

screenshot

Home Manager

First of all, we add the input flake.

{
  neovim-flake = {
    url = github:gvolpe/neovim-flake;
    inputs.nixpkgs.follows = "nixpkgs";
  };
}

Followed by importing the HM module.

{
  imports = [ neovim-flake.nixosModules.hm ];
}

Then we should be able to use the given module. E.g.

{
  programs.neovim-ide = {
    enable = true;
    settings = {
      vim.viAlias = false;
      vim.vimAlias = true;
      vim.lsp = {
        enable = true;
      };
    };
  };
}

For the Scala module, the metals binary can be easily overridden with the provided builder. E.g.

{
  vim.lsp = {
    enable = true;
    scala = {
      enable = true;
      metals = pkgs.metalsBuilder {
        version = "0.11.8+76-22425a8b-SNAPSHOT";
        outputHash = "[Insert hash (try nix build .#)]";
      };
      type = "nvim-metals"; # or nvim-lspconfig
    };
  };
}

We can also choose to use the minimal configuration via nvim-lspconfig or use the more featureful nvim-metals (default and recommended).

Have a look at my nix-config for a full example.

Options

The philosophy behind this flake configuration is sensible options. While the default package has almost everything enabled, when building your own config using the overlay everything is disabled. By enabling a plugin or language, it will set up the keybindings and plugin automatically. Additionally each plugin knows when another plugin is enabled allowing for smart configuration of keybindings and automatic setup of things like completion sources and languages.

A goal of mine is that I shouldn't not be able to break neovim by enabling or disabling an option. For example you can't have two completion plugins enabled as the option is an enum.

Language Support

Most languages use nvim-lspconfig to set up language server. Additionally some languages also (or exclusively) use null-ls to extend capabilities.

Nix

LSP Server: rnix-lsp

Formatting

rnix provides builtin formatting with nixpkgs-fmt.

Elm

LSP Server: elmls

Haskell

LSP Server: hls

Scala

LSP Server: metals

Formatting

Metals provides builtin formatting with scalafmt.

Plugins

Dhall

LSP Server: dhall-lsp-server

SQL

LSP Server: sqls

Formatting

sqls provides formatting but it does not work very well so it is disabled. Instead using sqlfluff through null-ls.

Linting

Using sqlfluff through null-ls to provide linting diagnostics set at information severity.

Plugins

  • sqls.nvim for useful actions that leverage sqls LSP

Rust

LSP Server: rust-analyzer

Formatting

Rust analyzer provides builtin formatting with rustfmt

Plugins

C/C++

LSP Server: ccls

Typescript

LSP Server: typescript-language-server

Linting

Using eslint through null-ls.

Formatting

Disabled lsp server formatting, using prettier through null-ls.

Python

LSP Server: pyright

Formatting:

Using black through null-ls

Markdown

Plugins

  • glow.nvim for preview directly in neovim buffer

HTML

Plugins

  • nvim-ts-autotag for autoclosing and renaming html tags. Works with html, tsx, vue, svelte, and php

All Plugins

A list of all plugins that can be enabled

LSP

Buffers

Comments

Statuslines

Filetrees

Git

Treesitter

Visuals

Utilities

  • telescope an extendable fuzzy finder of lists. Working ripgrep and fd
  • which-key a popup that displays possible keybindings of command being typed

Markdown

  • glow.nvim a markdown preview directly in neovim using glow

Completions

Snippets

  • vim-vsnip a snippet plugin that supports LSP/VSCode's snippet format

Autopairs

Themes

  • onedark a dark colorscheme with multiple options
  • nightfox a highly customizable theme with treesitter support
  • tokyonight-nvim a neovim theme with multiple color options

Folds

  • nvim-ufo enhance "ultra fold" experience for neovim

Dependencies

  • plenary which is a dependency of some plugins, installed automatically if needed
  • promise-async a dependency of nvim-ufo

About

Nix flake for neovim & scala metals

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Nix 100.0%