diff options
Diffstat (limited to 'nixpkgs/pkgs/misc/emulators/ryujinx/default.nix')
-rw-r--r-- | nixpkgs/pkgs/misc/emulators/ryujinx/default.nix | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/misc/emulators/ryujinx/default.nix b/nixpkgs/pkgs/misc/emulators/ryujinx/default.nix new file mode 100644 index 00000000000..568af317d25 --- /dev/null +++ b/nixpkgs/pkgs/misc/emulators/ryujinx/default.nix @@ -0,0 +1,106 @@ +{ stdenv, fetchFromGitHub, fetchurl, makeWrapper, makeDesktopItem, linkFarmFromDrvs +, dotnet-sdk_3, dotnetPackages, dotnetCorePackages +, SDL2, libX11, openal +, gtk3, gobject-introspection, wrapGAppsHook +}: + +let + runtimeDeps = [ + SDL2 + gtk3 + libX11 + openal + ]; +in stdenv.mkDerivation rec { + pname = "ryujinx"; + version = "1.0.5160"; + + src = fetchFromGitHub { + owner = "Ryujinx"; + repo = "Ryujinx"; + rev = "58f65b6523fb25d989b011c51f963520c811f9f0"; + sha256 = "19fizqmcr8i3axi3j5hg8p6dxr1pxnl5l58z4pws6nj1xbq8z5mi"; + }; + + nativeBuildInputs = [ dotnet-sdk_3 dotnetPackages.Nuget makeWrapper wrapGAppsHook gobject-introspection ]; + + nugetDeps = linkFarmFromDrvs "${pname}-nuget-deps" (import ./deps.nix { + fetchNuGet = { name, version, sha256 }: fetchurl { + name = "nuget-${name}-${version}.nupkg"; + url = "https://www.nuget.org/api/v2/package/${name}/${version}"; + inherit sha256; + }; + }); + + patches = [ ./log.patch ]; # Without this, Ryujinx tries to write logs to the nix store. This patch makes it write to "~/.config/Ryujinx/Logs" on Linux. + + configurePhase = '' + runHook preConfigure + + export HOME=$(mktemp -d) + export DOTNET_CLI_TELEMETRY_OPTOUT=1 + export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 + + nuget sources Add -Name nixos -Source "$PWD/nixos" + nuget init "$nugetDeps" "$PWD/nixos" + + # FIXME: https://github.com/NuGet/Home/issues/4413 + mkdir -p $HOME/.nuget/NuGet + cp $HOME/.config/NuGet/NuGet.Config $HOME/.nuget/NuGet + + dotnet restore --source nixos Ryujinx.sln + + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + dotnet build Ryujinx.sln \ + --no-restore \ + --configuration Release \ + -p:Version=${version} + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + dotnet publish Ryujinx.sln \ + --no-build \ + --configuration Release \ + --no-self-contained \ + --output $out/lib/ryujinx + shopt -s extglob + + makeWrapper $out/lib/ryujinx/Ryujinx $out/bin/Ryujinx \ + --set DOTNET_ROOT "${dotnetCorePackages.netcore_3_1}" \ + --suffix LD_LIBRARY_PATH : "${stdenv.lib.makeLibraryPath runtimeDeps}" \ + ''${gappsWrapperArgs[@]} + + for i in 16 32 48 64 96 128 256 512 1024; do + install -D ${src}/Ryujinx/Ui/assets/Icon.png $out/share/icons/hicolor/''${i}x$i/apps/ryujinx.png + done + cp -r ${makeDesktopItem { + desktopName = "Ryujinx"; + name = "ryujinx"; + exec = "Ryujinx"; + icon = "ryujinx"; + comment = meta.description; + type = "Application"; + categories = "Game;"; + }}/share/applications $out/share + + runHook postInstall + ''; + + # Strip breaks the executable. + dontStrip = true; + + meta = with stdenv.lib; { + description = "Experimental Nintendo Switch Emulator written in C#"; + homepage = "https://ryujinx.org/"; + license = licenses.mit; + maintainers = [ maintainers.ivar ]; + platforms = [ "x86_64-linux" ]; + }; +} |