mirror of
https://github.com/nix-community/home-manager
synced 2024-12-29 05:09:47 +01:00
f8b03f5750
This is needed, for example, to support relative paths when disabling modules.
56 lines
1.2 KiB
Nix
56 lines
1.2 KiB
Nix
{ configuration
|
||
, pkgs
|
||
, lib ? pkgs.stdenv.lib
|
||
|
||
# Whether to check that each option has a matching declaration.
|
||
, check ? true
|
||
}:
|
||
|
||
with lib;
|
||
|
||
let
|
||
|
||
collectFailed = cfg:
|
||
map (x: x.message) (filter (x: !x.assertion) cfg.assertions);
|
||
|
||
showWarnings = res:
|
||
let
|
||
f = w: x: builtins.trace "[1;31mwarning: ${w}[0m" x;
|
||
in
|
||
fold f res res.config.warnings;
|
||
|
||
rawModule = lib.evalModules {
|
||
modules =
|
||
[ configuration ]
|
||
++ (import ./modules.nix { inherit check lib pkgs; });
|
||
specialArgs = {
|
||
modulesPath = builtins.toString ./.;
|
||
};
|
||
};
|
||
|
||
module = showWarnings (
|
||
let
|
||
failed = collectFailed rawModule.config;
|
||
failedStr = concatStringsSep "\n" (map (x: "- ${x}") failed);
|
||
in
|
||
if failed == []
|
||
then rawModule
|
||
else throw "\nFailed assertions:\n${failedStr}"
|
||
);
|
||
|
||
in
|
||
|
||
{
|
||
inherit (module) options config;
|
||
|
||
activationPackage = module.config.home.activationPackage;
|
||
|
||
# For backwards compatibility. Please use activationPackage instead.
|
||
activation-script = module.config.home.activationPackage;
|
||
|
||
newsDisplay = rawModule.config.news.display;
|
||
newsEntries =
|
||
sort (a: b: a.time > b.time) (
|
||
filter (a: a.condition) rawModule.config.news.entries
|
||
);
|
||
}
|