{ user ? throw "user argument is required", home ? throw "home argument is required", }: { config, lib, pkgs, ... }: { environment.persistence."/persist" = { "${home}/.steam" = { }; "${home}/.local/share/Steam" = { }; }; programs = { steam = { enable = true; localNetworkGameTransfers.openFirewall = true; extest.enable = true; protontricks.enable = true; }; gamescope = { enable = true; args = [ "--rt" "-f" ]; }; gamemode.enable = true; }; home-manager.users.${user} = { systemd.user = { services.steam-ln = let steamLn = lib.meta.getExe ( pkgs.writeShellApplication { name = "steam-ln"; runtimeInputs = with pkgs; [ coreutils ]; text = builtins.readFile ./scripts/steam-ln.sh; } ); in { Unit = { Description = "Sync Steam games with Games directory"; After = [ config.environment.persistence."/persist"."${home}/.local/share/Steam".mount config.environment.persistence."/persist"."${home}/Games".mount ]; DefaultDependencies = false; }; Service = { ExecStart = steamLn; Type = "oneshot"; }; Install.WantedBy = [ "graphical-session.target" ]; }; paths.steam-ln = { Unit = { Description = "Monitor Steam games directory for changes"; After = [ config.environment.persistence."/persist"."${home}/.local/share/Steam".mount config.environment.persistence."/persist"."${home}/Games".mount ]; }; Path.PathChanged = "${home}/.local/share/Steam/steamapps/common"; Install.WantedBy = [ "graphical-session.target" ]; }; }; home = { packages = with pkgs; [ protonup ]; sessionVariables.STEAM_EXTRA_COMPAT_TOOLS_PATHS = "${home}/.steam/root/compatibilitytools.d"; }; }; }