{ config, lib, pkgs, ... }: let # For GPD Win4’s AMD APU, we assume AMD Vulkan drivers: amdPackages = [ pkgs.amdvlk pkgs.driversi686Linux.amdvlk ]; in { options.services.steamDeckMode = { enable = lib.mkOption { type = lib.types.bool; default = false; description = "Launch Steam in a ‘Deck-like’ session upon login (auto-logins and starts Steam in gamepad UI mode)."; }; }; config = { # Enable Steam and Gamescope programs.gamescope = { enable = true; capSysNice = true; }; programs.steam = { enable = true; # The ‘gamescopeSession’ creates a special session for Steam on Wayland gamescopeSession.enable = true; }; # Add some helpful gaming utilities environment.systemPackages = with pkgs; [ mangohud steam-tui steamcmd vulkan-tools vulkan-headers vulkan-loader wlroots libdecor gamemode ]; # Enable 32-bit support for libraries (often required by Steam) hardware.opengl.enable = true; hardware.opengl.driSupport32Bit = true; # Additional AMD drivers if needed hardware.graphics.enable = true; hardware.graphics.enable32Bit = true; hardware.graphics.extraPackages = amdPackages; # Example udev rules for Steam Deck controllers, optional environment.etc."udev/rules.d/99-steamdeck-controller.rules".text = '' # Valve Controller devices SUBSYSTEM=="usb", ATTRS{idVendor}=="28de", MODE="0666" KERNEL=="uinput", MODE="0660", GROUP="input", OPTIONS+="static_node=uinput" ''; # Provide a “Steam Deck Mode” session in the display manager services.xserver.displayManager.session = { "steam-deck-mode" = { name = "Steam Deck Mode"; start = '' #!/usr/bin/env bash # On X11, you could also remove or adjust the following env variable if you prefer Wayland export XDG_SESSION_TYPE=x11 # Fullscreen + close gamescope on exit, then run Steam in gamepad UI exec gamescope -f -e -- steam -gamepadui ''; }; }; } // lib.mkIf config.services.steamDeckMode.enable { # Auto-login to the user of your choice and start in Steam Deck Mode services.xserver.displayManager.autoLogin.enable = true; services.xserver.displayManager.autoLogin.user = "dominik"; # or your preferred user services.xserver.autoRestartXServer = true; services.xserver.displayManager.defaultSession = "steam-deck-mode"; };