1{
2 lib,
3 buildDotnetModule,
4 dotnetCorePackages,
5 fetchzip,
6 libX11,
7 libgdiplus,
8 ffmpeg,
9 openal,
10 libsoundio,
11 sndio,
12 pulseaudio,
13 vulkan-loader,
14 glew,
15 libGL,
16 libICE,
17 libSM,
18 libXcursor,
19 libXext,
20 libXi,
21 libXrandr,
22 udev,
23 SDL2,
24 SDL2_mixer,
25}:
26
27buildDotnetModule rec {
28 pname = "ryujinx";
29 version = "1.1.1401"; # Based off of the official github actions builds: https://github.com/Ryujinx/Ryujinx/actions/workflows/release.yml
30
31 src = fetchzip {
32 url = "https://archive.org/download/ryujinx-5dbba-07e-33e-83c-9047dcbb-701c-9655edbbe-89086.tar/Ryujinx-5dbba07e33e83c9047dcbb701c9655edbbe89086.tar.gz";
33 hash = "sha256-UeJ3KE5e5H9crqroAxjmxYTf/Z4cbj41a6/1HW2nLcA=";
34 };
35
36 enableParallelBuilding = false;
37
38 dotnet-sdk = dotnetCorePackages.sdk_8_0_4xx-bin;
39 dotnet-runtime = dotnetCorePackages.runtime_8_0;
40
41 nugetDeps = ./deps.json;
42
43 runtimeDeps = [
44 libX11
45 libgdiplus
46 SDL2_mixer
47 openal
48 libsoundio
49 sndio
50 pulseaudio
51 vulkan-loader
52 ffmpeg
53 udev
54
55 # Avalonia UI
56 glew
57 libICE
58 libSM
59 libXcursor
60 libXext
61 libXi
62 libXrandr
63
64 # Headless executable
65 libGL
66 SDL2
67 ];
68
69 projectFile = "Ryujinx.sln";
70 testProjectFile = "src/Ryujinx.Tests/Ryujinx.Tests.csproj";
71 doCheck = true;
72
73 dotnetFlags = [
74 "/p:ExtraDefineConstants=DISABLE_UPDATER%2CFORCE_EXTERNAL_BASE_DIR"
75 ];
76
77 executables = [
78 "Ryujinx.Headless.SDL2"
79 "Ryujinx"
80 ];
81
82 makeWrapperArgs = [
83 # Without this Ryujinx fails to start on wayland. See https://github.com/Ryujinx/Ryujinx/issues/2714
84 "--set SDL_VIDEODRIVER x11"
85 ];
86
87 preInstall = ''
88 # workaround for https://github.com/Ryujinx/Ryujinx/issues/2349
89 mkdir -p $out/lib/sndio-6
90 ln -s ${sndio}/lib/libsndio.so $out/lib/sndio-6/libsndio.so.6
91 '';
92
93 preFixup = ''
94 mkdir -p $out/share/{applications,icons/hicolor/scalable/apps,mime/packages}
95 pushd ${src}/distribution/linux
96
97 install -D ./Ryujinx.desktop $out/share/applications/Ryujinx.desktop
98 install -D ./Ryujinx.sh $out/bin/Ryujinx.sh
99 install -D ./mime/Ryujinx.xml $out/share/mime/packages/Ryujinx.xml
100 install -D ../misc/Logo.svg $out/share/icons/hicolor/scalable/apps/Ryujinx.svg
101
102 ln -s $out/bin/Ryujinx $out/bin/ryujinx
103
104 popd
105 '';
106
107 meta = with lib; {
108 homepage = "https://ryujinx.org/";
109 changelog = "https://github.com/Ryujinx/Ryujinx/wiki/Changelog";
110 description = "Experimental Nintendo Switch Emulator written in C#";
111 longDescription = ''
112 Ryujinx is an open-source Nintendo Switch emulator, created by gdkchan,
113 written in C#. This emulator aims at providing excellent accuracy and
114 performance, a user-friendly interface and consistent builds. It was
115 written from scratch and development on the project began in September
116 2017.
117 '';
118 license = licenses.mit;
119 maintainers = with maintainers; [
120 jk
121 artemist
122 ];
123 platforms = [
124 "x86_64-linux"
125 "aarch64-linux"
126 ];
127 mainProgram = "Ryujinx";
128 };
129}