ctucx.git: nixfiles

ctucx' nixfiles

commit 8c6c15fccef13089d82b314ca50158695a2d4948
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
configurations/common/syncthing.nix
|
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;
+    };
   };
+
 }