summaryrefslogtreecommitdiff
path: root/modules/gaming.nix
diff options
context:
space:
mode:
Diffstat (limited to 'modules/gaming.nix')
-rw-r--r--modules/gaming.nix145
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" ];
+ })
+ ];
+}