summaryrefslogtreecommitdiffstats
path: root/legacy.nix
blob: 270edfff2efdecb8f3bd768b40ac4218ef1e5171 (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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
{ inputs ? rec {
    nixpkgs.lib = import <nixpkgs/lib> // {
      nixosSystem = import <nixpkgs/nixos/lib/eval-config.nix>;
    };

    stockholm.overlays.default = import <stockholm/krebs/5pkgs>;
    stockholm.inputs.nix-writers = <stockholm/submodules/nix-writers>;
    stockholm.nixosModules =
      let
        inherit (nixpkgs) lib;
      in builtins.listToAttrs
        (map
          # to preserve the file name for debugability, don't import here
          (name: {name = lib.removeSuffix ".nix" name; value = (<stockholm/krebs/3modules> + "/${name}");})
          (lib.filter
            (name: name != "default.nix" && !lib.hasPrefix "." name)
            (lib.attrNames (builtins.readDir <stockholm/krebs/3modules>))));
  }
, extraModules ? []
}: {
    nixosConfigurations =
      inputs.nixpkgs.lib.mapAttrs
        (name: _: let
          minimal.enable =
            name == "oai";

          system = (import ./systems/${name}/spec.nix).system;
        in
          inputs.nixpkgs.lib.nixosSystem {
            inherit system;
            specialArgs = rec {
              inherit inputs;

              lib = inputs.nixpkgs.lib // {
                # for stockholm.
                # without it krebs.hosts.*.nets.*.prefix breaks for ne
                # due to patched types.
                slib = mylib;
              };

              mylib = (import ./. { inherit lib; }).mylib // {
                importSecret =
                  p: _: {};
              };
            };
            modules = [
              ({ lib, ... }: {
                _file = "${toString ./legacy.nix} #1";
                imports = lib.optionals minimal.enable [
                  (./systems + "/${name}/config.nix")
                ];
              })
              ({ lib, mylib, ... }: {
                _file = "${toString ./legacy.nix} #2";
                imports = lib.optionals (!minimal.enable) [
                  (./systems + "/${name}/config.nix")
                  (let dirt = ./systems + "/${name}/dirt"; in
                    if builtins.pathExists dirt then dirt else {})
                  {
                    _file = "${toString ./legacy.nix} #2.1";
                    imports = [
                      inputs.stockholm.nixosModules.build
                      inputs.stockholm.nixosModules.dns
                      inputs.stockholm.nixosModules.exim
                      inputs.stockholm.nixosModules.exim-retiolum
                      inputs.stockholm.nixosModules.exim-smarthost
                      inputs.stockholm.nixosModules.github
                      inputs.stockholm.nixosModules.hosts
                      inputs.stockholm.nixosModules.htgen
                      inputs.stockholm.nixosModules.kartei
                      inputs.stockholm.nixosModules.krebs
                      inputs.stockholm.nixosModules.nixpkgs
                      inputs.stockholm.nixosModules.on-failure
                      inputs.stockholm.nixosModules.iana-etc
                      inputs.stockholm.nixosModules.per-user
                      inputs.stockholm.nixosModules.permown
                      inputs.stockholm.nixosModules.repo-sync
                      inputs.stockholm.nixosModules.secret
                      inputs.stockholm.nixosModules.setuid
                      inputs.stockholm.nixosModules.shadow
                      inputs.stockholm.nixosModules.sitemap
                      inputs.stockholm.nixosModules.ssh
                      inputs.stockholm.nixosModules.systemd
                      inputs.stockholm.nixosModules.tinc
                      inputs.stockholm.nixosModules.users
                      inputs.stockholm.nixosModules.zones
                    ];
                    nixpkgs.overlays = [
                      (import (inputs.stockholm.inputs.nix-writers + "/pkgs"))
                      (self: super: {
                        stockholm.lib.types = lib.types // {
                          inherit (mylib.types)
                            hostname
                            secret-file
                            ;
                        };
                        inherit (inputs.stockholm.overlays.default self super)
                          brain
                          cgit-clear-cache
                          git-hooks
                          htgen
                          htgen-imgur
                          htgen-paste
                          irc-announce
                          painload
                          repo-sync
                          ;
                      })
                    ];
                  }
                  ./configs
                  ./modules
                  { imports = extraModules; }
                  # This must come before <stockholm/krebs>. And before means after, `imports`-wise.
                  ({ inputs, mylib, ... }: {
                    nixpkgs.overlays = [
                      (self: super: {
                        inherit mylib;
                      })

                      (import (inputs.stockholm.inputs.nix-writers + "/pkgs"))

                      (import ./pkgs)
                    ];
                  })
                ];
              })
            ];
          }
        )
        (builtins.readDir ./systems);
}