/ system / nixos / gaming / default.nix
default.nix
 1  {
 2    config,
 3    pkgs,
 4    lib,
 5    ...
 6  }:
 7  let
 8    inherit (lib) mkIf;
 9  
10    cfg = config.dusk.system.nixos.desktop.gaming;
11  in
12  {
13    imports = [ ./sunshine.nix ];
14  
15    config = mkIf cfg.enable {
16      boot.kernel.sysctl."vm.max_map_count" = 1048576;
17  
18      environment.systemPackages = with pkgs; [
19        mangohud
20        moonlight-qt
21        prismlauncher
22      ];
23  
24      hardware = {
25        graphics.enable = true;
26  
27        # Support for Xbox One Controllers
28        xone.enable = true;
29      };
30  
31      home-manager.users.${config.dusk.username}.xdg.configFile."gamemode.ini".text = ''
32        [general]
33        softrealtime=on
34  
35        [cpu]
36        pin_cores=no
37      '';
38  
39      programs = {
40        gamemode = {
41          enable = true;
42          enableRenice = true;
43        };
44  
45        gamescope = mkIf cfg.gamescope.enable {
46          enable = true;
47          capSysNice = true;
48        };
49  
50        steam = {
51          enable = true;
52  
53          dedicatedServer.openFirewall = true;
54          localNetworkGameTransfers.openFirewall = true;
55          remotePlay.openFirewall = true;
56  
57          extraCompatPackages = with pkgs; [ proton-ge-bin ];
58          protontricks.enable = true;
59  
60          gamescopeSession = mkIf cfg.gamescope.enable {
61            enable = true;
62  
63            env = {
64              WLR_RENDERER = "vulkan";
65              ENABLE_GAMESCOPE_WSI = "1";
66              WINE_FULLSCREEN_FSR = "1";
67            };
68  
69            args = [
70              "--steam"
71              "--adaptive-sync"
72            ];
73          };
74        };
75      };
76  
77      users.users.${config.dusk.username}.extraGroups = [ "gamemode" ];
78    };
79  }