Is NixOS Good for Gaming? Steam, Proton and GPU Drivers Guide

✅ Verified against NixOS/nixpkgs source (nixos/modules) and the NixOS Wiki — Last updated: September 2026
Short answer: yes, but nothing works "out of the box" the way it does on SteamOS or Bazzite. Every piece — Steam itself, 32-bit support, GPU drivers, Proton-GE — is opt-in and declared in configuration.nix, not preconfigured. That's a real cost for someone who "just wants to game," and a real advantage for someone who already runs NixOS for development or servers and wants gaming added without switching systems. This guide covers exactly what to declare, verified against the actual NixOS module source rather than copied from tutorials for other distros — several of which contain outdated option names that will silently fail on a current NixOS install.
- Enabling Steam Declaratively
- 32-bit Support — the Option Name Changed
- GPU Drivers
- Installing Proton-GE
- Gamescope and Gamemode
- Lutris, Heroic and Bottles
- The Real NixOS-Specific Problem: FHS Compatibility
- Shortcut: the nix-gaming Community Flake
- Beyond This Guide: Specific Games, Emulators, VR
- Should You Actually Use NixOS for Gaming?
- Troubleshooting
Enabling Steam Declaratively
# /etc/nixos/configuration.nix
programs.steam.enable = true;This installs Steam and the required 32-bit graphics libraries it depends on — but it does not open your firewall for anything. If you use Remote Play, in-home streaming, or local network game transfers, you need to enable each one separately:
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
dedicatedServer.openFirewall = true;
localNetworkGameTransfers.openFirewall = true;
};This trips up a lot of people coming from other distros, where a firewall is often either absent or already permissive: on NixOS, "enable Steam" and "open the ports Steam wants" are two different, explicit decisions.
32-bit Support — the Option Name Changed
Games and Proton are largely 32-bit binaries under the hood, and NixOS doesn't enable 32-bit graphics support by default. If you're following an older guide, it will tell you to set hardware.opengl.driSupport32Bit — that option has been renamed and deprecated. The current option is:
hardware.graphics.enable32Bit = true;programs.steam.enable = true already pulls this in for you in a current NixOS release, but if you're setting up 32-bit support for anything outside Steam (Wine outside Proton, other 32-bit software), this is the option to reach for — not the old hardware.opengl.* namespace.
GPU Drivers
NVIDIA needs explicit configuration:
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = {
modesetting.enable = true; # required for Wayland, default true on driver 535+
open = true; # open-source kernel module
};Whether to set hardware.nvidia.open to true or false depends on your GPU generation: NVIDIA's own guidance is that the open-source kernel module is the right choice on Turing-generation cards or newer (RTX series, GTX 16-series) — older cards still need the proprietary closed module (open = false).
AMD needs none of this — the open-source amdgpu driver in Mesa handles it without any NixOS-specific configuration, which is a real asymmetry worth knowing before you buy a GPU for a NixOS gaming box. Intel integrated graphics work the same way, no extra config.
A practical caveat worth knowing if you're on an RTX 50-series card: users running NixOS through early-to-mid 2026 reported NVIDIA's 50-series driver updates as genuinely rough — real regressions, not just NixOS-specific packaging lag. Stability reportedly improved by around June 2026. If you're on a 50-series card and hit driver instability, that's a known pattern, not something unique to your NixOS config — check whether pinning to a slightly older driver version in hardware.nvidia.package helps before assuming your setup is wrong.
Installing Proton-GE
Skip ProtonUp-Qt-style manual downloads where you can — Nix has a package for this:
programs.steam = {
enable = true;
extraCompatPackages = [ pkgs.proton-ge-bin ];
};One correction worth flagging: some tutorials reference protonup-ng as a Nix package. It does not exist in nixpkgs — that's a naming collision with the Python tool of the same name used on other distros. On NixOS, proton-ge-bin via extraCompatPackages is the real path. If you'd rather manage it manually, protonup-qt does exist in nixpkgs as an alternative.
After rebuilding, select the Proton-GE version from Steam's per-game Compatibility settings, same as on any other distro.
Gamescope and Gamemode
programs.gamemode.enable = true; # enableRenice defaults to true — grants CAP_SYS_NICE automatically
programs.steam.gamescopeSession.enable = true; # Steam Deck-style session, launches with -tenfoot -pipewire-dmabufThere's no separate system-wide programs.gamescope module — gamescope on NixOS is reached through the Steam session option above, not configured independently.
Lutris, Heroic and Bottles
All three are standard nixpkgs packages, no Flatpak required:
environment.systemPackages = with pkgs; [
lutris
heroic
bottles
];The Real NixOS-Specific Problem: FHS Compatibility
This is the one issue that's genuinely more common on NixOS than on other distros, and it's not related to anticheat or GPU drivers — it's filesystem layout. NixOS has no /usr/lib or /lib64; every library lives in its own hashed path under /nix/store. Most games installed through Steam handle this fine because Valve's Steam Runtime is self-contained. But third-party installers, some game launchers, and binaries downloaded outside Steam often assume a standard FHS layout and fail to find libraries that, from their point of view, "should" be at /lib64/libsomething.so.
The documented fix is steam-run, which gives a program an FHS-like environment without patching it:
environment.systemPackages = with pkgs; [ steam-run ];steam-run ./some-game-installer.shOn anticheat: games using kernel-level anticheat (Valorant, Fortnite, some Rainbow Six Siege modes) are blocked by the publisher's own decision to deny Proton/Linux entirely — that's true on every Linux distro running Proton, not a NixOS-specific limitation. Check a title's actual status on a Linux anticheat tracker before assuming NixOS is the problem.
Shortcut: the nix-gaming Community Flake
Everything above can be hand-rolled from the modules already shown, but the community-maintained nix-gaming flake packages two useful pieces as drop-in NixOS modules instead of config you'd otherwise write yourself:
pipewireLowLatency— tunes PipeWire audio latency down with a single import, instead of hand-tuning quantum/rate settings.programs.steam.platformOptimizations.enable = true;— applies a set of sysctl and scheduler tweaks modeled on what SteamOS itself does on the Steam Deck.
Worth pulling in as a flake input if you want Deck-like tuning without assembling it option by option — it doesn't replace anything covered above, it just saves you from re-deriving settings the community has already tuned.
Beyond This Guide: Specific Games, Emulators, VR
This post covers the general configuration every NixOS gaming setup needs. For a specific title, emulator, or VR headset, the NixOS Wiki's Gaming category maintains dozens of dedicated pages — that's the right next stop once Steam, drivers and Proton-GE are working and you need something game-specific this guide doesn't cover.
Should You Actually Use NixOS for Gaming?
If you're choosing a distro purely to play games, Bazzite, SteamOS (via a Steam Deck or ChimeraOS-style install) or CachyOS will get you playing faster — they ship Steam, drivers and Proton-GE preconfigured. NixOS makes sense for gaming specifically when you're already running it for something else — development, homelab, a reproducible server config — and want to add gaming to the same machine without maintaining a second OS. The declarative config above becomes an asset once you've written it once: reinstall or clone to a second machine, and gaming comes back configured exactly as before, no manual driver reinstall required.
Troubleshooting
I enabled Steam but Remote Play doesn't work over my network
programs.steam.enable = true does not open any firewall ports. Add programs.steam.remotePlay.openFirewall = true; (or the relevant option for dedicated servers / local transfers) and rebuild.
Steam says 32-bit libraries are missing
You're likely following an outdated guide referencing hardware.opengl.driSupport32Bit. The current option is hardware.graphics.enable32Bit = true; — programs.steam.enable should already pull this in, but set it explicitly if you're using 32-bit software outside Steam.
Which Proton-GE package do I actually install on NixOS?
pkgs.proton-ge-bin via programs.steam.extraCompatPackages. protonup-ng is not a real nixpkgs package — don't chase that name.
A game I downloaded outside Steam won't launch — "library not found"
Classic FHS mismatch. Run it through steam-run (install via environment.systemPackages), which provides the standard filesystem layout the binary expects without you having to patch anything.
Do I need the NVIDIA proprietary driver or the open one?
Open (hardware.nvidia.open = true;) on Turing-generation GPUs or newer (RTX series, GTX 16-series). Anything older still needs the proprietary closed module.
Further Reading
- NixOS Packages Explained: nix-env, nix profile, and the Nix Store
- How to Install NixOS in 2026: The Flakes-First Way
- Bazzite Linux: The Gaming Distro for Any PC
- SteamOS Guide: Flatpak, Distrobox, Dev Mode and Decky Loader
- CachyOS: Install and Configure the Performance-Tuned Arch Linux Distro
- Linux for Gaming: Steam, Proton, and Everything You Need
- NixOS Wiki: Steam
