93 lines
2.6 KiB
Nix
93 lines
2.6 KiB
Nix
{
|
|
lib,
|
|
lib',
|
|
config,
|
|
}:
|
|
let
|
|
doubles = lib'.systems.doubles.all;
|
|
|
|
packages = builtins.removeAttrs config.packages [ "cross" ];
|
|
in
|
|
{
|
|
includes = [ ./foundation ];
|
|
|
|
options = {
|
|
packages = lib.options.create {
|
|
description = "The package set.";
|
|
type = lib.types.submodule {
|
|
freeform = lib.types.attrs.of (lib.types.submodule { freeform = lib'.types.alias; });
|
|
|
|
options.cross = lib.attrs.generate doubles (
|
|
system:
|
|
lib.options.create {
|
|
description = "The cross-compiled package set for the ${system} target.";
|
|
type = lib'.types.packages;
|
|
default = { };
|
|
}
|
|
);
|
|
};
|
|
};
|
|
|
|
preferences.packages = {
|
|
version = lib.options.create {
|
|
description = "The preferred package version when using aliases.";
|
|
type = lib.types.enum [
|
|
"latest"
|
|
"stable"
|
|
];
|
|
default.value = "latest";
|
|
};
|
|
};
|
|
};
|
|
|
|
config.packages.cross = lib.attrs.generate doubles (
|
|
system:
|
|
builtins.mapAttrs (
|
|
namespace:
|
|
builtins.mapAttrs (
|
|
name: alias:
|
|
let
|
|
setHost =
|
|
package:
|
|
if package != { } then
|
|
(package.extend (
|
|
{ config }:
|
|
{
|
|
config = {
|
|
platform = {
|
|
host = lib.modules.overrides.force system;
|
|
target = lib.modules.overrides.default system;
|
|
};
|
|
|
|
deps = {
|
|
build = {
|
|
only = setHost package.deps.build.only;
|
|
build = setHost package.deps.build.build;
|
|
host = setHost package.deps.build.host;
|
|
target = setHost package.deps.build.target;
|
|
};
|
|
host = {
|
|
only = setHost package.deps.host.only;
|
|
host = setHost package.deps.host.host;
|
|
target = setHost package.deps.host.target;
|
|
};
|
|
target = {
|
|
only = setHost package.deps.target.only;
|
|
target = setHost package.deps.target.target;
|
|
};
|
|
};
|
|
};
|
|
}
|
|
)).config
|
|
else
|
|
package;
|
|
|
|
updated = alias // {
|
|
versions = builtins.mapAttrs (version: package: setHost package) alias.versions;
|
|
};
|
|
in
|
|
updated
|
|
)
|
|
) packages
|
|
);
|
|
}
|