Loading nixos/modules/services/networking/dae.nix +33 −24 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ in package = mkPackageOptionMD pkgs "dae" { }; assets = mkOption { type = with types;(listOf path); default = with pkgs; [ v2ray-geoip v2ray-domain-list-community ]; Loading Loading @@ -47,7 +48,7 @@ in options = { enable = mkEnableOption "enable"; port = mkOption { type = types.int; type = types.port; description = '' Port to be opened. Consist with field `tproxy_port` in config file. ''; Loading @@ -70,8 +71,8 @@ in }; configFile = mkOption { type = types.path; default = "/etc/dae/config.dae"; type = with types; (nullOr path); default = null; example = "/path/to/your/config.dae"; description = mdDoc '' The path of dae config file, end with `.dae`. Loading @@ -79,12 +80,10 @@ in }; config = mkOption { type = types.str; default = '' global{} routing{} ''; type = with types; (nullOr str); default = null; description = mdDoc '' WARNING: This option will expose store your config unencrypted world-readable in the nix store. Config text for dae. See <https://github.com/daeuniverse/dae/blob/main/example.dae>. Loading @@ -103,11 +102,6 @@ in environment.systemPackages = [ cfg.package ]; systemd.packages = [ cfg.package ]; environment.etc."dae/config.dae" = { mode = "0400"; source = pkgs.writeText "config.dae" cfg.config; }; networking = lib.mkIf cfg.openFirewall.enable { firewall = let portToOpen = cfg.openFirewall.port; Loading @@ -121,7 +115,13 @@ in systemd.services.dae = let daeBin = lib.getExe cfg.package; TxChecksumIpGenericWorkaround = with lib;(getExe pkgs.writeShellApplication { configPath = if cfg.configFile != null then cfg.configFile else pkgs.writeText "config.dae" cfg.config; TxChecksumIpGenericWorkaround = with lib; (getExe pkgs.writeShellApplication { name = "disable-tx-checksum-ip-generic"; text = with pkgs; '' iface=$(${iproute2}/bin/ip route | ${lib.getExe gawk} '/default/ {print $5}') Loading @@ -132,9 +132,10 @@ in { wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStartPre = [ "" "${daeBin} validate -c ${cfg.configFile}" ] LoadCredential = [ "config.dae:${configPath}" ]; ExecStartPre = [ "" "${daeBin} validate -c \${CREDENTIALS_DIRECTORY}/config.dae" ] ++ (with lib; optional cfg.disableTxChecksumIpGeneric TxChecksumIpGenericWorkaround); ExecStart = [ "" "${daeBin} run --disable-timestamp -c ${cfg.configFile}" ]; ExecStart = [ "" "${daeBin} run --disable-timestamp -c \${CREDENTIALS_DIRECTORY}/config.dae" ]; Environment = "DAE_LOCATION_ASSET=${cfg.assetsPath}"; }; }; Loading @@ -149,13 +150,21 @@ in } { assertion = !((config.services.dae.config != "global{}\nrouting{}\n") && (config.services.dae.configFile != "/etc/dae/config.dae")); assertion = !((config.services.dae.config != null) && (config.services.dae.configFile != null)); message = '' Option `config` and `configFile` could not be set at the same time. ''; } { assertion = !((config.services.dae.config == null) && (config.services.dae.configFile == null)); message = '' Either `config` or `configFile` should be set. ''; } ]; }; } nixos/tests/dae.nix +4 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,10 @@ import ./make-test-python.nix ({ lib, pkgs, ... }: { }; services.dae = { enable = true; config = '' global{} routing{} ''; }; }; Loading Loading
nixos/modules/services/networking/dae.nix +33 −24 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ in package = mkPackageOptionMD pkgs "dae" { }; assets = mkOption { type = with types;(listOf path); default = with pkgs; [ v2ray-geoip v2ray-domain-list-community ]; Loading Loading @@ -47,7 +48,7 @@ in options = { enable = mkEnableOption "enable"; port = mkOption { type = types.int; type = types.port; description = '' Port to be opened. Consist with field `tproxy_port` in config file. ''; Loading @@ -70,8 +71,8 @@ in }; configFile = mkOption { type = types.path; default = "/etc/dae/config.dae"; type = with types; (nullOr path); default = null; example = "/path/to/your/config.dae"; description = mdDoc '' The path of dae config file, end with `.dae`. Loading @@ -79,12 +80,10 @@ in }; config = mkOption { type = types.str; default = '' global{} routing{} ''; type = with types; (nullOr str); default = null; description = mdDoc '' WARNING: This option will expose store your config unencrypted world-readable in the nix store. Config text for dae. See <https://github.com/daeuniverse/dae/blob/main/example.dae>. Loading @@ -103,11 +102,6 @@ in environment.systemPackages = [ cfg.package ]; systemd.packages = [ cfg.package ]; environment.etc."dae/config.dae" = { mode = "0400"; source = pkgs.writeText "config.dae" cfg.config; }; networking = lib.mkIf cfg.openFirewall.enable { firewall = let portToOpen = cfg.openFirewall.port; Loading @@ -121,7 +115,13 @@ in systemd.services.dae = let daeBin = lib.getExe cfg.package; TxChecksumIpGenericWorkaround = with lib;(getExe pkgs.writeShellApplication { configPath = if cfg.configFile != null then cfg.configFile else pkgs.writeText "config.dae" cfg.config; TxChecksumIpGenericWorkaround = with lib; (getExe pkgs.writeShellApplication { name = "disable-tx-checksum-ip-generic"; text = with pkgs; '' iface=$(${iproute2}/bin/ip route | ${lib.getExe gawk} '/default/ {print $5}') Loading @@ -132,9 +132,10 @@ in { wantedBy = [ "multi-user.target" ]; serviceConfig = { ExecStartPre = [ "" "${daeBin} validate -c ${cfg.configFile}" ] LoadCredential = [ "config.dae:${configPath}" ]; ExecStartPre = [ "" "${daeBin} validate -c \${CREDENTIALS_DIRECTORY}/config.dae" ] ++ (with lib; optional cfg.disableTxChecksumIpGeneric TxChecksumIpGenericWorkaround); ExecStart = [ "" "${daeBin} run --disable-timestamp -c ${cfg.configFile}" ]; ExecStart = [ "" "${daeBin} run --disable-timestamp -c \${CREDENTIALS_DIRECTORY}/config.dae" ]; Environment = "DAE_LOCATION_ASSET=${cfg.assetsPath}"; }; }; Loading @@ -149,13 +150,21 @@ in } { assertion = !((config.services.dae.config != "global{}\nrouting{}\n") && (config.services.dae.configFile != "/etc/dae/config.dae")); assertion = !((config.services.dae.config != null) && (config.services.dae.configFile != null)); message = '' Option `config` and `configFile` could not be set at the same time. ''; } { assertion = !((config.services.dae.config == null) && (config.services.dae.configFile == null)); message = '' Either `config` or `configFile` should be set. ''; } ]; }; }
nixos/tests/dae.nix +4 −0 Original line number Diff line number Diff line Loading @@ -14,6 +14,10 @@ import ./make-test-python.nix ({ lib, pkgs, ... }: { }; services.dae = { enable = true; config = '' global{} routing{} ''; }; }; Loading