diff options
Diffstat (limited to 'modules/gaming.nix')
| -rw-r--r-- | modules/gaming.nix | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/modules/gaming.nix b/modules/gaming.nix new file mode 100644 index 0000000..b9b6766 --- /dev/null +++ b/modules/gaming.nix @@ -0,0 +1,145 @@ +{ + 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 { + hardware.xone.enable = true; + programs = { + gamescope = { + enable = true; + capSysNice = true; + }; + + gamemode = { + enable = true; + enableRenice = true; + settings = { + general.renice = 10; + }; + }; + }; + environment = { + sessionVariables = { + OPTISCALER_ShortcutKey = "0x24"; # sets the optiscaler shortcut key to be home by default + }; + + systemPackages = with pkgs; [ + mangohud + theclicker + 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-26 ]; + }) + ]; + }) + + # --- SPECIFIC GAMES --- + (lib.mkIf cfg.games.enable { + environment.systemPackages = with inputs.openmw-nix.packages.${pkgs.stdenv.hostPlatform.system}; [ + (pkgs.openttd-jgrpp) + + # OpenMW Specific + (pkgs.openmw) + (pkgs.tes3cmd) + delta-plugin + groundcoverify + momw-configurator + openmw-validator + s3lightfixes + umo + ]; + }) + + # --- 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 { + environment.systemPackages = [ + inputs.sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.wrapped + ]; + home-manager.users.${username} = { + xdg.desktopEntries = { + steam = { + name = "Steam"; + comment = "Library modified Steam client"; + exec = "${ + lib.getExe' inputs.sls-steam.packages.${pkgs.stdenv.hostPlatform.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" ]; + }) + ]; +} |
