diff options
Diffstat (limited to 'krebs')
-rw-r--r-- | krebs/3modules/default.nix | 1 | ||||
-rw-r--r-- | krebs/3modules/hosts.nix | 61 | ||||
-rw-r--r-- | krebs/3modules/retiolum-hosts.nix | 28 | ||||
-rw-r--r-- | krebs/5pkgs/haskell/blessings.nix | 9 |
4 files changed, 65 insertions, 34 deletions
diff --git a/krebs/3modules/default.nix b/krebs/3modules/default.nix index 9303a81fb..c72215e79 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 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)))) - } - ''; - }; -} diff --git a/krebs/5pkgs/haskell/blessings.nix b/krebs/5pkgs/haskell/blessings.nix index 97e4a717c..f730cc72b 100644 --- a/krebs/5pkgs/haskell/blessings.nix +++ b/krebs/5pkgs/haskell/blessings.nix @@ -1,5 +1,5 @@ with import <stockholm/lib>; -{ mkDerivation, base, fetchgit, stdenv }: let +{ mkDerivation, base, fetchgit, hspec, QuickCheck, stdenv, text }: let cfg = { "18.03" = { @@ -7,8 +7,8 @@ with import <stockholm/lib>; sha256 = "1k908zap3694fcxdk4bb29s54b0lhdh557y10ybjskfwnym7szn1"; }; "18.09" = { - version = "2.1.0"; - sha256 = "0wc8v48bb0bkvypc0j6imvnf8xc8572hykk9sgjhzf2w0ggqxv5d"; + version = "2.2.0"; + sha256 = "1pb56dgf3jj2kq3cbbppwzyg3ccgqy9xara62hkjwyxzdx20clk1"; }; }.${versions.majorMinor nixpkgsVersion}; @@ -20,7 +20,8 @@ in mkDerivation { rev = "refs/tags/v${cfg.version}"; sha256 = cfg.sha256; }; - libraryHaskellDepends = [ base ]; + libraryHaskellDepends = [ base text ]; + testHaskellDepends = [ base hspec QuickCheck ]; doHaddock = false; # WTFPL is the true license, which is unknown to cabal. license = stdenv.lib.licenses.wtfpl; |