zaphyra's git: nixfiles

zaphyra and void's nixfiles

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 
{
  inputs,
  lib,
  utils,
  pkgs,
  config,
  hostConfig,
  dnsNix,
  ...
}:

let
  modules = inputs.haumea.lib.load {
    src = ./nixos;
    transformer = [
      inputs.haumea.lib.transformers.liftDefault
      (
        _:
        lib.mapAttrs (
          name: value:
          (
            if value ? option then
              (
                (lib.removeAttrs value [ "option" ])
                // {
                  nixosOptions = lib.mkOption value.option;
                }
              )
            else if value ? options then
              (
                (lib.removeAttrs value [ "options" ])
                // {
                  nixosOptions = (
                    lib.mapAttrsRecursiveCond (element: !(element ? type)) (
                      path: value: lib.mkOption value
                    ) value.options
                  );
                }
              )
            else
              (value)
          )
        )
      )
      (inputs.haumea.lib.transformers.hoistAttrs "nixosOptions" "options")
    ];
    inputs = {
      inherit (inputs.self) homeManagerModules;
      inherit
        inputs
        lib
        utils
        pkgs
        config
        hostConfig
        dnsNix
        ;
    };
  };

in
{

  options = modules.options;

  config = lib.mkMerge (
    modules
    |> lib.filterAttrs (name: value: name != "options")
    |> lib.collect (element: element ? config)
    |> lib.map (element: element.config)
  );

}