nixos/atop: Fix regression in enabling atop units

Fix regression where the systemd units for atop are no longer
automatically started at boot when programs.atop.enable = true.

Regression was introduced in commit: 09350ff7d424
nixos/atop: Convert log format to fix service start

This commit restructures the atop systemd service config so that the
code to convert the log format gets configured as a preStart script
along with the addition of the wantedBy rule.

Changed files
+37 -35
nixos
modules
programs
+37 -35
nixos/modules/programs/atop.nix
···
boot.extraModulePackages = [ (lib.mkIf cfg.netatop.enable cfg.netatop.package) ];
systemd =
let
-
mkSystemd = type: cond: name: restartTriggers: {
-
${name} = lib.mkIf cond {
+
mkSystemd = type: name: restartTriggers: {
+
${name} = {
inherit restartTriggers;
wantedBy = [ (if type == "services" then "multi-user.target" else if type == "timers" then "timers.target" else null) ];
};
···
in
{
packages = [ atop (lib.mkIf cfg.netatop.enable cfg.netatop.package) ];
-
services =
-
mkService cfg.atopService.enable "atop" [ atop ]
-
// lib.mkIf cfg.atopService.enable {
-
# always convert logs to newer version first
-
# XXX might trigger TimeoutStart but restarting atop.service will
-
# convert remainings logs and start eventually
-
atop.serviceConfig.ExecStartPre = pkgs.writeShellScript "atop-update-log-format" ''
-
set -e -u
-
shopt -s nullglob
-
for logfile in "$LOGPATH"/atop_*
-
do
-
${atop}/bin/atopconvert "$logfile" "$logfile".new
-
# only replace old file if version was upgraded to avoid
-
# false positives for atop-rotate.service
-
if ! ${pkgs.diffutils}/bin/cmp -s "$logfile" "$logfile".new
-
then
-
${pkgs.coreutils}/bin/mv -v -f "$logfile".new "$logfile"
-
else
-
${pkgs.coreutils}/bin/rm -f "$logfile".new
-
fi
-
done
-
'';
-
}
-
// mkService cfg.atopacctService.enable "atopacct" [ atop ]
-
// mkService cfg.netatop.enable "netatop" [ cfg.netatop.package ]
-
// mkService cfg.atopgpu.enable "atopgpu" [ atop ];
-
timers = mkTimer cfg.atopRotateTimer.enable "atop-rotate" [ atop ];
+
services = lib.mkMerge [
+
(lib.mkIf cfg.atopService.enable (lib.recursiveUpdate
+
(mkService "atop" [ atop ])
+
{
+
# always convert logs to newer version first
+
# XXX might trigger TimeoutStart but restarting atop.service will
+
# convert remainings logs and start eventually
+
atop.preStart = ''
+
set -e -u
+
shopt -s nullglob
+
for logfile in "$LOGPATH"/atop_*
+
do
+
${atop}/bin/atopconvert "$logfile" "$logfile".new
+
# only replace old file if version was upgraded to avoid
+
# false positives for atop-rotate.service
+
if ! ${pkgs.diffutils}/bin/cmp -s "$logfile" "$logfile".new
+
then
+
${pkgs.coreutils}/bin/mv -v -f "$logfile".new "$logfile"
+
else
+
${pkgs.coreutils}/bin/rm -f "$logfile".new
+
fi
+
done
+
'';
+
}))
+
(lib.mkIf cfg.atopacctService.enable (mkService "atopacct" [ atop ]))
+
(lib.mkIf cfg.netatop.enable (mkService "netatop" [ cfg.netatop.package ]))
+
(lib.mkIf cfg.atopgpu.enable (mkService "atopgpu" [ atop ]))
+
];
+
timers = lib.mkIf cfg.atopRotateTimer.enable (mkTimer "atop-rotate" [ atop ]);
};
security.wrappers = lib.mkIf cfg.setuidWrapper.enable {
-
atop =
-
{ setuid = true;
-
owner = "root";
-
group = "root";
-
source = "${atop}/bin/atop";
-
};
+
atop = {
+
setuid = true;
+
owner = "root";
+
group = "root";
+
source = "${atop}/bin/atop";
+
};
};
}
);