about summary refs log tree commit diff
path: root/modules/games
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
committerAzat Bahawi <azat@bahawi.net>2024-04-21 02:15:42 +0300
commite6ed60548397627bf10f561f9438201dbba0a36e (patch)
treef9a84c5957d2cc4fcd148065ee9365a0c851ae1c /modules/games
parent2024-04-18 (diff)
2024-04-21
Diffstat (limited to 'modules/games')
-rw-r--r--modules/games/default.nix27
-rw-r--r--modules/games/gamemode.nix14
-rw-r--r--modules/games/lutris.nix31
-rw-r--r--modules/games/mangohud.nix28
-rw-r--r--modules/games/minecraft.nix86
-rw-r--r--modules/games/steam-run.nix89
-rw-r--r--modules/games/steam.nix33
7 files changed, 308 insertions, 0 deletions
diff --git a/modules/games/default.nix b/modules/games/default.nix
new file mode 100644
index 0000000..dea9d3c
--- /dev/null
+++ b/modules/games/default.nix
@@ -0,0 +1,27 @@
+{ config, lib, ... }:
+with lib;
+let
+  cfg = config.nixfiles.modules.games;
+in
+{
+  imports = attrValues (modulesIn ./.);
+
+  options.nixfiles.modules.games.enable32BitSupport = mkEnableOption "support for games";
+
+  config = mkIf cfg.enable32BitSupport {
+    services = {
+      jack.alsa.support32Bit = config.services.jack.alsa.enable;
+
+      pipewire.alsa.support32Bit = config.services.pipewire.alsa.enable;
+    };
+
+    hardware = {
+      opengl = mkIf config.hardware.opengl.enable {
+        extraPackages32 = config.hardware.opengl.extraPackages;
+        driSupport32Bit = config.hardware.opengl.driSupport;
+      };
+
+      pulseaudio.support32Bit = config.hardware.pulseaudio.enable;
+    };
+  };
+}
diff --git a/modules/games/gamemode.nix b/modules/games/gamemode.nix
new file mode 100644
index 0000000..eb485f8
--- /dev/null
+++ b/modules/games/gamemode.nix
@@ -0,0 +1,14 @@
+{ config, lib, ... }:
+with lib;
+let
+  cfg = config.nixfiles.modules.games.gamemode;
+in
+{
+  options.nixfiles.modules.games.gamemode.enable = mkEnableOption "Feral GameMode";
+
+  config = mkIf cfg.enable {
+    hm.xdg.configFile."gamemode.ini".text = generators.toINI { } { general.softrealtime = "auto"; };
+
+    programs.gamemode.enable = true;
+  };
+}
diff --git a/modules/games/lutris.nix b/modules/games/lutris.nix
new file mode 100644
index 0000000..62fe521
--- /dev/null
+++ b/modules/games/lutris.nix
@@ -0,0 +1,31 @@
+{
+  config,
+  lib,
+  pkgs,
+  ...
+}:
+with lib;
+let
+  cfg = config.nixfiles.modules.games.lutris;
+in
+{
+  options.nixfiles.modules.games.lutris.enable = mkEnableOption "Lutris";
+
+  config = mkIf cfg.enable {
+    nixfiles.modules.games = {
+      gamemode.enable = true;
+      mangohud.enable = true;
+      steam-run.enable = true;
+    };
+
+    hm.home.packages = with pkgs; [
+      (lutris.override {
+        extraPkgs = _: [
+          vkBasalt
+          wine
+          winetricks
+        ];
+      })
+    ];
+  };
+}
diff --git a/modules/games/mangohud.nix b/modules/games/mangohud.nix
new file mode 100644
index 0000000..955f50c
--- /dev/null
+++ b/modules/games/mangohud.nix
@@ -0,0 +1,28 @@
+{ config, lib, ... }:
+with lib;
+let
+  cfg = config.nixfiles.modules.games.mangohud;
+in
+{
+  options.nixfiles.modules.games.mangohud.enable = mkEnableOption "MangoHud";
+
+  config = mkIf cfg.enable {
+    hm = {
+      stylix.targets.mangohud.enable = false;
+
+      programs.mangohud = {
+        enable = true;
+        settings = {
+          fps = true;
+          frame_timing = true;
+          gpu_stats = true;
+          gpu_temp = true;
+          cpu_stats = true;
+          cpu_temp = true;
+          ram = true;
+          vram = true;
+        };
+      };
+    };
+  };
+}
diff --git a/modules/games/minecraft.nix b/modules/games/minecraft.nix
new file mode 100644
index 0000000..6e163dc
--- /dev/null
+++ b/modules/games/minecraft.nix
@@ -0,0 +1,86 @@
+{
+  config,
+  inputs,
+  lib,
+  pkgs,
+  ...
+}:
+with lib;
+let
+  cfg = config.nixfiles.modules.games.minecraft;
+in
+{
+  imports = [ inputs.minecraft.nixosModules.minecraft-servers ];
+
+  options.nixfiles.modules.games.minecraft = {
+    client.enable = mkEnableOption "Minecraft client";
+    server = {
+      enable = mkEnableOption "Minecraft server";
+
+      port = mkOption {
+        description = "Server port.";
+        type = types.port;
+        default = 25565;
+      };
+
+      memory = mkOption {
+        description = "Amount of RAM to allocate.";
+        type = types.str;
+        default = "2G";
+      };
+    };
+  };
+
+  config = mkMerge [
+    (mkIf cfg.client.enable { hm.home.packages = [ pkgs.prismlauncher ]; })
+    (mkIf cfg.server.enable {
+      nixfiles.modules.common.nix.allowedUnfreePackages = [ "minecraft-server" ];
+
+      ark.directories = [ config.services.minecraft-servers.dataDir ];
+
+      services.minecraft-servers = {
+        enable = true;
+        eula = true;
+
+        openFirewall = true;
+
+        servers.default = {
+          enable = true;
+          autoStart = true;
+
+          package = pkgs.paperServers.paper-1_19_3;
+
+          serverProperties = {
+            # motd = "";
+            # white-list = true;
+            allow-flight = true;
+            difficulty = "hard";
+            enable-command-block = true;
+            enforce-secure-profile = false;
+            enforce-whitelist = true;
+            gamemode = "survival";
+            level-name = "default";
+            max-players = 8;
+            online-mode = false;
+            previews-chat = false;
+            pvp = false;
+            server-port = cfg.server.port;
+            snooper-enabled = false;
+          };
+
+          jvmOpts =
+            (concatStringsSep " " [
+              "-Xms${cfg.server.memory}"
+              "-Xmx${cfg.server.memory}"
+              "--add-modules=jdk.incubator.vector" # Required by some plugins.
+            ])
+            + " ";
+        };
+      };
+
+      nixpkgs.overlays = [ inputs.minecraft.overlay ];
+
+      my.extraGroups = [ config.services.minecraft-servers.group ];
+    })
+  ];
+}
diff --git a/modules/games/steam-run.nix b/modules/games/steam-run.nix
new file mode 100644
index 0000000..cfee8ae
--- /dev/null
+++ b/modules/games/steam-run.nix
@@ -0,0 +1,89 @@
+{
+  config,
+  lib,
+  pkgs,
+  ...
+}:
+with lib;
+let
+  cfg = config.nixfiles.modules.games.steam-run;
+in
+{
+  options.nixfiles.modules.games.steam-run = {
+    enable = mkEnableOption "native Steam runtime";
+
+    quirks = {
+      blackIsleStudios = mkEnableOption "fixes for games from Black Isle Studios";
+      cryptOfTheNecrodancer = mkEnableOption ''fixes for "Crypt of the NecroDancer" issues'';
+      mountAndBladeWarband = mkEnableOption ''fixes for "Mount & Blade: Warband" issues'';
+    };
+  };
+
+  config = mkIf cfg.enable {
+    nixfiles.modules = {
+      common.nix.allowedUnfreePackages = [
+        "steam"
+        "steam-run"
+      ];
+
+      games = {
+        enable32BitSupport = true;
+        gamemode.enable = true;
+        mangohud.enable = true;
+      };
+    };
+
+    hm.home.packages = with pkgs; [
+      (steam.override {
+        extraLibraries =
+          _:
+          with cfg.quirks;
+          optional blackIsleStudios openssl_1_0_0
+          ++ optionals cryptOfTheNecrodancer [
+            (import (builtins.fetchTarball {
+              url = "https://github.com/NixOS/nixpkgs/archive/d1c3fea7ecbed758168787fe4e4a3157e52bc808.tar.gz";
+              sha256 = "0ykm15a690v8lcqf2j899za3j6hak1rm3xixdxsx33nz7n3swsyy";
+            }) { inherit (config.nixpkgs) config localSystem; }).flac
+          ]
+          ++ optionals mountAndBladeWarband [
+            (glew.overrideAttrs (
+              _: super:
+              let
+                opname = super.pname;
+              in
+              rec {
+                pname = "${opname}-steam-run-fix";
+                inherit (super) version;
+                src = fetchurl {
+                  url = "mirror://sourceforge/${opname}/${opname}-${version}.tgz";
+                  hash = "sha256-BN6R5+Z2MDm8EZQAlc2cf4gLq6ghlqd2X3J6wFqZPJU=";
+                };
+              }
+            ))
+            (fmodex.overrideAttrs (
+              _: super:
+              let
+                opname = super.pname;
+              in
+              rec {
+                pname = "${opname}-steam-run-fix";
+                inherit (super) version;
+                installPhase =
+                  let
+                    libPath = makeLibraryPath [
+                      alsa-lib
+                      libpulseaudio
+                      stdenv.cc.cc
+                    ];
+                  in
+                  ''
+                    install -Dm755 api/lib/libfmodex64-${version}.so $out/lib/libfmodex64.so
+                    patchelf --set-rpath ${libPath} $out/lib/libfmodex64.so
+                  '';
+              }
+            ))
+          ];
+      }).run
+    ];
+  };
+}
diff --git a/modules/games/steam.nix b/modules/games/steam.nix
new file mode 100644
index 0000000..5883b0e
--- /dev/null
+++ b/modules/games/steam.nix
@@ -0,0 +1,33 @@
+{
+  config,
+  lib,
+  pkgs,
+  ...
+}:
+with lib;
+let
+  cfg = config.nixfiles.modules.games.steam;
+in
+{
+  options.nixfiles.modules.games.steam.enable = mkEnableOption "Steam runtime";
+
+  config = mkIf cfg.enable {
+    nixfiles.modules = {
+      common.nix.allowedUnfreePackages = [
+        "steam"
+        "steam-original"
+      ];
+
+      games = {
+        enable32BitSupport = true;
+        gamemode.enable = true;
+        mangohud.enable = true;
+      };
+    };
+
+    hm.home.packages = with pkgs; [
+      (steam.override { extraEnv.MANGOHUD = 1; })
+      protontricks
+    ];
+  };
+}

Consider giving Nix/NixOS a try! <3