···
cfg = config.services.resilio;
8
-
resilioSync = pkgs.resilio;
8
+
resilioSync = pkgs.resilio-sync;
10
-
listenAddr = cfg.httpListenAddr + ":" + (toString cfg.httpListenPort);
10
+
sharedFoldersRecord = map (entry: {
11
+
secret = entry.secret;
12
+
dir = entry.directory;
12
-
boolStr = x: if x then "true" else "false";
13
-
optionalEmptyStr = b: v: optionalString (b != "") v;
14
+
use_relay_server = entry.useRelayServer;
15
+
use_tracker = entry.useTracker;
16
+
use_dht = entry.useDHT;
15
-
webUIConfig = optionalString cfg.enableWebUI
19
-
${optionalEmptyStr cfg.httpLogin "\"login\": \"${cfg.httpLogin}\","}
20
-
${optionalEmptyStr cfg.httpPass "\"password\": \"${cfg.httpPass}\","}
21
-
${optionalEmptyStr cfg.apiKey "\"api_key\": \"${cfg.apiKey}\","}
22
-
${optionalEmptyStr cfg.directoryRoot "\"directory_root\": \"${cfg.directoryRoot}\","}
23
-
"listen": "${listenAddr}"
18
+
search_lan = entry.searchLAN;
19
+
use_sync_trash = entry.useSyncTrash;
20
+
known_hosts = knownHosts;
21
+
}) cfg.sharedFolders;
28
-
optionalString (e ? "knownHosts")
29
-
(concatStringsSep "," (map (v: "\"${v}\"") e."knownHosts"));
23
+
configFile = pkgs.writeText "config.json" (builtins.toJSON ({
24
+
device_name = cfg.deviceName;
25
+
storage_path = cfg.storagePath;
26
+
listening_port = cfg.listeningPort;
28
+
check_for_updates = cfg.checkForUpdates;
29
+
use_upnp = cfg.useUpnp;
30
+
download_limit = cfg.downloadLimit;
31
+
upload_limit = cfg.uploadLimit;
32
+
lan_encrypt_data = cfg.encryptLAN;
33
+
} // optionalAttrs cfg.enableWebUI {
34
+
webui = { listen = "${cfg.httpListenAddr}:${toString cfg.httpListenPort}"; } //
35
+
(optionalAttrs (cfg.httpLogin != "") { login = cfg.httpLogin; }) //
36
+
(optionalAttrs (cfg.httpPass != "") { password = cfg.httpPass; }) //
37
+
(optionalAttrs (cfg.apiKey != "") { api_key = cfg.apiKey; }) //
38
+
(optionalAttrs (cfg.directoryRoot != "") { directory_root = cfg.directoryRoot; });
39
+
} // optionalAttrs (sharedFoldersRecord != []) {
40
+
shared_folders = sharedFoldersRecord;
31
-
sharedFoldersRecord =
32
-
concatStringsSep "," (map (entry:
33
-
let helper = attr: v:
34
-
if (entry ? attr) then boolStr entry.attr else boolStr v;
38
-
"secret": "${entry.secret}",
39
-
"dir": "${entry.directory}",
41
-
"use_relay_server": ${helper "useRelayServer" true},
42
-
"use_tracker": ${helper "useTracker" true},
43
-
"use_dht": ${helper "useDHT" false},
45
-
"search_lan": ${helper "searchLAN" true},
46
-
"use_sync_trash": ${helper "useSyncTrash" true},
48
-
"known_hosts": [${knownHosts entry}]
50
-
'') cfg.sharedFolders);
52
-
sharedFoldersConfig = optionalString (cfg.sharedFolders != [])
56
-
${sharedFoldersRecord}
60
-
configFile = pkgs.writeText "config.json"
63
-
"device_name": "${cfg.deviceName}",
64
-
"storage_path": "${cfg.storagePath}",
65
-
"listening_port": ${toString cfg.listeningPort},
68
-
"check_for_updates": ${boolStr cfg.checkForUpdates},
69
-
"use_upnp": ${boolStr cfg.useUpnp},
70
-
"download_limit": ${toString cfg.downloadLimit},
71
-
"upload_limit": ${toString cfg.uploadLimit},
72
-
"lan_encrypt_data": ${boolStr cfg.encryptLAN},
75
-
${sharedFoldersConfig}
···
65
+
default = config.networking.hostName;
Name of the Resilio Sync device.
···
234
-
[ "192.168.1.2:4444"
···
278
-
services.resilio.package = mkOptionDefault pkgs.resilio;
users.extraUsers.rslsync = {
description = "Resilio Sync Service user";
···
299
-
"${resilioSync}/bin/rslsync --nodaemon --config ${configFile}";
264
+
${resilioSync}/bin/rslsync --nodaemon --config ${configFile}
···
after = [ "network.target" "local-fs.target" ];
309
-
"${resilioSync}/bin/rslsync --nodaemon --config %h/.config/resilio-sync/config.json";
275
+
${resilioSync}/bin/rslsync --nodaemon --config %h/.config/resilio-sync/config.json
313
-
environment.systemPackages = [ cfg.package ];
280
+
environment.systemPackages = [ resilioSync ];