{ pkgs, config, lib, ... }: let syncthingDevices = { #mobile devices blechkasten.id = "HGPWBVY-RD4JKBQ-X3V53IB-KRVDXEQ-4YLN5F2-WPPSMYR-SOXGTY6-IDFOAAC"; coladose.id = "BNCAOEB-CYTYIBA-ZKFJKRB-DX4C3MT-SDH7IWQ-5EI35PJ-YUIJSYH-COCGUAW"; seifenkiste.id = "6YZT5PZ-EKXZBMV-C2MJL75-OCQ36LC-L3QIRPW-VJ5EU3C-2ICZDDO-IZ7IGAO"; iphone.id = "3SM3LJV-XMHYW2D-MU5WQ3T-KGYUJOI-LXOL6YI-BSVZ2B5-QJ6GVXN-MPWMKQ7"; #servers hector.name = "hector.ctu.cx"; hector.id = "MVGBPSX-YSZNBDO-E7HZFGJ-WULYWQ5-XDHVMJO-BKA4R37-GPPRLLS-Z5DQMQJ"; wanderduene.name = "wanderduene.ctu.cx"; wanderduene.id = "WEFYARN-GY3WZXB-TIXBI56-ZZ77AHS-GFH5SH2-Q35NTBI-VPT3OEM-EQNAMQH"; briefkasten.name = "briefkasten.home.ctu.cx"; briefkasten.id = "QI2EPUE-4VMZ3XV-LXX3GXP-RHCWTRY-AACLSGL-YG7MIYV-THST74N-KJGIBQ6"; }; enabledShares = { briefkasten = [ "ctucx-music-orig" "ctucx-media" ]; }; defaultVersioning = { type = "trashcan"; params = { cleanoutDays = "3"; }; }; isCurrentHost = key: value: key != config.networking.hostName; deviceNames = ( syncthingDevices |> lib.filterAttrs isCurrentHost |> builtins.attrNames ); shareDeviceNames = share: ( enabledShares |> lib.filterAttrs isCurrentHost |> lib.filterAttrs (key: value: builtins.elem share value) |> builtins.attrNames ); isShareEnabled = share: ( if builtins.hasAttr config.networking.hostName enabledShares then (if builtins.elem share enabledShares.${config.networking.hostName} then true else false) else false ); in rec { dataDir = config.services.syncthing.dataDir; devices = lib.mkMerge [ (lib.filterAttrs isCurrentHost syncthingDevices) ]; folders = { "${dataDir}/Audiobooks" = { enable = lib.mkDefault true; id = "ctucx-audiobooks"; label = "Audiobooks"; devices = deviceNames; versioning = lib.mkDefault defaultVersioning; }; "${dataDir}/Documents" = { enable = lib.mkDefault true; id = "ctucx-documents"; label = "Documents"; devices = deviceNames; versioning = lib.mkDefault defaultVersioning; }; "${dataDir}/Music" = { enable = lib.mkDefault true; id = "ctucx-music"; label = "Music"; devices = deviceNames; versioning = lib.mkDefault defaultVersioning; }; "${dataDir}/Pictures" = { enable = lib.mkDefault true; id = "ctucx-pictures"; label = "Pictures"; devices = deviceNames; versioning = lib.mkDefault defaultVersioning; }; "${dataDir}/Videos" = { enable = lib.mkDefault true; id = "ctucx-videos"; label = "Videos"; devices = deviceNames; versioning = lib.mkDefault defaultVersioning; }; "${dataDir}/Bahn-Richtlinien" = { enable = lib.mkDefault true; id = "Bahn-Richtlinien"; label = "Bahn-Richtlinien"; devices = deviceNames; versioning = lib.mkDefault defaultVersioning; }; "${dataDir}/Music (Originals)" = rec { enable = lib.mkDefault (isShareEnabled "${id}"); id = "ctucx-music-orig"; label = "Music (Originals)"; devices = shareDeviceNames "${id}"; versioning = lib.mkDefault defaultVersioning; }; "${dataDir}/Media (legacy)" = rec { enable = lib.mkDefault (isShareEnabled "${id}"); id = "ctucx-media"; label = "Media (legacy)"; devices = shareDeviceNames "${id}"; versioning = lib.mkDefault defaultVersioning; }; }; }