54 lines
1.6 KiB
Nix
54 lines
1.6 KiB
Nix
{
|
|
lib,
|
|
callPackage,
|
|
}:
|
|
|
|
let
|
|
toPackageName = name: version: "${name}_${lib.replaceStrings [ "." ] [ "_" ] version}";
|
|
in
|
|
lib.makeExtensible (
|
|
final:
|
|
lib.recurseIntoAttrs (
|
|
lib.foldlAttrs (
|
|
packageSet: pname: versionSet:
|
|
packageSet
|
|
// (lib.foldlAttrs (
|
|
subPackageSet: version: packageSpec:
|
|
subPackageSet
|
|
// {
|
|
${toPackageName pname version} = callPackage (
|
|
{
|
|
lib,
|
|
buildTypstPackage,
|
|
fetchzip,
|
|
}:
|
|
buildTypstPackage (finalAttrs: {
|
|
inherit pname version;
|
|
|
|
src = fetchzip {
|
|
inherit (packageSpec) hash;
|
|
url = "https://packages.typst.org/preview/${finalAttrs.pname}-${finalAttrs.version}.tar.gz";
|
|
stripRoot = false;
|
|
};
|
|
|
|
typstDeps = builtins.filter (x: x != null) (
|
|
lib.map (d: (lib.attrsets.attrByPath [ d ] null final)) packageSpec.typstDeps
|
|
);
|
|
|
|
meta = {
|
|
inherit (packageSpec) description;
|
|
maintainers = with lib.maintainers; [ cherrypiejam ];
|
|
license = lib.map (lib.flip lib.getAttr lib.licensesSpdx) packageSpec.license;
|
|
}
|
|
// (if packageSpec ? "homepage" then { inherit (packageSpec) homepage; } else { });
|
|
})
|
|
) { };
|
|
}
|
|
) { } versionSet)
|
|
// {
|
|
${pname} = final.${toPackageName pname (lib.last (lib.attrNames versionSet))};
|
|
}
|
|
) { } (lib.importTOML ./typst-packages-from-universe.toml)
|
|
)
|
|
)
|