{ config, lib, pkgs, username, inputs, ... }: let cfg = config.os.srv.gaming; in { options.os.srv.gaming = { enable = lib.mkEnableOption "enables general gaming support"; tools.enable = lib.mkEnableOption "enables performance tools" // { default = cfg.enable; }; launchers.enable = lib.mkEnableOption "enables 3rd party launchers" // { default = cfg.enable; }; games.enable = lib.mkEnableOption "enables specific native games"; steam = { enable = lib.mkEnableOption "enables the steam launcher"; enableSls = lib.mkEnableOption "enables the SLS Steam library modification"; }; vr.enable = lib.mkEnableOption "enables vr support"; }; config = lib.mkMerge [ # --- PERFORMANCE & TOOLING --- (lib.mkIf cfg.tools.enable { programs.gamescope = { enable = true; capSysNice = true; }; programs.gamemode = { enable = true; enableRenice = true; settings = { general.renice = 10; }; }; home-manager.users.${username}.hm.soft.mangohud.enable = true; environment.systemPackages = with pkgs; [ theclicker ludusavi protonplus ]; }) # --- EXTERNAL LAUNCHERS --- (lib.mkIf cfg.launchers.enable { environment.systemPackages = with pkgs; [ heroic # (pkgs.bottles.override { removeWarningPopup = true; }) (prismlauncher.override { additionalLibs = with pkgs; [ ocl-icd ]; jdks = with pkgs; [ javaPackages.compiler.temurin-bin.jdk-25 ]; }) ]; }) # --- SPECIFIC GAMES --- (lib.mkIf cfg.games.enable { environment.systemPackages = with pkgs; [ openttd-jgrpp openmw ]; }) # --- STEAM --- (lib.mkIf cfg.steam.enable ( lib.mkMerge [ { programs.steam = { enable = true; localNetworkGameTransfers.openFirewall = true; dedicatedServer.openFirewall = true; remotePlay.openFirewall = false; extest.enable = true; protontricks.enable = true; }; environment.systemPackages = with pkgs; [ steamtinkerlaunch ]; } (lib.mkIf cfg.steam.enableSls { home-manager.users.${username} = { imports = [ inputs.sls-steam.homeModules.sls-steam ]; services.sls-steam.config = { DisableFamilyShareLock = true; SafeMode = false; }; home.packages = [ inputs.sls-steam.packages.${pkgs.system}.wrapped ]; xdg.desktopEntries = { "SLSsteam" = { name = "SLSsteam"; comment = "Library modification for Steam"; exec = "${lib.getExe' inputs.sls-steam.packages.${pkgs.system}.wrapped "SLSsteam"} %U"; icon = "steam"; terminal = false; type = "Application"; categories = [ "Game" "Utility" ]; mimeType = [ "x-scheme-handler/steamcmd" ]; }; }; }; }) ] )) # --- VR SUPPORT --- (lib.mkIf cfg.vr.enable { services.wivrn = { enable = true; openFirewall = true; highPriority = true; steam.importOXRRuntimes = true; # defaultRuntime = true; }; environment.systemPackages = [ pkgs.android-tools ]; users.users.${username}.extraGroups = [ "adbusers" ]; }) ]; }