{ config, pkgs, ... }: { assertions = [ { assertion = config.users.users ? "vili"; message = "User 'vili' needed for syncthing!"; } ]; boot.kernel.sysctl."fs.inotify.max_user_watches" = 204800; services.syncthing = { enable = true; user = "vili"; dataDir = config.users.users.${config.services.syncthing.user}.home; settings = { devices = pkgs.lib.mkMerge [ { "syncthing" = { id = "ZX35ARB-3ULEUV3-NNUEREF-DEDWOJU-GE7A4PP-T7O43NI-SU564OD-E26HHA4"; addresses = [ "tcp://syncthing.vsinerva.fi:22000" ]; }; } (pkgs.lib.mkIf (config.networking.hostName == "syncthing") { "helium" = { id = "2MRUBSY-NHXYMAW-SY22RHP-CNNMHKR-DPDKMM4-2XV5F6M-6KSNLQI-DD4EOAM"; addresses = [ "tcp://[fd08:d473:bcca:f0::2]:22000" ]; }; "lithium" = { id = "S4ZORDV-QBY7QC7-FQHADMZ-NQSKJUA-7B7LQNS-CWJLSMG-JPMN7YJ-OVRDZQA"; addresses = [ "tcp://[fd08:d473:bcca:f0::3]:22000" ]; }; "phone" = { id = "K6QCK2R-BU65RAC-PHTGLIA-24IHDXE-N6VNBAW-QYREMVD-XWGWKRA-VX2BNAK"; addresses = [ "tcp://[fd08:d473:bcca:f0::10]:22000" ]; }; }) ]; folders = let default = { devices = pkgs.lib.mkMerge [ [ "syncthing" ] (pkgs.lib.mkIf (config.networking.hostName == "syncthing") [ "helium" "lithium" "phone" ]) ]; versioning = { type = "trashcan"; params.cleanoutDays = "30"; }; fsWatcherDelayS = 1; }; default-no-phone = default // { devices = pkgs.lib.mkMerge [ [ "syncthing" ] (pkgs.lib.mkIf (config.networking.hostName == "syncthing") [ "helium" "lithium" ]) ]; }; in { "~/Documents" = default; "~/Downloads" = default-no-phone; "~/Music" = default-no-phone; "~/Pictures" = default; "~/Projects" = default-no-phone; "~/School" = default; "~/Videos" = default-no-phone; "~/Zotero" = default; }; options = { urAccepted = -1; localAnnounceEnabled = false; globalAnnounceEnabled = false; natEnabled = false; relaysEnabled = false; }; }; #TCP/UDP 22000 for transfers and UDP 21027 for discovery openDefaultPorts = true; }; }