{ config, lib, ... }: let cfg = config.myOptions.services.syncthing; inherit (config.myOptions.other.system) username; hmCfg = config.home-manager.users.${username}; configDir = config.home-manager.users.${username}.xdg.configHome; inherit (lib) mkEnableOption mkIf mkOption; inherit (lib.types) attrs; in { options.myOptions.services.syncthing = { enable = mkEnableOption "syncthing"; extraSettings = mkOption { type = attrs; description = "extra per host syncthing settings"; default = {}; }; }; # https://wes.today/nixos-syncthing/ config = let port = 8384; inherit (hmCfg.home) homeDirectory; in mkIf cfg.enable { services.syncthing = { enable = true; dataDir = homeDirectory; configDir = "${hmCfg.xdg.configHome}/syncthing"; openDefaultPorts = true; user = username; group = "users"; guiAddress = "0.0.0.0:${toString port}"; overrideDevices = false; overrideFolders = false; settings = { devices = { niks.id = "2YJLRJI-PB3OKLI-KJZGMYQ-RH5OVCS-LQAXBUT-IX2Q5TO-K24NBNS-33YQIQL"; del.id = "NZUKCEW-QYCXDGY-62LOMIH-47JUSD5-VXAVUTF-VG356GJ-ZHQCF3S-2PDIHAX"; chmura.id = "TJCCHXS-HA5ZXUI-NKXWICR-4ADPHCA-TVRNDBN-54E622Z-TUAAVOM-YIJHWAI"; }; folders = { Projects = { path = "${homeDirectory}/Projects"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; Studia = { path = "${homeDirectory}/Studia"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; KeePassXC = { path = "${homeDirectory}/KeePassXC"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; Notes = { path = "${homeDirectory}/Notes"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; mieszkanie = { path = "${homeDirectory}/mieszkanie"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; PrismLauncher = { path = "${hmCfg.xdg.dataHome}/PrismLauncher"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; jacekpoz = { path = "${homeDirectory}/jacekpoz"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; OsuStable = { path = "${homeDirectory}/.osu"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; Cool = { path = "${homeDirectory}/Cool"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; RimWorld = { path = "${configDir}/unity3d/Ludeon Studios/RimWorld by Ludeon Studios"; devices = [ "niks" "del" "chmura" ]; versioning = { type = "staggered"; params = { cleanInterval = "3600"; maxAge = "15552000"; }; }; }; }; } // cfg.extraSettings; }; services.caddy = mkIf (username == "chmura") { virtualHosts."sync.jacekpoz.pl".extraConfig = '' reverse_proxy * localhost:${toString port} ''; }; }; }