commit 8c6c15fccef13089d82b314ca50158695a2d4948
parent b7bcf36ef019e2f5adf77fb91524f155d6e1daad
Author: Katja (ctucx) <git@ctu.cx>
Date: Thu, 6 Mar 2025 21:27:47 +0100
parent b7bcf36ef019e2f5adf77fb91524f155d6e1daad
Author: Katja (ctucx) <git@ctu.cx>
Date: Thu, 6 Mar 2025 21:27:47 +0100
configurations/common/syncthing: refactor
1 file changed, 79 insertions(+), 98 deletions(-)
M
|
177
+++++++++++++++++++++++++++++++++++--------------------------------------------
diff --git a/configurations/common/syncthing.nix b/configurations/common/syncthing.nix @@ -1,7 +1,7 @@ { pkgs, config, lib, ... }: let - devices = { + syncthingDevices = { #mobile devices blechkasten.id = "HGPWBVY-RD4JKBQ-X3V53IB-KRVDXEQ-4YLN5F2-WPPSMYR-SOXGTY6-IDFOAAC"; coladose.id = "BNCAOEB-CYTYIBA-ZKFJKRB-DX4C3MT-SDH7IWQ-5EI35PJ-YUIJSYH-COCGUAW"; @@ -10,140 +10,121 @@ let iphone.id = "3SM3LJV-XMHYW2D-MU5WQ3T-KGYUJOI-LXOL6YI-BSVZ2B5-QJ6GVXN-MPWMKQ7"; #servers - hector = { - name = "hector.ctu.cx"; - id = "MVGBPSX-YSZNBDO-E7HZFGJ-WULYWQ5-XDHVMJO-BKA4R37-GPPRLLS-Z5DQMQJ"; - }; - wanderduene = { - name = "wanderduene.ctu.cx"; - id = "WEFYARN-GY3WZXB-TIXBI56-ZZ77AHS-GFH5SH2-Q35NTBI-VPT3OEM-EQNAMQH"; - }; - briefkasten = { - name = "briefkasten.home.ctu.cx"; - id = "QI2EPUE-4VMZ3XV-LXX3GXP-RHCWTRY-AACLSGL-YG7MIYV-THST74N-KJGIBQ6"; - }; + 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" - "Blechelse" - "YouTube" ]; }; - deviceNames = builtins.attrNames (lib.filterAttrs isCurrentHost devices); - shareDeviceNames = share: builtins.attrNames (lib.filterAttrs (n: v: builtins.elem share v) enabledShares); + defaultVersioning = { + type = "trashcan"; + params = { + cleanoutDays = "3"; + }; + }; + - filterCurrentHost = devices: lib.remove config.networking.hostName devices; + isCurrentHost = key: value: key != config.networking.hostName; - isCurrentHost = n: v: n != config.networking.hostName; - isShareEnabled = share: + 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; - - dataDir = config.services.syncthing.dataDir; + false + ); -in { - dataDir = dataDir; +in rec { - devices = (lib.mkMerge [ (lib.filterAttrs isCurrentHost devices)]); + 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.type = "trashcan"; - versioning.params = { - cleanoutDays = "3"; - }; + 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.type = "trashcan"; - versioning.params = { - cleanoutDays = "3"; - }; + 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.type = "trashcan"; - versioning.params = { - cleanoutDays = "3"; - }; - }; - - "${dataDir}/Music (Originals)" = rec { - enable = lib.mkDefault (isShareEnabled "${id}"); - id = "ctucx-music-orig"; - label = "Music (Originals)"; - devices = filterCurrentHost (shareDeviceNames "${id}"); - versioning.type = "trashcan"; - versioning.params = { - cleanoutDays = "3"; - }; + 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.type = "trashcan"; - versioning.params = { - cleanoutDays = "3"; - }; + 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.type = "trashcan"; - versioning.params = { - cleanoutDays = "3"; - }; + enable = lib.mkDefault true; + id = "ctucx-videos"; + label = "Videos"; + devices = deviceNames; + versioning = lib.mkDefault defaultVersioning; }; - "${dataDir}/Media (legacy)" = rec { - enable = lib.mkDefault (isShareEnabled "${id}"); - id = "ctucx-media"; - label = "Media (legacy)"; - devices = filterCurrentHost (shareDeviceNames "${id}"); - versioning.type = "trashcan"; - versioning.params = { - cleanoutDays = "3"; - }; + "${dataDir}/Bahn-Richtlinien" = { + enable = lib.mkDefault true; + id = "Bahn-Richtlinien"; + label = "Bahn-Richtlinien"; + devices = deviceNames; + versioning = lib.mkDefault defaultVersioning; }; - - - "${dataDir}/Bahn-Richtlinien" = { - enable = lib.mkDefault true; - id = "Bahn-Richtlinien"; - label = "Bahn-Richtlinien"; - devices = (lib.mkMerge [ deviceNames]); - versioning.type = "trashcan"; - versioning.params = { - cleanoutDays = "3"; - }; + "${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; + }; }; + }