anchor.diff:            and routing engine. A file at /etc/cjdns.keys will
             be created if it does not exist to contain a random
             secret key that your IPv6 address will be derived from.
  +        '';
  +      };
  +
  +      extraConfig = mkOption {
  +        type = types.attrs;
  +        default = {};
  +        example = { router.interface.tunDevice = "tun10"; };
  +        description = ''
  +          Extra configuration, given as attrs, that will be merged recursively
  +          with the rest of the JSON generated by this module, at the root node.
           '';
         };
   
  
positive.code:         if cfg.confFile != null then "${pkg}/bin/cjdroute < ${cfg.confFile}" else
            ''
              source /etc/cjdns.keys
              echo '${cjdrouteConf}' | sed \
                  -e "s/@CJDNS_ADMIN_PASSWORD@/$CJDNS_ADMIN_PASSWORD/g" \
                  -e "s/@CJDNS_PRIVATE_KEY@/$CJDNS_PRIVATE_KEY/g" \
                  | ${pkg}/bin/cjdroute
  
negative.code:   parseModules = x:
      x // { connectTo = mapAttrs (name: value: { inherit (value) password publicKey; }) x.connectTo; };
  
    cjdrouteConf = builtins.toJSON ( recursiveUpdate {
      admin = {
        bind = cfg.admin.bind;
        password = "@CJDNS_ADMIN_PASSWORD@";
  