summaryrefslogtreecommitdiffstats
path: root/nixos/modules
diff options
context:
space:
mode:
authorPeter Hoeg <peter@hoeg.com>2021-07-12 15:36:22 +0800
committerPeter Hoeg <peter@hoeg.com>2022-03-13 20:21:21 +0800
commit895090bf89cd1a9cd7bc3ea7edd3bd2a0ae9d88f (patch)
treeec69636e4eabab9c291c55ab7fae8194897aff23 /nixos/modules
parent27e32bbfde6c0c27c78859b23943e79b84e3c860 (diff)
nixos/earlyoom: use the newly introduced systembus-notify option
Also some cleanups.
Diffstat (limited to 'nixos/modules')
-rw-r--r--nixos/modules/services/system/earlyoom.nix155
1 files changed, 70 insertions, 85 deletions
diff --git a/nixos/modules/services/system/earlyoom.nix b/nixos/modules/services/system/earlyoom.nix
index b355df056bc1..ddd5bcebcdd5 100644
--- a/nixos/modules/services/system/earlyoom.nix
+++ b/nixos/modules/services/system/earlyoom.nix
@@ -1,81 +1,73 @@
{ config, lib, pkgs, ... }:
-with lib;
-
let
- ecfg = config.services.earlyoom;
+ cfg = config.services.earlyoom;
+
+ inherit (lib)
+ mkDefault mkEnableOption mkIf mkOption types
+ mkRemovedOptionModule
+ concatStringsSep optional;
+
in
{
- options = {
- services.earlyoom = {
+ options.services.earlyoom = {
+ enable = mkEnableOption "Early out of memory killing";
- enable = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Enable early out of memory killing.
- '';
- };
+ 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.
+ '';
+ };
- freeMemThreshold = mkOption {
- type = types.int;
- 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.
- '';
- };
+ 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.
+ '';
+ };
- freeSwapThreshold = mkOption {
- type = types.int;
- 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.
- '';
- };
+ # 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.
+ '';
+ };
- # 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.
- '';
- };
+ enableDebugInfo = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Enable debugging messages.
+ '';
+ };
- enableDebugInfo = mkOption {
- type = types.bool;
- default = false;
- description = ''
- Enable debugging messages.
- '';
- };
+ enableNotifications = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Send notifications about killed processes via the system d-bus.
- notificationsCommand = mkOption {
- type = types.nullOr types.str;
- default = null;
- description = ''
- This option is deprecated and ignored by earlyoom since 1.6.
- Use <option>services.earlyoom.enableNotifications</option> instead.
- '';
- };
+ 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.
- enableNotifications = mkOption {
- type = types.bool;
- default = false;
- 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.
+ 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.
- 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" ] ''
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 {
- assertions = [
- { 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.";
+ config = mkIf cfg.enable {
+ services.systembus-notify.enable = mkDefault cfg.enableNotifications;
systemd.services.earlyoom = {
description = "Early OOM Daemon for Linux";
wantedBy = [ "multi-user.target" ];
- path = optional ecfg.enableNotifications pkgs.dbus;
+ path = optional cfg.enableNotifications pkgs.dbus;
serviceConfig = {
- StandardOutput = "null";
StandardError = "journal";
ExecStart = concatStringsSep " " ([
"${pkgs.earlyoom}/bin/earlyoom"
- "-m ${toString ecfg.freeMemThreshold}"
- "-s ${toString ecfg.freeSwapThreshold}"
- ] ++ optional ecfg.ignoreOOMScoreAdjust "-i"
- ++ optional ecfg.enableDebugInfo "-d"
- ++ optional ecfg.enableNotifications "-n");
+ "-m ${toString cfg.freeMemThreshold}"
+ "-s ${toString cfg.freeSwapThreshold}"
+ ]
+ ++ optional cfg.ignoreOOMScoreAdjust "-i"
+ ++ optional cfg.enableDebugInfo "-d"
+ ++ optional cfg.enableNotifications "-n"
+ );
};
};
-
- environment.systemPackages = optional ecfg.enableNotifications pkgs.systembus-notify;
};
}