nixos/earlyoom: use the newly introduced systembus-notify option
Also some cleanups.
This commit is contained in:
parent
27e32bbfde
commit
895090bf89
|
@ -1,81 +1,73 @@
|
||||||
{ config, lib, pkgs, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
with lib;
|
|
||||||
|
|
||||||
let
|
let
|
||||||
ecfg = config.services.earlyoom;
|
cfg = config.services.earlyoom;
|
||||||
|
|
||||||
|
inherit (lib)
|
||||||
|
mkDefault mkEnableOption mkIf mkOption types
|
||||||
|
mkRemovedOptionModule
|
||||||
|
concatStringsSep optional;
|
||||||
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options = {
|
options.services.earlyoom = {
|
||||||
services.earlyoom = {
|
enable = mkEnableOption "Early out of memory killing";
|
||||||
|
|
||||||
enable = mkOption {
|
freeMemThreshold = mkOption {
|
||||||
type = types.bool;
|
type = types.ints.between 1 100;
|
||||||
default = false;
|
default = 10;
|
||||||
description = ''
|
description = ''
|
||||||
Enable early out of memory killing.
|
Minimum of availabe memory (in percent).
|
||||||
'';
|
If the free memory falls below this threshold and the analog is true for
|
||||||
};
|
<option>services.earlyoom.freeSwapThreshold</option>
|
||||||
|
the killing begins.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
freeMemThreshold = mkOption {
|
freeSwapThreshold = mkOption {
|
||||||
type = types.int;
|
type = types.ints.between 1 100;
|
||||||
default = 10;
|
default = 10;
|
||||||
description = ''
|
description = ''
|
||||||
Minimum of availabe memory (in percent).
|
Minimum of availabe swap space (in percent).
|
||||||
If the free memory falls below this threshold and the analog is true for
|
If the available swap space falls below this threshold and the analog
|
||||||
<option>services.earlyoom.freeSwapThreshold</option>
|
is true for <option>services.earlyoom.freeMemThreshold</option>
|
||||||
the killing begins.
|
the killing begins.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
freeSwapThreshold = mkOption {
|
# TODO: remove or warn after 1.7 (https://github.com/rfjakob/earlyoom/commit/7ebc4554)
|
||||||
type = types.int;
|
ignoreOOMScoreAdjust = mkOption {
|
||||||
default = 10;
|
type = types.bool;
|
||||||
description = ''
|
default = false;
|
||||||
Minimum of availabe swap space (in percent).
|
description = ''
|
||||||
If the available swap space falls below this threshold and the analog
|
Ignore oom_score_adjust values of processes.
|
||||||
is true for <option>services.earlyoom.freeMemThreshold</option>
|
'';
|
||||||
the killing begins.
|
};
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
# TODO: remove or warn after 1.7 (https://github.com/rfjakob/earlyoom/commit/7ebc4554)
|
enableDebugInfo = mkOption {
|
||||||
ignoreOOMScoreAdjust = mkOption {
|
type = types.bool;
|
||||||
type = types.bool;
|
default = false;
|
||||||
default = false;
|
description = ''
|
||||||
description = ''
|
Enable debugging messages.
|
||||||
Ignore oom_score_adjust values of processes.
|
'';
|
||||||
'';
|
};
|
||||||
};
|
|
||||||
|
|
||||||
enableDebugInfo = mkOption {
|
enableNotifications = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = false;
|
default = false;
|
||||||
description = ''
|
description = ''
|
||||||
Enable debugging messages.
|
Send notifications about killed processes via the system d-bus.
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
notificationsCommand = mkOption {
|
WARNING: enabling this option (while convenient) should *not* be done on a
|
||||||
type = types.nullOr types.str;
|
machine where you do not trust the other users as it allows any other
|
||||||
default = null;
|
local user to DoS your session by spamming notifications.
|
||||||
description = ''
|
|
||||||
This option is deprecated and ignored by earlyoom since 1.6.
|
|
||||||
Use <option>services.earlyoom.enableNotifications</option> instead.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
enableNotifications = mkOption {
|
To actually see the notifications in your GUI session, you need to have
|
||||||
type = types.bool;
|
<literal>systembus-notify</literal> running as your user which this
|
||||||
default = false;
|
option handles.
|
||||||
description = ''
|
|
||||||
Send notifications about killed processes via the system d-bus.
|
|
||||||
To actually see the notifications in your GUI session, you need to have
|
|
||||||
<literal>systembus-notify</literal> running as your user.
|
|
||||||
|
|
||||||
See <link xlink:href="https://github.com/rfjakob/earlyoom#notifications">README</link> for details.
|
See <link xlink:href="https://github.com/rfjakob/earlyoom#notifications">README</link> for details.
|
||||||
'';
|
'';
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -83,37 +75,30 @@ in
|
||||||
(mkRemovedOptionModule [ "services" "earlyoom" "useKernelOOMKiller" ] ''
|
(mkRemovedOptionModule [ "services" "earlyoom" "useKernelOOMKiller" ] ''
|
||||||
This option is deprecated and ignored by earlyoom since 1.2.
|
This option is deprecated and ignored by earlyoom since 1.2.
|
||||||
'')
|
'')
|
||||||
|
(mkRemovedOptionModule [ "services" "earlyoom" "notificationsCommand" ] ''
|
||||||
|
This option is deprecated and ignored by earlyoom since 1.6.
|
||||||
|
'')
|
||||||
];
|
];
|
||||||
|
|
||||||
config = mkIf ecfg.enable {
|
config = mkIf cfg.enable {
|
||||||
assertions = [
|
services.systembus-notify.enable = mkDefault cfg.enableNotifications;
|
||||||
{ assertion = ecfg.freeMemThreshold > 0 && ecfg.freeMemThreshold <= 100;
|
|
||||||
message = "Needs to be a positive percentage"; }
|
|
||||||
{ assertion = ecfg.freeSwapThreshold > 0 && ecfg.freeSwapThreshold <= 100;
|
|
||||||
message = "Needs to be a positive percentage"; }
|
|
||||||
];
|
|
||||||
|
|
||||||
# TODO: reimplement this option as -N after 1.7 (https://github.com/rfjakob/earlyoom/commit/afe03606)
|
|
||||||
warnings = optional (ecfg.notificationsCommand != null)
|
|
||||||
"`services.earlyoom.notificationsCommand` is deprecated and ignored by earlyoom since 1.6.";
|
|
||||||
|
|
||||||
systemd.services.earlyoom = {
|
systemd.services.earlyoom = {
|
||||||
description = "Early OOM Daemon for Linux";
|
description = "Early OOM Daemon for Linux";
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
path = optional ecfg.enableNotifications pkgs.dbus;
|
path = optional cfg.enableNotifications pkgs.dbus;
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
StandardOutput = "null";
|
|
||||||
StandardError = "journal";
|
StandardError = "journal";
|
||||||
ExecStart = concatStringsSep " " ([
|
ExecStart = concatStringsSep " " ([
|
||||||
"${pkgs.earlyoom}/bin/earlyoom"
|
"${pkgs.earlyoom}/bin/earlyoom"
|
||||||
"-m ${toString ecfg.freeMemThreshold}"
|
"-m ${toString cfg.freeMemThreshold}"
|
||||||
"-s ${toString ecfg.freeSwapThreshold}"
|
"-s ${toString cfg.freeSwapThreshold}"
|
||||||
] ++ optional ecfg.ignoreOOMScoreAdjust "-i"
|
]
|
||||||
++ optional ecfg.enableDebugInfo "-d"
|
++ optional cfg.ignoreOOMScoreAdjust "-i"
|
||||||
++ optional ecfg.enableNotifications "-n");
|
++ optional cfg.enableDebugInfo "-d"
|
||||||
|
++ optional cfg.enableNotifications "-n"
|
||||||
|
);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = optional ecfg.enableNotifications pkgs.systembus-notify;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue