From 1bf68ee9bf9d3ca49f2b23617693ae35b458d119 Mon Sep 17 00:00:00 2001 From: derfenix Date: Tue, 2 Sep 2025 22:42:43 +0300 Subject: [PATCH] Add steamos role --- roles/steamos.nix | 93 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 roles/steamos.nix diff --git a/roles/steamos.nix b/roles/steamos.nix new file mode 100644 index 0000000..4a4d989 --- /dev/null +++ b/roles/steamos.nix @@ -0,0 +1,93 @@ +{ + pkgs, + lib, + config, + ... +}: + +{ + options = { + steamos = { + amdvlk = lib.mkOption { + type = lib.types.bool; + default = false; + }; + }; + }; + + 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; # Open ports in the firewall for Steam Remote Play + dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server + 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 DP-1 + ) + steamArgs=( + -pipewire-dmabuf + -tenfoot + --console + ) + + exec gamescope "$${gamescopeArgs[@]}" -- steam "$${steamArgs[@]}" + ''; + executable = true; + }; + }; + }; +}