96 lines
2.8 KiB
Nix
96 lines
2.8 KiB
Nix
{
|
|
lib,
|
|
lib',
|
|
config,
|
|
}: let
|
|
doubles = lib'.systems.doubles.all;
|
|
|
|
packages = builtins.removeAttrs config.packages ["cross"];
|
|
in {
|
|
includes = [
|
|
./foundation
|
|
./aux/a.nix
|
|
./aux/b.nix
|
|
];
|
|
|
|
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
|
|
);
|
|
}
|