lol

nixos/gamemode: add module

+97 -1
+1
nixos/modules/module-list.nix
··· 139 139 ./programs/flexoptix-app.nix 140 140 ./programs/freetds.nix 141 141 ./programs/fuse.nix 142 + ./programs/gamemode.nix 142 143 ./programs/geary.nix 143 144 ./programs/gnome-disks.nix 144 145 ./programs/gnome-documents.nix
+96
nixos/modules/programs/gamemode.nix
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + cfg = config.programs.gamemode; 7 + settingsFormat = pkgs.formats.ini { }; 8 + configFile = settingsFormat.generate "gamemode.ini" cfg.settings; 9 + in 10 + { 11 + options = { 12 + programs.gamemode = { 13 + enable = mkEnableOption "GameMode to optimise system performance on demand"; 14 + 15 + enableRenice = mkEnableOption "CAP_SYS_NICE on gamemoded to support lowering process niceness" // { 16 + default = true; 17 + }; 18 + 19 + settings = mkOption { 20 + type = settingsFormat.type; 21 + default = {}; 22 + description = '' 23 + System-wide configuration for GameMode (/etc/gamemode.ini). 24 + See gamemoded(8) man page for available settings. 25 + ''; 26 + example = literalExample '' 27 + { 28 + general = { 29 + renice = 10; 30 + }; 31 + 32 + # Warning: GPU optimisations have the potential to damage hardware 33 + gpu = { 34 + apply_gpu_optimisations = "accept-responsibility"; 35 + gpu_device = 0; 36 + amd_performance_level = "high"; 37 + }; 38 + 39 + custom = { 40 + start = "''${pkgs.libnotify}/bin/notify-send 'GameMode started'"; 41 + end = "''${pkgs.libnotify}/bin/notify-send 'GameMode ended'"; 42 + }; 43 + } 44 + ''; 45 + }; 46 + }; 47 + }; 48 + 49 + config = mkIf cfg.enable { 50 + environment = { 51 + systemPackages = [ pkgs.gamemode ]; 52 + etc."gamemode.ini".source = configFile; 53 + }; 54 + 55 + security = { 56 + polkit.enable = true; 57 + wrappers = mkIf cfg.enableRenice { 58 + gamemoded = { 59 + source = "${pkgs.gamemode}/bin/gamemoded"; 60 + capabilities = "cap_sys_nice+ep"; 61 + }; 62 + }; 63 + }; 64 + 65 + systemd = { 66 + packages = [ pkgs.gamemode ]; 67 + user.services.gamemoded = { 68 + # The upstream service already defines this, but doesn't get applied. 69 + # See https://github.com/NixOS/nixpkgs/issues/81138 70 + wantedBy = [ "default.target" ]; 71 + 72 + # Use pkexec from the security wrappers to allow users to 73 + # run libexec/cpugovctl & libexec/gpuclockctl as root with 74 + # the the actions defined in share/polkit-1/actions. 75 + # 76 + # This uses a link farm to make sure other wrapped executables 77 + # aren't included in PATH. 78 + environment.PATH = mkForce (pkgs.linkFarm "pkexec" [ 79 + { 80 + name = "pkexec"; 81 + path = "${config.security.wrapperDir}/pkexec"; 82 + } 83 + ]); 84 + 85 + serviceConfig.ExecStart = mkIf cfg.enableRenice [ 86 + "" # Tell systemd to clear the existing ExecStart list, to prevent appending to it. 87 + "${config.security.wrapperDir}/gamemoded" 88 + ]; 89 + }; 90 + }; 91 + }; 92 + 93 + meta = { 94 + maintainers = with maintainers; [ kira-bruneau ]; 95 + }; 96 + }
-1
pkgs/tools/games/gamemode/default.nix
··· 20 20 owner = "FeralInteractive"; 21 21 repo = pname; 22 22 rev = version; 23 - fetchSubmodules = true; 24 23 sha256 = "sha256-P00OnZiPZyxBu9zuG+3JNorXHBhJZy+cKPjX+duZrJ0="; 25 24 }; 26 25