Commit 8180922d authored by Joachim Fasting's avatar Joachim Fasting
Browse files

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.
parent 9654e09b
Loading
Loading
Loading
Loading
+0 −11
Original line number Diff line number Diff line
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
+13 −16
Original line number Diff line number Diff line
@@ -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 );