2017-01-07 19:16:26 +01:00
|
|
|
|
{ configuration
|
|
|
|
|
, pkgs
|
|
|
|
|
, lib ? pkgs.stdenv.lib
|
2017-08-26 22:24:40 +02:00
|
|
|
|
|
|
|
|
|
# Whether to check that each option has a matching declaration.
|
|
|
|
|
, check ? true
|
2017-01-07 19:16:26 +01:00
|
|
|
|
}:
|
|
|
|
|
|
2017-02-21 21:39:53 +01:00
|
|
|
|
with lib;
|
|
|
|
|
|
2017-01-07 19:16:26 +01:00
|
|
|
|
let
|
|
|
|
|
|
2017-02-21 21:39:53 +01:00
|
|
|
|
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;
|
|
|
|
|
|
2020-01-16 23:41:14 +01:00
|
|
|
|
extendedLib = import ./lib/stdlib-extended.nix pkgs.lib;
|
|
|
|
|
|
|
|
|
|
hmModules =
|
|
|
|
|
import ./modules.nix {
|
|
|
|
|
inherit check pkgs;
|
|
|
|
|
lib = extendedLib;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
rawModule = extendedLib.evalModules {
|
|
|
|
|
modules = [ configuration ] ++ hmModules;
|
2019-04-07 13:14:15 +02:00
|
|
|
|
specialArgs = {
|
|
|
|
|
modulesPath = builtins.toString ./.;
|
|
|
|
|
};
|
2017-09-09 17:14:07 +02:00
|
|
|
|
};
|
|
|
|
|
|
2017-02-21 21:39:53 +01:00
|
|
|
|
module = showWarnings (
|
|
|
|
|
let
|
2017-09-09 17:14:07 +02:00
|
|
|
|
failed = collectFailed rawModule.config;
|
2017-02-21 21:39:53 +01:00
|
|
|
|
failedStr = concatStringsSep "\n" (map (x: "- ${x}") failed);
|
|
|
|
|
in
|
|
|
|
|
if failed == []
|
2017-09-09 17:14:07 +02:00
|
|
|
|
then rawModule
|
2017-02-21 21:39:53 +01:00
|
|
|
|
else throw "\nFailed assertions:\n${failedStr}"
|
|
|
|
|
);
|
2017-01-07 19:16:26 +01:00
|
|
|
|
|
|
|
|
|
in
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
inherit (module) options config;
|
|
|
|
|
|
2017-08-27 13:04:39 +02:00
|
|
|
|
activationPackage = module.config.home.activationPackage;
|
2017-08-27 17:44:00 +02:00
|
|
|
|
|
|
|
|
|
# For backwards compatibility. Please use activationPackage instead.
|
2017-08-27 17:13:06 +02:00
|
|
|
|
activation-script = module.config.home.activationPackage;
|
2017-08-26 22:24:40 +02:00
|
|
|
|
|
2017-09-09 17:14:07 +02:00
|
|
|
|
newsDisplay = rawModule.config.news.display;
|
2017-08-26 22:24:40 +02:00
|
|
|
|
newsEntries =
|
|
|
|
|
sort (a: b: a.time > b.time) (
|
2017-09-09 17:14:07 +02:00
|
|
|
|
filter (a: a.condition) rawModule.config.news.entries
|
2017-08-26 22:24:40 +02:00
|
|
|
|
);
|
2017-01-07 19:16:26 +01:00
|
|
|
|
}
|