diff --git a/pkgs/applications/emulators/yuzu/default.nix b/pkgs/applications/emulators/yuzu/default.nix
new file mode 100644
index 0000000000000..ddb3dc92ee089
--- /dev/null
+++ b/pkgs/applications/emulators/yuzu/default.nix
@@ -0,0 +1,177 @@
+{
+ callPackage,
+ fetchFromGitLab,
+ fetchpatch,
+ fetchFromGitea,
+ fmt_11,
+ fetchzip,
+ git,
+ dos2unix,
+ sdl3,
+}:
+
+{
+ torzu = callPackage ./generic.nix {
+ forkName = "torzu";
+ version = "unstable-2024-02-26";
+ source = fetchFromGitea {
+ domain = "git.ynh.ovh";
+ owner = "liberodark";
+ repo = "torzu";
+ rev = "eaa9c9e3a46eb5099193b11d620ddfe96b6aec83";
+ hash = "sha256-KxLRXM8Y+sIW5L9oYMSeK95HRb30zGRRSfil9DO+utU=";
+ fetchSubmodules = true;
+ };
+ patches = [
+ # Remove coroutines from debugger to fix boost::asio compatibility issues
+ ./fix-debugger.patch
+ # Add explicit cast for CRC checksum value
+ ./fix-udp-protocol.patch
+ # Use specific boost::asio includes and update to modern io_context
+ ./fix-udp-client.patch
+ # Updates suppressed diagnostics
+ ./fix-aarch64-linux-build.patch
+ ];
+ homepage = "http://vub63vv26q6v27xzv2dtcd25xumubshogm67yrpaz2rculqxs7jlfqad.onion/torzu-emu/torzu";
+ };
+
+ citron-emu = callPackage ./generic.nix (
+ let
+ version = "0.6.1";
+ in
+ {
+ forkName = "citron";
+ inherit version;
+ source = fetchFromGitLab {
+ domain = "git.citron-emu.org";
+ owner = "citron";
+ repo = "emu";
+ rev = "v${version}-canary-refresh";
+ hash = "sha256-ZQ6k/9e1ZwUXqc5h3dnza27LtpUtQY4eUjeMtX3+in8=";
+ # Submodules are fixed in master until a new tag is out apply fix manually
+ leaveDotGit = true;
+ nativeBuildInputs = [
+ git
+ dos2unix
+ ];
+ postFetch = ''
+ pushd $out
+ # Git won't allow working on submodules otherwise...
+ git restore --staged .
+
+ cp .gitmodules{,.bak}
+
+ substituteInPlace .gitmodules \
+ --replace-fail git.citron-emu.org/Citron github.com/yuzu-mirror
+
+ git submodule update --init --recursive -j ''${NIX_BUILD_CORES:-1} --progress --depth 1 --checkout --force
+
+ mv .gitmodules{.bak,}
+
+ # Remove .git dirs
+ find . -name .git -type f -exec rm -rf {} +
+ rm -rf .git/
+ popd
+ '';
+ };
+ patches = [
+ # Add explicit cast for CRC checksum value
+ ./fix-udp-protocol.patch
+ # Use specific boost::asio includes and update to modern io_context
+ (fetchpatch {
+ url = "https://git.citron-emu.org/citron/emu/-/commit/21ca0b31191c4af56a78576c502e8382b4c128b4.patch";
+ hash = "sha256-DkCGjeNYjCA7RdB+hBRXuHL8Ckjb+IgWbZ13leQZUF0=";
+ })
+ ];
+ cmakeFlagsPrefix = "CITRON";
+ udevFileName = "72-citron-input.rules";
+ fmt = fmt_11;
+ homepage = "https://git.citron-emu.org/citron/emu/-/releases";
+ mainProgram = "citron";
+ }
+ );
+
+ sudachi = callPackage ./generic.nix (
+ let
+ version = "1.0.15";
+ in
+ {
+ forkName = "sudachi";
+ inherit version;
+ source = fetchzip {
+ url = "https://github.com/emuplace/sudachi.emuplace.app/releases/download/v${version}/latest.zip";
+ hash = "sha256-9qfDtuJWE4KpCY7RFXw/VdYOR0bNe+80afO7/FJ+Cog=";
+ stripRoot = false;
+ nativeBuildInputs = [
+ git
+ dos2unix
+ ];
+ postFetch = ''
+ pushd $out
+ # Patches will fail to apply because of line endings
+ find . -type f -print0 | xargs -0 dos2unix
+
+ # Restore submodules from .gitmodules file
+ # https://stackoverflow.com/a/11258810
+ git init
+ git config -f .gitmodules --get-regexp '^submodule\..*\.path$' |
+ while read path_key local_path
+ do
+ url_key=$(echo $path_key | sed 's/\.path/.url/')
+ url=$(git config -f .gitmodules --get "$url_key")
+ rmdir $local_path
+ git submodule add $url $local_path
+ done
+ # Fetch nested submodules
+ git submodule update --init --recursive
+
+ # Fix submodules versions
+ (cd externals/cpp-jwt && git checkout 4a970bc302d671476122cbc6b43cc89fbf4a96ec)
+
+ # Remove .git dirs
+ find . -name .git -type f -exec rm -rf {} +
+ rm -rf .git/
+ '';
+ };
+ patches = [
+ # Add explicit cast for CRC checksum value
+ ./fix-udp-protocol.patch
+ # Updates suppressed diagnostics
+ ./fix-aarch64-linux-build.patch
+ # Revert imports to codec.h
+ ./fix-libavcodec-import.patch
+ # Revert libav function usage
+ ./fix-libavcodec-function.patch
+ # Fix code mistakes
+ # from https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=sudachi
+ ./fix-sudachi-window.patch
+ ./fix-sudachi-guest-memory-namespace.patch
+ ];
+ cmakeFlagsPrefix = "SUDACHI";
+ udevFileName = "72-sudachi-input.rules";
+ SDL2 = sdl3;
+ homepage = "https://sudachi.emuplace.app/";
+ mainProgram = "sudachi";
+ }
+ );
+
+ eden = callPackage ./generic.nix (
+ let
+ version = "0.0.2";
+ in
+ {
+ forkName = "eden";
+ inherit version;
+ source = fetchFromGitea {
+ domain = "git.eden-emu.dev";
+ owner = "eden-emu";
+ repo = "eden";
+ rev = "${version}-pre-alpha";
+ hash = "sha256-bf4QF0POVD8siviDxp3n4ZspRm8ETkmAx0WVrg2nyYI=";
+ fetchSubmodules = true;
+ };
+ homepage = "https://git.eden-emu.dev/eden-emu/eden/releases";
+ mainProgram = "eden";
+ }
+ );
+}
diff --git a/pkgs/by-name/to/torzu/fix-aarch64-linux-build.patch b/pkgs/applications/emulators/yuzu/fix-aarch64-linux-build.patch
similarity index 100%
rename from pkgs/by-name/to/torzu/fix-aarch64-linux-build.patch
rename to pkgs/applications/emulators/yuzu/fix-aarch64-linux-build.patch
diff --git a/pkgs/by-name/to/torzu/fix-debugger.patch b/pkgs/applications/emulators/yuzu/fix-debugger.patch
similarity index 100%
rename from pkgs/by-name/to/torzu/fix-debugger.patch
rename to pkgs/applications/emulators/yuzu/fix-debugger.patch
diff --git a/pkgs/applications/emulators/yuzu/fix-libavcodec-function.patch b/pkgs/applications/emulators/yuzu/fix-libavcodec-function.patch
new file mode 100644
index 0000000000000..8ebb2a095f69a
--- /dev/null
+++ b/pkgs/applications/emulators/yuzu/fix-libavcodec-function.patch
@@ -0,0 +1,183 @@
+--- a/src/video_core/host1x/ffmpeg/ffmpeg.cpp
++++ b/src/video_core/host1x/ffmpeg/ffmpeg.cpp
+@@ -218,6 +218,165 @@
+ return true;
+ }
+
++// Nasty but allows linux builds to pass.
++// Requires double checks when FFMPEG gets updated.
++// Hopefully a future FFMPEG update will all and expose a solution in the public API.
++namespace {
++
++typedef struct FFCodecDefault {
++ const char* key;
++ const char* value;
++} FFCodecDefault;
++
++typedef struct FFCodec {
++ /**
++ * The public AVCodec. See codec.h for it.
++ */
++ AVCodec p;
++
++ /**
++ * Internal codec capabilities FF_CODEC_CAP_*.
++ */
++ unsigned caps_internal : 29;
++
++ /**
++ * This field determines the type of the codec (decoder/encoder)
++ * and also the exact callback cb implemented by the codec.
++ * cb_type uses enum FFCodecType values.
++ */
++ unsigned cb_type : 3;
++
++ int priv_data_size;
++ /**
++ * @name Frame-level threading support functions
++ * @{
++ */
++ /**
++ * Copy necessary context variables from a previous thread context to the current one.
++ * If not defined, the next thread will start automatically; otherwise, the codec
++ * must call ff_thread_finish_setup().
++ *
++ * dst and src will (rarely) point to the same context, in which case memcpy should be skipped.
++ */
++ int (*update_thread_context)(struct AVCodecContext* dst, const struct AVCodecContext* src);
++
++ /**
++ * Copy variables back to the user-facing context
++ */
++ int (*update_thread_context_for_user)(struct AVCodecContext* dst,
++ const struct AVCodecContext* src);
++ /** @} */
++
++ /**
++ * Private codec-specific defaults.
++ */
++ const FFCodecDefault* defaults;
++
++ /**
++ * Initialize codec static data, called from av_codec_iterate().
++ *
++ * This is not intended for time consuming operations as it is
++ * run for every codec regardless of that codec being used.
++ */
++ void (*init_static_data)(struct FFCodec* codec);
++
++ int (*init)(struct AVCodecContext*);
++
++ union {
++ /**
++ * Decode to an AVFrame.
++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_DECODE.
++ *
++ * @param avctx codec context
++ * @param[out] frame AVFrame for output
++ * @param[out] got_frame_ptr decoder sets to 0 or 1 to indicate that
++ * a non-empty frame was returned in frame.
++ * @param[in] avpkt AVPacket containing the data to be decoded
++ * @return amount of bytes read from the packet on success,
++ * negative error code on failure
++ */
++ int (*decode)(struct AVCodecContext* avctx, struct AVFrame* frame, int* got_frame_ptr,
++ struct AVPacket* avpkt);
++ /**
++ * Decode subtitle data to an AVSubtitle.
++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_DECODE_SUB.
++ *
++ * Apart from that this is like the decode callback.
++ */
++ int (*decode_sub)(struct AVCodecContext* avctx, struct AVSubtitle* sub, int* got_frame_ptr,
++ const struct AVPacket* avpkt);
++ /**
++ * Decode API with decoupled packet/frame dataflow.
++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_RECEIVE_FRAME.
++ *
++ * This function is called to get one output frame. It should call
++ * ff_decode_get_packet() to obtain input data.
++ */
++ int (*receive_frame)(struct AVCodecContext* avctx, struct AVFrame* frame);
++ /**
++ * Encode data to an AVPacket.
++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_ENCODE
++ *
++ * @param avctx codec context
++ * @param[out] avpkt output AVPacket
++ * @param[in] frame AVFrame containing the input to be encoded
++ * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
++ * non-empty packet was returned in avpkt.
++ * @return 0 on success, negative error code on failure
++ */
++ int (*encode)(struct AVCodecContext* avctx, struct AVPacket* avpkt,
++ const struct AVFrame* frame, int* got_packet_ptr);
++ /**
++ * Encode subtitles to a raw buffer.
++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_ENCODE_SUB.
++ */
++ int (*encode_sub)(struct AVCodecContext* avctx, uint8_t* buf, int buf_size,
++ const struct AVSubtitle* sub);
++ /**
++ * Encode API with decoupled frame/packet dataflow.
++ * cb is in this state if cb_type is FF_CODEC_CB_TYPE_RECEIVE_PACKET.
++ *
++ * This function is called to get one output packet.
++ * It should call ff_encode_get_frame() to obtain input data.
++ */
++ int (*receive_packet)(struct AVCodecContext* avctx, struct AVPacket* avpkt);
++ } cb;
++
++ int (*close)(struct AVCodecContext*);
++
++ /**
++ * Flush buffers.
++ * Will be called when seeking
++ */
++ void (*flush)(struct AVCodecContext*);
++
++ /**
++ * Decoding only, a comma-separated list of bitstream filters to apply to
++ * packets before decoding.
++ */
++ const char* bsfs;
++
++ /**
++ * Array of pointers to hardware configurations supported by the codec,
++ * or NULL if no hardware supported. The array is terminated by a NULL
++ * pointer.
++ *
++ * The user can only access this field via avcodec_get_hw_config().
++ */
++ const struct AVCodecHWConfigInternal* const* hw_configs;
++
++ /**
++ * List of supported codec_tags, terminated by FF_CODEC_TAGS_END.
++ */
++ const uint32_t* codec_tags;
++} FFCodec;
++
++static av_always_inline const FFCodec* ffcodec(const AVCodec* codec) {
++ return (const FFCodec*)codec;
++}
++
++} // namespace
++
+ bool DecoderContext::SendPacket(const Packet& packet) {
+ m_temp_frame = std::make_shared();
+ m_got_frame = 0;
+@@ -306,12 +465,8 @@
+ }
+
+ #if defined(FF_API_INTERLACED_FRAME) || LIBAVUTIL_VERSION_MAJOR >= 59
+- if (m_temp_frame->GetFrame()->flags & AV_FRAME_FLAG_INTERLACED)
+- m_temp_frame->GetFrame()->flags &= ~AV_FRAME_FLAG_INTERLACED;
+- else
+- m_temp_frame->GetFrame()->flags |= AV_FRAME_FLAG_INTERLACED;
+-#else
+- m_temp_frame->GetFrame()->interlaced_frame = !m_temp_frame->GetFrame()->interlaced_frame;
++ m_temp_frame->GetFrame()->interlaced_frame =
++ (m_temp_frame->GetFrame()->flags & AV_FRAME_FLAG_INTERLACED) != 0;
+ #endif
+ return std::move(m_temp_frame);
+ }
\ No newline at end of file
diff --git a/pkgs/applications/emulators/yuzu/fix-libavcodec-import.patch b/pkgs/applications/emulators/yuzu/fix-libavcodec-import.patch
new file mode 100644
index 0000000000000..dc1993da4a537
--- /dev/null
+++ b/pkgs/applications/emulators/yuzu/fix-libavcodec-import.patch
@@ -0,0 +1,11 @@
+--- a/src/video_core/host1x/ffmpeg/ffmpeg.h
++++ b/src/video_core/host1x/ffmpeg/ffmpeg.h
+@@ -22,7 +22,7 @@
+ #include
+ #include
+ #ifndef ANDROID
+-#include
++#include
+ #endif
+
+ #if defined(__GNUC__) || defined(__clang__)
\ No newline at end of file
diff --git a/pkgs/applications/emulators/yuzu/fix-sudachi-guest-memory-namespace.patch b/pkgs/applications/emulators/yuzu/fix-sudachi-guest-memory-namespace.patch
new file mode 100644
index 0000000000000..adee893a4cb95
--- /dev/null
+++ b/pkgs/applications/emulators/yuzu/fix-sudachi-guest-memory-namespace.patch
@@ -0,0 +1,15 @@
+--- a/src/core/guest_memory.h
++++ b/src/core/guest_memory.h
+@@ -31,7 +31,6 @@
+ UnsafeReadCachedWrite = UnsafeReadWrite | Cached,
+ };
+
+-namespace {
+ template
+ class GuestMemory {
+ using iterator = T*;
+@@ -221,4 +220,3 @@
+ };
+ } // namespace
+
+-} // namespace Core::Memory
diff --git a/pkgs/applications/emulators/yuzu/fix-sudachi-window.patch b/pkgs/applications/emulators/yuzu/fix-sudachi-window.patch
new file mode 100644
index 0000000000000..4da775417f1b1
--- /dev/null
+++ b/pkgs/applications/emulators/yuzu/fix-sudachi-window.patch
@@ -0,0 +1,24 @@
+--- a/src/sudachi_cmd/emu_window/emu_window_sdl3_vk.cpp
++++ b/src/sudachi_cmd/emu_window/emu_window_sdl3_vk.cpp
+@@ -40,17 +40,17 @@
+ #elif defined(SDL_PLATFORM_LINUX)
+ if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "x11") == 0) {
+ Display* xdisplay = (Display*)SDL_GetPointerProperty(
+- SDL_GetWindowProperties(window), SDL_PROP_WINDOW_X11_DISPLAY_POINTER, NULL);
+- Window xwindow = (Window)SDL_GetNumberProperty(SDL_GetWindowProperties(window),
++ SDL_GetWindowProperties(render_window), SDL_PROP_WINDOW_X11_DISPLAY_POINTER, NULL);
++ Window xwindow = (Window)SDL_GetNumberProperty(SDL_GetWindowProperties(render_window),
+ SDL_PROP_WINDOW_X11_WINDOW_NUMBER, 0);
+ window_info.type = Core::Frontend::WindowSystemType::X11;
+ window_info.display_connection = xdisplay;
+ window_info.render_surface = reinterpret_cast(xwindow);
+ } else if (SDL_strcmp(SDL_GetCurrentVideoDriver(), "wayland") == 0) {
+ struct wl_display* display = (struct wl_display*)SDL_GetPointerProperty(
+- SDL_GetWindowProperties(window), SDL_PROP_WINDOW_WAYLAND_DISPLAY_POINTER, NULL);
++ SDL_GetWindowProperties(render_window), SDL_PROP_WINDOW_WAYLAND_DISPLAY_POINTER, NULL);
+ struct wl_surface* surface = (struct wl_surface*)SDL_GetPointerProperty(
+- SDL_GetWindowProperties(window), SDL_PROP_WINDOW_WAYLAND_SURFACE_POINTER, NULL);
++ SDL_GetWindowProperties(render_window), SDL_PROP_WINDOW_WAYLAND_SURFACE_POINTER, NULL);
+ window_info.type = Core::Frontend::WindowSystemType::Wayland;
+ window_info.display_connection = display;
+ window_info.render_surface = reinterpret_cast(surface);
\ No newline at end of file
diff --git a/pkgs/by-name/to/torzu/fix-udp-client.patch b/pkgs/applications/emulators/yuzu/fix-udp-client.patch
similarity index 100%
rename from pkgs/by-name/to/torzu/fix-udp-client.patch
rename to pkgs/applications/emulators/yuzu/fix-udp-client.patch
diff --git a/pkgs/by-name/to/torzu/fix-udp-protocol.patch b/pkgs/applications/emulators/yuzu/fix-udp-protocol.patch
similarity index 100%
rename from pkgs/by-name/to/torzu/fix-udp-protocol.patch
rename to pkgs/applications/emulators/yuzu/fix-udp-protocol.patch
diff --git a/pkgs/by-name/to/torzu/package.nix b/pkgs/applications/emulators/yuzu/generic.nix
similarity index 74%
rename from pkgs/by-name/to/torzu/package.nix
rename to pkgs/applications/emulators/yuzu/generic.nix
index 8545b55189fef..fe556bb3a429b 100644
--- a/pkgs/by-name/to/torzu/package.nix
+++ b/pkgs/applications/emulators/yuzu/generic.nix
@@ -1,4 +1,12 @@
{
+ forkName,
+ version,
+ source,
+ patches ? [ ],
+ cmakeFlagsPrefix ? "YUZU",
+ udevFileName ? "72-yuzu-input.rules",
+ homepage,
+ mainProgram ? "yuzu",
lib,
stdenv,
SDL2,
@@ -8,9 +16,7 @@
fetchFromGitHub,
cpp-jwt,
cubeb,
- discord-rpc,
enet,
- fetchgit,
fetchurl,
ffmpeg-headless,
fmt,
@@ -20,10 +26,10 @@
lz4,
python3,
unzip,
- nix-update-script,
nlohmann_json,
pkg-config,
qt6,
+ rapidjson,
spirv-tools,
spirv-headers,
vulkan-utility-libraries,
@@ -81,26 +87,11 @@ let
in
stdenv.mkDerivation (finalAttrs: {
- pname = "torzu";
- version = "unstable-2025-02-22";
-
- src = fetchgit {
- url = "https://git.ynh.ovh/liberodark/torzu.git";
- rev = "eaa9c9e3a46eb5099193b11d620ddfe96b6aec83";
- hash = "sha256-KxLRXM8Y+sIW5L9oYMSeK95HRb30zGRRSfil9DO+utU=";
- fetchSubmodules = true;
- };
+ pname = forkName;
+ inherit version;
+ src = source;
- patches = [
- # Remove coroutines from debugger to fix boost::asio compatibility issues
- ./fix-debugger.patch
- # Add explicit cast for CRC checksum value
- ./fix-udp-protocol.patch
- # Use specific boost::asio includes and update to modern io_context
- ./fix-udp-client.patch
- # Updates suppressed diagnostics
- ./fix-aarch64-linux-build.patch
- ];
+ inherit patches;
nativeBuildInputs = [
cmake
@@ -120,7 +111,6 @@ stdenv.mkDerivation (finalAttrs: {
catch2_3
cpp-jwt
cubeb
- discord-rpc
# intentionally omitted: dynarmic - prefer vendored version for compatibility
enet
@@ -137,6 +127,9 @@ stdenv.mkDerivation (finalAttrs: {
qtmultimedia
qtwayland
qtwebengine
+
+ rapidjson
+
# intentionally omitted: renderdoc - heavy, developer only
SDL2
# intentionally omitted: stb - header only libraries, vendor uses git snapshot
@@ -157,30 +150,37 @@ stdenv.mkDerivation (finalAttrs: {
__structuredAttrs = true;
cmakeFlags = [
# actually has a noticeable performance impact
- (lib.cmakeBool "YUZU_ENABLE_LTO" true)
- (lib.cmakeBool "YUZU_TESTS" false)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_ENABLE_LTO" true)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_TESTS" false)
(lib.cmakeBool "ENABLE_QT6" true)
(lib.cmakeBool "ENABLE_QT_TRANSLATION" true)
+ (lib.cmakeBool "ENABLE_LIBUSB" false)
# use system libraries
# NB: "external" here means "from the externals/ directory in the source",
# so "false" means "use system"
- (lib.cmakeBool "YUZU_USE_EXTERNAL_SDL2" false)
- (lib.cmakeBool "YUZU_USE_EXTERNAL_VULKAN_HEADERS" false)
- (lib.cmakeBool "YUZU_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES" false)
- (lib.cmakeBool "YUZU_USE_EXTERNAL_VULKAN_SPIRV_TOOLS" false)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_USE_EXTERNAL_SDL2" false)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_USE_EXTERNAL_VULKAN_HEADERS" false)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_USE_EXTERNAL_VULKAN_UTILITY_LIBRARIES" false)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_USE_EXTERNAL_VULKAN_SPIRV_TOOLS" false)
+
+ # Sudachi specific flags
+ (lib.cmakeBool "${cmakeFlagsPrefix}_USE_EXTERNAL_SDL3" false)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_USE_BUNDLED_SDL3" false)
+ (lib.cmakeBool "USE_SDL3_FROM_EXTERNALS" false)
+ (lib.cmakeFeature "CMAKE_CXX_FLAGS" "-Wno-unused-variable")
# don't check for missing submodules
- (lib.cmakeBool "YUZU_CHECK_SUBMODULES" false)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_CHECK_SUBMODULES" false)
# enable some optional features
- (lib.cmakeBool "YUZU_USE_QT_WEB_ENGINE" true)
- (lib.cmakeBool "YUZU_USE_QT_MULTIMEDIA" true)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_USE_QT_WEB_ENGINE" true)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_USE_QT_MULTIMEDIA" true)
(lib.cmakeBool "USE_DISCORD_PRESENCE" true)
# We dont want to bother upstream with potentially outdated compat reports
- (lib.cmakeBool "YUZU_ENABLE_COMPATIBILITY_REPORTING" false)
+ (lib.cmakeBool "${cmakeFlagsPrefix}_ENABLE_COMPATIBILITY_REPORTING" false)
(lib.cmakeBool "ENABLE_COMPATIBILITY_LIST_DOWNLOAD" false) # We provide this deterministically
(lib.cmakeFeature "TITLE_BAR_FORMAT_IDLE" "${finalAttrs.pname} | ${finalAttrs.version} (nixpkgs) {}")
@@ -209,15 +209,18 @@ stdenv.mkDerivation (finalAttrs: {
'';
postInstall = "
- install -Dm444 $src/dist/72-yuzu-input.rules $out/lib/udev/rules.d/72-yuzu-input.rules
+ install -Dm444 $src/dist/${udevFileName} $out/lib/udev/rules.d/${udevFileName}
";
meta = {
description = "Fork of yuzu, an open-source Nintendo Switch emulator";
- homepage = "https://notabug.org/litucks/torzu";
- mainProgram = "yuzu";
+ inherit homepage;
+ inherit mainProgram;
platforms = lib.platforms.linux;
- maintainers = with lib.maintainers; [ liberodark ];
+ maintainers = with lib.maintainers; [
+ liberodark
+ nyanloutre
+ ];
license = with lib.licenses; [
gpl3Plus
# Icons
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index af08305faa5c1..bd6c66b2ece9a 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -16859,6 +16859,13 @@ with pkgs;
yamale = with python3Packages; toPythonApplication yamale;
+ inherit (callPackage ../applications/emulators/yuzu { })
+ citron-emu
+ torzu
+ sudachi
+ eden
+ ;
+
zap-chip-gui = zap-chip.override { withGui = true; };
myEnvFun = callPackage ../misc/my-env {