aboutsummaryrefslogtreecommitdiff
path: root/modules/default.nix
blob: 9b6ad758d19b7a6c34cf3fd91a04f8d7cf98572f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
{ configuration
, pkgs
, lib ? pkgs.stdenv.lib

  # Whether to check that each option has a matching declaration.
, check ? true
}:

with lib;

let

  modules = [
    ./files.nix
    ./home-environment.nix
    ./manual.nix
    ./misc/fontconfig.nix
    ./misc/gtk.nix
    ./misc/news.nix
    ./misc/nixpkgs.nix
    ./misc/pam.nix
    ./misc/xdg.nix
    ./programs/bash.nix
    ./programs/beets.nix
    ./programs/browserpass.nix
    ./programs/command-not-found/command-not-found.nix
    ./programs/eclipse.nix
    ./programs/emacs.nix
    ./programs/feh.nix
    ./programs/firefox.nix
    ./programs/git.nix
    ./programs/gnome-terminal.nix
    ./programs/home-manager.nix
    ./programs/htop.nix
    ./programs/info.nix
    ./programs/lesspipe.nix
    ./programs/man.nix
    ./programs/rofi.nix
    ./programs/ssh.nix
    ./programs/termite.nix
    ./programs/texlive.nix
    ./programs/vim.nix
    ./programs/zsh.nix
    ./services/blueman-applet.nix
    ./services/compton.nix
    ./services/dunst.nix
    ./services/gnome-keyring.nix
    ./services/gpg-agent.nix
    ./services/keepassx.nix
    ./services/network-manager-applet.nix
    ./services/owncloud-client.nix
    ./services/polybar.nix
    ./services/random-background.nix
    ./services/redshift.nix
    ./services/screen-locker.nix
    ./services/syncthing.nix
    ./services/taffybar.nix
    ./services/tahoe-lafs.nix
    ./services/udiskie.nix
    ./services/xscreensaver.nix
    ./systemd.nix
    ./xresources.nix
    ./xsession.nix
    <nixpkgs/nixos/modules/misc/assertions.nix>
    <nixpkgs/nixos/modules/misc/meta.nix>
  ];

  collectFailed = cfg:
    map (x: x.message) (filter (x: !x.assertion) cfg.assertions);

  showWarnings = res:
    let
      f = w: x: builtins.trace "warning: ${w}" x;
    in
      fold f res res.config.warnings;

  pkgsModule = {
    config._module.args.baseModules = modules;
    config._module.args.pkgs = lib.mkDefault pkgs;
    config._module.check = check;
    config.nixpkgs.system = mkDefault pkgs.system;
  };

  rawModule = lib.evalModules {
    modules = [ configuration ] ++ modules ++ [ pkgsModule ];
  };

  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
    );
}