Files
FxNet/roles/steamos.nix
2025-11-04 22:58:08 +03:00

99 lines
1.8 KiB
Nix

{
pkgs,
lib,
config,
...
}:
{
options = {
steamos = {
amdvlk = lib.mkOption {
type = lib.types.bool;
default = false;
};
displayName = lib.mkOption {
type = lib.types.str;
default = "DP-1";
};
};
};
config = {
users.users.steam = {
isNormalUser = true;
uid = 1010;
password = "steam";
extraGroups = [
"video"
"input"
"audio"
"networkmanager"
];
shell = pkgs.bash;
};
services.xserver.enable = false;
hardware = {
graphics = {
enable = true;
enable32Bit = true;
};
amdgpu.amdvlk = lib.mkIf config.steamos.amdvlk {
enable = true;
support32Bit.enable = true;
};
};
programs = {
gamescope = {
enable = true;
capSysNice = true;
};
steam = {
enable = true;
gamescopeSession.enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
};
};
services.getty.autologinUser = "steam";
environment = {
loginShellInit = ''
[[ "$(tty)" = "/dev/tty1" ]] && ./gs.sh
'';
};
home-manager.users.steam = {
home.file."gs.sh" = {
text = ''
#!/usr/bin/env bash
set -xeuo pipefail
gamescopeArgs=(
--adaptive-sync # VRR support
--hdr-enabled
--rt
--steam
-S ${config.steamos.displayName}
)
steamArgs=(
-pipewire-dmabuf
-tenfoot
--console
)
exec gamescope "$${gamescopeArgs[@]}" -- steam "$${steamArgs[@]}"
'';
executable = true;
};
};
};
}