about summary refs log tree commit diff
path: root/modules/nixos/games
diff options
context:
space:
mode:
Diffstat (limited to 'modules/nixos/games')
-rw-r--r--modules/nixos/games/default.nix38
-rw-r--r--modules/nixos/games/gamemode.nix13
-rw-r--r--modules/nixos/games/gog.nix18
-rw-r--r--modules/nixos/games/lutris.nix32
-rw-r--r--modules/nixos/games/mangohud.nix26
-rw-r--r--modules/nixos/games/minecraft.nix50
-rw-r--r--modules/nixos/games/steam-run.nix73
-rw-r--r--modules/nixos/games/steam.nix25
8 files changed, 275 insertions, 0 deletions
diff --git a/modules/nixos/games/default.nix b/modules/nixos/games/default.nix
new file mode 100644
index 0000000..1c5766b
--- /dev/null
+++ b/modules/nixos/games/default.nix
@@ -0,0 +1,38 @@
+{
+  config,
+  lib,
+  ...
+}:
+with lib; let
+  cfg = config.nixfiles.modules.games;
+in {
+  imports = [
+    ./gamemode.nix
+    ./gog.nix
+    ./lutris.nix
+    ./mangohud.nix
+    ./minecraft.nix
+    ./steam-run.nix
+    ./steam.nix
+  ];
+
+  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/nixos/games/gamemode.nix b/modules/nixos/games/gamemode.nix
new file mode 100644
index 0000000..051d12e
--- /dev/null
+++ b/modules/nixos/games/gamemode.nix
@@ -0,0 +1,13 @@
+{
+  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 {programs.gamemode.enable = true;};
+}
diff --git a/modules/nixos/games/gog.nix b/modules/nixos/games/gog.nix
new file mode 100644
index 0000000..86039f1
--- /dev/null
+++ b/modules/nixos/games/gog.nix
@@ -0,0 +1,18 @@
+{
+  config,
+  lib,
+  pkgs,
+  ...
+}:
+with lib; let
+  cfg = config.nixfiles.modules.games.gog;
+in {
+  options.nixfiles.modules.games.gog.enable =
+    mkEnableOption "stand-alone GOG clients and the ability to run GOG games";
+
+  config = mkIf cfg.enable {
+    nixfiles.modules.games.steam-run.enable = true;
+
+    hm.home.packages = with pkgs; [lgogdownloader];
+  };
+}
diff --git a/modules/nixos/games/lutris.nix b/modules/nixos/games/lutris.nix
new file mode 100644
index 0000000..72179fc
--- /dev/null
+++ b/modules/nixos/games/lutris.nix
@@ -0,0 +1,32 @@
+{
+  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 {
+        lutris-unwrapped = lutris-unwrapped.override {
+          wine = buildFHSUserEnv {
+            # We don't really need Wine because Lutris downloads a required
+            # runtime for us.
+            name = "empty";
+          };
+        };
+      })
+      vkBasalt
+    ];
+  };
+}
diff --git a/modules/nixos/games/mangohud.nix b/modules/nixos/games/mangohud.nix
new file mode 100644
index 0000000..d693c82
--- /dev/null
+++ b/modules/nixos/games/mangohud.nix
@@ -0,0 +1,26 @@
+{
+  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.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/nixos/games/minecraft.nix b/modules/nixos/games/minecraft.nix
new file mode 100644
index 0000000..e53f9eb
--- /dev/null
+++ b/modules/nixos/games/minecraft.nix
@@ -0,0 +1,50 @@
+{
+  config,
+  lib,
+  pkgs,
+  ...
+}:
+with lib; let
+  cfg = config.nixfiles.modules.games.minecraft;
+in {
+  options.nixfiles.modules.games.minecraft = {
+    client.enable = mkEnableOption "Minecraft client";
+    server = {
+      enable = mkEnableOption "Minecraft server";
+
+      memory = mkOption {
+        description = "Amount of RAM to allocate.";
+        type = types.str;
+        default = "2G";
+      };
+    };
+  };
+
+  config = mkMerge [
+    (mkIf cfg.client.enable {
+      hm.home.packages = with pkgs; [pollymc];
+    })
+    (mkIf cfg.server.enable {
+      # Configurations, opslist, whitelist and plugins are managed imperatively.
+      # TODO Make it declarative.
+      services.minecraft-server = {
+        enable = true;
+        eula = true;
+
+        package = pkgs.minecraftServers.purpur_1_19_2;
+
+        # TODO Make a PR fixing trailing whitespace on this.
+        jvmOpts =
+          (concatStringsSep " " [
+            "-Xmx${cfg.server.memory}"
+            "-Xms${cfg.server.memory}"
+            "--add-modules=jdk.incubator.vector"
+          ])
+          + " ";
+      };
+
+      # Defined in /var/lib/minecraft/server.properties.
+      networking.firewall.allowedTCPPorts = [55565];
+    })
+  ];
+}
diff --git a/modules/nixos/games/steam-run.nix b/modules/nixos/games/steam-run.nix
new file mode 100644
index 0000000..1a1e61f
--- /dev/null
+++ b/modules/nixos/games/steam-run.nix
@@ -0,0 +1,73 @@
+{
+  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 = {
+      mountAndBladeWarband = mkEnableOption ''fixes for "Mount & Blade: Warband" issues'';
+      cryptOfTheNecrodancer = mkEnableOption ''fixes for "Crypt of the NecroDancer" issues'';
+    };
+  };
+
+  config = mkIf cfg.enable {
+    nixfiles.modules = {
+      common.nix.allowedUnfreePackages = ["steam" "steam-run"];
+
+      games = {
+        enable32BitSupport = true;
+        gamemode.enable = true;
+      };
+    };
+
+    hm.home.packages = with pkgs; [
+      (steam.override {
+        extraLibraries = _:
+          with cfg.quirks;
+            []
+            ++ optionals mountAndBladeWarband [
+              (glew.overrideAttrs (_: super: let
+                opname = super.pname;
+              in rec {
+                pname = "${opname}-runfix";
+                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}-runfix";
+                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
+                '';
+              }))
+            ]
+            ++ optionals cryptOfTheNecrodancer [
+              (import (builtins.fetchTarball {
+                url = "https://github.com/NixOS/nixpkgs/archive/d1c3fea7ecbed758168787fe4e4a3157e52bc808.tar.gz";
+                sha256 = "0ykm15a690v8lcqf2j899za3j6hak1rm3xixdxsx33nz7n3swsyy";
+              }) {inherit (config.nixpkgs) config localSystem;})
+              .flac
+            ];
+      })
+      .run
+    ];
+  };
+}
diff --git a/modules/nixos/games/steam.nix b/modules/nixos/games/steam.nix
new file mode 100644
index 0000000..8dfa72c
--- /dev/null
+++ b/modules/nixos/games/steam.nix
@@ -0,0 +1,25 @@
+{
+  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;
+      };
+    };
+
+    hm.home.packages = with pkgs; [steam];
+  };
+}

Consider giving Nix/NixOS a try! <3