diff --git a/doctrine/lib/mk-module.nix b/doctrine/lib/mk-module.nix index ffbe6bc4..7a1de397 100644 --- a/doctrine/lib/mk-module.nix +++ b/doctrine/lib/mk-module.nix @@ -13,39 +13,56 @@ namespace ? doctrine.namespace, passthru ? {}, }: let - optionsSet = import options (passthru - // { - inherit config lib pkgs cfg name doctrine; - }); + patchArgs = args: args // passthru // {inherit cfg name doctrine;}; - configSet = import configFiles.${namespace} (passthru - // { - inherit config lib pkgs doctrine cfg; - }); + optionsSet = args: import options (patchArgs args); + configSet = args: import configFiles.${namespace} (patchArgs args); configFiles = lib.filterAttrs (k: v: v != null) { inherit sys hm; }; cfg = config.${prefix}.${name}; + hasConfig = configFiles ? ${namespace}; in { - config = - lib.optionalAttrs (configFiles ? ${namespace}) - (lib.mkIf cfg.enable (lib.mkMerge [ - configSet - { - assertions = - map (dependency: { - assertion = cfg.enable -> config.${prefix}.${dependency}.enable; - message = "${prefix}.${name}.enable requires ${prefix}.${dependency}.enable"; - }) - requires; - } - ])); + imports = [ + (args @ { + config, + modulesPath ? null, + lib, + pkgs, + ... + }: + lib.optionalAttrs hasConfig { + config = lib.mkIf cfg.enable (lib.mkMerge [ + (configSet args) + { + assertions = + map (dependency: { + assertion = cfg.enable -> config.${prefix}.${dependency}.enable; + message = "${prefix}.${name}.enable requires ${prefix}.${dependency}.enable"; + }) + requires; + } + ]); + }) - options.${prefix}.${name} = - lib.optionalAttrs (options != null && optionsSet ? ${namespace}) optionsSet.${namespace} - // { - enable = lib.mkEnableOption name; - }; + (args @ { + config, + modulesPath ? null, + lib, + pkgs, + ... + }: let + hasOptions = options != null && optionsForArgs ? ${namespace}; + optionsForArgs = optionsSet args; + in + lib.optionalAttrs (hasOptions || hasConfig) { + options.${prefix}.${name} = + lib.optionalAttrs hasOptions optionsForArgs.${namespace} + // { + enable = lib.mkEnableOption name; + }; + }) + ]; }