Files
home-manager/modules/default.nix
DaRacci 3a92ffa192 home-manager: expose all attributes returned by evalModules
This change brings the homeConfigurations output inline with how the
nixosConfiguration output presents its attributes.

The primary purpose is for exposing the graph attribute however there is
no downside to exposing the rest along with it to prevent needing to add
each desired attribute individually in the future if more are added.
2025-12-15 22:36:33 -06:00

1.7 KiB

{
configuration,
pkgs,
lib ? pkgs.lib,
minimal ? false,
# Whether to check that each option has a matching declaration.
check ? true,
# Extra arguments passed to specialArgs.
extraSpecialArgs ? { },
}:
 
let
 
collectFailed = cfg: map (x: x.message) (lib.filter (x: !x.assertion) cfg.assertions);
 
showWarnings =
res:
let
f = w: x: builtins.trace "warning: ${w}" x;
in
lib.foldr f res res.config.warnings;
 
extendedLib = import ./lib/stdlib-extended.nix lib;
 
hmModules = import ./modules.nix {
inherit check pkgs;
lib = extendedLib;
};
 
rawModule = extendedLib.evalModules {
modules = [ configuration ] ++ hmModules;
class = "homeManager";
specialArgs = {
modulesPath = builtins.toString ./.;
}
// extraSpecialArgs;
};
 
moduleChecks =
raw:
showWarnings (
let
failed = collectFailed raw.config;
failedStr = lib.concatStringsSep "\n" (map (x: "- ${x}") failed);
in
if failed == [ ] then
raw
else
throw ''
 
Failed assertions:
${failedStr}''
);
 
withExtraAttrs =
rawModule:
let
module = moduleChecks rawModule;
in
module
// {
activationPackage = module.config.home.activationPackage;
 
# For backwards compatibility. Please use activationPackage instead.
activation-script = module.config.home.activationPackage;
 
newsDisplay = rawModule.config.news.display;
newsEntries = lib.sort (a: b: a.time > b.time) (
lib.filter (a: a.condition) rawModule.config.news.entries
);
 
inherit (module._module.args) pkgs;
 
extendModules = args: withExtraAttrs (rawModule.extendModules args);
};
in
withExtraAttrs rawModule