4.1 KiB
4.1 KiB
🎮 play.nix
A NixOS flake for gaming on Wayland with Gamescope integration and declarative configuration.
Features
- Gamescope Integration: Intelligent wrapper with monitor-aware defaults (HDR, VRR, resolution)
- Application Wrappers: Create custom game launchers that run through Gamescope
- AMD GPU Support: LACT daemon and performance optimizations
- Gaming Stack: Steam with Proton-CachyOS, Lutris, Gamemode, and process scheduling
Installation
Add to your flake.nix
:
{
inputs = {
play-nix.url = "github:TophC7/play.nix";
# chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; # Not needed, but useful
};
outputs = { play-nix, chaotic, ... }: {
nixosConfigurations.yourhostname = nixpkgs.lib.nixosSystem {
modules = [
play-nix.nixosModules.play
# chaotic.nixosModules.default
];
};
};
}
Configuration
NixOS Configuration
play = {
amd.enable = true; # AMD GPU optimization
steam.enable = true; # Steam with Proton-CachyOS
lutris.enable = true; # Lutris game manager
gamemode.enable = true; # Performance optimization
ananicy.enable = true; # Process scheduling
};
Home Manager Configuration
play = {
# Configure monitors for automatic gamescope settings
monitors = [{
name = "DP-1";
primary = true;
width = 2560;
height = 1440;
refreshRate = 165;
hdr = true;
vrr = true;
}];
# Enable gamescope wrapper
gamescoperun.enable = true;
# Create application wrappers
wrappers = {
# If you wish to override the "steam" command/bin, remove "-gamescope"
# Overriding the executables makes it so already existing .desktop launchers use the new wrapper
steam-gamescope = {
enable = true;
# Note: Special case for steam, this is the pkg you should use
# Also sas of 06/25, steam does not open in normal "desktop mode" with gamescope
# You can however exit big picture mode once already open to access the normal ui
command = "${lib.getExe osConfig.programs.steam.package} -tenfoot -bigpicture";
extraOptions = {
"steam" = true;
};
};
lutris-gamescope = {
enable = true;
package = osConfig.play.lutris.package; # play.nix provides readonly packages
extraOptions."force-windows-fullscreen" = true;
};
heroic-gamescope = {
enable = true;
package = pkgs.heroic;
extraOptions."fsr-upscaling" = true;
};
};
};
# Recomendation: Override desktop entries to use gamescope wrappers
xdg.desktopEntries = {
steam = {
name = "Steam";
comment = "Steam Big Picture (Gamescope Session)";
exec = "${lib.getExe config.play.wrappers.steam.wrappedPackage}";
icon = "steam";
type = "Application";
terminal = false;
categories = [ "Game" ];
mimeType = [
"x-scheme-handler/steam"
"x-scheme-handler/steamlink"
];
settings = {
StartupNotify = "true";
StartupWMClass = "Steam";
PrefersNonDefaultGPU = "true";
X-KDE-RunOnDiscreteGpu = "true";
Keywords = "gaming;";
};
actions = {
bigpicture = {
name = "Steam Client (No Gamescope)";
exec = "${lib.getExe (config.play.steam.package or pkgs.steam)}";
};
};
};
heroic = {
name = "Heroic (Gamescope)";
exec = "${lib.getExe config.play.wrappers.heroic-gaming.wrappedPackage}";
icon = "com.heroicgameslauncher.hgl";
type = "Application";
categories = [ "Game" ];
};
};
Usage
# Basic usage
gamescoperun heroic
# With custom options
gamescoperun -x "--fsr-upscaling-sharpness 5" heroic
# Legacy environment variable support
GAMESCOPE_EXTRA_OPTS="--steam" gamescoperun steam
The gamescoperun
script automatically configures resolution, refresh rate, HDR, and VRR based on your primary monitor settings.
Requirements
- NixOS with Home Manager
- Chaotic Nix (for latest Gamescope)
- Wayland desktop environment
🤝 Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.