Unverified Commit 383389d0 authored by Thiago Kenji Okada's avatar Thiago Kenji Okada Committed by GitHub
Browse files

Merge pull request #254582 from oluceps/dae-fix-overr

nixos/dae: fix override existed config issue
parents b96d352e 1ff17519
Loading
Loading
Loading
Loading
+33 −24
Original line number Diff line number Diff line
@@ -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 ];
@@ -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.
              '';
@@ -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`.
@@ -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>.
@@ -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;
@@ -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}')
@@ -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}";
          };
        };
@@ -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.
          '';
        }
      ];
    };
}
+4 −0
Original line number Diff line number Diff line
@@ -14,6 +14,10 @@ import ./make-test-python.nix ({ lib, pkgs, ... }: {
    };
    services.dae = {
      enable = true;
      config = ''
        global{}
        routing{}
      '';
    };
  };