diff options
Diffstat (limited to 'nixos/modules/services/networking/syncthing.nix')
-rw-r--r-- | nixos/modules/services/networking/syncthing.nix | 55 |
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"; + }; + }); + }; + }; } |