Commit e0d735951a41

Vincent Demeester <vincent@sbr.pm>
2025-06-12 23:33:11
home/syncthing: generate syncthing devices from globals as well
Should be now ready to be "deployed". We now need to handle the "heavy" ones (from aion, aomi, …) like `photos`, but I can handle this when reseting aomi, … Next is a "system" syncthing, and migrating sakhalin *or* creating kobe. Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 8ee0536
Changed files (2)
home
common
home/common/services/syncthing.nix
@@ -15,107 +15,10 @@
       # defaults = {
       #   ignores = { lines = [ "(?d).DS_Store" "**" ]; };
       # };
-      devices = {
-        aomi = {
-          id = "XCR6WWB-OZUDGFB-LQPFW73-MV5SPJK-4IGOMA4-IAXON3I-C6OFETL-TPK5FQS";
-          addresses = [
-            "tcp://aomi.vpn"
-            "tcp://aomi.light"
-            "tcp://aomi.sbr.pm"
-          ];
-        };
-        sakhalin = {
-          id = "4TYYG7V-A67D5SN-HMEJCI7-POOZRLL-RNCIE4U-ZYVGTOB-JQ5DOSV-ZCGWUAL";
-          addresses = [
-            "tcp://sakhalin.light"
-            "tcp://sakhalin.vpn"
-            "tcp://sakhalin.sbr.pm"
-          ];
-        };
-        shikoku = {
-          id = "KZMMXRR-UINDQTS-H3TV2W7-EIGOUDI-3LW4ZDG-7PRKDFV-MJ5KUTJ-YG5Y5AI";
-          addresses = [
-            "tcp://shikoku.light"
-            "tcp://shikoku.vpn"
-            "tcp://shikoku.sbr.pm"
-          ];
-        };
-        kerkouane = {
-          id = "IFVRRQ7-KMIOQXP-5YDJXQU-UJXUKHB-7THCSY6-B3NHRNA-ED7IRI7-2JPPKQY";
-          addresses = [
-            "tcp://10.100.0.1"
-            "tcp://kerkouane.vpn"
-          ];
-        };
-        aion = {
-          id = "YORNSGU-UC4IAG5-IWJCD7T-MVPIU7O-AYM36UK-LEHF7AP-CBC4L6C-ZWKUYQF";
-          addresses = [
-            "tcp://aion.light"
-            "tcp://aion.vpn"
-            "tcp://aion.sbr.pm"
-          ];
-        };
-      };
+      devices = globals.fn.generateSyncthingDevices globals.machines;
       folders =
         globals.fn.generateSyncthingFolders globals.machines."${hostname}" globals.machines
           globals.syncthingFolders;
-      # folders = {
-      #   "/home/vincent/sync" = {
-      #     label = "sync";
-      #     id = "7dshg-r8zr6";
-      #     devices = [
-      #       "aomi"
-      #       "aion"
-      #       "shikoku"
-      #       "sakhalin"
-      #     ];
-      #     rescanIntervalS = 3600 * 6;
-      #   };
-      #   "/home/vincent/desktop/org" = {
-      #     label = "org";
-      #     id = "sjpsr-xfwdu";
-      #     devices = [
-      #       "aomi"
-      #       "aion"
-      #       "shikoku"
-      #       "sakhalin"
-      #     ];
-      #     rescanIntervalS = 3600 * 6;
-      #   };
-      #   "/home/vincent/desktop/documents" = {
-      #     label = "documents";
-      #     id = "oftdb-t5anv";
-      #     devices = [
-      #       "aomi"
-      #       "aion"
-      #       "shikoku"
-      #       "sakhalin"
-      #     ];
-      #     rescanIntervalS = 3600 * 6;
-      #   };
-      #   "/home/vincent/desktop/pictures/screenshots" = {
-      #     label = "screenshots";
-      #     id = "prpsz-azlz9";
-      #     devices = [
-      #       "aomi"
-      #       "aion"
-      #       "shikoku"
-      #       "sakhalin"
-      #     ];
-      #     rescanIntervalS = 3600 * 6;
-      #   };
-      #   "/home/vincent/desktop/pictures/wallpapers" = {
-      #     label = "wallpapers";
-      #     id = "wpiah-ydwwx";
-      #     devices = [
-      #       "aomi"
-      #       "aion"
-      #       "shikoku"
-      #       "sakhalin"
-      #     ];
-      #     rescanIntervalS = 3600 * 6;
-      #   };
-      # };
     };
   };
 }
globals.nix
@@ -26,6 +26,14 @@ let
       && !(isCurrentHost name)
       && (builtins.hasAttr folderName value.syncthing.folders)
     ) machines;
+
+  generateSyncthingAdresses =
+    machine:
+    builtins.map (x: "tcp://${x}") (
+      lib.attrsets.attrByPath [ "net" "ips" ] [ ] machine
+      ++ lib.attrsets.attrByPath [ "net" "vpn" "ips" ] [ ] machine
+      ++ lib.attrsets.attrByPath [ "net" "names" ] [ ] machine
+    );
 in
 {
   ssh = {
@@ -172,6 +180,11 @@ in
           pubkey = "KVRzoPUw8UTQblYtbs/NLYLIVmtQehrc4Hacbpf5Ugs=";
           ips = [ "10.100.0.19" ];
         };
+        names = [
+          "kyushu.home"
+          "kyushu.vpn"
+          "kyushu.sbr.pm"
+        ];
       };
       syncthing = {
         id = "SBLRZF4-NOMC7QO-S6UW7OH-VK7KHQS-LZCESY6-USBJ5Z5-RIVIRII-XS7DGQS";
@@ -200,6 +213,11 @@ in
           pubkey = "XT4D9YLeVHwMb9R4mhBLSWHYF8iBO/UOT86MQL1jnA4=";
           ips = [ "10.100.0.17" ];
         };
+        names = [
+          "aomi.home"
+          "aomi.vpn"
+          "aomi.sbr.pm"
+        ];
       };
       syncthing = {
         id = "XCR6WWB-OZUDGFB-LQPFW73-MV5SPJK-4IGOMA4-IAXON3I-C6OFETL-TPK5FQS";
@@ -209,10 +227,10 @@ in
           sync = { };
           screenshots = { };
           wallpapers = { };
-          photos = {
-            type = "receiveonly";
-            paused = true; # TODO: implement this, start as paused
-          };
+          # photos = {
+          #   type = "receiveonly";
+          #   paused = true; # TODO: implement this, start as paused
+          # };
         };
       };
     };
@@ -223,11 +241,20 @@ in
           pubkey = "foUoAvJXGyFV4pfEE6ISwivAgXpmYmHwpGq6X+HN+yA=";
           ips = [ "10.100.0.2" ];
         };
+        names = [
+          "shikoku.home"
+          "shikoku.vpn"
+          "shikoku.sbr.pm"
+        ];
       };
       syncthing = {
-        id = "";
+        id = "KZMMXRR-UINDQTS-H3TV2W7-EIGOUDI-3LW4ZDG-7PRKDFV-MJ5KUTJ-YG5Y5AI";
         folders = {
           org = { };
+          documents = { };
+          sync = { };
+          screenshots = { };
+          wallpapers = { };
         };
       };
       ssh = {
@@ -235,21 +262,130 @@ in
       };
     };
     kerkouane = {
-      net = { };
+      net = {
+        vpn = {
+          # pubkey = "foUoAvJXGyFV4pfEE6ISwivAgXpmYmHwpGq6X+HN+yA=";
+          ips = [ "10.100.0.1" ];
+        };
+        names = [
+          "kerkouame.home"
+          "kerkouane.vpn"
+          "kerkouane.sbr.pm"
+        ];
+      };
       syncthing = {
-        id = "";
+        id = "IFVRRQ7-KMIOQXP-5YDJXQU-UJXUKHB-7THCSY6-B3NHRNA-ED7IRI7-2JPPKQY";
+        folders = {
+          sync = { };
+          org = { };
+        };
       };
     };
     sakhalin = {
-      net = { };
+      net = {
+        ips = [ "192.168.1.70" ];
+        vpn = {
+          # pubkey = "foUoAvJXGyFV4pfEE6ISwivAgXpmYmHwpGq6X+HN+yA=";
+          ips = [ "10.100.0.16" ];
+        };
+        names = [
+          "sakhalin.home"
+          "sakhalin.vpn"
+          "sakhalin.sbr.pm"
+        ];
+      };
       syncthing = {
-        id = "";
+        id = "4TYYG7V-A67D5SN-HMEJCI7-POOZRLL-RNCIE4U-ZYVGTOB-JQ5DOSV-ZCGWUAL";
+        folders = {
+          org = { };
+          documents = { };
+          sync = { };
+          screenshots = { };
+          wallpapers = { };
+          # photos = {
+          #   type = "receiveonly";
+          #   paused = true; # TODO: implement this, start as paused
+          # };
+        };
       };
     };
+    aion = {
+      net = {
+        ips = [ "192.168.1.49" ];
+        vpn = {
+          # pubkey = "foUoAvJXGyFV4pfEE6ISwivAgXpmYmHwpGq6X+HN+yA=";
+          ips = [ "10.100.0.49" ];
+        };
+        names = [
+          "aion.home"
+          "aion.vpn"
+          "aion.sbr.pm"
+        ];
+      };
+      syncthing = {
+        id = "YORNSGU-UC4IAG5-IWJCD7T-MVPIU7O-AYM36UK-LEHF7AP-CBC4L6C-ZWKUYQF";
+        folders = {
+          org = { };
+          documents = { };
+          sync = { };
+          screenshots = { };
+          wallpapers = { };
+          # photos = {
+          #   paused = true; # TODO: implement this, start as paused
+          # };
+          # music = {
+          #   paused = true; # TODO: implement this, start as paused
+          # };
+        };
+      };
+    };
+    okinawa = {
+      net = {
+        ips = [ "192.168.1.19" ];
+        vpn = {
+          # pubkey = "";
+          ips = [ "10.100.0.14" ];
+        };
+      };
+      syncthing = {
+        id = "2RWT47Z-UGSH4QO-G4W6XN7-3XY722R-ZKGDN5U-4MDGHMA-6SM26QM-7VCQIAZ";
+        folders = {
+          sync = { };
+          org = { };
+        };
+      };
+    };
+    # iPhone
+    hokkaido = {
+      net = {
+        ips = [ "192.168.1.115" ];
+        vpn = {
+          pubkey = "foUoAvJXGyFV4pfEE6ISwivAgXpmYmHwpGq6X+HN+yA=";
+          ips = [ "10.100.0.5" ];
+        };
+      };
+      syncthing = {
+        id = "XD4XYNZ-DT3PJEY-UJYBHWX-6OQPPUI-HTW752L-FYTX3TW-GVHDTKW-PT336QV";
+        folders = {
+          documents = { };
+          sync = { };
+          org = { };
+        };
+      };
+    };
+    # Light Phone
+    LIP = { };
+    Boox = { };
   };
   # FIXME Maybe I should move this elsewhere, in ./lib maybe ?
   fn = {
-    inherit syncthingFolderPath hasSyncthingFolders syncthingMachinesWithFolder;
+    inherit
+      syncthingFolderPath
+      hasSyncthingFolders
+      syncthingMachinesWithFolder
+      generateSyncthingAdresses
+      isCurrentHost
+      ;
     /**
          Return a list of wireguard ips from a list of ips.
 
@@ -265,7 +401,6 @@ in
     #   lib.attrsets.mapAttrsToList (_name: value: value) (lib.attrsets.filterAttrs hasSSHAttr machines);
 
     # SYNCTHING
-
     generateSyncthingFolders =
       machine: machines: folders:
       lib.attrsets.mapAttrs' (
@@ -277,5 +412,16 @@ in
           rescanIntervalS = 3600 * 6; # TODO: make it configurable
         }
       ) (lib.attrsets.attrByPath [ "syncthing" "folders" ] { } machine);
+
+    generateSyncthingDevices =
+      machines:
+      lib.attrsets.mapAttrs
+        (_name: value: {
+          inherit (value.syncthing) id;
+          addresses = generateSyncthingAdresses value;
+        })
+        (
+          lib.attrsets.filterAttrs (name: value: hasSyncthingFolders value && !(isCurrentHost name)) machines
+        );
   };
 }