diff options
author | Joachim Fasting <joachifm@fastmail.fm> | 2016-10-25 20:56:54 +0200 |
---|---|---|
committer | Joachim Fasting <joachifm@fastmail.fm> | 2016-10-27 14:15:54 +0200 |
commit | 8180922d236c53b5e09cfe1b63f6c12977bb2803 (patch) | |
tree | 25ef9efe35719e555df74d2c95a17bbe8f4745d9 /nixos/modules | |
parent | 9654e09b5a4bd44ecf16f8c435afa834a76ef2b1 (diff) | |
download | nixlib-8180922d236c53b5e09cfe1b63f6c12977bb2803.tar nixlib-8180922d236c53b5e09cfe1b63f6c12977bb2803.tar.gz nixlib-8180922d236c53b5e09cfe1b63f6c12977bb2803.tar.bz2 nixlib-8180922d236c53b5e09cfe1b63f6c12977bb2803.tar.lz nixlib-8180922d236c53b5e09cfe1b63f6c12977bb2803.tar.xz nixlib-8180922d236c53b5e09cfe1b63f6c12977bb2803.tar.zst nixlib-8180922d236c53b5e09cfe1b63f6c12977bb2803.zip |
cjdns service: refactor cjdns hosts builder
The old version would export two lists to a bash builder and do pairwise processing on the bash side. In the new version we instead generate a logic free builder on the Nix side. This is not only conceptually simpler but reduces the amount of code and intermediate values.
Diffstat (limited to 'nixos/modules')
-rw-r--r-- | nixos/modules/services/networking/cjdns-hosts.sh | 11 | ||||
-rw-r--r-- | nixos/modules/services/networking/cjdns.nix | 29 |
2 files changed, 13 insertions, 27 deletions
diff --git a/nixos/modules/services/networking/cjdns-hosts.sh b/nixos/modules/services/networking/cjdns-hosts.sh deleted file mode 100644 index 8a2b47e52143..000000000000 --- a/nixos/modules/services/networking/cjdns-hosts.sh +++ /dev/null @@ -1,11 +0,0 @@ -pubs=($pubs) -hosts=($hosts) - -lines="''\n" -for ((i = 0; i < ${#pubs[*]}; i++)); do - addr=$($cjdns/bin/publictoip6 ${pubs[i]}) - lines="${lines}$addr ${hosts[i]}\n" -done -lines="${lines}''" - -echo -ne $lines > $out diff --git a/nixos/modules/services/networking/cjdns.nix b/nixos/modules/services/networking/cjdns.nix index 849d273a41d3..5e15e40ea0c1 100644 --- a/nixos/modules/services/networking/cjdns.nix +++ b/nixos/modules/services/networking/cjdns.nix @@ -28,21 +28,18 @@ let }; }; - peers = mapAttrsToList (n: v: v) (cfg.ETHInterface.connectTo // cfg.UDPInterface.connectTo); - - pubs = toString (map (p: if p.hostname == "" then "" else p.publicKey) peers); - hosts = toString (map (p: if p.hostname == "" then "" else p.hostname) peers); - - cjdnsHosts = - if hosts != "" then - import (pkgs.stdenv.mkDerivation { - name = "cjdns-hosts"; - builder = ./cjdns-hosts.sh; - - inherit (pkgs) cjdns; - inherit pubs hosts; - }) - else ""; + # Additional /etc/hosts entries for peers with an associated hostname + cjdnsExtraHosts = import (pkgs.runCommand "cjdns-hosts" {} + # Generate a builder that produces an output usable as a Nix string value + '' + exec >$out + echo \'\' + ${concatStringsSep "\n" (mapAttrsToList (k: v: + optionalString (v.hostname != "") + "echo $(${pkgs.cjdns}/bin/publictoip6 ${x.key}) ${x.host}") + (cfg.ETHInterface.connectTo // cfg.UDPInterface.connectTo))} + echo \'\' + ''); parseModules = x: x // { connectTo = mapAttrs (name: value: { inherit (value) password publicKey; }) x.connectTo; }; @@ -254,7 +251,7 @@ in }; }; - networking.extraHosts = "${cjdnsHosts}"; + networking.extraHosts = cjdnsExtraHosts; assertions = [ { assertion = ( cfg.ETHInterface.bind != "" || cfg.UDPInterface.bind != "" || cfg.confFile != null ); |