]> git.scottworley.com Git - syncthing-autoregister/blobdiff - modules/syncthing-autoregister.nix
Follow services.syncthing.devices rename
[syncthing-autoregister] / modules / syncthing-autoregister.nix
index 158cd520f5c2d787c6168fa0990fc2f1c5d657b2..710c7a42fff96f05e0a026b52b8c0435df439291 100644 (file)
@@ -4,14 +4,33 @@ let
   cfg = config.services.syncthing.autoRegister;
   localpkgs = import ../. { inherit pkgs; };
   register-script = pkgs.writeShellScript "syncthing-autoregister-script" ''
-    ${localpkgs.syncthing-set-id}/bin/syncthing-set-id /tmp/syncthing-auto-register-test-device-ids.nix
+    ${localpkgs.syncthing-set-id}/bin/syncthing-set-id ${
+      escapeShellArg cfg.path
+    }
   '';
 in {
   options = {
     services.syncthing.autoRegister = {
       enable = mkEnableOption ''
-        Automatically write the local syncthing device id to /tmp/syncthing-auto-register-test-device-ids.nix
+        Automatically write the local syncthing device id to the nix module
+        file <option>services.syncthing.autoRegister.path</option>.
       '';
+      path = mkOption {
+        type = types.path;
+        description = ''
+          Path of nix module file to write our syncthing
+          device id into.  It will be written into
+          services.syncthing.devices.<hostname>.id.  This file
+          can be imported as a NixOS module.
+
+          We recommend using a separate file just for this purpose.  I.e.,
+          don't point this at your main NixOS config.  Instead, import this
+          file from your main NixOS config.  (The current nix-configuration
+          read-modify-write implementation only supports attrsets of strings;
+          it does not support functions, which you probably use in your
+          main configuration.)
+        '';
+      };
     };
   };
   config = mkIf cfg.enable {
@@ -26,6 +45,20 @@ in {
         ExecStart = register-script;
       };
     };
+    systemd.services.syncthing-reregister = {
+      after = [ "syncthing-autoregister.service" ];
+      script = ''
+        ${pkgs.coreutils}/bin/sleep 1
+        ${pkgs.systemd}/bin/systemctl restart syncthing-autoregister
+      '';
+      serviceConfig = {
+        Type = "oneshot";
+      };
+    };
+    systemd.paths.syncthing-reregister = {
+      pathConfig.PathChanged = cfg.path;
+      wantedBy = [ "multi-user.target" ];
+    };
   };
 }