{config}: let inherit (config) lib; 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.packages; 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: package // { __modules__ = package.__modules__ ++ [ { config.platform = { host = lib.modules.override 5 system; target = lib.modules.override 5 system; }; } ]; }; # 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 ); }