summary refs log tree commit diff
path: root/nixos/modules/services/networking/syncthing.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixos/modules/services/networking/syncthing.nix')
-rw-r--r--nixos/modules/services/networking/syncthing.nix55
1 files changed, 43 insertions, 12 deletions
diff --git a/nixos/modules/services/networking/syncthing.nix b/nixos/modules/services/networking/syncthing.nix
index b44b03dc0bf3..8a430734319b 100644
--- a/nixos/modules/services/networking/syncthing.nix
+++ b/nixos/modules/services/networking/syncthing.nix
@@ -23,6 +23,18 @@ let
     RestartForceExitStatus="3 4";
   };
 
+  iNotifyHeader = {
+    description = "Syncthing Inotify File Watcher service";
+    after = [ "network.target" "syncthing.service" ];
+    requires = [ "syncthing.service" ];
+  };
+
+  iNotifyService = {
+    SuccessExitStatus = "2";
+    RestartForceExitStatus = "3";
+    Restart = "on-failure";
+  };
+
 in
 
 {
@@ -39,6 +51,12 @@ in
         available on http://127.0.0.1:8384/.
       '';
 
+      useInotify = mkOption {
+        type = types.bool;
+        default = false;
+        description = "Provide syncthing-inotify as a service.";
+      };
+
       systemService = mkOption {
         type = types.bool;
         default = true;
@@ -112,27 +130,40 @@ in
         config.ids.gids.syncthing;
     };
 
-    environment.systemPackages = [ cfg.package ];
-
-    systemd.services = mkIf cfg.systemService {
-      syncthing = header // {
+    systemd.services = {
+      syncthing = mkIf cfg.systemService (header // {
+          wants = mkIf cfg.useInotify [ "syncthing-inotify.service" ];
+          wantedBy = [ "multi-user.target" ];
+          serviceConfig = service // {
+            User = cfg.user;
+            Group = cfg.group;
+            PermissionsStartOnly = true;
+            ExecStart = "${cfg.package}/bin/syncthing -no-browser -home=${cfg.dataDir}";
+          };
+      });
+
+      syncthing-inotify = mkIf (cfg.systemService && cfg.useInotify) (iNotifyHeader // {
         wantedBy = [ "multi-user.target" ];
-        serviceConfig = service // {
+        serviceConfig = iNotifyService // {
           User = cfg.user;
-          Group = cfg.group;
-          PermissionsStartOnly = true;
-          ExecStart = "${cfg.package}/bin/syncthing -no-browser -home=${cfg.dataDir}";
+          ExecStart = "${pkgs.syncthing-inotify.bin}/bin/syncthing-inotify -home=${cfg.dataDir} -logflags=0";
         };
-      };
+      });
     };
 
-    systemd.user.services.syncthing =
-      header // {
-        wantedBy = [ "default.target" ];
+    systemd.user.services = {
+      syncthing = header // {
         serviceConfig = service // {
           ExecStart = "${cfg.package}/bin/syncthing -no-browser";
         };
       };
 
+      syncthing-inotify = mkIf cfg.useInotify (iNotifyHeader // {
+        serviceConfig = iNotifyService // {
+          ExecStart = "${pkgs.syncthing-inotify.bin}/bin/syncthing-inotify -logflags=0";
+        };
+      });
+    };
+
   };
 }