2017-03-24 22:16:16 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
|
|
|
let
|
2021-07-12 08:36:22 +01:00
|
|
|
cfg = config.services.earlyoom;
|
|
|
|
|
|
|
|
inherit (lib)
|
|
|
|
mkDefault mkEnableOption mkIf mkOption types
|
|
|
|
mkRemovedOptionModule
|
|
|
|
concatStringsSep optional;
|
|
|
|
|
2017-03-24 22:16:16 +00:00
|
|
|
in
|
|
|
|
{
|
2021-07-12 08:36:22 +01:00
|
|
|
options.services.earlyoom = {
|
|
|
|
enable = mkEnableOption "Early out of memory killing";
|
2017-03-24 22:16:16 +00:00
|
|
|
|
2021-07-12 08:36:22 +01:00
|
|
|
freeMemThreshold = mkOption {
|
|
|
|
type = types.ints.between 1 100;
|
|
|
|
default = 10;
|
|
|
|
description = ''
|
|
|
|
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.
|
|
|
|
'';
|
|
|
|
};
|
2017-03-24 22:16:16 +00:00
|
|
|
|
2021-07-12 08:36:22 +01:00
|
|
|
freeSwapThreshold = mkOption {
|
|
|
|
type = types.ints.between 1 100;
|
|
|
|
default = 10;
|
|
|
|
description = ''
|
|
|
|
Minimum of availabe swap space (in percent).
|
|
|
|
If the available swap space falls below this threshold and the analog
|
|
|
|
is true for <option>services.earlyoom.freeMemThreshold</option>
|
|
|
|
the killing begins.
|
|
|
|
'';
|
|
|
|
};
|
2017-03-24 22:16:16 +00:00
|
|
|
|
2021-07-12 08:36:22 +01:00
|
|
|
# TODO: remove or warn after 1.7 (https://github.com/rfjakob/earlyoom/commit/7ebc4554)
|
|
|
|
ignoreOOMScoreAdjust = mkOption {
|
|
|
|
type = types.bool;
|
|
|
|
default = false;
|
|
|
|
description = ''
|
|
|
|
Ignore oom_score_adjust values of processes.
|
|
|
|
'';
|
|
|
|
};
|
2017-03-24 22:16:16 +00:00
|
|
|
|
2021-07-12 08:36:22 +01:00
|
|
|
enableDebugInfo = mkOption {
|
|
|
|
type = types.bool;
|
|
|
|
default = false;
|
|
|
|
description = ''
|
|
|
|
Enable debugging messages.
|
|
|
|
'';
|
|
|
|
};
|
2017-03-24 22:16:16 +00:00
|
|
|
|
2021-07-12 08:36:22 +01:00
|
|
|
enableNotifications = mkOption {
|
|
|
|
type = types.bool;
|
|
|
|
default = false;
|
|
|
|
description = ''
|
|
|
|
Send notifications about killed processes via the system d-bus.
|
2019-01-05 12:26:12 +00:00
|
|
|
|
2021-07-12 08:36:22 +01:00
|
|
|
WARNING: enabling this option (while convenient) should *not* be done on a
|
|
|
|
machine where you do not trust the other users as it allows any other
|
|
|
|
local user to DoS your session by spamming notifications.
|
2020-05-25 16:13:55 +01:00
|
|
|
|
2021-07-12 08:36:22 +01:00
|
|
|
To actually see the notifications in your GUI session, you need to have
|
|
|
|
<literal>systembus-notify</literal> running as your user which this
|
|
|
|
option handles.
|
2019-01-05 12:26:12 +00:00
|
|
|
|
2021-07-12 08:36:22 +01:00
|
|
|
See <link xlink:href="https://github.com/rfjakob/earlyoom#notifications">README</link> for details.
|
|
|
|
'';
|
2017-03-24 22:16:16 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2022-02-13 15:25:24 +00:00
|
|
|
imports = [
|
|
|
|
(mkRemovedOptionModule [ "services" "earlyoom" "useKernelOOMKiller" ] ''
|
|
|
|
This option is deprecated and ignored by earlyoom since 1.2.
|
|
|
|
'')
|
2021-07-12 08:36:22 +01:00
|
|
|
(mkRemovedOptionModule [ "services" "earlyoom" "notificationsCommand" ] ''
|
|
|
|
This option is deprecated and ignored by earlyoom since 1.6.
|
|
|
|
'')
|
2022-02-13 15:25:24 +00:00
|
|
|
];
|
|
|
|
|
2021-07-12 08:36:22 +01:00
|
|
|
config = mkIf cfg.enable {
|
|
|
|
services.systembus-notify.enable = mkDefault cfg.enableNotifications;
|
2020-05-25 16:13:55 +01:00
|
|
|
|
2017-03-24 22:16:16 +00:00
|
|
|
systemd.services.earlyoom = {
|
|
|
|
description = "Early OOM Daemon for Linux";
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
2021-07-12 08:36:22 +01:00
|
|
|
path = optional cfg.enableNotifications pkgs.dbus;
|
2017-03-24 22:16:16 +00:00
|
|
|
serviceConfig = {
|
2021-10-05 10:17:09 +01:00
|
|
|
StandardError = "journal";
|
2022-02-13 15:25:24 +00:00
|
|
|
ExecStart = concatStringsSep " " ([
|
|
|
|
"${pkgs.earlyoom}/bin/earlyoom"
|
2021-07-12 08:36:22 +01:00
|
|
|
"-m ${toString cfg.freeMemThreshold}"
|
|
|
|
"-s ${toString cfg.freeSwapThreshold}"
|
|
|
|
]
|
|
|
|
++ optional cfg.ignoreOOMScoreAdjust "-i"
|
|
|
|
++ optional cfg.enableDebugInfo "-d"
|
|
|
|
++ optional cfg.enableNotifications "-n"
|
|
|
|
);
|
2017-03-24 22:16:16 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|