{ 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 ); }