{ 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 ]; }; }