2023-05-29 17:52:03 +00:00
|
|
|
{ withSystem, ... }:
|
2022-07-19 16:34:15 +00:00
|
|
|
{
|
|
|
|
config = {
|
|
|
|
_module.args = {
|
|
|
|
moduleWithSystem =
|
|
|
|
module:
|
|
|
|
|
|
|
|
{ config, ... }:
|
|
|
|
let
|
|
|
|
system =
|
|
|
|
config._module.args.system or
|
|
|
|
config._module.args.pkgs.stdenv.hostPlatform.system or
|
|
|
|
(throw "moduleWithSystem: Could not determine the configuration's system parameter for this module system application.");
|
|
|
|
|
|
|
|
allArgs = withSystem system (args: args);
|
|
|
|
|
|
|
|
lazyArgsPerParameter = f: builtins.mapAttrs
|
|
|
|
(k: v: allArgs.${k} or (throw "moduleWithSystem: module argument `${k}` does not exist."))
|
|
|
|
(builtins.functionArgs f);
|
|
|
|
|
|
|
|
# Use reflection to make the call lazy in the argument.
|
|
|
|
# Restricts args to the ones declared.
|
|
|
|
callLazily = f: a: f (lazyArgsPerParameter f);
|
|
|
|
in
|
|
|
|
{
|
|
|
|
imports = [
|
|
|
|
(callLazily module allArgs)
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|