zaphyra's git: nixfiles

zaphyra and void's nixfiles

commit d454d39b59b5184578e92b9d18a643fe2bdd54a2
parent 699c76d0c7e3e4ce21c080d0c4f00eaa6db8d4ed
Author: Katja (zaphyra) <git@ctu.cx>
Date: Mon, 9 Jun 2025 18:52:16 +0200

config/nixos/modules/presets/zaphyra/syncthing: refactor config
3 files changed, 93 insertions(+), 71 deletions(-)
M
config/nixos/modules/presets/zaphyra/syncthing.nix
|
148
++++++++++++++++++++++++++++++++++++++++++++-----------------------------------
M
secrets/huntii.yaml
|
9
+++++----
M
secrets/polaris.yaml
|
7
+++++--
diff --git a/config/nixos/modules/presets/zaphyra/syncthing.nix b/config/nixos/modules/presets/zaphyra/syncthing.nix
@@ -1,5 +1,6 @@
 {
-  pov,
+  inputs,
+  povSelf,
   pkgs,
   lib,
   config,

@@ -8,40 +9,55 @@
 }:
 let
   inherit (lib) types;
-  cfg = lib.getAttrFromPath pov config;
+  cfg = lib.getAttrFromPath povSelf config;
 
 in
 {
 
-  options.enable = {
-    type = types.bool;
-    default = false;
+  options = {
+    enable = {
+      type = types.bool;
+      default = false;
+    };
+    user = {
+      type = types.str;
+      default = "zaphyra";
+    };
+    group = {
+      type = types.str;
+      default = "users";
+    };
+    dataDir = {
+      type = types.str;
+      default = "/home/zaphyra";
+    };
+    configDir = {
+      type = types.str;
+      default = "/home/zaphyra/.config/syncthing";
+    };
+
+    enabledShares = {
+      type = with types; listOf str;
+      default = [
+        "zaphyra-audiobooks"
+        "zaphyra-documents"
+        "zaphyra-pictures"
+        "zaphyra-videos"
+        "zaphyra-db-richtlinien"
+      ];
+    };
   };
 
-  config = lib.mkIf (cfg.enable && cfg.syncthing.enable) (
+  config = lib.mkIf cfg.enable (
     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";
-
+        huntii.id = "6YZT5PZ-EKXZBMV-C2MJL75-OCQ36LC-L3QIRPW-VJ5EU3C-2ICZDDO-IZ7IGAO";
         iphone.id = "3SM3LJV-XMHYW2D-MU5WQ3T-KGYUJOI-LXOL6YI-BSVZ2B5-QJ6GVXN-MPWMKQ7";
 
         #servers
-        hector.name = "hector.infra.katja.wtf";
-        hector.id = "MVGBPSX-YSZNBDO-E7HZFGJ-WULYWQ5-XDHVMJO-BKA4R37-GPPRLLS-Z5DQMQJ";
-        wanderduene.name = "wanderduene.infra.katja.wtf";
-        wanderduene.id = "WEFYARN-GY3WZXB-TIXBI56-ZZ77AHS-GFH5SH2-Q35NTBI-VPT3OEM-EQNAMQH";
-        briefkasten.name = "briefkasten.infra.katja.wtf";
-        briefkasten.id = "QI2EPUE-4VMZ3XV-LXX3GXP-RHCWTRY-AACLSGL-YG7MIYV-THST74N-KJGIBQ6";
-      };
-
-      enabledShares = {
-        briefkasten = [
-          "ctucx-music-orig"
-          "ctucx-media"
-        ];
+        polaris.name = "polaris.home.infra.zaphyra.eu";
+        polaris.id = "QI2EPUE-4VMZ3XV-LXX3GXP-RHCWTRY-AACLSGL-YG7MIYV-THST74N-KJGIBQ6";
       };
 
       defaultVersioning = {

@@ -58,21 +74,23 @@ in
       shareDeviceNames =
         share:
         (
-          enabledShares
+          syncthingDevices
           |> lib.filterAttrs isCurrentHost
-          |> lib.filterAttrs (key: value: builtins.elem share value)
+          |> lib.filterAttrs (
+            name: value:
+            let
+              syncthingCfg = inputs.self.zaphyraHosts."${name}".config.modules.presets.zaphyra.syncthing;
+            in
+            (
+              if (inputs.self.zaphyraHosts ? name) then
+                if (syncthingCfg.enable) then lib.elem share syncthingCfg.enabledShares else false
+              else
+                false
+            )
+          )
           |> 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
-        );
-
       devices = lib.filterAttrs isCurrentHost syncthingDevices;
 
       folders =

@@ -81,65 +99,65 @@ in
 
         in
         {
-          "${dataDir}/Audiobooks" = {
-            enable = lib.mkDefault true;
-            id = "ctucx-audiobooks";
+          "${dataDir}/Audiobooks" = rec {
+            enable = lib.mkDefault (lib.elem id cfg.enabledShares);
+            id = "zaphyra-audiobooks";
             label = "Audiobooks";
             devices = deviceNames;
             versioning = lib.mkDefault defaultVersioning;
           };
 
-          "${dataDir}/Documents" = {
-            enable = lib.mkDefault true;
-            id = "ctucx-documents";
+          "${dataDir}/Documents" = rec {
+            enable = lib.mkDefault (lib.elem id cfg.enabledShares);
+            id = "zaphyra-documents";
             label = "Documents";
             devices = deviceNames;
             versioning = lib.mkDefault defaultVersioning;
           };
 
-          "${dataDir}/Music" = {
-            enable = lib.mkDefault true;
-            id = "ctucx-music";
+          "${dataDir}/Music" = rec {
+            enable = lib.mkDefault (lib.elem id cfg.enabledShares);
+            id = "zaphyra-music";
             label = "Music";
             devices = deviceNames;
             versioning = lib.mkDefault defaultVersioning;
           };
 
-          "${dataDir}/Pictures" = {
-            enable = lib.mkDefault true;
-            id = "ctucx-pictures";
+          "${dataDir}/Pictures" = rec {
+            enable = lib.mkDefault (lib.elem id cfg.enabledShares);
+            id = "zaphyra-pictures";
             label = "Pictures";
             devices = deviceNames;
             versioning = lib.mkDefault defaultVersioning;
           };
 
-          "${dataDir}/Videos" = {
-            enable = lib.mkDefault true;
-            id = "ctucx-videos";
+          "${dataDir}/Videos" = rec {
+            enable = lib.mkDefault (lib.elem id cfg.enabledShares);
+            id = "zaphyra-videos";
             label = "Videos";
             devices = deviceNames;
             versioning = lib.mkDefault defaultVersioning;
           };
 
-          "${dataDir}/Bahn-Richtlinien" = {
-            enable = lib.mkDefault true;
-            id = "Bahn-Richtlinien";
+          "${dataDir}/Bahn-Richtlinien" = rec {
+            enable = lib.mkDefault (lib.elem id cfg.enabledShares);
+            id = "zaphyra-db-richtlinien";
             label = "Bahn-Richtlinien";
             devices = deviceNames;
             versioning = lib.mkDefault defaultVersioning;
           };
 
           "${dataDir}/Music (Originals)" = rec {
-            enable = lib.mkDefault (isShareEnabled "${id}");
-            id = "ctucx-music-orig";
+            enable = lib.mkDefault (lib.elem id cfg.enabledShares);
+            id = "zaphyra-music-orig";
             label = "Music (Originals)";
             devices = shareDeviceNames "${id}";
             versioning = lib.mkDefault defaultVersioning;
           };
 
           "${dataDir}/Media (legacy)" = rec {
-            enable = lib.mkDefault (isShareEnabled "${id}");
-            id = "ctucx-media";
+            enable = lib.mkDefault (lib.elem id cfg.enabledShares);
+            id = "zaphyra-media";
             label = "Media (legacy)";
             devices = shareDeviceNames "${id}";
             versioning = lib.mkDefault defaultVersioning;

@@ -148,9 +166,9 @@ in
 
     in
     {
-      sops.secrets = lib.genAttrs [ "syncthingCert" "syncthingKey" ] (name: {
-        owner = "zaphyra";
-        group = "users";
+      sops.secrets = lib.genAttrs [ "syncthing/cert" "syncthing/key" ] (name: {
+        owner = cfg.user;
+        group = cfg.group;
       });
 
       services.syncthing = {

@@ -158,14 +176,14 @@ in
         openDefaultPorts = true;
         guiAddress = "[::1]:8384";
 
-        user = lib.mkDefault "zaphyra";
-        group = lib.mkDefault "users";
+        user = cfg.user;
+        group = cfg.group;
 
-        cert = lib.mkDefault config.sops.secrets.syncthingCert.path;
-        key = lib.mkDefault config.sops.secrets.syncthingKey.path;
+        cert = config.sops.secrets."syncthing/cert".path;
+        key = config.sops.secrets."syncthing/key".path;
 
-        dataDir = lib.mkDefault "/home/zaphyra";
-        configDir = lib.mkDefault "/home/zaphyra/.config/syncthing";
+        dataDir = cfg.dataDir;
+        configDir = cfg.configDir;
 
         settings.devices = devices;
         settings.folders = folders;
diff --git a/secrets/huntii.yaml b/secrets/huntii.yaml
@@ -1,7 +1,8 @@
 machine-id: ENC[AES256_GCM,data:+BtEuwGROivPn2ndlSdw2z1yzL6jNoIBoJOOq6qhqOM=,iv:Ikxuu3fkNycXUdzvSjKGM5E2+IxRcJXcLt3H4T4S3Ks=,tag:pfJza8F4k1SlhmEGpcWQ4A==,type:str]
 acmeTSIGKey: ENC[AES256_GCM,data:fB7CDRbheyldWpoCX47bozeA4baGS/bmhnsy1KqYzPplK92HMer7v6eZx1S3vsNjCd862FK9iLo3AlIdLu3Vew==,iv:/R+FjiAGfZgjebPv6bV3BoqHt/lAiAJjVNsyy2jBtpQ=,tag:W6vcwVfKpnRRIyWKNWHhHA==,type:str]
-syncthingCert: ENC[AES256_GCM,data:f1IFEblA+0kkM11HZCKlRxAKKxRt78W+iYoYiFdE3OBgBanEkbCIXYFAXclZE5WxHkIk2j7Qyf1d4IZN0tyMI+b+AfyjmPHHEO7MxrxHwjg0hzjMRjwO9TOtITnK7Ayz2OTdCcbCgJJK9QF2DqPSK/eQ+aB9bq8RoSedo5+gFJZY1MPW9SeKYYVb0c4cIDimc5WnhvXo/Ma+sXqIKz/YXTAFJig8FJTT7fz8sF/PxGRBln8YWFe4w6VIwsZk0Gerlq9Lt1OyWc7IJw7RxoQpBX6Yi4qqmjeYaVS0R2UsVafnoUzXLt1CMT6EJsW+y+0samy9qTIPnmn/xZEmzIiXKJJGyeMJiVA010S/feXFukcU0xxrfVhCRyCi1/oP15WePjZUOX2ezJLLFPRUbfXQKVJgsD4/EPvfahqXRuz9SOnJeLR0pfMA3hWMDMLY+PuUEaQIDiAF0mt4jZz/ASERaxRegDD0RGEnqu0fcJk1UrpqnUvFXcADW41psdCm5CJB7oG9ydARkEXMmLW5lO60yItWFl1zAVd5QXoLERSBH3SR5xUF9B9ip+9ruPxjlAMK+v84ZiHiXDgOphJYNsODPBtZ5s96LL5/pLAWk0g4AviJNwvIsg7MqvN2rO9cl60g6JVQhQq7jHFBYJOlfa9pLoRDZW+BYWo3Hw+5SfPK/phNtCFxdNC2Uk7dOd4bK0v8q+nWPmqx1FdGmbvVomTHnnDInlNhKwfSSeN4a9Hb4rhZIjB3RKQU/ILSfgWQ9n1+MtQV9moESqZhHP3UgAMoXt7fiI4hVQayUtvPVo3pUlUwNYNyof0axtAciLs/uSlNpI6zbVNTKK/UtoLly4FWdUgX7wySiv7sEKdunCheZ2M7olIqLJk6Bsd1YMwoAR2S5a7nEtip+jELimwViAaJFvQ97RcLePXoe7elQc1TjH+DuRzx54KPbi6bs2xMETDAiosP987928zj0mn423DDuJevQAv5KunEtKcLjxtE7edFaxGjAENhpGN+JrZqtR4xiNvvl2Xtrd6G+sjatrrqG4JCfFx8FeUZ1IA=,iv:8mxfqZ660MYkK9PUPk9xLqtaQzHbtg7IcmwOMRoheVk=,tag:oAwxflAm1NYTqZ7O9WIK8Q==,type:str]
-syncthingKey: ENC[AES256_GCM,data:JSu2c+Pq5TD1JF441OrZYOXX8hggGMtjKNsuOBBywk8DEtZwep3gVUTNpjNlvYc/HicsLTgPLt1ZND622ctmt8JcXdAGfSkj8kq1KqpkC6leyEDU57MODoSnFIPVPfqvPCQMYKYhCmbcceJE8Rw3tT9NEH8N0aPMRuTYDgsGmZ8zEDVzSuAcGlHN2EOttX9ohjXh2ApEmvuBbHENLLqasIlW38RvMCAUrmMI+cqRspWfaOoeb3uH23FGPSQLYwDQ8bKBm78elbKukC3t5sTurLday3koHctuKtUYpA2LQCWarAnI/+z/wZ5OKHqayMtzvoqJN0aERniaxOoSjkrTwLiJeZSqvof8a3lqw4XnXhsStTvK30kuVSxqQkHAFONz,iv:YVvzB6+bcnTCpaJvDa9G5mOwxnsZ0bMRGn7/mhyqZiY=,tag:S+i1RKmy/ASUN4dxOeJBuA==,type:str]
+syncthing:
+    cert: ENC[AES256_GCM,data:nld1ZupR5i6UGZsyy+fuDOEjCV31BSTZiv8/GzEw9uaWqCztFL3wzwr4/x9OoPQGp90pK8ELA0KCr9UyqIBFkgjRcZFP2e2RlV9Ej4VrApC6pwAK4BNCxbGnaftsyXliW5Hk2mO+kFkj6CYgPwy+kq3ajoAzX2xaefemFns+sRZcofyTkKZ5MN3XRJ+z8wwHtqHZziDM2m9//D1yMWdjJZv2FDvCVS/fdhw0+Cgi1fB7eCkq1RLLElk/T610/DtC3tIHaivVjMPodvXT9wLL+ElPOxRSACcsN5TwMZDvqpOAOkrMipcYGN48lTtXExZskOga798cN1io4njEM+Vq8O6d2zHpVIzBd2YlCvdyH1aK0qYsR5+xjsmAyO7lMd1pK4UIuIlT5937fLRN8E5OO/TSOM1x44a9VUTEBvUcu0FZZn/UmX0ZdrmUPMhw+V7v9yLdFgMsI7I6V1FaO7yY4DUE4kx9cLKNjQPLtnZ9lc/WXiAIT8KG0ivPxUx4mc/u6EcFig2mMm7nIExUrg43wiusLAv6gZ4WnNmOO+WgbiDewHnXgGLUAN7w4Cmmlom5jsa/iEWaV4x9RXwa23567y08vB7S/RfdgjLaN5/6oKIumfzTk5dfMGh7VmpOuu8XIWSi+E1cCmDr8RUJDg/ea3Fsic/OYYrf4ZF54P55qkf+uDgHrQxDA6xzJIWkpIWCCIeLKcAD8jU/EHhEDzL3L7cAFalGLE0Gn8+Yo9SRWrVrjI7tRm0lG32uCP5BZ3pO8xGprhL+DJWZ36t/tCYMl7CwtRdgtJhzc+Y2CzK9OgGQAuhsRrCUZxXHtGyYtQtdFb5hzu1Vv7bm1tlPOx3KqVzzYO69qtRjFrcVt98VZNXkma92tOsEY+sygPdixWbRtRCKa5pOx+TB7X5CFbxXYU86BJDvbJnzK+DXQPSqKgD5pq+WC74Sxsa2VJ2h0xNfdptYHwN17SuVFw8+f21qwj+W1ZW+hufRpT9Sz+lMEACuxMRRC/9qtkh4s2ctefEL4leiR5pGEJCR+6RcwptnEm5i/lAy7EfhPAo=,iv:UCBmAyLR2fHub25o+u3jh2QDfiIdOGRnjVlk3bKGzKY=,tag:+8wZUgd0y3dRfrSjo2pESQ==,type:str]
+    key: ENC[AES256_GCM,data:ogVa9Rd4nyhSSM0KPtXAtIdzObyCLWA4mEgdOtB4oOR32rgufdVmBPX593EAifvbgEhRTrcDFSyRDSphKifF0MH6QW+tP5zJyAOkqgvxlB0cB8KpcqrOU8t6ZgTO8Gj0+Wcwdly1WDEfFX3bK7/PZm6QPWDejyM9cfRAld2RESMoEDelEpaPW7xyff6BzlYyzUo9HuGSCYTmuIWdBSU/ER4o5RMDppJT2VWFYXQJgDAa7hFSA9/hrj9eOS28wr1qnCE83zpYCSjBHJ9hfK6d8jwpG6TWROLfdv0C2M53+jPZ0Aa3X+/9+k2RBNS4xU5ULNfEu1Ix+7HyNJ0mI3lujZVTd0LDbBvEebur8oJ3nrrBSszSd2iirUth4j/Nk/A1,iv:GlDGSbNGdUB2nmvIDFQyGZXSf/YacA7mhZkCT9WTZSw=,tag:/grVWjZnKYg/LPVPKmtKnw==,type:str]
 environments:
     cccdaWifi: ENC[AES256_GCM,data:O6Id4IrlJLfVfbwZJ4oz9jelYtBXVSUY,iv:o9Rv20e3+bXGMDJQgVqW3gcJH1qqhx249xBKO3Hclvc=,tag:ybYRLE0pLnbv2tnxcZGGPA==,type:str]
 sops:

@@ -15,8 +16,8 @@ sops:
             TUFjemN1cTNEZGlIcHF2L3hXZ3ZOeWMKK8AR4Ovh7LYwxEsV6uGyLM9WmAQlTeuL
             adoHhpotA0GfDTga0UsrBP44+6QU1V8+yX6XJPzZIltH1DIVcHV70w==
             -----END AGE ENCRYPTED FILE-----
-    lastmodified: "2025-06-06T19:15:33Z"
-    mac: ENC[AES256_GCM,data:dYdKl6pU6uVpPj+YecwFo+EbkVuXfRF8fYhMphhf40JTyDRR0M6IWOseYdReag8XaJLeaMlFPUXC14SnX6LSrI/uEci+ZdiQ4j3Rvl/HFBzXabuk5WSE20MenkEndtGG/UGOFjz63/IlgqJZrtv21VD4Sks82KZo/J07JO8ULqs=,iv:pCvAkzjc5Fpd71iUzv2K8Vy65X8Za77opsCEjDqlRC8=,tag:oK/RfdSnPBBmZjQjEXA3DQ==,type:str]
+    lastmodified: "2025-06-09T13:04:55Z"
+    mac: ENC[AES256_GCM,data:epBVHurTlDWi9gG1Ho2bGOgRTPwZbKlEz/uFSPb6rLui0Ldb9bZ88C9lkWFC4mViBrO5Cx38SwW9LZc0kYEe9Z7LUA0E//IxW+ny1CA+mTYsVge61SHWU0nH3DREK+wkgIPT9AOBJloo7P9Dn7Wrp5xMSFxSIzx6tsuiPrOeg28=,iv:RcrM/b8/mUOLlWZ0HgZfwl9G5giZlHhJQ0J87wFZKmg=,tag:FXu67/l1PuWWZTrnsHMmFw==,type:str]
     pgp:
         - created_at: "2025-06-04T20:02:52Z"
           enc: |-
diff --git a/secrets/polaris.yaml b/secrets/polaris.yaml
@@ -1,6 +1,9 @@
 machine-id: ENC[AES256_GCM,data:LrMBBAlOwnda8OziX/yTUrEVv4tMLNB8n0B5cMqVVJU=,iv:ZnroQ8Pu9K8CnehQXYdUtpbOaXJ2oPDSJtRhKC+U+pw=,tag:0wU0XOu/vrowN85iIqIatA==,type:str]
 acmeTSIGKey: ENC[AES256_GCM,data:qDk3XM2ZqPqdAbGTkLO1x/ZYK3JNcJxQReYSFz+2Mcpr4B8zeM5Clv2DYZds4g2MhRZngx3zCTabYK/NI3SXlA==,iv:oAP9NmLpI/5dbVjUT0Swyv5ARheY7SYi21+Bbhn6jLQ=,tag:lqjWTXma3Zs6BDu7iVaLSw==,type:str]
 wireguardPrivKey: ENC[AES256_GCM,data:R8JIxdwu+SjhT5n4ab582jnZ3Ed27FVKk999mrIWNwtF1FsMR7XcBoSpbag=,iv:h/GOtJO7hFe2BYqzfwJ5mpLUUzq1eoEJsd2iDRQDv04=,tag:QS/52ZI260xH3a9Md0r2RA==,type:str]
+syncthing:
+    cert: ENC[AES256_GCM,data:ONKlhBPLZ7qLS5Y/9vtaEL3hx3sZWv9l1u1K9+1AlndPfWNUd4eoGABBb8zm9KOclDoR5IfgZ4Vxz/5M0v9gV8bsjdNW9HcC7aaLv/0Z3MBmc1zX6NMZAHLLxZbt1copV2QofZ+6QV39L5QT6TuD4kVD1oJM/+0gbRQJcQm1EOFz9hWAGuEMVuGJRIkL5dUp/B+WRj7QP2u1gdOliiZkyfOYD84XDqKrZ6aXYk15o3wvMljEv16+lOabt/QjpIZNKRZlOJSKMawTzizMtXS3pt4l4XPSdiwN6VIiNxL7AtYYdcGCsND4y9J7c6b+ge19SC+QJRts+YfGUr2mEEk26PZwKRLMFkuRgJWGV3SrIw53tEIru3Cbr6ARiRT/tQ7qrJBb9MDcug3kouoRAD2/Xm19GtYRaCOLzYT79ZVO9jhuk39CXLvHMgf1sMerh4xhFWVJaDilOUMvXoY3CxZWcSf4sa/M8yPFX23XevhRW0npptAMHElxwOzjkf9oOcfefialsIOnU1oBA5I8tvmBsUU4ZOXh+zxWEcfbuATWBDNC+FJNpux8kZTolF5fYgxsIOuKg4xnWrdYoFKKQDlxZ55GFZ7RKkZ3BLndIjehB8WXqL2D8jCMbOwpI6b43ziCRJ1Lr3I0wpZG0PPIKOb2iZ2ZhB/0n2OD129xdptQbM/vyFIS8FLfD8BshtC/5QbwIsSedMYSc7WCOX9jUTpAU/Ts9IOxBqeLX4S2iS8opUD2WlnOjiSz+1zAhLHLDz1JynbFFY0QzwoTyO6+0ZaeJfQGjdtAga0qcpvCRa8x7P/Hikr4byVRvwJxjYNW0jG4M3FS5iJ58KEPjTL+Cr2/7axmFLZ33MOZ8FYwbya+Crzf/xZMzQYtd0Mb60dvYSyJLKzyqwuTX9TIOVbcg0zK/xpMZ4Y83F23E7NZ/spxXFU0cmhgqs3KyoiNIShLrKLLKLSOYgYmV6C6MZajR+LE5InlGjf2a4rTWI7jvQ2Q4p93jii4EBDh6UA4Yvil8lLt4Dx0NGjCvczC82saUVPdIzwrqAST1IeHKOg=,iv:6/d0VSvyA/T1/R9O0XW1jOayb4aNvKeo+68KaHNQx7M=,tag:p4LXQDpWzst2poIKGSCq0w==,type:str]
+    key: ENC[AES256_GCM,data:k6jlc/MIcuFtgil3PaqEwajrAjDclKj8sNLl0hDVdE/17kWtY0nnuYxLjY6siETQg+er+qUQ8ezk0hT7rVF6/RNqR8gLe8lgpcLQK3iLC/mGFoAk+xA9Qv9SiI5RuJWnG9OS/ZcF59v1gl2R42BqyJeGBFWq8zPNCfhZp0toK5s5+6dR413LDrnR/wF2Bh0V3Mg69TqJUFFuFtwLKlC/WFkR8t5E/V+U8Dgtsj6Q8rIdB8DaFQht0ymnZYtWv4E3EiS7tl8NUUDn8dAqXpu+mtDmLnaFJSUEYss37QrSasIJXhehZqSZRyhd+zn+L40MiaX2JIZkbhdFZvJfWvuqt0f/9ke21D0jXcuuwmqZVyLebLm074oGHG94tBB0BznF,iv:snVtcje7FU73eEOYxathXydrHwinsHX58TbbKBr1yrw=,tag:mjIhMvQAu2gNSfMpl+gzkw==,type:str]
 zigbee2mqttSecrets: ENC[AES256_GCM,data:zLoBtmNionxMxg/5PHRL9UvBLAHvpnh/wj4UA0cZzt7CZWna6az4DiuKmaWUrMcvoc+jpng+VLHXF5Z3kv0jRExwU+zCE9dpJQRUNRKHpXfeO3MoiEE=,iv:+EaznAMg4RMVtQPC+S3LQcbDQ/CXU2nD9n00YFw+o+0=,tag:ZokPcnrfdPuZupq8uHF7WA==,type:str]
 pppCredentials: ENC[AES256_GCM,data:tQhxsYQzHFVPCqLz5p8wjHXHj0S9pz1Z9SaaOStAu5NDz/CrdPUFsOkqCCURzuaYyNGf,iv:lVklNRX3Ya2ChPJHYjjaO8rHrBE+ye4Cyw5VCqWWADQ=,tag:n40RSYBnZks1Aw6VLMis1Q==,type:str]
 environments:

@@ -21,8 +24,8 @@ sops:
             SUhEaGg3dE9HTnJZVXU5cXZ1YkVVQTgKreIDmLNlNfHNW5XGDJdAN9WIHOQqKKLP
             yPTbVRLiDdAejAOTA89fR6Vz1hAGtoPQuQoIFQXBdd8TLmp2C5hH5A==
             -----END AGE ENCRYPTED FILE-----
-    lastmodified: "2025-06-07T09:58:47Z"
-    mac: ENC[AES256_GCM,data:qS9JNAlA45AjBtaTW4DZQq/kl6GHz7pr8FXe+GUjQMbZNFy5ZPVTEEvxBQ93SYV7XN3XpjKfzLLbus7V+0gMHDEcz2Q7jEFpP7rzdrNbp0w0NEeOV7XFKnk35drQEcJ0+khcrMvfreWLHfCKaTI2x01ag/8tkBuFg8Wqr9tFCmU=,iv:XMY45Ax7rRnotd5be2ThfVcjZT2qU70sC6z0w1/NwVU=,tag:puZI/8HBQ0eG0IxgGIPihA==,type:str]
+    lastmodified: "2025-06-09T13:04:31Z"
+    mac: ENC[AES256_GCM,data:Jr6hL3GdaPlfPOxr6pOOAFdg6f7Fsdph0Em/kl6A1ij/m644bISEPSolo0eZIz32jVyfzlLcUjtNjWgOs9qsG03BFiVI8KdtxJSdH/5MWY9zcmAdjwYvQpIUdyswFRna0TmeivNffiqtXm7EOb/rTew1lwIrtkotwpmL5dc+o+w=,iv:zIlxonvNyBKSwP9ZdWR/bBxxKiDu1A4GOiXOSqb87zo=,tag:i6bHKckPBgI8n4rF8wVdOg==,type:str]
     pgp:
         - created_at: "2025-06-02T17:31:26Z"
           enc: |-