feat(stability): default-on memory-pressure protection (earlyoom)
Some checks failed
Check / eval (push) Has been cancelled
Some checks failed
Check / eval (push) Has been cancelled
modules/nixos/oom.nix — running out of memory now kills the offending process (with a desktop notification via systembus-notify) instead of freezing the desktop for minutes until the kernel OOM killer fires. earlyoom over systemd-oomd, deliberately: oomd kills whole cgroups, and a Hyprland session runs as ONE scope (nothing here spawns per-app systemd scopes, unlike GNOME) — under pressure oomd would take out the entire desktop to save it. earlyoom kills the single largest process before the thrash point. nixpkgs default-enables oomd in an inert state (no slices monitored); it is disabled outright so there is one owner. Session plumbing is --avoid-listed (unanchored — NixOS wrappers rename comm to .foo-wrapped); no --prefer tuning, largest-RSS selection already finds the hog. All mkDefault; opt out with services.earlyoom.enable = false (README note added). Verified: V0 (flake check) + V2 — new checks.oom-protection runNixOSTest, executed: a chunked allocator (686 MB peak, 1 GB VM) is SIGTERM'd by earlyoom in 0.1 s, a bystander unit survives (the process-level granularity the module exists for), and systemd-oomd is asserted inactive. 25 s runtime. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -541,6 +541,23 @@ how to override it. Items marked ✓ are shipped.
|
||||
`cameractrls` for the rare genuine-tuning case; and a follow-up for
|
||||
portal/Flatpak apps that consume the libcamera path (where the internal IR is
|
||||
still listed, since libcamera stays on).
|
||||
- ✓ **Memory-pressure protection (earlyoom, default-on):**
|
||||
`modules/nixos/oom.nix` — running out of memory kills the offending
|
||||
process instead of freezing the desktop. **earlyoom over systemd-oomd,
|
||||
deliberately:** oomd kills whole cgroups, and a Hyprland session is ONE
|
||||
scope (no per-app systemd scopes here, unlike GNOME) — under pressure it
|
||||
would take out the entire desktop; earlyoom kills the single largest
|
||||
process before the thrash point. nixpkgs default-enables oomd *inert*
|
||||
(no slices monitored) — disabled outright so there's one owner. Session
|
||||
plumbing is `--avoid`-listed (Hyprland/hyprlock/greetd/waybar/pipewire/
|
||||
wireplumber/Xwayland/nix-daemon/systemd — unanchored, since NixOS
|
||||
wrappers rename comm to `.foo-wrapped`); no `--prefer` tuning (largest-
|
||||
RSS selection already finds the hog); kills raise a desktop notification
|
||||
(systembus-notify). All `mkDefault` — opt out with
|
||||
`services.earlyoom.enable = false`. **VM-verified**
|
||||
(`checks.oom-protection`): a chunked allocator peaked at ~686 MB in a
|
||||
1 GB VM, earlyoom SIGTERM'd it in 0.1 s, a bystander unit survived, and
|
||||
oomd is asserted off.
|
||||
- **Opt-in services & integrations:** the counterpart to the opt-*out*
|
||||
application suite above — heavier or more personal integrations shipped
|
||||
**off by default**, each a `nomarchy.services.<name>.enable` toggle a
|
||||
|
||||
Reference in New Issue
Block a user