···
17
+
inherit (lib.cli) toGNUCommandLine;
cfg = config.services.hylafax;
mapModems = lib.forEach (lib.attrValues cfg.modems);
23
+
prefix: program: posArg: options:
25
+
start = "${prefix}${pkgs.hylafaxplus}/spool/bin/${program}";
26
+
optionsList = toGNUCommandLine { mkOptionName = k: "-${k}"; } (
27
+
{ q = cfg.spoolAreaPath; } // options
29
+
posArgList = optional (posArg != null) posArg;
31
+
"${start} ${escapeShellArgs (optionsList ++ posArgList)}";
···
wants = mapModems ({ name, ... }: "hylafax-faxgetty@${name}.service");
wantedBy = mkIf cfg.autostart [ "multi-user.target" ];
serviceConfig.Type = "forking";
163
-
serviceConfig.ExecStart = ''${pkgs.hylafaxplus}/spool/bin/faxq -q "${cfg.spoolAreaPath}"'';
175
+
serviceConfig.ExecStart = mkSpoolCmd "" "faxq" null { };
# This delays the "readiness" of this service until
# all modems are initialized (or a timeout is reached).
# Otherwise, sending a fax with the fax service
···
serviceConfig.ExecStartPost = [ "${waitFaxqScript}" ];
# faxquit fails if the pipe is already gone
# (e.g. the service is already stopping)
173
-
serviceConfig.ExecStop = ''-${pkgs.hylafaxplus}/spool/bin/faxquit -q "${cfg.spoolAreaPath}"'';
185
+
serviceConfig.ExecStop = mkSpoolCmd "-" "faxquit" null { };
# disable some systemd hardening settings
serviceConfig.PrivateDevices = null;
serviceConfig.RestrictRealtime = null;
···
requires = [ "hylafax-faxq.service" ];
serviceConfig.StandardInput = "socket";
serviceConfig.StandardOutput = "socket";
186
-
serviceConfig.ExecStart = ''${pkgs.hylafaxplus}/spool/bin/hfaxd -q "${cfg.spoolAreaPath}" -d -I'';
198
+
serviceConfig.ExecStart = mkSpoolCmd "" "hfaxd" null {
unitConfig.RequiresMountsFor = [ cfg.userAccessFile ];
# disable some systemd hardening settings
serviceConfig.PrivateDevices = null;
···
requires = [ "hylafax-spool.service" ];
wantedBy = mkIf cfg.faxcron.enable.spoolInit requires;
startAt = mkIf (cfg.faxcron.enable.frequency != null) cfg.faxcron.enable.frequency;
200
-
serviceConfig.ExecStart = concatStringsSep " " [
201
-
"${pkgs.hylafaxplus}/spool/bin/faxcron"
202
-
''-q "${cfg.spoolAreaPath}"''
203
-
''-info ${toString cfg.faxcron.infoDays}''
204
-
''-log ${toString cfg.faxcron.logDays}''
205
-
''-rcv ${toString cfg.faxcron.rcvDays}''
215
+
serviceConfig.ExecStart = mkSpoolCmd "" "faxcron" null {
216
+
info = cfg.faxcron.infoDays;
217
+
log = cfg.faxcron.logDays;
218
+
rcv = cfg.faxcron.rcvDays;
services.hylafax-faxqclean = rec {
···
requires = [ "hylafax-spool.service" ];
wantedBy = mkIf cfg.faxqclean.enable.spoolInit requires;
startAt = mkIf (cfg.faxqclean.enable.frequency != null) cfg.faxqclean.enable.frequency;
216
-
serviceConfig.ExecStart = concatStringsSep " " [
217
-
"${pkgs.hylafaxplus}/spool/bin/faxqclean"
218
-
''-q "${cfg.spoolAreaPath}"''
220
-
(optionalString (cfg.faxqclean.archiving != "never") "-a")
221
-
(optionalString (cfg.faxqclean.archiving == "always") "-A")
222
-
''-j ${toString (cfg.faxqclean.doneqMinutes * 60)}''
223
-
''-d ${toString (cfg.faxqclean.docqMinutes * 60)}''
229
+
serviceConfig.ExecStart = mkSpoolCmd "" "faxqclean" null {
231
+
a = cfg.faxqclean.archiving != "never";
232
+
A = cfg.faxqclean.archiving == "always";
233
+
j = 60 * cfg.faxqclean.doneqMinutes;
234
+
d = 60 * cfg.faxqclean.docqMinutes;
···
serviceConfig.Restart = "always";
serviceConfig.KillMode = "process";
serviceConfig.IgnoreSIGPIPE = false;
246
-
serviceConfig.ExecStart = ''-${pkgs.hylafaxplus}/spool/bin/faxgetty -q "${cfg.spoolAreaPath}" /dev/%I'';
257
+
serviceConfig.ExecStart = mkSpoolCmd "-" "faxgetty" "/dev/%I" { };
# faxquit fails if the pipe is already gone
# (e.g. the service is already stopping)
249
-
serviceConfig.ExecStop = ''-${pkgs.hylafaxplus}/spool/bin/faxquit -q "${cfg.spoolAreaPath}" %I'';
260
+
serviceConfig.ExecStop = mkSpoolCmd "-" "faxquit" "%I" { };
# disable some systemd hardening settings
serviceConfig.PrivateDevices = null;
serviceConfig.RestrictRealtime = null;