{ 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; }; }; }; }