about summary refs log tree commit diff
path: root/modules/nixos/games/steam-run.nix
diff options
context:
space:
mode:
authorAzat Bahawi <azat@bahawi.net>2022-12-17 16:39:09 +0300
committerAzat Bahawi <azat@bahawi.net>2022-12-17 16:39:09 +0300
commit8f137c28230623259a964484adcf31fe00756594 (patch)
tree82bce6a13fda125087cf6d9dc80aa91d9230d6c4 /modules/nixos/games/steam-run.nix
parent2022-11-20 (diff)
2022-12-17
Diffstat (limited to 'modules/nixos/games/steam-run.nix')
-rw-r--r--modules/nixos/games/steam-run.nix73
1 files changed, 73 insertions, 0 deletions
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
+    ];
+  };
+}

Consider giving Nix/NixOS a try! <3