{ lib , buildDotnetModule , fetchFromGitHub , makeDesktopItem , copyDesktopItems , dotnetCorePackages , libX11 , libgdiplus , ffmpeg , SDL2_mixer , openal , libsoundio , sndio , pulseaudio , gtk3 , gdk-pixbuf , wrapGAppsHook }: buildDotnetModule rec { pname = "ryujinx"; version = "1.1.54"; # Versioning is based off of the official github actions builds: https://github.com/Ryujinx/Ryujinx/actions/workflows/release.yml src = fetchFromGitHub { owner = "Ryujinx"; repo = "Ryujinx"; rev = "3705c206688c69d3348f5cec84dc480d8d7c578e"; sha256 = "1lhnr11x46yjpka865m0dzkbkdxmrrhjcpvq4ab4wll6j0ipy908"; }; dotnet-sdk = dotnetCorePackages.sdk_6_0; dotnet-runtime = dotnetCorePackages.runtime_6_0; projectFile = "Ryujinx.sln"; nugetDeps = ./deps.nix; dotnetFlags = [ "/p:ExtraDefineConstants=DISABLE_UPDATER" ]; # TODO: Add the headless frontend. Currently errors on the following: # System.Exception: SDL2 initlaization failed with error "No available video device" executables = [ "Ryujinx" ]; nativeBuildInputs = [ copyDesktopItems wrapGAppsHook ]; buildInputs = [ gtk3 gdk-pixbuf ]; runtimeDeps = [ gtk3 libX11 libgdiplus ffmpeg SDL2_mixer openal libsoundio sndio pulseaudio ]; patches = [ ./log.patch # Without this, Ryujinx attempts to write logs to the nix store. This patch makes it write to "~/.config/Ryujinx/Logs" on Linux. ]; preInstall = '' # TODO: fix this hack https://github.com/Ryujinx/Ryujinx/issues/2349 mkdir -p $out/lib/sndio-6 ln -s ${sndio}/lib/libsndio.so $out/lib/sndio-6/libsndio.so.6 makeWrapperArgs+=( --suffix LD_LIBRARY_PATH : "$out/lib/sndio-6" ) for i in 16 32 48 64 96 128 256 512 1024; do install -D ${src}/Ryujinx/Ui/Resources/Logo_Ryujinx.png $out/share/icons/hicolor/''${i}x$i/apps/ryujinx.png done ''; desktopItems = [ (makeDesktopItem { desktopName = "Ryujinx"; name = "ryujinx"; exec = "Ryujinx"; icon = "ryujinx"; comment = meta.description; type = "Application"; categories = [ "Game" ]; }) ]; meta = with lib; { homepage = "https://ryujinx.org/"; changelog = "https://github.com/Ryujinx/Ryujinx/wiki/Changelog"; description = "Experimental Nintendo Switch Emulator written in C#"; longDescription = '' Ryujinx is an open-source Nintendo Switch emulator, created by gdkchan, written in C#. This emulator aims at providing excellent accuracy and performance, a user-friendly interface and consistent builds. It was written from scratch and development on the project began in September 2017. ''; license = licenses.mit; maintainers = with maintainers; [ ivar jk ]; platforms = [ "x86_64-linux" ]; mainProgram = "Ryujinx"; }; passthru.updateScript = ./updater.sh; }