Skip to content

Commit

Permalink
resilio: generate configuration with toJSON
Browse files Browse the repository at this point in the history
  • Loading branch information
Mic92 committed Jun 2, 2017
1 parent b6e3847 commit c611d03
Showing 1 changed file with 47 additions and 80 deletions.
127 changes: 47 additions & 80 deletions nixos/modules/services/networking/resilio.nix
Original file line number Diff line number Diff line change
Expand Up @@ -5,76 +5,41 @@ with lib;
let
cfg = config.services.resilio;

resilioSync = pkgs.resilio;

listenAddr = cfg.httpListenAddr + ":" + (toString cfg.httpListenPort);

boolStr = x: if x then "true" else "false";
optionalEmptyStr = b: v: optionalString (b != "") v;

webUIConfig = optionalString cfg.enableWebUI
''
"webui":
{
${optionalEmptyStr cfg.httpLogin "\"login\": \"${cfg.httpLogin}\","}
${optionalEmptyStr cfg.httpPass "\"password\": \"${cfg.httpPass}\","}
${optionalEmptyStr cfg.apiKey "\"api_key\": \"${cfg.apiKey}\","}
${optionalEmptyStr cfg.directoryRoot "\"directory_root\": \"${cfg.directoryRoot}\","}
"listen": "${listenAddr}"
}
'';

knownHosts = e:
optionalString (e ? "knownHosts")
(concatStringsSep "," (map (v: "\"${v}\"") e."knownHosts"));

sharedFoldersRecord =
concatStringsSep "," (map (entry:
let helper = attr: v:
if (entry ? attr) then boolStr entry.attr else boolStr v;
in
''
{
"secret": "${entry.secret}",
"dir": "${entry.directory}",
"use_relay_server": ${helper "useRelayServer" true},
"use_tracker": ${helper "useTracker" true},
"use_dht": ${helper "useDHT" false},
"search_lan": ${helper "searchLAN" true},
"use_sync_trash": ${helper "useSyncTrash" true},
"known_hosts": [${knownHosts entry}]
}
'') cfg.sharedFolders);

sharedFoldersConfig = optionalString (cfg.sharedFolders != [])
''
"shared_folders":
[
${sharedFoldersRecord}
]
'';

configFile = pkgs.writeText "config.json"
''
{
"device_name": "${cfg.deviceName}",
"storage_path": "${cfg.storagePath}",
"listening_port": ${toString cfg.listeningPort},
"use_gui": false,
"check_for_updates": ${boolStr cfg.checkForUpdates},
"use_upnp": ${boolStr cfg.useUpnp},
"download_limit": ${toString cfg.downloadLimit},
"upload_limit": ${toString cfg.uploadLimit},
"lan_encrypt_data": ${boolStr cfg.encryptLAN},
${webUIConfig}
${sharedFoldersConfig}
}
'';
resilioSync = pkgs.resilio-sync;

sharedFoldersRecord = map (entry: {
secret = entry.secret;
dir = entry.directory;

use_relay_server = entry.useRelayServer;
use_tracker = entry.useTracker;
use_dht = entry.useDHT;

search_lan = entry.searchLAN;
use_sync_trash = entry.useSyncTrash;
known_hosts = knownHosts;
}) cfg.sharedFolders;

configFile = pkgs.writeText "config.json" (builtins.toJSON ({
device_name = cfg.deviceName;
storage_path = cfg.storagePath;
listening_port = cfg.listeningPort;
use_gui = false;
check_for_updates = cfg.checkForUpdates;
use_upnp = cfg.useUpnp;
download_limit = cfg.downloadLimit;
upload_limit = cfg.uploadLimit;
lan_encrypt_data = cfg.encryptLAN;
} // optionalAttrs cfg.enableWebUI {
webui = { listen = "${cfg.httpListenAddr}:${toString cfg.httpListenPort}"; } //
(optionalAttrs (cfg.httpLogin != "") { login = cfg.httpLogin; }) //
(optionalAttrs (cfg.httpPass != "") { password = cfg.httpPass; }) //
(optionalAttrs (cfg.apiKey != "") { api_key = cfg.apiKey; }) //
(optionalAttrs (cfg.directoryRoot != "") { directory_root = cfg.directoryRoot; });
} // optionalAttrs (sharedFoldersRecord != []) {
shared_folders = sharedFoldersRecord;
}));

in
{
options = {
Expand All @@ -97,6 +62,7 @@ in
deviceName = mkOption {
type = types.str;
example = "Voltron";
default = config.networking.hostName;
description = ''
Name of the Resilio Sync device.
'';
Expand Down Expand Up @@ -230,10 +196,10 @@ in
useDHT = false;
searchLAN = true;
useSyncTrash = true;
knownHosts =
[ "192.168.1.2:4444"
"192.168.1.3:4444"
];
knownHosts = [
"192.168.1.2:4444"
"192.168.1.3:4444"
];
}
];
description = ''
Expand Down Expand Up @@ -275,7 +241,6 @@ in
}
];

services.resilio.package = mkOptionDefault pkgs.resilio;

users.extraUsers.rslsync = {
description = "Resilio Sync Service user";
Expand All @@ -295,8 +260,9 @@ in
Restart = "on-abort";
UMask = "0002";
User = "rslsync";
ExecStart =
"${resilioSync}/bin/rslsync --nodaemon --config ${configFile}";
ExecStart = ''
${resilioSync}/bin/rslsync --nodaemon --config ${configFile}
'';
};
};

Expand All @@ -305,11 +271,12 @@ in
after = [ "network.target" "local-fs.target" ];
serviceConfig = {
Restart = "on-abort";
ExecStart =
"${resilioSync}/bin/rslsync --nodaemon --config %h/.config/resilio-sync/config.json";
ExecStart = ''
${resilioSync}/bin/rslsync --nodaemon --config %h/.config/resilio-sync/config.json
'';
};
};

environment.systemPackages = [ cfg.package ];
environment.systemPackages = [ resilioSync ];
};
}

0 comments on commit c611d03

Please sign in to comment.