Unverified Commit 0f807cf2 authored by Sandro Jäckel's avatar Sandro Jäckel Committed by GitHub
Browse files

nixos/rustdesk-server: suppport enable rustdesk's signal server and relay...

nixos/rustdesk-server: suppport enable rustdesk's signal server and relay server seperately and rename an option (#333023)
parents 6d894422 97f1e5df
Loading
Loading
Loading
Loading
+59 −26
Original line number Diff line number Diff line
@@ -3,6 +3,12 @@ let
  TCPPorts = [21115 21116 21117 21118 21119];
  UDPPorts = [21116];
in {
  imports = [
    (lib.mkRemovedOptionModule [ "services" "rustdesk-server" "relayIP" ] "This option has been replaced by services.rustdesk-server.signal.relayHosts")
    (lib.mkRenamedOptionModule [ "services" "rustdesk-server" "extraRelayArgs" ] [ "services" "rustdesk-server" "relay" "extraArgs" ])
    (lib.mkRenamedOptionModule [ "services" "rustdesk-server" "extraSignalArgs" ] [ "services" "rustdesk-server" "signal" "extraArgs" ])
  ];

  options.services.rustdesk-server = with lib; with types; {
    enable = mkEnableOption "RustDesk, a remote access and remote control software, allowing maintenance of computers and other devices";

@@ -18,14 +24,25 @@ in {
      '';
    };

    relayIP = mkOption {
      type = str;
    signal = {
      enable = mkOption {
        type = bool;
        default = true;
        description = ''
          Whether to enable the RustDesk signal server.
        '';
      };

      relayHosts = mkOption {
        type = listOf str;
        default = [];
        # reference: https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/relay/
        description = ''
        The public facing IP of the RustDesk relay.
          The relay server IP addresses or DNS names of the RustDesk relay.
        '';
      };

    extraSignalArgs = mkOption {
      extraArgs = mkOption {
        type = listOf str;
        default = [];
        example = [ "-k" "_" ];
@@ -34,7 +51,17 @@ in {
        '';
      };

    extraRelayArgs = mkOption {
    };

    relay = {
      enable = mkOption {
        type = bool;
        default = true;
        description = ''
          Whether to enable the RustDesk relay server.
        '';
      };
      extraArgs = mkOption {
        type = listOf str;
        default = [];
        example = [ "-k" "_" ];
@@ -44,6 +71,8 @@ in {
      };
    };

  };

  config = let
    cfg = config.services.rustdesk-server;
    serviceDefaults = {
@@ -96,13 +125,17 @@ in {
      wantedBy = [ "multi-user.target" ];
    };

    systemd.services.rustdesk-signal = lib.mkMerge [ serviceDefaults {
      serviceConfig.ExecStart = "${cfg.package}/bin/hbbs -r ${cfg.relayIP} ${lib.escapeShellArgs cfg.extraSignalArgs}";
    } ];
    systemd.services.rustdesk-signal =
      let
        relayArg = builtins.concatStringsSep ":" cfg.signal.relayHosts;
      in
        lib.mkIf cfg.signal.enable (lib.mkMerge [ serviceDefaults {
          serviceConfig.ExecStart = "${cfg.package}/bin/hbbs --relay-servers ${relayArg} ${lib.escapeShellArgs cfg.signal.extraArgs}";
        } ]);

    systemd.services.rustdesk-relay = lib.mkMerge [ serviceDefaults {
      serviceConfig.ExecStart = "${cfg.package}/bin/hbbr ${lib.escapeShellArgs cfg.extraRelayArgs}";
    } ];
    systemd.services.rustdesk-relay = lib.mkIf cfg.relay.enable (lib.mkMerge [ serviceDefaults {
      serviceConfig.ExecStart = "${cfg.package}/bin/hbbr ${lib.escapeShellArgs cfg.relay.extraArgs}";
    } ]);
  };

  meta.maintainers = with lib.maintainers; [ ppom ];