From 9ac845015baa38b627697603562d04cfe46353d5 Mon Sep 17 00:00:00 2001 From: Lumpiasty Date: Thu, 12 Mar 2026 22:56:08 +0100 Subject: [PATCH] add option for system76 scheduler and enable on acer --- hosts/acer.nix | 1 + modules/default.nix | 1 + modules/desktop/system76-scheduler.nix | 371 +++++++++++++------------ 3 files changed, 189 insertions(+), 184 deletions(-) diff --git a/hosts/acer.nix b/hosts/acer.nix index 60e7801..c9bc3ad 100644 --- a/hosts/acer.nix +++ b/hosts/acer.nix @@ -89,6 +89,7 @@ rec { laptop = true; gaming = true; enableTailscale = true; + system76Scheduler = true; }; virtualisation.vmVariant = { diff --git a/modules/default.nix b/modules/default.nix index ecc2178..9790940 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -21,5 +21,6 @@ desktop/touchpad.nix desktop/pulseaudio.nix desktop/tailscale.nix + desktop/system76-scheduler.nix ]; } \ No newline at end of file diff --git a/modules/desktop/system76-scheduler.nix b/modules/desktop/system76-scheduler.nix index 92ff7a1..a3d79b4 100644 --- a/modules/desktop/system76-scheduler.nix +++ b/modules/desktop/system76-scheduler.nix @@ -1,195 +1,198 @@ { config, lib, pkgs, modulesPath, ... }: { + options.lumpiasty.system76Scheduler = lib.mkEnableOption "Enable system76-scheduler"; - # Enable system76-scheduler - # Config basically rewrite of stock, a bit tuned - services.system76-scheduler = { - enable = true; - useStockConfig = false; - settings = { - processScheduler = { - pipewireBoost = { - enable = true; - profile = { - nice = -6; - ioClass = "best-effort"; - ioPrio = 0; + config = lib.mkIf (config.lumpiasty.system76Scheduler) { + # Enable system76-scheduler + # Config basically rewrite of stock, a bit tuned + services.system76-scheduler = { + enable = true; + useStockConfig = false; + settings = { + processScheduler = { + pipewireBoost = { + enable = true; + profile = { + nice = -6; + ioClass = "best-effort"; + ioPrio = 0; + }; }; - }; - foregroundBoost = { - enable = true; - foreground = { - nice = 0; - ioClass = "best-effort"; - ioPrio = 0; - }; - background = { - nice = 6; - ioClass = "idle"; + foregroundBoost = { + enable = true; + foreground = { + nice = 0; + ioClass = "best-effort"; + ioPrio = 0; + }; + background = { + nice = 6; + ioClass = "idle"; + }; }; }; }; + assignments = { + sound-server = { + nice = -15; + ioClass = "realtime"; + ioPrio = 0; + matchers = [ + # original config matches on /usr/bin/..., but this is NixOS + "pipewire" + "pipewire-pulse" + "jackd" + ]; + }; + recording = { + nice = -9; + ioClass = "best-effort"; + ioPrio = 0; + matchers = [ + "amsynth" + "jamesdsp" + "jitsi" + "mumble" + "obs" + "teams" + "wireplumber" + "zoom" + "bitwig-studio" + "include name=\"Bitwig*\"" + ]; + }; + games = { + nice = -5; + ioClass = "best-effort"; + ioPrio = 0; + matchers = [ + "lutris" + "steam" + "heroic" + "itch" + "vrcompositor" + "vrdashboard" + "vrmonitor" + "vrserver" + "include descends=\"steam\"" + "include descends=\"lutris\"" + "include descends=\"heroic\"" + "include descends=\"itch\"" + ]; + }; + desktop-environment = { + nice = -3; + ioClass = "best-effort"; + ioPrio = 0; + matchers = [ + "cosmic-comp" + "gnome-shell" + "i3wm" + "kwin" + "kwin_wayland" + "Xwayland" + "sway" + "Hyprland" + "gamescope" + "Xorg" + ]; + }; + session-services = { + nice = 9; + ioClass = "idle"; + matchers = [ + "include parent=\"gnome-session-binary\"" + "include parent=\"gvfsd\"" + "include cgroup=\"/user.slice/*.service\" parent=\"systemd\"" + "include cgroup=\"/user.slice/*/session.slice/*\" parent=\"systemd\"" + "exclude cgroup=\"/user.slice/*/app.slice/*\"" + "exclude cgroup=\"/user.slice/*/session.slice/*\"" + "exclude cgroup=\"/user.slice/*app-dbus*\"" + ]; + }; + system-services = { + nice = 12; + ioClass = "idle"; + matchers = [ + "include cgroup=\"/system.slice/*\"" + ]; + }; + package-manager = { + nice = 15; + class = "batch"; + ioClass = "idle"; + matchers = [ + "include name=\"apt-*\"" + "include name=\"dpkg-*\"" + "apt" + "dpkg" + "flatpak" + "fwupd" + "packagekitd" + "update-initramfs" + "nix" + ]; + }; + batch = { + nice = 19; + class = "idle"; + ioClass = "idle"; + matchers = [ + "include name=\"sbuild-*\"" + "\"7z\"" + "\"7za\"" + "\"7zr\"" + "ar" + "boinc" + "c++" + "cargo" + "clang" + "cmake" + "cpp" + "FAHClient" + "FAHCoreWrapper" + "fossilize-replay" + "g++" + "gcc" + "gradle" + "javac" + "ld" + "lld" + "make" + "mold" + "mvn" + "ninja" + "rust-analyzer" + "rustc" + "sbuild" + "tar" + "tracker-miner-fs-3" + "unrar" + "zip" + ]; + }; + }; + exceptions = [ + "include descends=\"chrt\"" + "include descends=\"gamemoderun\"" + "include descends=\"ionice\"" + "include descends=\"nice\"" + "include descends=\"taskset\"" + "include descends=\"schedtool\"" + "chrt" + "dbus" + "dbus-broker" + "gamemoderun" + "ionice" + "nice" + "rtkit-daemon" + "systemd" + "taskset" + "schedtool" + "/etc/profiles/per-user/user/bin/easyeffects*" + ]; }; - assignments = { - sound-server = { - nice = -15; - ioClass = "realtime"; - ioPrio = 0; - matchers = [ - # original config matches on /usr/bin/..., but this is NixOS - "pipewire" - "pipewire-pulse" - "jackd" - ]; - }; - recording = { - nice = -9; - ioClass = "best-effort"; - ioPrio = 0; - matchers = [ - "amsynth" - "jamesdsp" - "jitsi" - "mumble" - "obs" - "teams" - "wireplumber" - "zoom" - "bitwig-studio" - "include name=\"Bitwig*\"" - ]; - }; - games = { - nice = -5; - ioClass = "best-effort"; - ioPrio = 0; - matchers = [ - "lutris" - "steam" - "heroic" - "itch" - "vrcompositor" - "vrdashboard" - "vrmonitor" - "vrserver" - "include descends=\"steam\"" - "include descends=\"lutris\"" - "include descends=\"heroic\"" - "include descends=\"itch\"" - ]; - }; - desktop-environment = { - nice = -3; - ioClass = "best-effort"; - ioPrio = 0; - matchers = [ - "cosmic-comp" - "gnome-shell" - "i3wm" - "kwin" - "kwin_wayland" - "Xwayland" - "sway" - "Hyprland" - "gamescope" - "Xorg" - ]; - }; - session-services = { - nice = 9; - ioClass = "idle"; - matchers = [ - "include parent=\"gnome-session-binary\"" - "include parent=\"gvfsd\"" - "include cgroup=\"/user.slice/*.service\" parent=\"systemd\"" - "include cgroup=\"/user.slice/*/session.slice/*\" parent=\"systemd\"" - "exclude cgroup=\"/user.slice/*/app.slice/*\"" - "exclude cgroup=\"/user.slice/*/session.slice/*\"" - "exclude cgroup=\"/user.slice/*app-dbus*\"" - ]; - }; - system-services = { - nice = 12; - ioClass = "idle"; - matchers = [ - "include cgroup=\"/system.slice/*\"" - ]; - }; - package-manager = { - nice = 15; - class = "batch"; - ioClass = "idle"; - matchers = [ - "include name=\"apt-*\"" - "include name=\"dpkg-*\"" - "apt" - "dpkg" - "flatpak" - "fwupd" - "packagekitd" - "update-initramfs" - "nix" - ]; - }; - batch = { - nice = 19; - class = "idle"; - ioClass = "idle"; - matchers = [ - "include name=\"sbuild-*\"" - "\"7z\"" - "\"7za\"" - "\"7zr\"" - "ar" - "boinc" - "c++" - "cargo" - "clang" - "cmake" - "cpp" - "FAHClient" - "FAHCoreWrapper" - "fossilize-replay" - "g++" - "gcc" - "gradle" - "javac" - "ld" - "lld" - "make" - "mold" - "mvn" - "ninja" - "rust-analyzer" - "rustc" - "sbuild" - "tar" - "tracker-miner-fs-3" - "unrar" - "zip" - ]; - }; - }; - exceptions = [ - "include descends=\"chrt\"" - "include descends=\"gamemoderun\"" - "include descends=\"ionice\"" - "include descends=\"nice\"" - "include descends=\"taskset\"" - "include descends=\"schedtool\"" - "chrt" - "dbus" - "dbus-broker" - "gamemoderun" - "ionice" - "nice" - "rtkit-daemon" - "systemd" - "taskset" - "schedtool" - "/etc/profiles/per-user/user/bin/easyeffects*" - ]; + # Add https://github.com/maxiberta/kwin-system76-scheduler-integration kwin script }; - # Add https://github.com/maxiberta/kwin-system76-scheduler-integration kwin script } \ No newline at end of file