nix-community.nixvim/modules/top-level/plugins/combine-plugins.nix

50 lines
1.7 KiB
Nix
Raw Normal View History

{
lib,
callPackage,
pathsToLink,
standalonePlugins,
}:
let
inherit (import ./utils.nix lib)
getAndNormalizeDeps
removeDeps
;
mkPluginPack = callPackage ./mk-plugin-pack.nix { inherit lib; };
in
/*
*combinePlugins* function
Take a list of combined plugins, combine the relevant ones and return the resulting list of plugins
*/
normalizedPlugins:
let
# Plugin list extended with dependencies
allPlugins =
let
pluginWithItsDeps = p: [ p ] ++ builtins.concatMap pluginWithItsDeps (getAndNormalizeDeps p);
in
lib.unique (builtins.concatMap pluginWithItsDeps normalizedPlugins);
# Separated start and opt plugins
partitionedOptStartPlugins = builtins.partition (p: p.optional) allPlugins;
startPlugins = partitionedOptStartPlugins.wrong;
# Remove opt plugin dependencies since they are already available in start plugins
optPlugins = removeDeps partitionedOptStartPlugins.right;
# Test if plugin shouldn't be included in plugin pack
standaloneNames = map (p: if builtins.isString p then p else lib.getName p) standalonePlugins;
isStandalone = p: builtins.elem (lib.getName p.plugin) standaloneNames;
# Separated standalone and combined start plugins
partitionedStandaloneStartPlugins = builtins.partition isStandalone startPlugins;
pluginsToCombine = partitionedStandaloneStartPlugins.wrong;
# Remove standalone plugin dependencies since they are already available in start plugins
standaloneStartPlugins = removeDeps partitionedStandaloneStartPlugins.right;
# Combine start plugins into a single pack
pluginPack = mkPluginPack { inherit pluginsToCombine pathsToLink; };
in
# Combined plugins
[ pluginPack ] ++ standaloneStartPlugins ++ optPlugins