diff --git a/modules/programs/gaming/default.nix b/modules/programs/gaming/default.nix index 912ceb4..a2c5510 100644 --- a/modules/programs/gaming/default.nix +++ b/modules/programs/gaming/default.nix @@ -7,16 +7,15 @@ in { enable = lib.mkEnableOption "Configure gaming options"; }; config = lib.mkIf cfg.enable { - nixpkgs.config.retroarch = { - enableDesmume = true; - enableMGBA = true; - enableDolphin = true; - }; - environment.systemPackages = with pkgs; [ winePackages.stagingFull winetricks lutris-free-wrapped - retroarch + (pkgs.callPackage ./wrapper.nix { + inherit (pkgs) retroarch; + cores = with pkgs.libretro; [ + mgba mupen64plus melonds desmume dolphin + ]; + }) steam-wrapped # Custom package diff --git a/modules/programs/gaming/wrapper.nix b/modules/programs/gaming/wrapper.nix new file mode 100644 index 0000000..b3797c9 --- /dev/null +++ b/modules/programs/gaming/wrapper.nix @@ -0,0 +1,37 @@ +{ stdenv, lib, makeWrapper, retroarch, cores ? [ ] }: + +stdenv.mkDerivation { + pname = "retroarch"; + version = lib.getVersion retroarch; + + nativeBuildInputs = [ makeWrapper ]; + + buildCommand = '' + mkdir -p $out/lib + for coreDir in $cores + do + ln -s $coreDir/* $out/lib/. + done + + ln -s -t $out ${retroarch}/share + + if [ -d ${retroarch}/Applications ]; then + ln -s -t $out ${retroarch}/Applications + fi + + makeWrapper ${retroarch}/bin/retroarch $out/bin/retroarch \ + --suffix-each LD_LIBRARY_PATH ':' "$cores" \ + --add-flags "-L $out/lib/" \ + ''; + + cores = map (x: x + x.libretroCore) cores; + preferLocalBuild = true; + + meta = with retroarch.meta; { + inherit changelog description homepage license maintainers platforms; + longDescription = + "RetroArch is the reference frontend for the libretro API. The following cores are included: " + + lib.concatStringsSep ", " (map (x: "${x.name}") cores) + + "."; + }; +}