{
	config,
	lib,
	pkgs,
	util,
	...
}: let
	cfg = config.module.syncthing;
in {
	config = lib.mkIf cfg.enable {
		# CLI tools.
		environment.systemPackages = with pkgs; [ syncthing ];

		# Access at sync.lan.
		networking.hosts = { "127.0.0.1" = [ "sync.local" ]; };
		services.nginx.enable = true;
		services.nginx.virtualHosts."sync.local".extraConfig = util.trimTabs ''
			location / {
				allow 127.0.0.1;
				deny all;
				proxy_pass http://127.0.0.1:8384;
			}
		'';

		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;
					};
				};
			};
		};
	};
}