{ config, pkgs, lib, inputs, system, ... }: let cfg = config.sydnix.steam; in { options.sydnix.steam = { enable = lib.mkEnableOption "Steam"; impermanenceUsers = lib.mkOption { type = lib.types.listOf lib.types.str; default = []; description = '' A list of users for which ~/.local/share/Steam shall be persisted. This is a disgusting hack to get around an issue with Impermanence's home-manager module. https://github.com/nix-community/impermanence/issues/165#issuecomment-2537723929 ''; }; }; config = lib.mkIf cfg.enable { programs.steam = { enable = true; remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; gamescopeSession.enable = true; extraPackages = with pkgs; [ mono gtk3 gtk3-x11 libgdiplus zlib ]; }; programs.gamemode = { enable = true; enableRenice = true; }; # This fixes the "glXChooseVisual failed" bug, see: # https://github.com/NixOS/nixpkgs/issues/47932. hardware.graphics = { enable = true; enable32Bit = true; }; environment.persistence.${config.sydnix.impermanence.persistDirectory}.users = builtins.listToAttrs (builtins.map (user: { name = user; value.directories = [".local/share/Steam"]; }) cfg.impermanenceUsers); }; }