2024-12-08 04:04:34 +03:00
|
|
|
{
|
2024-12-18 09:40:11 +03:00
|
|
|
config,
|
|
|
|
lib,
|
|
|
|
pkgs,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
let
|
|
|
|
cfg = config.module.syncthing;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
|
|
# CLI tools.
|
|
|
|
environment.systemPackages = with pkgs; [ syncthing ];
|
2024-12-08 22:25:43 +03:00
|
|
|
|
2024-12-18 09:40:11 +03:00
|
|
|
# Access at sync.lan.
|
|
|
|
networking.hosts = {
|
|
|
|
"127.0.0.1" = [ "sync.local" ];
|
|
|
|
};
|
|
|
|
services.nginx.enable = true;
|
|
|
|
services.nginx.virtualHosts."sync.local".extraConfig = ''
|
|
|
|
location / {
|
|
|
|
allow 127.0.0.1;
|
|
|
|
deny all;
|
|
|
|
proxy_pass http://127.0.0.1:8384;
|
|
|
|
}
|
|
|
|
'';
|
2024-12-08 22:25:43 +03:00
|
|
|
|
2024-12-18 09:40:11 +03:00
|
|
|
services.syncthing = {
|
|
|
|
inherit (cfg)
|
|
|
|
enable
|
|
|
|
dataDir
|
|
|
|
user
|
|
|
|
group
|
|
|
|
;
|
|
|
|
openDefaultPorts = false;
|
|
|
|
systemService = true;
|
|
|
|
settings =
|
|
|
|
let
|
|
|
|
myDevices = {
|
|
|
|
"desktop" = {
|
|
|
|
id = "767Z675-SOCY4FL-JNYEBB6-5E2RG5O-XTZR6OP-BGOBZ7G-XVRLMD6-DQEB2AT";
|
|
|
|
};
|
|
|
|
"home" = {
|
|
|
|
id = "L5A5IPE-2FPJPHP-RJRV2PV-BLMLC3F-QPHSCUQ-4U3NM2I-AFPOE2A-HOPQZQF";
|
|
|
|
};
|
|
|
|
"max" = {
|
|
|
|
id = "3E3N4G4-SZ7LQXE-WQQZX7N-KFXEQKM-7VVN6QP-OMB5356-ICNXUZY-TTLEKAR";
|
|
|
|
};
|
|
|
|
"phone" = {
|
|
|
|
id = "6RO5JXW-2XO4S3E-VCDAHPD-4ADK6LL-HQGMZHU-GD6DE2O-6KNHWXJ-BCSBGQ7";
|
|
|
|
};
|
|
|
|
"work" = {
|
|
|
|
id = "CMG6QMP-WCJJEUG-UQ3KDUI-AHRADRH-666JQ3Z-HYFEPDA-URMAMNP-Z4MSGQT";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
dashaDevices = {
|
|
|
|
"dasha" = {
|
|
|
|
id = "VNRA5VH-LWNPVV4-Y2RF7FJ-446FHRQ-PET7Q4R-D3H5RT3-AUNARH5-5XYB3AT";
|
|
|
|
};
|
|
|
|
"dashaphone" = {
|
|
|
|
id = "QKGXSZC-HGAA6S5-RJJAT5Z-UPUGDAA-3GXEO6C-WHKMBUD-ESKQPZE-TZFNYA6";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
in
|
|
|
|
lib.recursiveUpdate cfg.settings {
|
|
|
|
devices = myDevices // dashaDevices;
|
|
|
|
folders =
|
|
|
|
let
|
|
|
|
allMyDevices = lib.mapAttrsToList (n: v: n) myDevices;
|
|
|
|
allDashaDevices = lib.mapAttrsToList (n: v: n) dashaDevices;
|
|
|
|
in
|
|
|
|
lib.filterAttrs (n: v: builtins.elem config.networking.hostName v.devices) {
|
|
|
|
"save" = {
|
|
|
|
path = "${cfg.dataDir}/save";
|
|
|
|
devices = [
|
|
|
|
"desktop"
|
|
|
|
"home"
|
|
|
|
"max"
|
|
|
|
"work"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
"photo" = {
|
|
|
|
path = "${cfg.dataDir}/photo";
|
|
|
|
devices = [
|
|
|
|
"dashaphone"
|
|
|
|
"home"
|
|
|
|
"phone"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
"tmp" = {
|
|
|
|
path = "${cfg.dataDir}/tmp";
|
|
|
|
devices = allMyDevices;
|
|
|
|
};
|
|
|
|
"document" = {
|
|
|
|
path = "${cfg.dataDir}/document";
|
|
|
|
devices = allMyDevices;
|
|
|
|
};
|
|
|
|
"dima" = {
|
|
|
|
path = "${cfg.dataDir}/dima";
|
|
|
|
devices = allMyDevices ++ allDashaDevices;
|
|
|
|
};
|
|
|
|
"dasha" = {
|
|
|
|
path = "${cfg.dataDir}/dasha";
|
|
|
|
devices = allDashaDevices;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2024-12-08 04:04:34 +03:00
|
|
|
}
|