diff --git a/nixos/modules/programs/atop.nix b/nixos/modules/programs/atop.nix index 9d5843bd670e..a5f4d990bdbe 100644 --- a/nixos/modules/programs/atop.nix +++ b/nixos/modules/programs/atop.nix @@ -123,8 +123,8 @@ in 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) ]; }; @@ -134,42 +134,44 @@ in 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"; + }; }; } );