Files

88 lines
2.1 KiB
Nix

{
pkgs,
lib,
...
}: {
packPlugins = plugins: let
# Set option value with default priority so that values are appended by default
pathsToLink = [
# :h rtp
"/autoload"
"/colors"
"/compiler"
"/doc"
"/ftplugin"
"/indent"
"/keymap"
"/lang"
"/lua"
"/lsp"
"/pack"
"/parser"
"/plugin"
"/queries"
"/rplugin"
"/spell"
"/syntax"
"/tutor"
"/after"
"/ftdetect"
# plenary.nvim
"/data/plenary/filetypes"
# telescope fzf
"/build"
# blink
"/target"
];
# Every plugin has its own generated help tags (doc/tags)
# Remove them to avoid collisions, new help tags
# will be generate for the entire pack later on
overriddenPlugins =
map (
plugin:
plugin.plugin.overrideAttrs (prev: {
nativeBuildInputs = lib.remove pkgs.vimUtils.vimGenDocHook prev.nativeBuildInputs or [];
configurePhase = ''
${prev.configurePhase or ""}
rm -vf doc/tags'';
})
)
plugins;
# Python3 dependencies
python3Dependencies = let
deps = map (p: p.plugin.python3Dependencies or (_: [])) plugins;
in
ps: builtins.concatMap (f: f ps) deps;
# Combined plugin
combinedPlugin = (pkgs.vimUtils.toVimPlugin (
pkgs.buildEnv {
name = "plugin-pack";
paths = overriddenPlugins;
inherit pathsToLink;
# Remove empty directories and activate vimGenDocHook
postBuild = ''
find $out -type d -empty -delete
runHook preFixup
'';
passthru = {
inherit python3Dependencies;
};
}
)).overrideAttrs (prev: {
pname = prev.pname or "vimplugin-plugin-pack";
});
# Combined plugin configs
combinedConfig = builtins.concatStringsSep "\n" (
builtins.concatMap (x: lib.optional (x.config != null && x.config != "") x.config) plugins
);
in {
plugin = combinedPlugin;
config = combinedConfig;
optional = false;
};
}