{ 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; }; home-manager.users.${username}.hm.soft.mangohud.enable = true; environment.systemPackages = with pkgs; [ ludusavi protonplus ]; }) # --- EXTERNAL LAUNCHERS --- (lib.mkIf cfg.launchers.enable { environment.systemPackages = with pkgs; [ heroic (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 portmod ]; }) # --- 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 { programs.alvr = { enable = true; openFirewall = true; package = pkgs.alvr.overrideAttrs ( finalAttrs: prevAttrs: { version = "20.13.0"; src = pkgs.fetchFromGitHub { owner = "alvr-org"; repo = "ALVR"; tag = "v${finalAttrs.version}"; fetchSubmodules = true; hash = "sha256-h7/fuuolxbNkjUbqXZ7NTb1AEaDMFaGv/S05faO2HIc="; }; cargoDeps = pkgs.rustPlatform.fetchCargoVendor { inherit (finalAttrs) src; hash = "sha256-A0ADPMhsREH1C/xpSxW4W2u4ziDrKRrQyY5kBDn//gQ="; }; } ); }; environment.systemPackages = [ pkgs.android-tools ]; users.users.${username}.extraGroups = [ "adbusers" ]; }) ]; }