Loading nixos/modules/services/networking/i2pd.nix +37 −37 Original line number Diff line number Diff line { config, lib, pkgs, ... }: with lib; let inherit (lib) mkIf mkOption mkEnableOption types optional optionals; inherit (lib.types) nullOr bool listOf str; cfg = config.services.i2pd; homeDir = "/var/lib/i2pd"; strOpt = k: v: k + " = " + v; boolOpt = k: v: k + " = " + boolToString v; boolOpt = k: v: k + " = " + lib.boolToString v; intOpt = k: v: k + " = " + toString v; lstOpt = k: xs: k + " = " + concatStringsSep "," xs; lstOpt = k: xs: k + " = " + lib.concatStringsSep "," xs; optionalNullString = o: s: optional (s != null) (strOpt o s); optionalNullBool = o: b: optional (b != null) (boolOpt o b); optionalNullInt = o: i: optional (i != null) (intOpt o i); Loading Loading @@ -54,7 +54,7 @@ let mkKeyedEndpointOpt = name: addr: port: keyloc: (mkEndpointOpt name addr port) // { keys = mkOption { type = with types; nullOr str; type = nullOr str; default = keyloc; description = '' File to persist ${lib.toUpper name} keys. Loading Loading @@ -162,8 +162,8 @@ let (sec "meshnets") (boolOpt "yggdrasil" cfg.yggdrasil.enable) ] ++ (optionalNullString "yggaddress" cfg.yggdrasil.address) ++ (flip map (collect (proto: proto ? port && proto ? address) cfg.proto) ++ (lib.flip map (lib.collect (proto: proto ? port && proto ? address) cfg.proto) (proto: let protoOpts = [ (sec proto.name) (boolOpt "enabled" proto.enable) Loading @@ -178,10 +178,10 @@ let ++ (optionals (proto ? outproxy) (optionalNullString "outproxy" proto.outproxy)) ++ (optionals (proto ? outproxyPort) (optionalNullInt "outproxyport" proto.outproxyPort)) ++ (optionals (proto ? outproxyEnable) (optionalNullBool "outproxy.enabled" proto.outproxyEnable)); in (concatStringsSep "\n" protoOpts) in (lib.concatStringsSep "\n" protoOpts) )); in pkgs.writeText "i2pd.conf" (concatStringsSep "\n" opts); pkgs.writeText "i2pd.conf" (lib.concatStringsSep "\n" opts); tunnelConf = let mkOutTunnel = tun: Loading @@ -200,7 +200,7 @@ let ++ (optionals (tun ? outbound.quantity) (optionalNullInt "outbound.quantity" tun.outbound.quantity)) ++ (optionals (tun ? crypto.tagsToSend) (optionalNullInt "crypto.tagstosend" tun.crypto.tagsToSend)); in concatStringsSep "\n" outTunOpts; lib.concatStringsSep "\n" outTunOpts; mkInTunnel = tun: let Loading @@ -214,16 +214,16 @@ let ++ (optionals (tun ? inPort) (optionalNullInt "inport" tun.inPort)) ++ (optionals (tun ? accessList) (optionalEmptyList "accesslist" tun.accessList)); in concatStringsSep "\n" inTunOpts; lib.concatStringsSep "\n" inTunOpts; allOutTunnels = collect (tun: tun ? port && tun ? destination) cfg.outTunnels; allInTunnels = collect (tun: tun ? port && tun ? address) cfg.inTunnels; allOutTunnels = lib.collect (tun: tun ? port && tun ? destination) cfg.outTunnels; allInTunnels = lib.collect (tun: tun ? port && tun ? address) cfg.inTunnels; opts = [ notice ] ++ (map mkOutTunnel allOutTunnels) ++ (map mkInTunnel allInTunnels); in pkgs.writeText "i2pd-tunnels.conf" (concatStringsSep "\n" opts); pkgs.writeText "i2pd-tunnels.conf" (lib.concatStringsSep "\n" opts); i2pdFlags = concatStringsSep " " ( i2pdFlags = lib.concatStringsSep " " ( optional (cfg.address != null) ("--host=" + cfg.address) ++ [ "--service" ("--conf=" + i2pdConf) Loading @@ -235,7 +235,7 @@ in { imports = [ (mkRenamedOptionModule [ "services" "i2pd" "extIp" ] [ "services" "i2pd" "address" ]) (lib.mkRenamedOptionModule [ "services" "i2pd" "extIp" ] [ "services" "i2pd" "address" ]) ]; ###### interface Loading @@ -252,7 +252,7 @@ in ''; }; package = mkPackageOption pkgs "i2pd" { }; package = lib.mkPackageOption pkgs "i2pd" { }; logLevel = mkOption { type = types.enum ["debug" "info" "warn" "error"]; Loading @@ -269,7 +269,7 @@ in logCLFTime = mkEnableOption "full CLF-formatted date and time to log"; address = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Your external IP or hostname. Loading @@ -277,7 +277,7 @@ in }; family = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Specify a family the router belongs to. Loading @@ -285,7 +285,7 @@ in }; dataDir = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Alternative path to storage of i2pd data (RI, keys, peer profiles, ...) Loading @@ -301,7 +301,7 @@ in }; ifname = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Network interface to bind to. Loading @@ -309,7 +309,7 @@ in }; ifname4 = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' IPv4 interface to bind to. Loading @@ -317,7 +317,7 @@ in }; ifname6 = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' IPv6 interface to bind to. Loading @@ -325,7 +325,7 @@ in }; ntcpProxy = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Proxy URL for NTCP transport. Loading Loading @@ -399,7 +399,7 @@ in reseed.verify = mkEnableOption "SU3 signature verification"; reseed.file = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Full path to SU3 file to reseed from. Loading @@ -407,7 +407,7 @@ in }; reseed.urls = mkOption { type = with types; listOf str; type = listOf str; default = []; description = '' Reseed URLs. Loading @@ -415,7 +415,7 @@ in }; reseed.floodfill = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Path to router info of floodfill to reseed from. Loading @@ -423,7 +423,7 @@ in }; reseed.zipfile = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Path to local .zip file to reseed from. Loading @@ -431,7 +431,7 @@ in }; reseed.proxy = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' URL for reseed proxy, supports http/socks. Loading @@ -446,7 +446,7 @@ in ''; }; addressbook.subscriptions = mkOption { type = with types; listOf str; type = listOf str; default = [ "http://inr.i2p/export/alive-hosts.txt" "http://i2p-projekt.i2p/hosts.txt" Loading @@ -460,7 +460,7 @@ in trust.enable = mkEnableOption "explicit trust options"; trust.family = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Router Family to trust for first hops. Loading @@ -468,7 +468,7 @@ in }; trust.routers = mkOption { type = with types; listOf str; type = listOf str; default = []; description = '' Only connect to the listed routers. Loading Loading @@ -543,7 +543,7 @@ in yggdrasil.enable = mkEnableOption "Yggdrasil"; yggdrasil.address = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Your local yggdrasil address. Specify it if you want to bind your router to a Loading Loading @@ -572,7 +572,7 @@ in }; strictHeaders = mkOption { type = with types; nullOr bool; type = nullOr bool; default = null; description = '' Enable strict host checking on WebUI. Loading @@ -580,7 +580,7 @@ in }; hostname = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Expected hostname for WebUI. Loading @@ -591,7 +591,7 @@ in proto.httpProxy = (mkKeyedEndpointOpt "httpproxy" "127.0.0.1" 4444 "httpproxy-keys.dat") // { outproxy = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = "Upstream outproxy bind address."; }; Loading Loading @@ -648,7 +648,7 @@ in description = "Service port. Default to the tunnel's listen port."; }; accessList = mkOption { type = with types; listOf str; type = listOf str; default = []; description = "I2P nodes that are allowed to connect to this service."; }; Loading Loading
nixos/modules/services/networking/i2pd.nix +37 −37 Original line number Diff line number Diff line { config, lib, pkgs, ... }: with lib; let inherit (lib) mkIf mkOption mkEnableOption types optional optionals; inherit (lib.types) nullOr bool listOf str; cfg = config.services.i2pd; homeDir = "/var/lib/i2pd"; strOpt = k: v: k + " = " + v; boolOpt = k: v: k + " = " + boolToString v; boolOpt = k: v: k + " = " + lib.boolToString v; intOpt = k: v: k + " = " + toString v; lstOpt = k: xs: k + " = " + concatStringsSep "," xs; lstOpt = k: xs: k + " = " + lib.concatStringsSep "," xs; optionalNullString = o: s: optional (s != null) (strOpt o s); optionalNullBool = o: b: optional (b != null) (boolOpt o b); optionalNullInt = o: i: optional (i != null) (intOpt o i); Loading Loading @@ -54,7 +54,7 @@ let mkKeyedEndpointOpt = name: addr: port: keyloc: (mkEndpointOpt name addr port) // { keys = mkOption { type = with types; nullOr str; type = nullOr str; default = keyloc; description = '' File to persist ${lib.toUpper name} keys. Loading Loading @@ -162,8 +162,8 @@ let (sec "meshnets") (boolOpt "yggdrasil" cfg.yggdrasil.enable) ] ++ (optionalNullString "yggaddress" cfg.yggdrasil.address) ++ (flip map (collect (proto: proto ? port && proto ? address) cfg.proto) ++ (lib.flip map (lib.collect (proto: proto ? port && proto ? address) cfg.proto) (proto: let protoOpts = [ (sec proto.name) (boolOpt "enabled" proto.enable) Loading @@ -178,10 +178,10 @@ let ++ (optionals (proto ? outproxy) (optionalNullString "outproxy" proto.outproxy)) ++ (optionals (proto ? outproxyPort) (optionalNullInt "outproxyport" proto.outproxyPort)) ++ (optionals (proto ? outproxyEnable) (optionalNullBool "outproxy.enabled" proto.outproxyEnable)); in (concatStringsSep "\n" protoOpts) in (lib.concatStringsSep "\n" protoOpts) )); in pkgs.writeText "i2pd.conf" (concatStringsSep "\n" opts); pkgs.writeText "i2pd.conf" (lib.concatStringsSep "\n" opts); tunnelConf = let mkOutTunnel = tun: Loading @@ -200,7 +200,7 @@ let ++ (optionals (tun ? outbound.quantity) (optionalNullInt "outbound.quantity" tun.outbound.quantity)) ++ (optionals (tun ? crypto.tagsToSend) (optionalNullInt "crypto.tagstosend" tun.crypto.tagsToSend)); in concatStringsSep "\n" outTunOpts; lib.concatStringsSep "\n" outTunOpts; mkInTunnel = tun: let Loading @@ -214,16 +214,16 @@ let ++ (optionals (tun ? inPort) (optionalNullInt "inport" tun.inPort)) ++ (optionals (tun ? accessList) (optionalEmptyList "accesslist" tun.accessList)); in concatStringsSep "\n" inTunOpts; lib.concatStringsSep "\n" inTunOpts; allOutTunnels = collect (tun: tun ? port && tun ? destination) cfg.outTunnels; allInTunnels = collect (tun: tun ? port && tun ? address) cfg.inTunnels; allOutTunnels = lib.collect (tun: tun ? port && tun ? destination) cfg.outTunnels; allInTunnels = lib.collect (tun: tun ? port && tun ? address) cfg.inTunnels; opts = [ notice ] ++ (map mkOutTunnel allOutTunnels) ++ (map mkInTunnel allInTunnels); in pkgs.writeText "i2pd-tunnels.conf" (concatStringsSep "\n" opts); pkgs.writeText "i2pd-tunnels.conf" (lib.concatStringsSep "\n" opts); i2pdFlags = concatStringsSep " " ( i2pdFlags = lib.concatStringsSep " " ( optional (cfg.address != null) ("--host=" + cfg.address) ++ [ "--service" ("--conf=" + i2pdConf) Loading @@ -235,7 +235,7 @@ in { imports = [ (mkRenamedOptionModule [ "services" "i2pd" "extIp" ] [ "services" "i2pd" "address" ]) (lib.mkRenamedOptionModule [ "services" "i2pd" "extIp" ] [ "services" "i2pd" "address" ]) ]; ###### interface Loading @@ -252,7 +252,7 @@ in ''; }; package = mkPackageOption pkgs "i2pd" { }; package = lib.mkPackageOption pkgs "i2pd" { }; logLevel = mkOption { type = types.enum ["debug" "info" "warn" "error"]; Loading @@ -269,7 +269,7 @@ in logCLFTime = mkEnableOption "full CLF-formatted date and time to log"; address = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Your external IP or hostname. Loading @@ -277,7 +277,7 @@ in }; family = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Specify a family the router belongs to. Loading @@ -285,7 +285,7 @@ in }; dataDir = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Alternative path to storage of i2pd data (RI, keys, peer profiles, ...) Loading @@ -301,7 +301,7 @@ in }; ifname = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Network interface to bind to. Loading @@ -309,7 +309,7 @@ in }; ifname4 = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' IPv4 interface to bind to. Loading @@ -317,7 +317,7 @@ in }; ifname6 = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' IPv6 interface to bind to. Loading @@ -325,7 +325,7 @@ in }; ntcpProxy = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Proxy URL for NTCP transport. Loading Loading @@ -399,7 +399,7 @@ in reseed.verify = mkEnableOption "SU3 signature verification"; reseed.file = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Full path to SU3 file to reseed from. Loading @@ -407,7 +407,7 @@ in }; reseed.urls = mkOption { type = with types; listOf str; type = listOf str; default = []; description = '' Reseed URLs. Loading @@ -415,7 +415,7 @@ in }; reseed.floodfill = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Path to router info of floodfill to reseed from. Loading @@ -423,7 +423,7 @@ in }; reseed.zipfile = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Path to local .zip file to reseed from. Loading @@ -431,7 +431,7 @@ in }; reseed.proxy = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' URL for reseed proxy, supports http/socks. Loading @@ -446,7 +446,7 @@ in ''; }; addressbook.subscriptions = mkOption { type = with types; listOf str; type = listOf str; default = [ "http://inr.i2p/export/alive-hosts.txt" "http://i2p-projekt.i2p/hosts.txt" Loading @@ -460,7 +460,7 @@ in trust.enable = mkEnableOption "explicit trust options"; trust.family = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Router Family to trust for first hops. Loading @@ -468,7 +468,7 @@ in }; trust.routers = mkOption { type = with types; listOf str; type = listOf str; default = []; description = '' Only connect to the listed routers. Loading Loading @@ -543,7 +543,7 @@ in yggdrasil.enable = mkEnableOption "Yggdrasil"; yggdrasil.address = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Your local yggdrasil address. Specify it if you want to bind your router to a Loading Loading @@ -572,7 +572,7 @@ in }; strictHeaders = mkOption { type = with types; nullOr bool; type = nullOr bool; default = null; description = '' Enable strict host checking on WebUI. Loading @@ -580,7 +580,7 @@ in }; hostname = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = '' Expected hostname for WebUI. Loading @@ -591,7 +591,7 @@ in proto.httpProxy = (mkKeyedEndpointOpt "httpproxy" "127.0.0.1" 4444 "httpproxy-keys.dat") // { outproxy = mkOption { type = with types; nullOr str; type = nullOr str; default = null; description = "Upstream outproxy bind address."; }; Loading Loading @@ -648,7 +648,7 @@ in description = "Service port. Default to the tunnel's listen port."; }; accessList = mkOption { type = with types; listOf str; type = listOf str; default = []; description = "I2P nodes that are allowed to connect to this service."; }; Loading