{ config, lib, pkgs, pkgsRev, ... }: 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.games.steam.enable = true; hm.home.packages = with pkgs; [ (steam.override { extraLibraries = _: with cfg.quirks; optional blackIsleStudios openssl_1_0_0 ++ optional cryptOfTheNecrodancer (pkgsRev "d1c3fea7ecbed758168787fe4e4a3157e52bc808" "sha256-3muuhz3fjtF1bz32UXOYCho51E8JSeEwo2iDZFQJdXo=") .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 ]; }; }