Instead of maintainers providing an actual `defaultPackage`, they should specify the pkg name which we'll use when calling `lib.mkPackageOption`. This makes `mkVimPlugin` and `mkNeovimPlugin` compliant with #1950.
3.2 KiB
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...
];
How to use system provided binaries instead of nixvim provided ones
There are a number of plugins that install extra packages using nix
, but this can cause issues.
For example enabling plugins.treesitter
could add gcc
to the PATH of neovim, and this could break workflows that rely on the system provided compiler.
Most plugins that install packages also provide a xxxPackage
option that can be set to null
to skip the installation of the package.
For example plugin.treesitter
provides the gccPackage
option.