core/pkgs/by-name/te/texlive/combine-wrapper.nix
2024-06-30 09:16:52 +01:00

79 lines
2 KiB
Nix

# legacy texlive.combine wrapper
{
lib,
toTLPkgList,
toTLPkgSets,
buildTeXEnv,
}:
args@{
pkgFilter ? (
pkg: pkg.tlType == "run" || pkg.tlType == "bin" || pkg.pname == "core" || pkg.hasManpages or false
),
extraName ? "combined",
extraVersion ? "",
...
}:
let
pkgSet = removeAttrs args [
"pkgFilter"
"extraName"
"extraVersion"
];
# combine a set of TL packages into a single TL meta-package
combinePkgs =
pkgList:
lib.catAttrs "pkg" (
let
# a TeX package used to be an attribute set { pkgs = [ ... ]; ... } where pkgs is a list of derivations
# the derivations make up the TeX package and optionally (for backward compatibility) its dependencies
tlPkgToSets =
drv:
map (
{
tlType,
version ? "",
outputName ? "",
...
}@pkg:
{
# outputName required to distinguish among bin.core-big outputs
key = "${pkg.pname or pkg.name}.${tlType}-${version}-${outputName}";
inherit pkg;
}
) (drv.pkgs or (toTLPkgList drv));
pkgListToSets = lib.concatMap tlPkgToSets;
in
builtins.genericClosure {
startSet = pkgListToSets pkgList;
operator = { pkg, ... }: pkgListToSets (pkg.tlDeps or [ ]);
}
);
combined = combinePkgs (lib.attrValues pkgSet);
# convert to specified outputs
tlTypeToOut = {
run = "tex";
doc = "texdoc";
source = "texsource";
bin = "out";
tlpkg = "tlpkg";
};
toSpecified =
{ tlType, ... }@drv:
drv
// {
outputSpecified = true;
tlOutputName = tlTypeToOut.${tlType};
};
all = lib.filter pkgFilter combined ++ lib.filter (pkg: pkg.tlType == "tlpkg") combined;
converted = builtins.map toSpecified all;
in
buildTeXEnv {
__extraName = extraName;
__extraVersion = extraVersion;
requiredTeXPackages = _: converted;
__combine = true;
__fromCombineWrapper = true;
}