Skip to content

Commit 1585668

Browse files
committed
feat: set up hybrid graphics for voyager
1 parent b8d99ac commit 1585668

File tree

3 files changed

+61
-20
lines changed

3 files changed

+61
-20
lines changed

home/gabe/shared.nix

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,6 @@ in {
9595
ws = "chat";
9696
follow = false;
9797
}
98-
{
99-
class = "steam";
100-
title = "^(Steam)$";
101-
size = "1800 1200";
102-
}
10398
{
10499
class = "pavucontrol";
105100
float = true;
@@ -128,11 +123,13 @@ in {
128123
"feishin"
129124
"foot(client)?"
130125
"google-chrome"
126+
"heroic"
131127
"qimgv"
132128
"imv"
133129
"mpv"
134130
"neovide"
135131
"Postman"
132+
"steam"
136133
"tauonmb"
137134
"thunderbird"
138135
"virt-manager"

hosts/voyager/default.nix

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
gaming = {
2525
enable = true;
2626
amd = true;
27+
28+
prime = {
29+
enable = true;
30+
internal = "pci-0000_c4_00_0";
31+
dedicated = "pci-0000_03_00_0";
32+
};
2733
};
2834
};
2935

modules/nixos/desktop/gaming.nix

Lines changed: 53 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,31 @@
33
let
44
inherit (lib) mkIf;
55
cfg = config.desktop;
6+
gaming = config.desktop.gaming;
67
in {
78
options.desktop.gaming = let inherit (lib) mkOption mkEnableOption;
89
in with lib.types; {
910
enable = mkEnableOption "Enable gaming-related settings.";
1011

11-
prime = mkOption {
12-
type = bool;
13-
default = cfg.isLaptop;
14-
defaultText = "config.desktop.isLaptop";
15-
description = "Enable NVIDIA PRIME support.";
12+
prime = {
13+
enable = mkOption {
14+
type = bool;
15+
default = cfg.isLaptop;
16+
defaultText = "config.desktop.isLaptop";
17+
description = "Enable NVIDIA PRIME support.";
18+
};
19+
20+
internal = mkOption {
21+
type = nullOr str;
22+
default = null;
23+
description = "PCI ID of the internal GPU.";
24+
};
25+
26+
dedicated = mkOption {
27+
type = nullOr str;
28+
default = null;
29+
description = "PCI ID of the dedicated GPU.";
30+
};
1631
};
1732

1833
amd = mkOption {
@@ -49,22 +64,37 @@ in {
4964
};
5065
};
5166

52-
config = mkIf (cfg.enable && cfg.gaming.enable) {
67+
config = mkIf (cfg.enable && gaming.enable) {
68+
assertions = [
69+
{
70+
assertion = gaming.prime.enable -> gaming.prime.internal != null;
71+
message = "prime.internal must be set if prime.enable is true";
72+
}
73+
{
74+
assertion = gaming.prime.enable -> gaming.prime.dedicated != null;
75+
message = "prime.dedicated must be set if prime.enable is true";
76+
}
77+
];
78+
5379
programs = {
5480
steam = {
5581
enable = true;
5682

5783
remotePlay.openFirewall = true;
5884
dedicatedServer.openFirewall = true;
59-
gamescopeSession.enable = true;
85+
extest.enable = true;
86+
gamescopeSession = {
87+
enable = true;
88+
env.DRI_PRIME = mkIf gaming.prime.enable gaming.prime.dedicated;
89+
};
6090
};
6191

6292
gamescope = {
6393
enable = true;
6494
capSysNice = true;
6595

6696
# requires `hardware.nvidia.prime.offload.enable`.
67-
env = mkIf cfg.gaming.prime {
97+
env = mkIf (gaming.nvidia && gaming.prime.enable) {
6898
__NV_PRIME_RENDER_OFFLOAD = "1";
6999
__VK_LAYER_NV_optimus = "NVIDIA_only";
70100
__GLX_VENDOR_LIBRARY_NAME = "nvidia";
@@ -81,15 +111,15 @@ in {
81111
gpu = {
82112
apply_gpu_optimisations = "accept-responsibility";
83113
gpu_device = 0;
84-
amd_performance_level = mkIf cfg.gaming.amd "high";
114+
amd_performance_level = mkIf gaming.amd "high";
85115
};
86116
};
87117
};
88118
};
89119

90120
services.udev.packages = [ pkgs.game-devices-udev-rules ];
91121

92-
services.sunshine = mkIf cfg.gaming.sunshine.enable {
122+
services.sunshine = mkIf gaming.sunshine.enable {
93123
enable = true;
94124
openFirewall = true;
95125
capSysAdmin = true;
@@ -105,7 +135,7 @@ in {
105135
in (firstChar + (lib.concatStrings restChars));
106136
in (capitalize config.networking.hostName);
107137

108-
output_name = cfg.gaming.sunshine.monitorIndex;
138+
output_name = gaming.sunshine.monitorIndex;
109139
};
110140

111141
applications = {
@@ -120,7 +150,7 @@ in {
120150
# name = "Desktop (Resized)";
121151
# prep-cmd = [{
122152
# do = ''
123-
# ${pkgs.bash}/bin/bash -c "${pkgs.xorg.xrandr}/bin/xrandr --output ${cfg.gaming.sunshine.monitor} --mode \"''${SUNSHINE_CLIENT_WIDTH}x''${SUNSHINE_CLIENT_HEIGHT}\" --rate ''${SUNSHINE_CLIENT_FPS}"
153+
# ${pkgs.bash}/bin/bash -c "${pkgs.xorg.xrandr}/bin/xrandr --output ${gaming.sunshine.monitor} --mode \"''${SUNSHINE_CLIENT_WIDTH}x''${SUNSHINE_CLIENT_HEIGHT}\" --rate ''${SUNSHINE_CLIENT_FPS}"
124154
# '';
125155
# undo = "${pkgs.autorandr}/bin/autorandr --change";
126156
# }];
@@ -140,14 +170,20 @@ in {
140170
};
141171
};
142172

143-
# hardware.bumblebee.enable = mkIf cfg.gaming.prime true;
144-
hardware.nvidia.prime.offload.enable = mkIf cfg.gaming.prime true;
173+
# hardware.bumblebee.enable = mkIf gaming.prime.enable true;
174+
hardware.nvidia.prime.offload.enable = mkIf gaming.prime.enable true;
145175
hardware.steam-hardware.enable = true;
146176
hardware.xpadneo.enable = true;
147177
hardware.xone.enable = true;
148178
hardware.logitech.wireless.enable = true;
149179
hardware.logitech.wireless.enableGraphical = true;
150180

181+
environment.sessionVariables = mkIf (gaming.amd && gaming.prime.enable) {
182+
DRI_PRIME = gaming.prime.internal;
183+
DRI_PRIME_INTERNAL = gaming.prime.internal;
184+
DRI_PRIME_DEDICATED = gaming.prime.dedicated;
185+
};
186+
151187
environment.systemPackages = with pkgs;
152188
[
153189
# steam
@@ -159,16 +195,18 @@ in {
159195
game-devices-udev-rules
160196

161197
# games
198+
heroic
162199
prismlauncher
163200

164201
# tools
165202
mangohud
166-
] ++ (lib.optional cfg.gaming.sunshine.enable pkgs.moondeck-buddy);
203+
] ++ (lib.optional gaming.sunshine.enable pkgs.moondeck-buddy);
167204

168205
nixpkgs.config.nvidia.acceptLicense = true;
169206

170207
nixpkgs.config.packageOverrides = pkgs: {
171208
steam = pkgs.steam.override {
209+
extraEnv.DRI_PRIME = mkIf gaming.prime.enable gaming.prime.dedicated;
172210
extraPkgs = pkgs:
173211
with pkgs; [
174212
xorg.libXcursor

0 commit comments

Comments
 (0)