43 lines
1.7 KiB
Nix
43 lines
1.7 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;
|
||
|
}
|