fork
Configure Feed
Select the types of activity you want to include in your feed.
lol
fork
Configure Feed
Select the types of activity you want to include in your feed.
1{
2 lib,
3 pkgs,
4 config,
5 ...
6}:
7let
8 TCPPorts = [
9 21115
10 21116
11 21117
12 21118
13 21119
14 ];
15 UDPPorts = [ 21116 ];
16in
17{
18 imports = [
19 (lib.mkRemovedOptionModule [
20 "services"
21 "rustdesk-server"
22 "relayIP"
23 ] "This option has been replaced by services.rustdesk-server.signal.relayHosts")
24 (lib.mkRenamedOptionModule
25 [ "services" "rustdesk-server" "extraRelayArgs" ]
26 [ "services" "rustdesk-server" "relay" "extraArgs" ]
27 )
28 (lib.mkRenamedOptionModule
29 [ "services" "rustdesk-server" "extraSignalArgs" ]
30 [ "services" "rustdesk-server" "signal" "extraArgs" ]
31 )
32 ];
33
34 options.services.rustdesk-server =
35 with lib;
36 with types;
37 {
38 enable = mkEnableOption "RustDesk, a remote access and remote control software, allowing maintenance of computers and other devices";
39
40 package = mkPackageOption pkgs "rustdesk-server" { };
41
42 openFirewall = mkOption {
43 type = types.bool;
44 default = false;
45 description = ''
46 Open the connection ports.
47 TCP (${lib.concatStringsSep ", " (map toString TCPPorts)})
48 UDP (${lib.concatStringsSep ", " (map toString UDPPorts)})
49 '';
50 };
51
52 signal = {
53 enable = mkOption {
54 type = bool;
55 default = true;
56 description = ''
57 Whether to enable the RustDesk signal server.
58 '';
59 };
60
61 relayHosts = mkOption {
62 type = listOf str;
63 default = [ ];
64 # reference: https://rustdesk.com/docs/en/self-host/rustdesk-server-pro/relay/
65 description = ''
66 The relay server IP addresses or DNS names of the RustDesk relay.
67 '';
68 };
69
70 extraArgs = mkOption {
71 type = listOf str;
72 default = [ ];
73 example = [
74 "-k"
75 "_"
76 ];
77 description = ''
78 A list of extra command line arguments to pass to the `hbbs` process.
79 '';
80 };
81
82 };
83
84 relay = {
85 enable = mkOption {
86 type = bool;
87 default = true;
88 description = ''
89 Whether to enable the RustDesk relay server.
90 '';
91 };
92 extraArgs = mkOption {
93 type = listOf str;
94 default = [ ];
95 example = [
96 "-k"
97 "_"
98 ];
99 description = ''
100 A list of extra command line arguments to pass to the `hbbr` process.
101 '';
102 };
103 };
104
105 };
106
107 config =
108 let
109 cfg = config.services.rustdesk-server;
110 serviceDefaults = {
111 enable = true;
112 requiredBy = [ "rustdesk.target" ];
113 serviceConfig = {
114 Slice = "system-rustdesk.slice";
115 User = "rustdesk";
116 Group = "rustdesk";
117 DynamicUser = "yes";
118 Environment = [ ];
119 WorkingDirectory = "/var/lib/rustdesk";
120 StateDirectory = "rustdesk";
121 StateDirectoryMode = "0750";
122 LockPersonality = true;
123 PrivateDevices = true;
124 PrivateMounts = true;
125 PrivateUsers = true;
126 ProtectClock = true;
127 ProtectControlGroups = true;
128 ProtectHome = true;
129 ProtectHostname = true;
130 ProtectKernelLogs = true;
131 ProtectKernelModules = true;
132 ProtectKernelTunables = true;
133 ProtectProc = "invisible";
134 RestrictNamespaces = true;
135 };
136 };
137 in
138 lib.mkIf cfg.enable {
139 users.users.rustdesk = {
140 description = "System user for RustDesk";
141 isSystemUser = true;
142 group = "rustdesk";
143 };
144 users.groups.rustdesk = { };
145
146 networking.firewall.allowedTCPPorts = lib.mkIf cfg.openFirewall TCPPorts;
147 networking.firewall.allowedUDPPorts = lib.mkIf cfg.openFirewall UDPPorts;
148
149 systemd.slices.system-rustdesk = {
150 enable = true;
151 description = "RustDesk Remote Desktop Slice";
152 };
153
154 systemd.targets.rustdesk = {
155 enable = true;
156 description = "Target designed to group RustDesk Signal & RustDesk Relay";
157 after = [ "network.target" ];
158 wantedBy = [ "multi-user.target" ];
159 };
160
161 systemd.services.rustdesk-signal =
162 let
163 relayArg = builtins.concatStringsSep ":" cfg.signal.relayHosts;
164 in
165 lib.mkIf cfg.signal.enable (
166 lib.mkMerge [
167 serviceDefaults
168 {
169 serviceConfig.ExecStart = "${cfg.package}/bin/hbbs --relay-servers ${relayArg} ${lib.escapeShellArgs cfg.signal.extraArgs}";
170 }
171 ]
172 );
173
174 systemd.services.rustdesk-relay = lib.mkIf cfg.relay.enable (
175 lib.mkMerge [
176 serviceDefaults
177 {
178 serviceConfig.ExecStart = "${cfg.package}/bin/hbbr ${lib.escapeShellArgs cfg.relay.extraArgs}";
179 }
180 ]
181 );
182 };
183
184 meta.maintainers = with lib.maintainers; [ ppom ];
185}