From adeab67bd80c7dc2d94152f3231c5940ae10a337 Mon Sep 17 00:00:00 2001 From: jokogr Date: Sat, 6 Aug 2016 18:20:18 +0300 Subject: [PATCH] syncthing service: add syncthing-inotify (#17320) --- .../modules/services/networking/syncthing.nix | 53 +++++++++++++++---- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/nixos/modules/services/networking/syncthing.nix b/nixos/modules/services/networking/syncthing.nix index b44b03dc0bf..8a430734319 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 = { + 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}"; + }; + }); - systemd.services = mkIf cfg.systemService { - syncthing = header // { + 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"; + }; + }); + }; + }; }