diff options
Diffstat (limited to 'krebs/3modules')
| -rw-r--r-- | krebs/3modules/default.nix | 2 | ||||
| -rw-r--r-- | krebs/3modules/hosts.nix | 61 | ||||
| -rw-r--r-- | krebs/3modules/retiolum-hosts.nix | 28 | 
3 files changed, 61 insertions, 30 deletions
diff --git a/krebs/3modules/default.nix b/krebs/3modules/default.nix index 9303a81fb..9c2f53cbe 100644 --- a/krebs/3modules/default.nix +++ b/krebs/3modules/default.nix @@ -45,7 +45,6 @@ let        ./reaktor2.nix        ./realwallpaper.nix        ./retiolum-bootstrap.nix -      ./retiolum-hosts.nix        ./rtorrent.nix        ./secret.nix        ./setuid.nix @@ -101,6 +100,7 @@ let      { krebs = import ./krebs  { inherit config; }; }      { krebs = import ./lass   { inherit config; }; }      { krebs = import ./makefu { inherit config; }; } +    { krebs = import ./external/palo.nix { inherit config; }; }      { krebs = import ./tv     { inherit config; }; }      {        krebs.dns.providers = { diff --git a/krebs/3modules/hosts.nix b/krebs/3modules/hosts.nix index 0985bb539..7fe01a769 100644 --- a/krebs/3modules/hosts.nix +++ b/krebs/3modules/hosts.nix @@ -1,6 +1,5 @@  with import <stockholm/lib>;  { config, ... }: let -  # TODO dedup functions with ./retiolum-hosts.nix    check = hostname: any (domain: hasSuffix ".${domain}" hostname) domains;    domains = attrNames (filterAttrs (_: eq "hosts") config.krebs.dns.providers);  in { @@ -30,6 +29,66 @@ in {                    map (addr: { ${addr} = aliases; }) net.addrs)                  (attrValues host.nets))              (attrValues config.krebs.hosts))); + +    nixpkgs.config.packageOverrides = super: let +      # nameValuePair name value : { "name" : name, "value" : value } + +      # addr : str +      # aliase : str +      # hostname : str +      # netname : str + +      # addrAliases : nameValuePair addr [alias] + +      # hostNetAliases : host -> { ${netname} : [addrAliases] } +      hostNetAliases = host: +        mapAttrs (_: net: filter (x: x.name != null && x.value != []) [ +          { name = net.ip4.addr or null; value = net.aliases; } +          { name = net.ip6.addr or null; value = net.aliases; } +        ]) host.nets; + +      # netAliases : { ${netname} : [addrAliases] } +      netAliases = +        foldl' +          (result: host: +            foldl' +              # λ netAliases -> [addrAliases] -> netAliases +              (result: { name, value }: result // { +                ${name} = result.${name} or [] ++ value; +              }) +              result +              (mapAttrsToList nameValuePair (hostNetAliases host)) +          ) +          {} +          (attrValues config.krebs.hosts); + +      # writeHosts : str -> [addrAliases] -> package +      writeHosts = name: addrAliases: super.writeText name '' +        ${concatMapStringsSep +            "\n" +            ({ name, value }: "${name} ${toString value}") +            addrAliases} +      ''; +    in +      { +        # hosts file for all krebs networks +        krebs-hosts = +          writeHosts "krebs-hosts" (concatLists [ +            netAliases.internet +            netAliases.retiolum +            netAliases.wiregrill +          ]); + +        # combined hosts file for all networks (even custom ones) +        krebs-hosts_combined = +          writeHosts "krebs-hosts_combined" +            (concatLists (attrValues netAliases)); +      } +      // +      genAttrs' (attrNames netAliases) (netname: rec { +        name = "krebs-hosts-${netname}"; +        value = writeHosts name netAliases.${netname}; +      });    };  } diff --git a/krebs/3modules/retiolum-hosts.nix b/krebs/3modules/retiolum-hosts.nix deleted file mode 100644 index ddf85ead7..000000000 --- a/krebs/3modules/retiolum-hosts.nix +++ /dev/null @@ -1,28 +0,0 @@ -with import <stockholm/lib>; -{ config, ... }: let -  # TODO dedup functions with ./hosts.nix -  check = hostname: any (domain: hasSuffix ".${domain}" hostname) domains; -  domains = attrNames (filterAttrs (_: eq "hosts") config.krebs.dns.providers); -in { -  nixpkgs.config.packageOverrides = super: { -    retiolum-hosts = -      super.writeText "retiolum-hosts" '' -        ${ -          concatStringsSep -            "\n" -            (flatten -              (map -                (host: let -                  net = host.nets.retiolum; -                  aliases = longs; -                  longs = filter check net.aliases; -                in -                  optionals -                    (aliases != []) -                    (map (addr: "${addr} ${toString aliases}") net.addrs)) -                (filter (host: hasAttr "retiolum" host.nets) -                        (attrValues config.krebs.hosts)))) -        } -      ''; -  }; -}  | 
