mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-26 23:54:01 +00:00
ce505a3984
Neovim plugins are now more often than not written in lua. One advantage of the lua ecosystem over vim's is the existence of luarocks and the rockspec format, which allows to specify a package dependencies formally. I would like more neovim plugins to have a formal description, "rockspec" being the current candidate. This MR allows to use nix lua packages as neovim plugins, so as to enjoy every benefit that rockspecs bring: - dependdency discovery - ability to run test suite - luarocks versioning - rockspec metadata the vim update.py script will check if an attribute with the vim plugin pname exists in lua51Packages. If it does, it uses buildNeovimPluginFrom2Nix on it, which modifies the luarocks config to do an almost flat install (luarocks will install the package in the lua folder instead of share/5.1/lua etc). It also calls toVimPlugin on it to get all the vim plugin niceties. The list of packages that could benefit from this is available at https://luarocks.org/labels/neovim but I hope it grows.
49 lines
980 B
Nix
49 lines
980 B
Nix
{ lib, stdenv
|
|
, rtpPath
|
|
, vim
|
|
, vimCommandCheckHook
|
|
, vimGenDocHook
|
|
, neovimRequireCheckHook
|
|
, toVimPlugin
|
|
}:
|
|
|
|
rec {
|
|
buildVimPlugin = attrs@{
|
|
name ? "${attrs.pname}-${attrs.version}",
|
|
namePrefix ? "vimplugin-",
|
|
src,
|
|
unpackPhase ? "",
|
|
configurePhase ? "",
|
|
buildPhase ? "",
|
|
preInstall ? "",
|
|
postInstall ? "",
|
|
path ? ".",
|
|
addonInfo ? null,
|
|
...
|
|
}:
|
|
let drv = stdenv.mkDerivation (attrs // {
|
|
name = namePrefix + name;
|
|
|
|
inherit unpackPhase configurePhase buildPhase addonInfo preInstall postInstall;
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
target=$out/${rtpPath}/${path}
|
|
mkdir -p $out/${rtpPath}
|
|
cp -r . $target
|
|
|
|
runHook postInstall
|
|
'';
|
|
});
|
|
in toVimPlugin(drv.overrideAttrs(oa: {
|
|
rtp = "${drv}";
|
|
}));
|
|
|
|
buildVimPluginFrom2Nix = attrs: buildVimPlugin ({
|
|
# vim plugins may override this
|
|
buildPhase = ":";
|
|
configurePhase =":";
|
|
} // attrs);
|
|
}
|