{ config, lib, pkgs, username, ... }: 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 steam utilities"; 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 { programs.steam = { enable = true; localNetworkGameTransfers.openFirewall = true; dedicatedServer.openFirewall = true; remotePlay.openFirewall = false; extest.enable = true; protontricks.enable = true; }; environment.systemPackages = with pkgs; [ steamtinkerlaunch ]; }) # --- 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" ]; }) ]; }