Frequently Asked Questions

How do I use a plugin not implemented in nixvim

Using a plugin not supported by nixvim, but packaged in nixpkgs is straightforward:

  • Register the plugin through extraPlugins: extraPlugins = [pkgs.vimPlugins."<plugin name>"].
  • Configure the plugin through extraConfigLua: extraConfigLua = "require('my-plugin').setup({foo = "bar"})";

How do I use a plugin not packaged in nixpkgs

This is straightforward too, you can add the following to extraPlugins for a plugin hosted on GitHub:

extraPlugins = [(pkgs.vimUtils.buildVimPlugin {
    name = "my-plugin";
    src = pkgs.fetchFromGitHub {
        owner = "<owner>";
        repo = "<repo>";
        rev = "<commit hash>";
        hash = "<nix NAR hash>";
    };
})];

The nixpkgs manual has more information on this.

How do I solve <name> missing

When using NixVim it is possible to encounter an error of the type attribute 'name' missing, for example it could look like:

       (stack trace truncated; use '--show-trace' to show the full trace)

       error: attribute 'haskell-scope-highlighting-nvim' missing

       at /nix/store/k897af00nzlz4ylxr5vakzpcvh6m3rnn-source/plugins/languages/haskell-scope-highlighting.nix:12:22:

           11|     originalName = "haskell-scope-highlighting.nvim";
           12|     defaultPackage = pkgs.vimPlugins.haskell-scope-highlighting-nvim;
             |                      ^
           13|

This usually means one of two things:

  • The nixpkgs version is not in line with NixVim (for example nixpkgs nixos-24.05 is used with NixVim master)
  • The nixpkgs unstable version used with NixVim is not recent enough.

How do I create multiple aliases for a single keymap

You could use the builtin map function (or similar) to do something like this:

keymaps =
  (builtins.map (key: {
    inherit key;
    action = "<some-action>";
    options.desc = "My cool keymapping";
  }) ["<key-1>" "<key-2>" "<key-3>"])
  ++ [
    # Other keymaps...
  ];

This maps a list of keys into a list of similar keymaps. It is equivalent to:

keymaps = [
  {
    key = "<key-1>";
    action = "<some-action>";
    options.desc = "My cool keymapping";
  }
  {
    key = "<key-2>";
    action = "<some-action>";
    options.desc = "My cool keymapping";
  }
  {
    key = "<key-3>";
    action = "<some-action>";
    options.desc = "My cool keymapping";
  }
  # Other keymaps...
];