about summary refs log tree commit diff
path: root/nixpkgs/pkgs/applications/emulators
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2022-12-06 19:57:55 +0000
committerAlyssa Ross <hi@alyssa.is>2023-02-08 13:48:30 +0000
commitbf3aadfdd39aa197e18bade671fab6726349ffa4 (patch)
tree698567af766ed441d757b57a7b21e68d4a342a2b /nixpkgs/pkgs/applications/emulators
parentf4afc5a01d9539ce09e47494e679c51f80723d07 (diff)
parent99665eb45f58d959d2cb9e49ddb960c79d596f33 (diff)
downloadnixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.gz
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.bz2
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.lz
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.xz
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.zst
nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.zip
Merge commit '99665eb45f58d959d2cb9e49ddb960c79d596f33'
Diffstat (limited to 'nixpkgs/pkgs/applications/emulators')
-rw-r--r--nixpkgs/pkgs/applications/emulators/ares/default.nix84
-rw-r--r--nixpkgs/pkgs/applications/emulators/atari800/default.nix4
-rw-r--r--nixpkgs/pkgs/applications/emulators/basiliskii/default.nix28
-rw-r--r--nixpkgs/pkgs/applications/emulators/basiliskii/remove-redhat-6-workaround-for-scsi-sg.h.patch10
-rw-r--r--nixpkgs/pkgs/applications/emulators/bochs/default.nix8
-rw-r--r--nixpkgs/pkgs/applications/emulators/box64/default.nix66
-rw-r--r--nixpkgs/pkgs/applications/emulators/bsnes/ares/default.nix75
-rw-r--r--nixpkgs/pkgs/applications/emulators/bsnes/ares/dont-rebuild-on-install.patch22
-rw-r--r--nixpkgs/pkgs/applications/emulators/bsnes/ares/fix-ruby.patch (renamed from nixpkgs/pkgs/applications/emulators/ares/fix-ruby.patch)0
-rw-r--r--nixpkgs/pkgs/applications/emulators/bsnes/bsnes-hd/default.nix (renamed from nixpkgs/pkgs/applications/emulators/bsnes-hd/default.nix)20
-rw-r--r--nixpkgs/pkgs/applications/emulators/bsnes/bsnes-hd/macos-copy-app-to-prefix.patch (renamed from nixpkgs/pkgs/applications/emulators/bsnes-hd/macos-copy-app-to-prefix.patch)0
-rw-r--r--nixpkgs/pkgs/applications/emulators/bsnes/bsnes-hd/macos-replace-sips-with-png2icns.patch (renamed from nixpkgs/pkgs/applications/emulators/bsnes-hd/macos-replace-sips-with-png2icns.patch)0
-rw-r--r--nixpkgs/pkgs/applications/emulators/bsnes/higan/001-include-cmath.patch (renamed from nixpkgs/pkgs/applications/emulators/higan/001-include-cmath.patch)0
-rw-r--r--nixpkgs/pkgs/applications/emulators/bsnes/higan/002-sips-to-png2icns.patch (renamed from nixpkgs/pkgs/applications/emulators/higan/002-sips-to-png2icns.patch)0
-rw-r--r--nixpkgs/pkgs/applications/emulators/bsnes/higan/default.nix (renamed from nixpkgs/pkgs/applications/emulators/higan/default.nix)0
-rw-r--r--nixpkgs/pkgs/applications/emulators/ccemux/default.nix1
-rw-r--r--nixpkgs/pkgs/applications/emulators/citra/default.nix120
-rw-r--r--nixpkgs/pkgs/applications/emulators/citra/generic.nix108
-rwxr-xr-xnixpkgs/pkgs/applications/emulators/citra/update.sh84
-rw-r--r--nixpkgs/pkgs/applications/emulators/commanderx16/emulator.nix26
-rw-r--r--nixpkgs/pkgs/applications/emulators/commanderx16/rom.nix31
-rw-r--r--nixpkgs/pkgs/applications/emulators/craftos-pc/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/emulators/dgen-sdl/default.nix24
-rw-r--r--nixpkgs/pkgs/applications/emulators/dolphin-emu/master.nix18
-rw-r--r--nixpkgs/pkgs/applications/emulators/dolphin-emu/primehack.nix12
-rw-r--r--nixpkgs/pkgs/applications/emulators/dosbox/default.nix6
-rw-r--r--nixpkgs/pkgs/applications/emulators/duckstation/default.nix5
-rw-r--r--nixpkgs/pkgs/applications/emulators/dynamips/default.nix4
-rw-r--r--nixpkgs/pkgs/applications/emulators/emulationstation/default.nix4
-rw-r--r--nixpkgs/pkgs/applications/emulators/epsxe/default.nix52
-rw-r--r--nixpkgs/pkgs/applications/emulators/fakenes/build.patch84
-rw-r--r--nixpkgs/pkgs/applications/emulators/fakenes/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/emulators/flycast/default.nix4
-rw-r--r--nixpkgs/pkgs/applications/emulators/goldberg-emu/default.nix1
-rw-r--r--nixpkgs/pkgs/applications/emulators/kega-fusion/default.nix1
-rw-r--r--nixpkgs/pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patch37
-rw-r--r--nixpkgs/pkgs/applications/emulators/mame/default.nix79
-rw-r--r--nixpkgs/pkgs/applications/emulators/mupen64plus/default.nix15
-rw-r--r--nixpkgs/pkgs/applications/emulators/np2kai/default.nix3
-rw-r--r--nixpkgs/pkgs/applications/emulators/openmsx/default.nix14
-rw-r--r--nixpkgs/pkgs/applications/emulators/pcsx2/default.nix31
-rw-r--r--nixpkgs/pkgs/applications/emulators/pcsxr/default.nix9
-rw-r--r--nixpkgs/pkgs/applications/emulators/ppsspp/default.nix155
-rw-r--r--nixpkgs/pkgs/applications/emulators/proton-caller/default.nix7
-rw-r--r--nixpkgs/pkgs/applications/emulators/qmc2/default.nix41
-rw-r--r--nixpkgs/pkgs/applications/emulators/resim/default.nix5
-rw-r--r--nixpkgs/pkgs/applications/emulators/retroarch/cores.nix68
-rw-r--r--nixpkgs/pkgs/applications/emulators/retroarch/default.nix42
-rw-r--r--nixpkgs/pkgs/applications/emulators/retroarch/disable-menu-show-core-updater.patch13
-rw-r--r--nixpkgs/pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch (renamed from nixpkgs/pkgs/applications/emulators/retroarch/0001-Disable-menu_show_core_updater.patch)2
-rw-r--r--nixpkgs/pkgs/applications/emulators/retroarch/hashes.json295
-rwxr-xr-xnixpkgs/pkgs/applications/emulators/retroarch/update_cores.py (renamed from nixpkgs/pkgs/applications/emulators/retroarch/update.py)21
-rw-r--r--nixpkgs/pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch (renamed from nixpkgs/pkgs/applications/emulators/retroarch/0002-Use-fixed-paths-on-libretro_info_path.patch)38
-rw-r--r--nixpkgs/pkgs/applications/emulators/retroarch/wrapper.nix16
-rw-r--r--nixpkgs/pkgs/applications/emulators/retrofe/default.nix18
-rw-r--r--nixpkgs/pkgs/applications/emulators/retrofe/include-paths.patch11
-rw-r--r--nixpkgs/pkgs/applications/emulators/ripes/default.nix50
-rw-r--r--nixpkgs/pkgs/applications/emulators/rpcs3/default.nix8
-rw-r--r--nixpkgs/pkgs/applications/emulators/ryujinx/default.nix45
-rw-r--r--nixpkgs/pkgs/applications/emulators/ryujinx/deps.nix125
-rwxr-xr-xnixpkgs/pkgs/applications/emulators/ryujinx/updater.sh103
-rw-r--r--nixpkgs/pkgs/applications/emulators/simh/default.nix5
-rw-r--r--nixpkgs/pkgs/applications/emulators/snes9x-gtk/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/emulators/snes9x/default.nix130
-rw-r--r--nixpkgs/pkgs/applications/emulators/stella/default.nix4
-rw-r--r--nixpkgs/pkgs/applications/emulators/tinyemu/default.nix7
-rw-r--r--nixpkgs/pkgs/applications/emulators/uae/default.nix4
-rw-r--r--nixpkgs/pkgs/applications/emulators/wibo/default.nix34
-rw-r--r--nixpkgs/pkgs/applications/emulators/wine/base.nix8
-rw-r--r--nixpkgs/pkgs/applications/emulators/wine/packages.nix2
-rw-r--r--nixpkgs/pkgs/applications/emulators/wine/sources.nix22
-rw-r--r--nixpkgs/pkgs/applications/emulators/wine/vkd3d.nix4
-rw-r--r--nixpkgs/pkgs/applications/emulators/yuzu/base.nix86
-rw-r--r--nixpkgs/pkgs/applications/emulators/yuzu/default.nix37
-rw-r--r--nixpkgs/pkgs/applications/emulators/yuzu/generic.nix167
-rwxr-xr-xnixpkgs/pkgs/applications/emulators/yuzu/update.sh84
-rw-r--r--nixpkgs/pkgs/applications/emulators/yuzu/yuzu-free-icons.patch1177
-rw-r--r--nixpkgs/pkgs/applications/emulators/zesarux/default.nix8
-rw-r--r--nixpkgs/pkgs/applications/emulators/zsnes/default.nix4
79 files changed, 3005 insertions, 1044 deletions
diff --git a/nixpkgs/pkgs/applications/emulators/ares/default.nix b/nixpkgs/pkgs/applications/emulators/ares/default.nix
deleted file mode 100644
index 33a7858455d6..000000000000
--- a/nixpkgs/pkgs/applications/emulators/ares/default.nix
+++ /dev/null
@@ -1,84 +0,0 @@
-{ lib
-, stdenv
-, fetchFromGitHub
-, pkg-config
-, alsa-lib
-, gtksourceview3
-, libXv
-, openal
-, libpulseaudio
-, libao
-, udev
-, SDL2
-}:
-
-stdenv.mkDerivation rec {
-  pname = "ares";
-  version = "126";
-
-  src = fetchFromGitHub {
-    owner = "ares-emulator";
-    repo = "ares";
-    rev = "v${version}";
-    sha256 = "1rj4vmz8lvpmfc6wni7222kagnw9f6jda9rcb6qky2kpizlp2d24";
-  };
-
-  parallel-rdp = fetchFromGitHub {
-    owner = "Themaister";
-    repo = "parallel-rdp-standalone";
-    rev = "0dcebe11ee79288441e40e145c8f340d81f52316";
-    sha256 = "1avp4wyfkhk5yfjqx5w3jbqghn2mq5la7k9248kjmnp9n9lip6w9";
-  };
-
-  patches = [
-    ./fix-ruby.patch
-  ];
-
-  enableParallelBuilding = true;
-  dontConfigure = true;
-
-  nativeBuildInputs = [
-    pkg-config
-  ];
-
-  buildInputs = [
-    alsa-lib
-    gtksourceview3
-    libXv
-    openal
-    libpulseaudio
-    libao
-    udev
-    SDL2
-  ];
-
-  buildPhase = ''
-    runHook preBuild
-
-    rm -rf ares/n64/vulkan/parallel-rdp
-    ln -sf ${parallel-rdp} ares/n64/vulkan/parallel-rdp
-    make -C desktop-ui -j $NIX_BUILD_CORES openmp=true vulkan=true local=false hiro=gtk3
-
-    runHook postBuild
-  '';
-
-  installPhase = ''
-    runHook preInstall
-
-    mkdir -p $out/{bin,share/{applications,ares,pixmaps}}
-    cp desktop-ui/out/ares $out/bin
-    cp desktop-ui/resource/ares.desktop $out/share/applications
-    cp desktop-ui/resource/{ares{.ico,.png},font.png} $out/share/pixmaps
-    cp -r ares/{Shaders,System} $out/share/ares
-
-    runHook postInstall
-  '';
-
-  meta = with lib; {
-    homepage = "https://ares.dev";
-    description = "Open-source multi-system emulator with a focus on accuracy and preservation";
-    license = licenses.isc;
-    maintainers = with maintainers; [ Madouura ];
-    platforms = platforms.all;
-  };
-}
diff --git a/nixpkgs/pkgs/applications/emulators/atari800/default.nix b/nixpkgs/pkgs/applications/emulators/atari800/default.nix
index 37e0d83f1406..c1f685827047 100644
--- a/nixpkgs/pkgs/applications/emulators/atari800/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/atari800/default.nix
@@ -4,13 +4,13 @@
 with lib;
 stdenv.mkDerivation rec {
   pname = "atari800";
-  version = "4.2.0";
+  version = "5.0.0";
 
   src = fetchFromGitHub {
     owner = "atari800";
     repo = "atari800";
     rev = "ATARI800_${replaceChars ["."] ["_"] version}";
-    sha256 = "15l08clqqayi9izrgsz9achan6gl4x57wqsc8mad3yn0xayzz3qy";
+    sha256 = "sha256-+eJXhqPyU0GhmzF7DbteTXzEnn5klCor9Io/UgXQfQg=";
   };
 
   nativeBuildInputs = [ autoreconfHook ];
diff --git a/nixpkgs/pkgs/applications/emulators/basiliskii/default.nix b/nixpkgs/pkgs/applications/emulators/basiliskii/default.nix
new file mode 100644
index 000000000000..ec7076db4678
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/basiliskii/default.nix
@@ -0,0 +1,28 @@
+{ stdenv, lib, fetchFromGitHub, autoconf, automake, pkg-config, SDL2, gtk2 }:
+stdenv.mkDerivation {
+  pname = "basiliskii";
+  version = "unstable-2022-04-05";
+
+  src = fetchFromGitHub {
+    owner = "kanjitalk755";
+    repo = "macemu";
+    rev = "d4baa318e49a29d7ea5fc71a637191d6c470546f";
+    sha256 = "jBKTC2fIPJ6mSkMABNxcd2ujXJ+duCXw291iz5ZmiVg=";
+  };
+  sourceRoot = "source/BasiliskII/src/Unix";
+  patches = [ ./remove-redhat-6-workaround-for-scsi-sg.h.patch ];
+  nativeBuildInputs = [ autoconf automake pkg-config ];
+  buildInputs = [ SDL2 gtk2 ];
+  preConfigure = ''
+    NO_CONFIGURE=1 ./autogen.sh
+  '';
+  configureFlags = [ "--enable-sdl-video" "--enable-sdl-audio" "--with-bincue" ];
+
+  meta = with lib; {
+    description = "68k Macintosh emulator";
+    homepage = "https://basilisk.cebix.net/";
+    license = licenses.gpl2;
+    maintainers = with maintainers; [ quag ];
+    platforms = platforms.linux;
+  };
+}
diff --git a/nixpkgs/pkgs/applications/emulators/basiliskii/remove-redhat-6-workaround-for-scsi-sg.h.patch b/nixpkgs/pkgs/applications/emulators/basiliskii/remove-redhat-6-workaround-for-scsi-sg.h.patch
new file mode 100644
index 000000000000..8535d6227c29
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/basiliskii/remove-redhat-6-workaround-for-scsi-sg.h.patch
@@ -0,0 +1,10 @@
+diff --git a/Linux/scsi_linux.cpp b/Linux/scsi_linux.cpp
+--- a/Linux/scsi_linux.cpp
++++ b/Linux/scsi_linux.cpp
+@@ -22,5 +22,5 @@
+ #include <sys/ioctl.h>
+ #include <linux/param.h>
+-#include <linux/../scsi/sg.h>	// workaround for broken RedHat 6.0 /usr/include/scsi
++#include <scsi/sg.h>
+ #include <unistd.h>
+ #include <errno.h>
diff --git a/nixpkgs/pkgs/applications/emulators/bochs/default.nix b/nixpkgs/pkgs/applications/emulators/bochs/default.nix
index 1f02219c8314..8b7cc9fad067 100644
--- a/nixpkgs/pkgs/applications/emulators/bochs/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/bochs/default.nix
@@ -18,12 +18,12 @@
 , wxGTK
 }:
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "bochs";
   version = "2.7";
 
   src = fetchurl {
-    url = "mirror://sourceforge/project/${pname}/${pname}/${version}/${pname}-${version}.tar.gz";
+    url = "mirror://sourceforge/project/${finalAttrs.pname}/${finalAttrs.pname}/${finalAttrs.version}/${finalAttrs.pname}-${finalAttrs.version}.tar.gz";
     hash = "sha256-oBCrG/3HKsWgjS4kEs1HHA/r1mrx2TSbwNeWh53lsXo=";
   };
 
@@ -33,6 +33,7 @@ stdenv.mkDerivation rec {
     libtool
     pkg-config
   ];
+
   buildInputs = [
     SDL2
     curl
@@ -130,7 +131,8 @@ stdenv.mkDerivation rec {
     license = licenses.lgpl2Plus;
     maintainers = with maintainers; [ AndersonTorres ];
     platforms = platforms.unix;
+    broken = stdenv.isDarwin;
   };
-}
+})
 # TODO: a better way to organize the options
 # TODO: docbook (docbook-tools from RedHat mirrors should help)
diff --git a/nixpkgs/pkgs/applications/emulators/box64/default.nix b/nixpkgs/pkgs/applications/emulators/box64/default.nix
new file mode 100644
index 000000000000..e383333c4208
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/box64/default.nix
@@ -0,0 +1,66 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, python3
+}:
+
+stdenv.mkDerivation rec {
+  pname = "box64";
+  version = "0.1.8";
+
+  src = fetchFromGitHub {
+    owner = "ptitSeb";
+    repo = pname;
+    rev = "v${version}";
+    hash = "sha256-6k8Enbafnj19ATtgmw8W7LxtRpM3Ousj1bpZbbtq8TM=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    python3
+  ];
+
+  cmakeFlags = [
+    "-DNOGIT=1"
+  ] ++ (
+    if stdenv.hostPlatform.system == "aarch64-linux" then
+      [
+        "-DARM_DYNAREC=ON"
+      ]
+    else [
+      "-DLD80BITS=1"
+      "-DNOALIGN=1"
+    ]
+  );
+
+  installPhase = ''
+    runHook preInstall
+    install -Dm 0755 box64 "$out/bin/box64"
+    runHook postInstall
+  '';
+
+  doCheck = true;
+
+  checkPhase = ''
+    runHook preCheck
+    ctest
+    runHook postCheck
+  '';
+
+  doInstallCheck = true;
+
+  installCheckPhase = ''
+    runHook preInstallCheck
+    $out/bin/box64 -v
+    runHook postInstallCheck
+  '';
+
+  meta = with lib; {
+    homepage = "https://box86.org/";
+    description = "Lets you run x86_64 Linux programs on non-x86_64 Linux systems";
+    license = licenses.mit;
+    maintainers = with maintainers; [ gador ];
+    platforms = [ "x86_64-linux" "aarch64-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/emulators/bsnes/ares/default.nix b/nixpkgs/pkgs/applications/emulators/bsnes/ares/default.nix
new file mode 100644
index 000000000000..9935e51740a1
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/bsnes/ares/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, pkg-config
+, wrapGAppsHook
+, SDL2
+, alsa-lib
+, gtk3
+, gtksourceview3
+, libGL
+, libGLU
+, libX11
+, libXv
+, libao
+, libpulseaudio
+, openal
+, udev
+}:
+
+stdenv.mkDerivation rec {
+  pname = "ares";
+  version = "129";
+
+  src = fetchFromGitHub {
+    owner = "ares-emulator";
+    repo = "ares";
+    rev = "v${version}";
+    hash = "sha256-prfvoGtbnsl/1ahx98jBOgT64W566GoUtE8rIOF7lYc=";
+  };
+
+  patches = [
+    ./dont-rebuild-on-install.patch
+    ./fix-ruby.patch
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    SDL2
+    alsa-lib
+    gtk3
+    gtksourceview3
+    libGL
+    libGLU
+    libX11
+    libXv
+    libao
+    libpulseaudio
+    openal
+    udev
+  ];
+
+  enableParallelBuilding = true;
+
+  makeFlags = [
+    "hiro=gtk3"
+    "local=false"
+    "openmp=true"
+    "prefix=$(out)"
+    "-C desktop-ui"
+  ];
+
+  meta = with lib; {
+    homepage = "https://ares.dev";
+    description = "Open-source multi-system emulator with a focus on accuracy and preservation";
+    license = licenses.isc;
+    maintainers = with maintainers; [ Madouura AndersonTorres ];
+    platforms = platforms.linux;
+  };
+}
+# TODO: select between Qt, GTK2 and GTK3
+# TODO: support Darwin
diff --git a/nixpkgs/pkgs/applications/emulators/bsnes/ares/dont-rebuild-on-install.patch b/nixpkgs/pkgs/applications/emulators/bsnes/ares/dont-rebuild-on-install.patch
new file mode 100644
index 000000000000..7b6bbfc21bdc
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/bsnes/ares/dont-rebuild-on-install.patch
@@ -0,0 +1,22 @@
+From 65cc7647110edd768e7baa7991143014316e655a Mon Sep 17 00:00:00 2001
+From: Madoura <93990818+Madouura@users.noreply.github.com>
+Date: Mon, 9 May 2022 10:17:06 -0500
+Subject: [PATCH] Update GNUmakefile
+
+---
+ desktop-ui/GNUmakefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/desktop-ui/GNUmakefile b/desktop-ui/GNUmakefile
+index 8e27b11d3..0bee561fb 100644
+--- a/desktop-ui/GNUmakefile
++++ b/desktop-ui/GNUmakefile
+@@ -106,7 +106,7 @@ endif
+ 	$(call rdelete,$(object.path))
+ 	$(call rdelete,$(output.path))
+ 
+-install: all
++install:
+ ifeq ($(platform),windows)
+ 	$(call mkdir,$(prefix)/$(name)/)
+ else ifeq ($(shell id -un),root)
diff --git a/nixpkgs/pkgs/applications/emulators/ares/fix-ruby.patch b/nixpkgs/pkgs/applications/emulators/bsnes/ares/fix-ruby.patch
index 01bd57ebaadd..01bd57ebaadd 100644
--- a/nixpkgs/pkgs/applications/emulators/ares/fix-ruby.patch
+++ b/nixpkgs/pkgs/applications/emulators/bsnes/ares/fix-ruby.patch
diff --git a/nixpkgs/pkgs/applications/emulators/bsnes-hd/default.nix b/nixpkgs/pkgs/applications/emulators/bsnes/bsnes-hd/default.nix
index 6494185958c2..641018969949 100644
--- a/nixpkgs/pkgs/applications/emulators/bsnes-hd/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/bsnes/bsnes-hd/default.nix
@@ -1,9 +1,10 @@
 { lib, stdenv, fetchFromGitHub
 , pkg-config
+, wrapGAppsHook
 , libX11, libXv
 , udev
 , SDL2
-, gtk2, gtksourceview
+, gtk3, gtksourceview3
 , alsa-lib, libao, openal, libpulseaudio
 , libicns, Cocoa, OpenAL
 }:
@@ -34,16 +35,23 @@ stdenv.mkDerivation {
     ./macos-copy-app-to-prefix.patch
   ];
 
-  nativeBuildInputs = [ pkg-config ]
+  nativeBuildInputs = [ pkg-config wrapGAppsHook ]
     ++ lib.optionals stdenv.isDarwin [ libicns ];
 
   buildInputs = [ SDL2 libao ]
-    ++ lib.optionals stdenv.isLinux [ libX11 libXv udev gtk2 gtksourceview alsa-lib openal libpulseaudio ]
+    ++ lib.optionals stdenv.isLinux [ libX11 libXv udev gtk3 gtksourceview3 alsa-lib openal libpulseaudio ]
     ++ lib.optionals stdenv.isDarwin [ Cocoa OpenAL ];
 
   enableParallelBuilding = true;
 
-  makeFlags = [ "-C" "bsnes" "prefix=$(out)" ];
+  makeFlags = [ "-C" "bsnes" "hiro=gtk3" "prefix=$(out)" ];
+
+  # https://github.com/bsnes-emu/bsnes/issues/107
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix GDK_BACKEND : x11
+    )
+  '';
 
   meta = with lib; {
     description = "A fork of bsnes that adds HD video features";
@@ -51,5 +59,9 @@ stdenv.mkDerivation {
     license = licenses.gpl3Only;
     maintainers = with maintainers; [ stevebob ];
     platforms = platforms.unix;
+    # ../nall/traits.hpp:19:14: error: no member named 'is_floating_point_v' in namespace 'std'; did you mean 'is_floating_point'?
+    #   using std::is_floating_point_v;
+    broken = (stdenv.isDarwin && stdenv.isx86_64);
+    mainProgram = "bsnes";
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/bsnes-hd/macos-copy-app-to-prefix.patch b/nixpkgs/pkgs/applications/emulators/bsnes/bsnes-hd/macos-copy-app-to-prefix.patch
index d38efbc99bce..d38efbc99bce 100644
--- a/nixpkgs/pkgs/applications/emulators/bsnes-hd/macos-copy-app-to-prefix.patch
+++ b/nixpkgs/pkgs/applications/emulators/bsnes/bsnes-hd/macos-copy-app-to-prefix.patch
diff --git a/nixpkgs/pkgs/applications/emulators/bsnes-hd/macos-replace-sips-with-png2icns.patch b/nixpkgs/pkgs/applications/emulators/bsnes/bsnes-hd/macos-replace-sips-with-png2icns.patch
index 85adb33e3ab4..85adb33e3ab4 100644
--- a/nixpkgs/pkgs/applications/emulators/bsnes-hd/macos-replace-sips-with-png2icns.patch
+++ b/nixpkgs/pkgs/applications/emulators/bsnes/bsnes-hd/macos-replace-sips-with-png2icns.patch
diff --git a/nixpkgs/pkgs/applications/emulators/higan/001-include-cmath.patch b/nixpkgs/pkgs/applications/emulators/bsnes/higan/001-include-cmath.patch
index 67644e656aa7..67644e656aa7 100644
--- a/nixpkgs/pkgs/applications/emulators/higan/001-include-cmath.patch
+++ b/nixpkgs/pkgs/applications/emulators/bsnes/higan/001-include-cmath.patch
diff --git a/nixpkgs/pkgs/applications/emulators/higan/002-sips-to-png2icns.patch b/nixpkgs/pkgs/applications/emulators/bsnes/higan/002-sips-to-png2icns.patch
index 0585c8a38c72..0585c8a38c72 100644
--- a/nixpkgs/pkgs/applications/emulators/higan/002-sips-to-png2icns.patch
+++ b/nixpkgs/pkgs/applications/emulators/bsnes/higan/002-sips-to-png2icns.patch
diff --git a/nixpkgs/pkgs/applications/emulators/higan/default.nix b/nixpkgs/pkgs/applications/emulators/bsnes/higan/default.nix
index c5f38a040c1f..c5f38a040c1f 100644
--- a/nixpkgs/pkgs/applications/emulators/higan/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/bsnes/higan/default.nix
diff --git a/nixpkgs/pkgs/applications/emulators/ccemux/default.nix b/nixpkgs/pkgs/applications/emulators/ccemux/default.nix
index 8b7b1c32628a..742b3dc88ae2 100644
--- a/nixpkgs/pkgs/applications/emulators/ccemux/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/ccemux/default.nix
@@ -61,6 +61,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     description = "A modular ComputerCraft emulator";
     homepage = "https://github.com/CCEmuX/CCEmuX";
+    sourceProvenance = with sourceTypes; [ binaryBytecode ];
     license = licenses.mit;
     maintainers = with maintainers; [ CrazedProgrammer ];
   };
diff --git a/nixpkgs/pkgs/applications/emulators/citra/default.nix b/nixpkgs/pkgs/applications/emulators/citra/default.nix
index 92d0f5b1d364..8b9f2cfd0690 100644
--- a/nixpkgs/pkgs/applications/emulators/citra/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/citra/default.nix
@@ -1,91 +1,45 @@
-{ lib
-, stdenv
+{ branch
+, libsForQt5
 , fetchFromGitHub
-, cmake
-, wrapQtAppsHook
-, boost17x
-, pkg-config
-, libusb1
-, zstd
-, libressl
-, enableSdl2 ? true, SDL2
-, enableQt ? true, qtbase, qtmultimedia
-, enableQtTranslation ? enableQt, qttools
-, enableWebService ? true
-, enableCubeb ? true, libpulseaudio
-, enableFfmpegAudioDecoder ? true
-, enableFfmpegVideoDumper ? true
-, ffmpeg
-, useDiscordRichPresence ? true, rapidjson
-, enableFdk ? false, fdk_aac
+, fetchurl
 }:
-assert lib.assertMsg (!enableFfmpegAudioDecoder || !enableFdk) "Can't enable both enableFfmpegAudioDecoder and enableFdk";
 
-stdenv.mkDerivation {
-  pname = "citra";
-  version = "2021-11-01";
-
-  src = fetchFromGitHub {
-    owner = "citra-emu";
-    repo = "citra";
-    rev = "5a7d80172dd115ad9bc6e8e85cee6ed9511c48d0";
-    sha256 = "sha256-vy2JMizBsnRK9NBEZ1dxT7fP/HFhOZSsC+5P+Dzi27s=";
-    fetchSubmodules = true;
+let
+  # Fetched from https://api.citra-emu.org/gamedb, last updated 2022-05-02
+  # Please make sure to update this when updating citra!
+  compat-list = fetchurl {
+    name = "citra-compat-list";
+    url = "https://web.archive.org/web/20220502114622/https://api.citra-emu.org/gamedb/";
+    sha256 = "sha256-blIlaYaUQjw7Azgg+Dd7ZPEQf+ddZMO++Yxinwe+VG0=";
+  };
+in {
+  nightly = libsForQt5.callPackage ./generic.nix rec {
+    pname = "citra-nightly";
+    version = "1765";
+
+    src = fetchFromGitHub {
+      owner = "citra-emu";
+      repo = "citra-nightly";
+      rev = "nightly-${version}";
+      sha256 = "0d3dfh63cmsy5idbypdz3ibydmb4a35sfv7qmxxlcpc390pp9cvq";
+      fetchSubmodules = true;
+    };
+
+    inherit branch compat-list;
   };
 
-  nativeBuildInputs = [
-    cmake
-    pkg-config
-  ]
-  ++ lib.optionals enableQt [ wrapQtAppsHook ];
-
-  buildInputs = [
-    boost17x
-    libusb1
-  ]
-  ++ lib.optionals enableSdl2 [ SDL2 ]
-  ++ lib.optionals enableQt [ qtbase qtmultimedia ]
-  ++ lib.optionals enableQtTranslation [ qttools ]
-  ++ lib.optionals enableCubeb [ libpulseaudio ]
-  ++ lib.optionals (enableFfmpegAudioDecoder || enableFfmpegVideoDumper) [ ffmpeg ]
-  ++ lib.optionals useDiscordRichPresence [ rapidjson ]
-  ++ lib.optionals enableFdk [ fdk_aac ];
-
-  cmakeFlags = [
-    "-DUSE_SYSTEM_BOOST=ON"
-  ]
-  ++ lib.optionals (!enableSdl2) [ "-DENABLE_SDL2=OFF" ]
-  ++ lib.optionals (!enableQt) [ "-DENABLE_QT=OFF" ]
-  ++ lib.optionals enableQtTranslation [ "-DENABLE_QT_TRANSLATION=ON" ]
-  ++ lib.optionals (!enableWebService) [ "-DENABLE_WEB_SERVICE=OFF" ]
-  ++ lib.optionals (!enableCubeb) [ "-DENABLE_CUBEB=OFF" ]
-  ++ lib.optionals enableFfmpegAudioDecoder [ "-DENABLE_FFMPEG_AUDIO_DECODER=ON"]
-  ++ lib.optionals enableFfmpegVideoDumper [ "-DENABLE_FFMPEG_VIDEO_DUMPER=ON" ]
-  ++ lib.optionals useDiscordRichPresence [ "-DUSE_DISCORD_PRESENCE=ON" ]
-  ++ lib.optionals enableFdk [ "-DENABLE_FDK=ON" ];
-
-  postPatch = ''
-    # We already know the submodules are present
-    substituteInPlace CMakeLists.txt \
-      --replace "check_submodules_present()" ""
-
-    # Devendoring
-    rm -rf externals/zstd externals/libressl
-    cp -r ${zstd.src} externals/zstd
-    tar xf ${libressl.src} -C externals/
-    mv externals/${libressl.name} externals/libressl
-    chmod -R a+w externals/zstd
-  '';
+  canary = libsForQt5.callPackage ./generic.nix rec {
+    pname = "citra-canary";
+    version = "2146";
 
-  # Todo: cubeb audio backend (the default one) doesn't work on the SDL interface.
-  # This seems to be a problem with libpulseaudio, other applications have similar problems (e.g Duckstation).
-  # Note that the two interfaces have two separate configuration files.
+    src = fetchFromGitHub {
+      owner = "citra-emu";
+      repo = "citra-canary";
+      rev = "canary-${version}";
+      sha256 = "1wnym0nklngimf5gaaa2703nz4g5iy572wlgp88h67rrh9b4f04r";
+      fetchSubmodules = true;
+    };
 
-  meta = with lib; {
-    homepage = "https://citra-emu.org";
-    description = "An open-source emulator for the Nintendo 3DS";
-    license = licenses.gpl2;
-    maintainers = with maintainers; [ abbradar ];
-    platforms = platforms.linux;
+    inherit branch compat-list;
   };
-}
+}.${branch}
diff --git a/nixpkgs/pkgs/applications/emulators/citra/generic.nix b/nixpkgs/pkgs/applications/emulators/citra/generic.nix
new file mode 100644
index 000000000000..ee34286c3d15
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/citra/generic.nix
@@ -0,0 +1,108 @@
+{ pname
+, version
+, src
+, branch
+, compat-list
+
+, lib
+, stdenv
+, fetchFromGitHub
+, cmake
+, boost17x
+, pkg-config
+, libusb1
+, zstd
+, libressl
+, enableSdl2 ? true, SDL2
+, enableQt ? true, qtbase, qtmultimedia, wrapQtAppsHook
+, enableQtTranslation ? enableQt, qttools
+, enableWebService ? true
+, enableCubeb ? true, libpulseaudio
+, enableFfmpegAudioDecoder ? true
+, enableFfmpegVideoDumper ? true
+, ffmpeg
+, useDiscordRichPresence ? true, rapidjson
+, enableFdk ? false, fdk_aac
+}:
+assert lib.assertMsg (!enableFfmpegAudioDecoder || !enableFdk) "Can't enable both enableFfmpegAudioDecoder and enableFdk";
+
+stdenv.mkDerivation rec {
+  inherit pname version src;
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+  ] ++ lib.optionals enableQt [ wrapQtAppsHook ];
+
+  buildInputs = [
+    boost17x
+    libusb1
+  ] ++ lib.optionals enableQt [ qtbase qtmultimedia ]
+    ++ lib.optional enableSdl2 SDL2
+    ++ lib.optional enableQtTranslation qttools
+    ++ lib.optional enableCubeb libpulseaudio
+    ++ lib.optional (enableFfmpegAudioDecoder || enableFfmpegVideoDumper) ffmpeg
+    ++ lib.optional useDiscordRichPresence rapidjson
+    ++ lib.optional enableFdk fdk_aac;
+
+  cmakeFlags = [
+    "-DUSE_SYSTEM_BOOST=ON"
+    "-DCITRA_USE_BUNDLED_FFMPEG=OFF"
+    "-DCITRA_USE_BUNDLED_QT=OFF"
+    "-DCITRA_USE_BUNDLED_SDL2=OFF"
+
+    # We dont want to bother upstream with potentially outdated compat reports
+    "-DCITRA_ENABLE_COMPATIBILITY_REPORTING=ON"
+    "-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF" # We provide this deterministically
+  ] ++ lib.optional (!enableSdl2) "-DENABLE_SDL2=OFF"
+    ++ lib.optional (!enableQt) "-DENABLE_QT=OFF"
+    ++ lib.optional enableQtTranslation "-DENABLE_QT_TRANSLATION=ON"
+    ++ lib.optional (!enableWebService) "-DENABLE_WEB_SERVICE=OFF"
+    ++ lib.optional (!enableCubeb) "-DENABLE_CUBEB=OFF"
+    ++ lib.optional enableFfmpegAudioDecoder "-DENABLE_FFMPEG_AUDIO_DECODER=ON"
+    ++ lib.optional enableFfmpegVideoDumper "-DENABLE_FFMPEG_VIDEO_DUMPER=ON"
+    ++ lib.optional useDiscordRichPresence "-DUSE_DISCORD_PRESENCE=ON"
+    ++ lib.optional enableFdk "-DENABLE_FDK=ON";
+
+  postPatch = ''
+    # Prep compatibilitylist
+    ln -s ${compat-list} ./dist/compatibility_list/compatibility_list.json
+
+    # We already know the submodules are present
+    substituteInPlace CMakeLists.txt \
+      --replace "check_submodules_present()" ""
+
+    # Devendoring
+    rm -rf externals/zstd externals/libressl
+    cp -r ${zstd.src} externals/zstd
+    tar xf ${libressl.src} -C externals/
+    mv externals/${libressl.name} externals/libressl
+    chmod -R a+w externals/zstd
+  '';
+
+  # Fixes https://github.com/NixOS/nixpkgs/issues/171173
+  postInstall = lib.optionalString (enableCubeb && enableSdl2) ''
+    wrapProgram "$out/bin/citra" \
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libpulseaudio ]}
+  '';
+
+  meta = with lib; {
+    broken = (stdenv.isLinux && stdenv.isAarch64);
+    homepage = "https://citra-emu.org";
+    description = "The ${branch} branch of an open-source emulator for the Ninteno 3DS";
+    longDescription = ''
+      A Nintendo 3DS Emulator written in C++
+      Using the nightly branch is recommended for general usage.
+      Using the canary branch is recommended if you would like to try out
+      experimental features, with a cost of stability.
+    '';
+    mainProgram = if enableQt then "citra-qt" else "citra";
+    platforms = platforms.linux;
+    license = licenses.gpl2Plus;
+    maintainers = with maintainers; [
+      abbradar
+      ashley
+      ivar
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/emulators/citra/update.sh b/nixpkgs/pkgs/applications/emulators/citra/update.sh
new file mode 100755
index 000000000000..eec36818fede
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/citra/update.sh
@@ -0,0 +1,84 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p nix nix-prefetch-git coreutils curl jq gnused
+
+set -euo pipefail
+
+# Will be replaced with the actual branch when running this from passthru.updateScript
+BRANCH="@branch@"
+
+if [[ ! "$(basename $PWD)" = "citra" ]]; then
+    echo "error: Script must be ran from citra's directory!"
+    exit 1
+fi
+
+getLocalVersion() {
+    pushd ../../../.. >/dev/null
+    nix eval --raw -f default.nix "$1".version
+    popd >/dev/null
+}
+
+getLocalHash() {
+    pushd ../../../.. >/dev/null
+    nix eval --raw -f default.nix "$1".src.drvAttrs.outputHash
+    popd >/dev/null
+}
+
+updateNightly() {
+    OLD_NIGHTLY_VERSION="$(getLocalVersion "citra-nightly")"
+    OLD_NIGHTLY_HASH="$(getLocalHash "citra-nightly")"
+
+    NEW_NIGHTLY_VERSION="$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} \
+        "https://api.github.com/repos/citra-emu/citra-nightly/releases?per_page=1" | jq -r '.[0].name' | cut -d"-" -f2 | cut -d" " -f2)"
+
+    if [[ "${OLD_NIGHTLY_VERSION}" = "${NEW_NIGHTLY_VERSION}" ]]; then
+        echo "citra-nightly is already up to date!"
+
+        [ "$KEEP_GOING" ] && return || exit
+    else
+        echo "citra-nightly: ${OLD_NIGHTLY_VERSION} -> ${NEW_NIGHTLY_VERSION}"
+    fi
+
+    echo "  Fetching source code..."
+
+    NEW_NIGHTLY_HASH="$(nix-prefetch-git --quiet --fetch-submodules --rev "nightly-${NEW_NIGHTLY_VERSION}" "https://github.com/citra-emu/citra-nightly" | jq -r '.sha256')"
+
+    echo "  Succesfully fetched. hash: ${NEW_NIGHTLY_HASH}"
+
+    sed -i "s/${OLD_NIGHTLY_VERSION}/${NEW_NIGHTLY_VERSION}/" ./default.nix
+    sed -i "s/${OLD_NIGHTLY_HASH}/${NEW_NIGHTLY_HASH}/" ./default.nix
+}
+
+updateCanary() {
+    OLD_CANARY_VERSION="$(getLocalVersion "citra-canary")"
+    OLD_CANARY_HASH="$(getLocalHash "citra-canary")"
+
+    NEW_CANARY_VERSION="$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} \
+        "https://api.github.com/repos/citra-emu/citra-canary/releases?per_page=1" | jq -r '.[0].name' | cut -d"-" -f2 | cut -d" " -f1)"
+
+    if [[ "${OLD_CANARY_VERSION}" = "${NEW_CANARY_VERSION}" ]]; then
+        echo "citra-canary is already up to date!"
+
+        [ "$KEEP_GOING" ] && return || exit
+    else
+        echo "citra-canary: ${OLD_CANARY_VERSION} -> ${NEW_CANARY_VERSION}"
+    fi
+
+    echo "  Fetching source code..."
+
+    NEW_CANARY_HASH="$(nix-prefetch-git --quiet --fetch-submodules --rev "canary-${NEW_CANARY_VERSION}" "https://github.com/citra-emu/citra-canary" | jq -r '.sha256')"
+
+    echo "  Succesfully fetched. hash: ${NEW_CANARY_HASH}"
+
+    sed -i "s/${OLD_CANARY_VERSION}/${NEW_CANARY_VERSION}/" ./default.nix
+    sed -i "s/${OLD_CANARY_HASH}/${NEW_CANARY_HASH}/" ./default.nix
+}
+
+if [[ "$BRANCH" = "nightly" ]]; then
+    updateNightly
+elif [[ "$BRANCH" = "early-access" ]]; then
+    updateCanary
+else
+    KEEP_GOING=1
+    updateNightly
+    updateCanary
+fi
diff --git a/nixpkgs/pkgs/applications/emulators/commanderx16/emulator.nix b/nixpkgs/pkgs/applications/emulators/commanderx16/emulator.nix
index 73442215ff1e..3acf4a07603a 100644
--- a/nixpkgs/pkgs/applications/emulators/commanderx16/emulator.nix
+++ b/nixpkgs/pkgs/applications/emulators/commanderx16/emulator.nix
@@ -4,15 +4,15 @@
 , SDL2
 }:
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "x16-emulator";
-  version = "38";
+  version = "41";
 
   src = fetchFromGitHub {
     owner = "commanderx16";
-    repo = pname;
-    rev = "r${version}";
-    sha256 = "WNRq/m97NpOBWIk6mtxBAKmkxCGWacWjXeOvIhBrkYE=";
+    repo = "x16-emulator";
+    rev = "r${finalAttrs.version}";
+    hash = "sha256-pnWqtSXQzUfQ8ADIXL9r2YjuBwHDQ2NAffAEFCN5Qzw=";
   };
 
   dontConfigure = true;
@@ -21,8 +21,10 @@ stdenv.mkDerivation rec {
 
   installPhase = ''
     runHook preInstall
-    install -D --mode 755 --target-directory $out/bin/ x16emu
-    install -D --mode 444 --target-directory $out/share/doc/${pname} README.md
+
+    install -Dm 755 -t $out/bin/ x16emu
+    install -Dm 444 -t $out/share/doc/x16-emulator/ README.md
+
     runHook postInstall
   '';
 
@@ -31,12 +33,14 @@ stdenv.mkDerivation rec {
     description = "The official emulator of CommanderX16 8-bit computer";
     license = licenses.bsd2;
     maintainers = with maintainers; [ AndersonTorres ];
-    platforms = SDL2.meta.platforms;
+    mainProgram = "x16emu";
+    inherit (SDL2.meta) platforms;
+    broken = with stdenv; isDarwin && isAarch64;
   };
 
   passthru = {
-    # upstream project recommends emulator and rom synchronized;
+    # upstream project recommends emulator and rom to be synchronized;
     # passing through the version is useful to ensure this
-    inherit version;
+    inherit (finalAttrs) version;
   };
-}
+})
diff --git a/nixpkgs/pkgs/applications/emulators/commanderx16/rom.nix b/nixpkgs/pkgs/applications/emulators/commanderx16/rom.nix
index 5da77ebceefe..202a21206410 100644
--- a/nixpkgs/pkgs/applications/emulators/commanderx16/rom.nix
+++ b/nixpkgs/pkgs/applications/emulators/commanderx16/rom.nix
@@ -2,20 +2,24 @@
 , lib
 , fetchFromGitHub
 , cc65
+, python3
 }:
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "x16-rom";
-  version = "38";
+  version = "41";
 
   src = fetchFromGitHub {
     owner = "commanderx16";
-    repo = pname;
-    rev = "r${version}";
-    sha256 = "xaqF0ppB7I7ST8Uh3jPbC14uRAb/WH21tHlNeTvYpoI=";
+    repo = "x16-rom";
+    rev = "r${finalAttrs.version}";
+    hash = "sha256-kowdyUVi3hliqkL8VQo5dS3Dpxd4LQi5+5brkdnv0lE=";
   };
 
-  nativeBuildInputs = [ cc65 ];
+  nativeBuildInputs = [
+    cc65
+    python3
+  ];
 
   postPatch = ''
     patchShebangs scripts/
@@ -25,8 +29,10 @@ stdenv.mkDerivation rec {
 
   installPhase = ''
     runHook preInstall
-    install -D --mode 444 --target-directory $out/share/${pname} build/x16/rom.bin
-    install -D --mode 444 --target-directory $out/share/doc/${pname} README.md
+
+    install -Dm 444 -t $out/share/x16-rom/ build/x16/rom.bin
+    install -Dm 444 -t $out/share/doc/x16-rom/ README.md
+
     runHook postInstall
   '';
 
@@ -35,12 +41,13 @@ stdenv.mkDerivation rec {
     description = "ROM file for CommanderX16 8-bit computer";
     license = licenses.bsd2;
     maintainers = with maintainers; [ AndersonTorres ];
-    platforms = cc65.meta.platforms;
+    inherit (cc65.meta) platforms;
+    broken = with stdenv; isDarwin && isAarch64;
   };
 
   passthru = {
-    # upstream project recommends emulator and rom synchronized;
+    # upstream project recommends emulator and rom to be synchronized;
     # passing through the version is useful to ensure this
-    inherit version;
+    inherit (finalAttrs) version;
   };
-}
+})
diff --git a/nixpkgs/pkgs/applications/emulators/craftos-pc/default.nix b/nixpkgs/pkgs/applications/emulators/craftos-pc/default.nix
index 3bc9e0b81cc0..d2668c473a62 100644
--- a/nixpkgs/pkgs/applications/emulators/craftos-pc/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/craftos-pc/default.nix
@@ -1,26 +1,45 @@
-{ lib, stdenv, fetchFromGitHub, poco, openssl, SDL2, SDL2_mixer }:
+{ lib
+, stdenv
+, fetchFromGitHub
+, patchelf
+, unzip
+, poco
+, openssl
+, SDL2
+, SDL2_mixer
+, ncurses
+, libpng
+, pngpp
+, libwebp
+}:
 
 let
   craftos2-lua = fetchFromGitHub {
     owner = "MCJack123";
     repo = "craftos2-lua";
-    rev = "v2.4.4";
-    sha256 = "1q63ki4sxx8bxaa6ag3xj153p7a8a12ivm0k33k935p41k6y2k64";
+    rev = "v2.6.6";
+    sha256 = "cCXH1GTRqJQ57/6sWIxik366YBx/ii3nzQwx4YpEh1w=";
+  };
+  craftos2-rom = fetchFromGitHub {
+    owner = "McJack123";
+    repo = "craftos2-rom";
+    rev = "v2.6.6";
+    sha256 = "VzIqvf83k121DxuH5zgZfFS9smipDonyqqhVgj2kgYw=";
   };
 in
 
 stdenv.mkDerivation rec {
   pname = "craftos-pc";
-  version = "2.4.5";
+  version = "2.6.6";
 
   src = fetchFromGitHub {
     owner = "MCJack123";
     repo = "craftos2";
     rev = "v${version}";
-    sha256 = "00a4p365krbdprlv4979d13mm3alhxgzzj3vqz2g67795plf64j4";
+    sha256 = "9lpAWYFli3/OBfmu2dQxKi+/TaHaBQNpZsCURvl0h/E=";
   };
 
-  buildInputs = [ poco openssl SDL2 SDL2_mixer ];
+  buildInputs = [ patchelf poco openssl SDL2 SDL2_mixer ncurses libpng pngpp libwebp ];
 
   preBuild = ''
     cp -R ${craftos2-lua}/* ./craftos2-lua/
@@ -28,16 +47,23 @@ stdenv.mkDerivation rec {
     make -C craftos2-lua linux
   '';
 
+  dontStrip = true;
+
   installPhase = ''
-    mkdir -p $out/bin
+    mkdir -p $out/bin $out/lib $out/share/craftos $out/include
     DESTDIR=$out/bin make install
+    cp ./craftos2-lua/src/liblua.so $out/lib
+    patchelf --replace-needed craftos2-lua/src/liblua.so liblua.so $out/bin/craftos
+    cp -R api $out/include/CraftOS-PC
+    cp -R ${craftos2-rom}/* $out/share/craftos
   '';
 
   meta = with lib; {
     description = "An implementation of the CraftOS-PC API written in C++ using SDL";
     homepage = "https://www.craftos-pc.cc";
-    license = licenses.mit;
+    license = with licenses; [ mit free ];
     platforms = platforms.linux;
     maintainers = [ maintainers.siraben ];
+    mainProgram = "craftos";
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/dgen-sdl/default.nix b/nixpkgs/pkgs/applications/emulators/dgen-sdl/default.nix
index e56ca12a4e96..cbcdad4a3c2b 100644
--- a/nixpkgs/pkgs/applications/emulators/dgen-sdl/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/dgen-sdl/default.nix
@@ -1,39 +1,41 @@
-{ lib, stdenv
+{ lib
+, stdenv
 , fetchurl
 , libarchive
 , SDL
 }:
 
-let
+stdenv.mkDerivation rec {
   pname = "dgen-sdl";
   version = "1.33";
-in stdenv.mkDerivation {
-  inherit pname version;
 
   src = fetchurl {
     url = "https://sourceforge.net/projects/dgen/files/dgen/${version}/${pname}-${version}.tar.gz";
     hash = "sha256-meLAYBfCKHPHf4gYbrzAmGckTrbgQsdjuwlLArje9h4=";
   };
 
-  buildInputs = [ SDL libarchive ];
+  buildInputs = [
+    SDL
+    libarchive
+  ];
 
   configureFlags = [
-    "--enable-joystick"
-    "--enable-debugger"
     "--enable-debug-vdp"
+    "--enable-debugger"
+    "--enable-joystick"
     "--enable-pico" # experimental
     "--enable-vgmdump"
-    "--with-star=no" # Needs ASM support
-    "--with-musa"
     "--with-cyclone=no" # Needs ASM support
-    "--with-mz80"
     "--with-cz80"
     "--with-drz80=no" # Needs ASM support
     "--with-dz80"
+    "--with-musa"
+    "--with-mz80"
+    "--with-star=no" # Needs ASM support
   ];
 
   meta = with lib; {
-    homepage = "https://dgen.sourceforge.net/";
+    homepage = "http://dgen.sourceforge.net/";
     description = "Sega Genesis/Mega Drive emulator";
     longDescription = ''
       DGen/SDL is a free, open source emulator for Sega Genesis/Mega Drive
diff --git a/nixpkgs/pkgs/applications/emulators/dolphin-emu/master.nix b/nixpkgs/pkgs/applications/emulators/dolphin-emu/master.nix
index be3e7f555f8f..80b01962bc9c 100644
--- a/nixpkgs/pkgs/applications/emulators/dolphin-emu/master.nix
+++ b/nixpkgs/pkgs/applications/emulators/dolphin-emu/master.nix
@@ -1,8 +1,8 @@
 { lib, stdenv, fetchFromGitHub, pkg-config, cmake
 , wrapQtAppsHook, qtbase, bluez, ffmpeg, libao, libGLU, libGL, pcre, gettext
-, libXrandr, libusb1, lzo, libpthreadstubs, libXext, libXxf86vm, libXinerama
+, libXrandr, libusb1, libpthreadstubs, libXext, libXxf86vm, libXinerama
 , libSM, libXdmcp, readline, openal, udev, libevdev, portaudio, curl, alsa-lib
-, miniupnpc, enet, mbedtls, soundtouch, sfml, writeScript
+, miniupnpc, enet, mbedtls, soundtouch, sfml, xz, writeScript
 , vulkan-loader ? null, libpulseaudio ? null
 
 # - Inputs used for Darwin
@@ -10,13 +10,13 @@
 
 stdenv.mkDerivation rec {
   pname = "dolphin-emu";
-  version = "5.0-16101";
+  version = "5.0-16793";
 
   src = fetchFromGitHub {
     owner = "dolphin-emu";
     repo = "dolphin";
-    rev = "8ecfa537a242de74d2e372e30d9d79b14584b2fb";
-    sha256 = "3jLGVzTDzEtHWvIb9DFTbJiA9dE9Pm14vYER998Zln0=";
+    rev = "3cd82b619388d0877436390093a6edc2319a6904";
+    sha256 = "sha256-0k+kmq/jkCy52wGcmvtwmnLxUfxk3k0mvsr5wfX8p30=";
     fetchSubmodules = true;
   };
 
@@ -25,8 +25,8 @@ stdenv.mkDerivation rec {
 
   buildInputs = [
     curl ffmpeg libao libGLU libGL pcre gettext libpthreadstubs libpulseaudio
-    libXrandr libXext libXxf86vm libXinerama libSM readline openal libXdmcp lzo
-    portaudio libusb1 libpng hidapi miniupnpc enet mbedtls soundtouch sfml
+    libXrandr libXext libXxf86vm libXinerama libSM readline openal libXdmcp
+    portaudio libusb1 libpng hidapi miniupnpc enet mbedtls soundtouch sfml xz
     qtbase
   ] ++ lib.optionals stdenv.isLinux [
     bluez udev libevdev alsa-lib vulkan-loader
@@ -81,9 +81,7 @@ stdenv.mkDerivation rec {
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ MP2E ashkitten xfix ];
     branch = "master";
-    # x86_32 is an unsupported platform.
-    # Enable generic build if you really want a JIT-less binary.
     broken = stdenv.isDarwin;
-    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    platforms = platforms.unix;
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/dolphin-emu/primehack.nix b/nixpkgs/pkgs/applications/emulators/dolphin-emu/primehack.nix
index 90510d645226..93ed03097be9 100644
--- a/nixpkgs/pkgs/applications/emulators/dolphin-emu/primehack.nix
+++ b/nixpkgs/pkgs/applications/emulators/dolphin-emu/primehack.nix
@@ -14,7 +14,6 @@
 , gettext
 , libXrandr
 , libusb1
-, lzo
 , libpthreadstubs
 , libXext
 , libXxf86vm
@@ -34,6 +33,7 @@
 , soundtouch
 , sfml
 , fmt
+, xz
 , vulkan-loader
 , libpulseaudio
 
@@ -48,13 +48,13 @@
 
 stdenv.mkDerivation rec {
   pname = "dolphin-emu-primehack";
-  version = "1.0.5";
+  version = "1.0.6a";
 
   src = fetchFromGitHub {
     owner = "shiiion";
     repo = "dolphin";
     rev = version;
-    sha256 = "011qghswgh9l7k993lfn1hrwhgyrv9m33smgspsjq50jww6r27fl";
+    sha256 = "sha256-gc4+ofoLKR+cvm+SaWEnGaKrSjWMKq7pF6pEIi75Rtk=";
     fetchSubmodules = true;
   };
 
@@ -81,7 +81,6 @@ stdenv.mkDerivation rec {
     readline
     openal
     libXdmcp
-    lzo
     portaudio
     libusb1
     libpng
@@ -92,6 +91,7 @@ stdenv.mkDerivation rec {
     soundtouch
     sfml
     fmt
+    xz
     qtbase
   ] ++ lib.optionals stdenv.isLinux [
     bluez
@@ -143,9 +143,7 @@ stdenv.mkDerivation rec {
     description = "Gamecube/Wii/Triforce emulator for x86_64 and ARMv8";
     license = licenses.gpl2Plus;
     maintainers = with maintainers; [ MP2E ashkitten Madouura ];
-    # x86_32 is an unsupported platform.
-    # Enable generic build if you really want a JIT-less binary.
     broken = stdenv.isDarwin;
-    platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    platforms = platforms.unix;
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/dosbox/default.nix b/nixpkgs/pkgs/applications/emulators/dosbox/default.nix
index 87ac444ae491..b197742ce276 100644
--- a/nixpkgs/pkgs/applications/emulators/dosbox/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/dosbox/default.nix
@@ -1,7 +1,8 @@
 { lib
 , stdenv
 , fetchurl
-, SDL
+, autoreconfHook
+, SDL_compat
 , SDL_net
 , SDL_sound
 , copyDesktopItems
@@ -22,12 +23,13 @@ stdenv.mkDerivation rec {
   };
 
   nativeBuildInputs = [
+    autoreconfHook
     copyDesktopItems
     graphicsmagick
   ];
 
   buildInputs = [
-    SDL
+    SDL_compat
     SDL_net
     SDL_sound
     libGL
diff --git a/nixpkgs/pkgs/applications/emulators/duckstation/default.nix b/nixpkgs/pkgs/applications/emulators/duckstation/default.nix
index 8e4d909a724a..45bb9ed74f9f 100644
--- a/nixpkgs/pkgs/applications/emulators/duckstation/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/duckstation/default.nix
@@ -90,8 +90,9 @@ mkDerivation rec {
     runHook postCheck
   '';
 
+  # Libpulseaudio fixes https://github.com/NixOS/nixpkgs/issues/171173
   qtWrapperArgs = [
-    "--prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib"
+    "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libpulseaudio vulkan-loader ]}"
   ];
 
   meta = with lib; {
@@ -102,5 +103,3 @@ mkDerivation rec {
     platforms = platforms.linux;
   };
 }
-# TODO: default sound backend (cubeb) does not work, but SDL does. Strangely,
-# switching to cubeb while a game is running makes it work.
diff --git a/nixpkgs/pkgs/applications/emulators/dynamips/default.nix b/nixpkgs/pkgs/applications/emulators/dynamips/default.nix
index 26ff779ba05a..9c7261f09301 100644
--- a/nixpkgs/pkgs/applications/emulators/dynamips/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/dynamips/default.nix
@@ -8,13 +8,13 @@
 
 stdenv.mkDerivation rec {
   pname = "dynamips";
-  version = "0.2.21";
+  version = "0.2.22";
 
   src = fetchFromGitHub {
     owner = "GNS3";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-JQJa3NZ9mQqqvuTzU7XmAr1WRB4zuLIwBx18OY3GbV8=";
+    sha256 = "1fjjjdaxlw1k95kyq73fndn21qfhrm4cn79av0i4sn7anhg8m83f";
   };
 
   nativeBuildInputs = [ cmake ];
diff --git a/nixpkgs/pkgs/applications/emulators/emulationstation/default.nix b/nixpkgs/pkgs/applications/emulators/emulationstation/default.nix
index 4cb5ca9ec2e6..2acb81cf032f 100644
--- a/nixpkgs/pkgs/applications/emulators/emulationstation/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/emulationstation/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchFromGitHub, pkg-config, cmake, curl, boost, eigen
+{ lib, stdenv, fetchFromGitHub, pkg-config, cmake, curl, boost169, eigen
 , freeimage, freetype, libGLU, libGL, SDL2, alsa-lib, libarchive
 , fetchpatch }:
 
@@ -21,7 +21,7 @@ stdenv.mkDerivation {
   ];
 
   nativeBuildInputs = [ pkg-config cmake ];
-  buildInputs = [ alsa-lib boost curl eigen freeimage freetype libarchive libGLU libGL SDL2 ];
+  buildInputs = [ alsa-lib boost169 curl eigen freeimage freetype libarchive libGLU libGL SDL2 ];
 
   installPhase = ''
     install -D ../emulationstation $out/bin/emulationstation
diff --git a/nixpkgs/pkgs/applications/emulators/epsxe/default.nix b/nixpkgs/pkgs/applications/emulators/epsxe/default.nix
deleted file mode 100644
index f39c2ae74ac4..000000000000
--- a/nixpkgs/pkgs/applications/emulators/epsxe/default.nix
+++ /dev/null
@@ -1,52 +0,0 @@
-{ lib, stdenv, fetchurl, alsa-lib, curl, gdk-pixbuf, glib, gtk3, libGLU, libGL,
-  libX11, openssl_1_0_2, ncurses5, SDL, SDL_ttf, unzip, zlib, wrapGAppsHook, autoPatchelfHook }:
-
-with lib;
-
-stdenv.mkDerivation rec {
-  pname = "epsxe";
-  version = "2.0.5";
-
-  src = let
-    version2 = replaceStrings ["."] [""] version;
-    platform = "linux" + (optionalString stdenv.is64bit "_x64");
-  in fetchurl {
-    url = "https://www.epsxe.com/files/ePSXe${version2}${platform}.zip";
-    sha256 = if stdenv.is64bit
-             then "16fa9qc2xhaz1f6294m0b56s5l86cbmclwm9w3mqnch0yjsrvab0"
-             else "1677lclam557kp8jwvchdrk27zfj50fqx2q9i3bcx26d9k61q3kl";
-  };
-
-  nativeBuildInputs = [ unzip wrapGAppsHook autoPatchelfHook ];
-  sourceRoot = ".";
-
-  buildInputs = [
-    alsa-lib
-    curl
-    gdk-pixbuf
-    glib
-    gtk3
-    libX11
-    libGLU libGL
-    openssl_1_0_2
-    ncurses5
-    SDL
-    SDL_ttf
-    stdenv.cc.cc.lib
-    zlib
-  ];
-
-  dontStrip = true;
-
-  installPhase = ''
-    install -D ${if stdenv.is64bit then "epsxe_x64" else "ePSXe"} $out/bin/epsxe
-  '';
-
-  meta = {
-    homepage = "http://epsxe.com/";
-    description = "Enhanced PSX (PlayStation 1) emulator";
-    license = licenses.unfree;
-    maintainers = with maintainers; [ yana ];
-    platforms = [ "i686-linux" "x86_64-linux" ];
-  };
-}
diff --git a/nixpkgs/pkgs/applications/emulators/fakenes/build.patch b/nixpkgs/pkgs/applications/emulators/fakenes/build.patch
deleted file mode 100644
index 90799d977a14..000000000000
--- a/nixpkgs/pkgs/applications/emulators/fakenes/build.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-diff --git a/build/openal.cbd b/build/openal.cbd
-index d18e62d..74af061 100644
---- a/build/openal.cbd
-+++ b/build/openal.cbd
-@@ -23,7 +23,7 @@ CFLAGS += ' -DUSE_OPENAL'
- # --
- 
- do ifplat unix
--   LDFLAGS += ' `openal-config --libs`'
-+   LDFLAGS += ' -lopenal'
- else
-    LDFLAGS += ' -lOpenAL32'
- done
-diff --git a/build/alleggl.cbd b/build/alleggl.cbd
-index e2708ff..e826371 100644
---- a/build/alleggl.cbd
-+++ b/build/alleggl.cbd
-@@ -22,7 +22,7 @@ CFLAGS += ' -DUSE_ALLEGROGL'
- 
- # --
- 
--LIBAGL = agl
-+LIBAGL = alleggl
- 
- ifopt debug LIBAGL = 'agld'
-
-diff --git a/src/apu.cpp b/src/apu.cpp
-index af59f1c..893a798 100644
---- a/src/apu.cpp
-+++ b/src/apu.cpp
-@@ -1930,7 +1930,7 @@ static void amplify(real& sample)
-          gain -= releaseRate;
-       }
- 
--      real output = (1.0 / max(gain, EPSILON));
-+      real output = (1.0 / MAX(gain, EPSILON));
-       output = fixf(output, apu_agc_gain_floor, apu_agc_gain_ceiling);
-       sample *= output;
-    }
-diff --git a/src/audio.cpp b/src/audio.cpp
-index b9650dc..c21c05e 100644
---- a/src/audio.cpp
-+++ b/src/audio.cpp
-@@ -7,6 +7,7 @@
-    You must read and accept the license prior to use. */
- 
- #include <allegro.h>
-+#include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <vector>
-@@ -234,7 +235,7 @@ void audio_update(void)
-          const unsigned queuedFrames = (audioQueue.size() / audio_channels);
-          if(queuedFrames > 0) {
-             // Determine how many frames we want to make room for.
--            const unsigned framesToAdd = min(queuedFrames, audio_buffer_size_frames);
-+            const unsigned framesToAdd = MIN(queuedFrames, audio_buffer_size_frames);
-             // Make room for the frames in the buffer.
-             const unsigned framesToMove = (audioBufferedFrames - framesToAdd);
-             if(framesToMove > 0) {
-@@ -258,7 +259,7 @@ void audio_update(void)
-          // Determine how many frames are available in the buffer.
-          const unsigned bufferableFrames = (audio_buffer_size_frames - audioBufferedFrames);
-          // Determine the number of frames to copy to the buffer.
--         const unsigned framesToCopy = min(queuedFrames, bufferableFrames);
-+         const unsigned framesToCopy = MIN(queuedFrames, bufferableFrames);
- 
-          // Copy frames to the buffer.
-          for(unsigned frame = 0; frame < framesToCopy; frame++) {
-diff --git a/src/include/common.h b/src/include/common.h
-index be28795..e2d21d1 100644
---- a/src/include/common.h
-+++ b/src/include/common.h
-@@ -41,8 +41,10 @@ extern "C" {
- #define true   TRUE
- #define false  FALSE
- 
-+/*
- #define min(x,y)   MIN((x),(y))
- #define max(x,y)   MAX((x),(y))
-+*/
- 
- #define true_or_false(x)   ((x) ? true : false)
- 
diff --git a/nixpkgs/pkgs/applications/emulators/fakenes/default.nix b/nixpkgs/pkgs/applications/emulators/fakenes/default.nix
deleted file mode 100644
index 6bc4b1480ffc..000000000000
--- a/nixpkgs/pkgs/applications/emulators/fakenes/default.nix
+++ /dev/null
@@ -1,34 +0,0 @@
-{lib, stdenv, fetchurl, allegro, openal, libGLU, libGL, zlib, hawknl, freeglut, libX11,
-  libXxf86vm, libXcursor, libXpm }:
-
-stdenv.mkDerivation rec {
-  pname = "fakenes";
-  version = "0.5.9-beta3";
-
-  src = fetchurl {
-    url = "mirror://sourceforge/fakenes/fakenes-${version}.tar.gz";
-    sha256 = "026h67s4pzc1vma59pmzk02iy379255qbai2q74wln9bxqcpniy4";
-  };
-
-  buildInputs = [ allegro openal libGLU libGL zlib hawknl freeglut libX11
-    libXxf86vm libXcursor libXpm ];
-
-  hardeningDisable = [ "format" ];
-
-  installPhase = ''
-    mkdir -p $out/bin
-    cp fakenes $out/bin
-  '';
-
-  NIX_LDFLAGS = "-lX11 -lXxf86vm -lXcursor -lXpm";
-
-  patches = [ ./build.patch ];
-
-  meta = {
-    homepage = "http://fakenes.sourceforge.net/";
-    license = lib.licenses.gpl2Plus;
-    description = "Portable Open Source NES Emulator";
-    platforms = lib.platforms.linux;
-    broken = true;
-  };
-}
diff --git a/nixpkgs/pkgs/applications/emulators/flycast/default.nix b/nixpkgs/pkgs/applications/emulators/flycast/default.nix
index 67ba4590db62..fd5123d05fa2 100644
--- a/nixpkgs/pkgs/applications/emulators/flycast/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/flycast/default.nix
@@ -15,13 +15,13 @@
 
 stdenv.mkDerivation rec {
   pname = "flycast";
-  version = "1.2";
+  version = "1.3";
 
   src = fetchFromGitHub {
     owner = "flyinghead";
     repo = "flycast";
     rev = "v${version}";
-    sha256 = "sha256-MzHAGK++oukIs84OR/l6gBwCJssdi8Iyte5Rtro2+Q0=";
+    sha256 = "sha256-FAHm8Fu/yv2rJvWCY+g50TYH4zOT6rO7F+jTL2T6EOU=";
     fetchSubmodules = true;
   };
 
diff --git a/nixpkgs/pkgs/applications/emulators/goldberg-emu/default.nix b/nixpkgs/pkgs/applications/emulators/goldberg-emu/default.nix
index 4a8d3e3b85ec..5ff25efbf151 100644
--- a/nixpkgs/pkgs/applications/emulators/goldberg-emu/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/goldberg-emu/default.nix
@@ -37,6 +37,7 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     homepage = "https://gitlab.com/Mr_Goldberg/goldberg_emulator";
     changelog = "https://gitlab.com/Mr_Goldberg/goldberg_emulator/-/releases";
     description = "Program that emulates steam online features";
diff --git a/nixpkgs/pkgs/applications/emulators/kega-fusion/default.nix b/nixpkgs/pkgs/applications/emulators/kega-fusion/default.nix
index e8feb1ea7ed5..1b95dec89fac 100644
--- a/nixpkgs/pkgs/applications/emulators/kega-fusion/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/kega-fusion/default.nix
@@ -72,6 +72,7 @@ in stdenv.mkDerivation {
     description = "Sega SG1000, SC3000, SF7000, Master System, Game Gear, Genesis/Megadrive, SVP, Pico, SegaCD/MegaCD and 32X emulator";
     homepage = "https://www.carpeludum.com/kega-fusion/";
     maintainers = with maintainers; [ abbradar ];
+    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
     license = licenses.unfreeRedistributable;
     platforms = [ "i686-linux" ];
   };
diff --git a/nixpkgs/pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patch b/nixpkgs/pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patch
new file mode 100644
index 000000000000..cee425eaa93d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/mame/0001-Revert-Added-PDF-documentation-to-dist.mak.patch
@@ -0,0 +1,37 @@
+From 54aebffc4584ee68149d4b5b64ceaa79a82b8427 Mon Sep 17 00:00:00 2001
+From: Thiago Kenji Okada <thiagokokada@gmail.com>
+Date: Sat, 9 Apr 2022 13:16:08 +0100
+Subject: [PATCH] Revert "Added PDF documentation to dist.mak"
+
+This reverts commit c0e93076232e794c919231e4386445d78b2d80b1.
+---
+ dist.mak | 8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/dist.mak b/dist.mak
+index edbb4cd67cb..c378dfdf708 100644
+--- a/dist.mak
++++ b/dist.mak
+@@ -109,7 +109,7 @@ GEN_FOLDERS := $(addprefix $(STAGEDIR)/,$(CREATED_DIRS))
+ COPY_BINARIES := $(addprefix $(STAGEDIR)/,$(addsuffix $(EXE),$(BINARIES)))
+ COPY_FILES := $(addprefix $(STAGEDIR)/,$(COPIED_FILES))
+ 
+-all: $(COPY_BINARIES) $(COPY_FILES) $(STAGEDIR)/docs/MAME.pdf
++all: $(COPY_BINARIES) $(COPY_FILES)
+ 
+ clean:
+ 	$(SILENT) rm -rf $(STAGEDIR)
+@@ -124,10 +124,4 @@ $(STAGEDIR)/%: $(BINDIR)/% | $(GEN_FOLDERS)
+ $(STAGEDIR)/%: % | $(GEN_FOLDERS)
+ 	$(call COPY,$<,$@)
+ 
+-$(STAGEDIR)/docs/MAME.pdf: docs/build/latex/MAME.pdf | $(GEN_FOLDERS)
+-	$(call COPY,$<,$@)
+-
+-docs/build/latex/MAME.pdf:
+-	$(MAKE) -C docs latexpdf
+-
+ .PHONY: all clean
+-- 
+2.33.1
+
diff --git a/nixpkgs/pkgs/applications/emulators/mame/default.nix b/nixpkgs/pkgs/applications/emulators/mame/default.nix
index ce3fb3d06aed..eb0f9076a17d 100644
--- a/nixpkgs/pkgs/applications/emulators/mame/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/mame/default.nix
@@ -2,22 +2,34 @@
 , stdenv
 , alsa-lib
 , CoreAudioKit
+, expat
 , fetchFromGitHub
+, flac
 , fontconfig
 , ForceFeedback
+, glm
 , installShellFiles
+, libjpeg
 , libpcap
 , libpulseaudio
 , libXi
 , libXinerama
+, lua5_3
 , makeDesktopItem
 , makeWrapper
 , pkg-config
+, portaudio
+, portmidi
+, pugixml
 , python3
 , qtbase
+, rapidjson
 , SDL2
 , SDL2_ttf
+, utf8proc
 , which
+, writeScript
+, zlib
 }:
 
 let
@@ -33,39 +45,69 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "mame";
-  version = "0.239";
+  version = "0.243";
 
   src = fetchFromGitHub {
     owner = "mamedev";
     repo = "mame";
     rev = "mame${builtins.replaceStrings [ "." ] [ "" ] version}";
-    sha256 = "sha256-svclBaFkp4d6db+zWZNvZP8vWIFz/7M5N1M6WseOFEk=";
+    sha256 = "sha256-dUgYLNvgvolz9M0ySkGJIZjVMBQwejkxsZ6npg8rIqk=";
   };
 
   hardeningDisable = [ "fortify" ];
-  NIX_CFLAGS_COMPILE = [ "-Wno-error=maybe-uninitialized" "-Wno-error=missing-braces" ];
 
   makeFlags = [
-    "TOOLS=1"
-    "USE_LIBSDL=1"
     "CC=${stdenv.cc.targetPrefix}cc"
     "CXX=${stdenv.cc.targetPrefix}c++"
+    "TOOLS=1"
+    "USE_LIBSDL=1"
+    # "USE_SYSTEM_LIB_ASIO=1"
+    "USE_SYSTEM_LIB_EXPAT=1"
+    "USE_SYSTEM_LIB_FLAC=1"
+    "USE_SYSTEM_LIB_GLM=1"
+    "USE_SYSTEM_LIB_JPEG=1"
+    "USE_SYSTEM_LIB_LUA=1"
+    "USE_SYSTEM_LIB_PORTAUDIO=1"
+    "USE_SYSTEM_LIB_PORTMIDI=1"
+    "USE_SYSTEM_LIB_PUGIXML=1"
+    "USE_SYSTEM_LIB_RAPIDJSON=1"
+    "USE_SYSTEM_LIB_UTF8PROC=1"
+    "USE_SYSTEM_LIB_ZLIB=1"
   ];
 
   dontWrapQtApps = true;
 
   # https://docs.mamedev.org/initialsetup/compilingmame.html
-  buildInputs =
-    [ SDL2 SDL2_ttf qtbase ]
-    ++ lib.optionals stdenv.isLinux [ alsa-lib libpulseaudio libXinerama libXi fontconfig ]
-    ++ lib.optionals stdenv.isDarwin [ libpcap CoreAudioKit ForceFeedback ];
+  buildInputs = [
+    expat
+    zlib
+    flac
+    lua5_3
+    portmidi
+    portaudio
+    utf8proc
+    libjpeg
+    rapidjson
+    pugixml
+    glm
+    SDL2
+    SDL2_ttf
+    qtbase
+  ]
+  ++ lib.optionals stdenv.isLinux [ alsa-lib libpulseaudio libXinerama libXi fontconfig ]
+  ++ lib.optionals stdenv.isDarwin [ libpcap CoreAudioKit ForceFeedback ];
 
   nativeBuildInputs = [ python3 pkg-config which makeWrapper installShellFiles ];
 
-  # by default MAME assumes that paths with stock resources
-  # are relative and that you run MAME changing to
-  # install directory, so we add absolute paths here
   patches = [
+    # MAME is now generating the PDF documentation on its release script since commit:
+    # https://github.com/mamedev/mame/commit/c0e93076232e794c919231e4386445d78b2d80b1
+    # however this needs sphinx+latex to build, and it is available in the website
+    # anyway for those who need it
+    ./0001-Revert-Added-PDF-documentation-to-dist.mak.patch
+    # by default MAME assumes that paths with stock resources
+    # are relative and that you run MAME changing to
+    # install directory, so we add absolute paths here
     ./emuopts.patch
   ];
 
@@ -93,13 +135,22 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
+  passthru.updateScript = writeScript "mame-update-script" ''
+    #!/usr/bin/env nix-shell
+    #!nix-shell -i bash -p curl common-updater-scripts jq
+
+    set -eu -o pipefail
+
+    latest_version=$(curl -s https://api.github.com/repos/mamedev/mame/releases/latest | jq --raw-output .tag_name)
+    update-source-version mame "''${latest_version/mame0/0.}"
+  '';
+
   meta = with lib; {
+    broken = (stdenv.isLinux && stdenv.isAarch64) || stdenv.isDarwin;
     description = "Is a multi-purpose emulation framework";
     homepage = "https://www.mamedev.org/";
     license = with licenses; [ bsd3 gpl2Plus ];
     platforms = platforms.unix;
     maintainers = with maintainers; [ thiagokokada ];
-    # macOS needs more time to build
-    timeout = 24 * 3600;
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/mupen64plus/default.nix b/nixpkgs/pkgs/applications/emulators/mupen64plus/default.nix
index f5d17d9d3951..82908a166d46 100644
--- a/nixpkgs/pkgs/applications/emulators/mupen64plus/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/mupen64plus/default.nix
@@ -1,4 +1,4 @@
-{lib, stdenv, fetchurl, boost, dash, freetype, libpng, pkg-config, SDL, which, zlib, nasm }:
+{lib, stdenv, fetchurl, fetchpatch, boost, dash, freetype, libpng, pkg-config, SDL, which, zlib, nasm }:
 
 stdenv.mkDerivation rec {
   pname = "mupen64plus";
@@ -9,6 +9,19 @@ stdenv.mkDerivation rec {
     sha256 = "1a21n4gqdvag6krwcjm5bnyw5phrlxw6m0mk73jy53iq03f3s96m";
   };
 
+  patches = [
+    # Pull upstream fix for -fno-common toolchains:
+    #  https://github.com/mupen64plus/mupen64plus-core/pull/736
+    (fetchpatch {
+      name = "fno-common.patch";
+      url = "https://github.com/mupen64plus/mupen64plus-core/commit/39975200ad4926cfc79c96609b64696289065502.patch";
+      sha256 = "0kdshp9xdkharn3d1g1pvxhh761pa1v5w07iq0wf9l380r2m6gbv";
+      # a/something -> a/source/mupen64plus-core/something
+      stripLen = 1;
+      extraPrefix = "source/mupen64plus-core/";
+    })
+  ];
+
   nativeBuildInputs = [ pkg-config nasm ];
   buildInputs = [ boost dash freetype libpng SDL which zlib ];
 
diff --git a/nixpkgs/pkgs/applications/emulators/np2kai/default.nix b/nixpkgs/pkgs/applications/emulators/np2kai/default.nix
index 0ed47af8f5bf..dd5e53967c01 100644
--- a/nixpkgs/pkgs/applications/emulators/np2kai/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/np2kai/default.nix
@@ -156,6 +156,9 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
+  # TODO Remove when bumping past rev22
+  NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isDarwin "-D_DARWIN_C_SOURCE";
+
   buildPhase = optionalString enableSDL ''
     cd sdl2
     for mkfile in ${sdlMakefiles}; do
diff --git a/nixpkgs/pkgs/applications/emulators/openmsx/default.nix b/nixpkgs/pkgs/applications/emulators/openmsx/default.nix
index f054b954b59b..4dfa3b864430 100644
--- a/nixpkgs/pkgs/applications/emulators/openmsx/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/openmsx/default.nix
@@ -13,26 +13,26 @@
 , libpng
 , libtheora
 , libvorbis
-, python
+, python3
 , tcl
 , zlib
 }:
 
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "openmsx";
-  version = "17.0";
+  version = "18.0";
 
   src = fetchFromGitHub {
     owner = "openMSX";
     repo = "openMSX";
-    rev = "RELEASE_${builtins.replaceStrings ["."] ["_"] version}";
-    sha256 = "sha256-9PdUNahJZ2O6ASkzLW/uudP3hiIzTDpxzFy6Pjb8JiU=";
+    rev = "RELEASE_${builtins.replaceStrings ["."] ["_"] finalAttrs.version}";
+    sha256 = "sha256-4V2B+OQbPVRmkRuqfeqyd+7pz9Z1YISjI79WqZS0Qhc=";
     fetchSubmodules = true;
   };
 
   nativeBuildInputs = [
     pkg-config
-    python
+    python3
   ];
 
   buildInputs = [
@@ -72,4 +72,4 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ AndersonTorres ];
     platforms = platforms.unix;
   };
-}
+})
diff --git a/nixpkgs/pkgs/applications/emulators/pcsx2/default.nix b/nixpkgs/pkgs/applications/emulators/pcsx2/default.nix
index 2e22e7d9053a..5f5579658b13 100644
--- a/nixpkgs/pkgs/applications/emulators/pcsx2/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/pcsx2/default.nix
@@ -12,7 +12,9 @@
 , libpng
 , libpulseaudio
 , libsamplerate
-, libxml2
+, libXdmcp
+, openssl
+, pcre
 , perl
 , pkg-config
 , portaudio
@@ -20,6 +22,8 @@
 , soundtouch
 , stdenv
 , udev
+, vulkan-headers
+, vulkan-loader
 , wrapGAppsHook
 , wxGTK
 , zlib
@@ -28,14 +32,14 @@
 
 stdenv.mkDerivation rec {
   pname = "pcsx2";
-  version = "1.7.2105";
+  version = "1.7.3165";
 
   src = fetchFromGitHub {
     owner = "PCSX2";
     repo = "pcsx2";
     fetchSubmodules = true;
     rev = "v${version}";
-    hash = "sha256-/A8u7oDIVs0Zmne0ebaXxOeIQbM9pr62KEH6FJR2umk=";
+    hash = "sha256-FdLmLZLpS8zPmHVn4k0nE6vS/omYVIOal9ej0h3bE/Y=";
   };
 
   cmakeFlags = [
@@ -44,9 +48,10 @@ stdenv.mkDerivation rec {
     "-DPACKAGE_MODE=TRUE"
     "-DWAYLAND_API=TRUE"
     "-DXDG_STD=TRUE"
+    "-DUSE_VULKAN=TRUE"
   ];
 
-  nativeBuildInputs = [ cmake perl pkg-config wrapGAppsHook ];
+  nativeBuildInputs = [ cmake perl pkg-config vulkan-headers wrapGAppsHook ];
 
   buildInputs = [
     alsa-lib
@@ -60,16 +65,29 @@ stdenv.mkDerivation rec {
     libpng
     libpulseaudio
     libsamplerate
-    libxml2
+    libXdmcp
+    openssl
+    pcre
     portaudio
     SDL2
     soundtouch
     udev
+    vulkan-loader
     wayland
     wxGTK
     zlib
   ];
 
+  # Wayland doesn't seem to work right now (crashes when booting a game).
+  # Try removing `--prefix GDK_BACKEND : x11` on the next update.
+  # (This may be solved when the project finshes migrating to Qt)
+  preFixup = ''
+    gappsWrapperArgs+=(
+      --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ vulkan-loader ]}
+      --prefix GDK_BACKEND : x11
+    )
+  '';
+
   meta = with lib; {
     description = "Playstation 2 emulator";
     longDescription = ''
@@ -81,13 +99,12 @@ stdenv.mkDerivation rec {
     '';
     homepage = "https://pcsx2.net";
     maintainers = with maintainers; [ hrdinka govanify ];
-    mainProgram = "PCSX2";
 
     # PCSX2's source code is released under LGPLv3+. It However ships
     # additional data files and code that are licensed differently.
     # This might be solved in future, for now we should stick with
     # license.free
     license = licenses.free;
-    platforms = platforms.x86;
+    platforms = platforms.x86_64;
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/pcsxr/default.nix b/nixpkgs/pkgs/applications/emulators/pcsxr/default.nix
index e3126efe82db..1c0fba3df1c5 100644
--- a/nixpkgs/pkgs/applications/emulators/pcsxr/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/pcsxr/default.nix
@@ -56,6 +56,12 @@ stdenv.mkDerivation rec {
     xorg.libXxf86vm
   ];
 
+  # Workaround build failure on -fno-common toolchains like upstream
+  # gcc-10. Otherwise build fails as:
+  #   ld: AboutDlg.o:/build/pcsxr/gui/Linux.h:42: multiple definition of `cfgfile';
+  #     LnxMain.o:/build/pcsxr/gui/Linux.h:42: first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   dynarecTarget =
    if stdenv.isx86_64 then "x86_64"
    else if stdenv.isi686 then "x86"
@@ -80,8 +86,9 @@ stdenv.mkDerivation rec {
   '';
 
   meta = with lib; {
+    broken = stdenv.isDarwin;
     description = "Playstation 1 emulator";
-    homepage = "https://pcsxr.codeplex.com/";
+    homepage = "https://github.com/iCatButler/pcsxr";
     maintainers = with maintainers; [ rardiol ];
     license = licenses.gpl2Plus;
     platforms = platforms.all;
diff --git a/nixpkgs/pkgs/applications/emulators/ppsspp/default.nix b/nixpkgs/pkgs/applications/emulators/ppsspp/default.nix
index b84d18a4e7a0..6281cbd2c088 100644
--- a/nixpkgs/pkgs/applications/emulators/ppsspp/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/ppsspp/default.nix
@@ -1,72 +1,121 @@
-{ mkDerivation
+{ lib
+, stdenv
 , fetchFromGitHub
 , SDL2
 , cmake
+, copyDesktopItems
 , ffmpeg
 , glew
-, lib
+, libffi
 , libzip
+, makeDesktopItem
+, makeWrapper
 , pkg-config
 , python3
-, qtbase
-, qtmultimedia
+, qtbase ? null
+, qtmultimedia ? null
 , snappy
+, vulkan-loader
+, wayland
+, wrapQtAppsHook ? null
 , zlib
+, enableVulkan ? true
+, forceWayland ? false
 }:
 
-mkDerivation rec {
-  pname = "ppsspp";
-  version = "1.12.3";
+let
+  enableQt = (qtbase != null);
+  frontend = if enableQt then "Qt" else "SDL and headless";
+  vulkanPath = lib.makeLibraryPath [ vulkan-loader ];
 
-  src = fetchFromGitHub {
-    owner = "hrydgard";
-    repo = pname;
-    rev = "v${version}";
-    fetchSubmodules = true;
-    sha256 = "sha256-S16rTB0svksW5MwrPV/+qpTK4uKZ7mFcmbOyEmMmzhY=";
-  };
+  # experimental, see https://github.com/hrydgard/ppsspp/issues/13845
+  vulkanWayland = enableVulkan && forceWayland;
+in
+  # Only SDL front end needs to specify whether to use Wayland
+  assert forceWayland -> !enableQt;
+  stdenv.mkDerivation (finalAttrs: {
+    pname = "ppsspp"
+      + lib.optionalString enableQt "-qt"
+      + lib.optionalString (!enableQt) "-sdl"
+      + lib.optionalString forceWayland "-wayland";
+    version = "1.13.1";
 
-  postPatch = ''
-    substituteInPlace git-version.cmake --replace unknown ${src.rev}
-    substituteInPlace UI/NativeApp.cpp --replace /usr/share $out/share
-  '';
+    src = fetchFromGitHub {
+      owner = "hrydgard";
+      repo = "ppsspp";
+      rev = "v${finalAttrs.version}";
+      fetchSubmodules = true;
+      sha256 = "sha256-WsFy2aSOmkII2Lte5et4W6qj0AXUKWWkYe88T0OQP08=";
+    };
 
-  nativeBuildInputs = [ cmake pkg-config python3 ];
+    postPatch = ''
+      substituteInPlace git-version.cmake --replace unknown ${finalAttrs.src.rev}
+      substituteInPlace UI/NativeApp.cpp --replace /usr/share $out/share
+    '';
 
-  buildInputs = [
-    SDL2
-    ffmpeg
-    glew
-    libzip
-    qtbase
-    qtmultimedia
-    snappy
-    zlib
-  ];
+    nativeBuildInputs = [
+      cmake
+      copyDesktopItems
+      makeWrapper
+      pkg-config
+      python3
+      wrapQtAppsHook
+    ];
 
-  cmakeFlags = [
-    "-DHEADLESS=OFF"
-    "-DOpenGL_GL_PREFERENCE=GLVND"
-    "-DUSE_SYSTEM_FFMPEG=ON"
-    "-DUSE_SYSTEM_LIBZIP=ON"
-    "-DUSE_SYSTEM_SNAPPY=ON"
-    "-DUSING_QT_UI=ON"
-  ];
+    buildInputs = [
+      SDL2
+      ffmpeg
+      (glew.override { enableEGL = forceWayland; })
+      libzip
+      qtbase
+      qtmultimedia
+      snappy
+      zlib
+    ] ++ lib.optional enableVulkan vulkan-loader
+      ++ lib.optionals vulkanWayland [ wayland libffi ];
 
-  installPhase = ''
-    runHook preInstall
-    mkdir -p $out/share/ppsspp
-    install -Dm555 PPSSPPQt $out/bin/ppsspp
-    mv assets $out/share/ppsspp
-    runHook postInstall
-  '';
+    cmakeFlags = [
+      "-DHEADLESS=${if enableQt then "OFF" else "ON"}"
+      "-DOpenGL_GL_PREFERENCE=GLVND"
+      "-DUSE_SYSTEM_FFMPEG=ON"
+      "-DUSE_SYSTEM_LIBZIP=ON"
+      "-DUSE_SYSTEM_SNAPPY=ON"
+      "-DUSE_WAYLAND_WSI=${if vulkanWayland then "ON" else "OFF"}"
+      "-DUSING_QT_UI=${if enableQt then "ON" else "OFF"}"
+    ];
 
-  meta = with lib; {
-    homepage = "https://www.ppsspp.org/";
-    description = "A HLE Playstation Portable emulator, written in C++";
-    license = licenses.gpl2Plus;
-    maintainers = with maintainers; [ AndersonTorres ];
-    platforms = platforms.linux;
-  };
-}
-# TODO: add SDL headless port
+    desktopItems = [(makeDesktopItem {
+      desktopName = "PPSSPP";
+      name = "ppsspp";
+      exec = "ppsspp";
+      icon = "ppsspp";
+      comment = "Play PSP games on your computer";
+      categories = [ "Game" "Emulator" ];
+    })];
+
+    installPhase = ''
+      runHook preInstall
+      mkdir -p $out/share/{applications,ppsspp}
+    '' + (if enableQt then ''
+      install -Dm555 PPSSPPQt $out/bin/ppsspp
+      wrapProgram $out/bin/ppsspp \
+    '' else ''
+      install -Dm555 PPSSPPHeadless $out/bin/ppsspp-headless
+      install -Dm555 PPSSPPSDL $out/share/ppsspp/
+      makeWrapper $out/share/ppsspp/PPSSPPSDL $out/bin/ppsspp \
+        --set SDL_VIDEODRIVER ${if forceWayland then "wayland" else "x11"} \
+    '') + lib.optionalString enableVulkan ''
+        --prefix LD_LIBRARY_PATH : ${vulkanPath} \
+    '' + "\n" + ''
+      mv assets $out/share/ppsspp
+      runHook postInstall
+    '';
+
+    meta = with lib; {
+      homepage = "https://www.ppsspp.org/";
+      description = "A HLE Playstation Portable emulator, written in C++ (${frontend})";
+      license = licenses.gpl2Plus;
+      maintainers = with maintainers; [ AndersonTorres ];
+      platforms = platforms.linux;
+    };
+  })
diff --git a/nixpkgs/pkgs/applications/emulators/proton-caller/default.nix b/nixpkgs/pkgs/applications/emulators/proton-caller/default.nix
index d10c43642325..22bc7054da38 100644
--- a/nixpkgs/pkgs/applications/emulators/proton-caller/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/proton-caller/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "proton-caller";
-  version = "2.3.2";
+  version = "3.1.0";
 
   src = fetchFromGitHub {
     owner = "caverym";
     repo = pname;
     rev = version;
-    sha256 = "sha256-k+cH86atuVoLCQ+I1zu08f4T+y0u8vnjo3VA+Otg+a4=";
+    sha256 = "sha256-eyHFKAGx8du4osoGDsMFzVE/TC/ZMPsx6mrWUPDCLJ4=";
   };
 
-  cargoSha256 = "sha256-rkgg96IdIhVXZ5y/ECUxNPyPV9Nv5XGAtlxAkILry2s=";
+  cargoSha256 = "sha256-/4+r5rvRUqQL8EVIg/22ZytXyE4+SV4UEcXiEw4795U=";
 
   meta = with lib; {
     description = "Run Windows programs with Proton";
@@ -19,5 +19,6 @@ rustPlatform.buildRustPackage rec {
     homepage = "https://github.com/caverym/proton-caller";
     license = licenses.mit;
     maintainers = with maintainers; [ kho-dialga ];
+    mainProgram = "proton-call";
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/qmc2/default.nix b/nixpkgs/pkgs/applications/emulators/qmc2/default.nix
deleted file mode 100644
index 6c6a52fc65ca..000000000000
--- a/nixpkgs/pkgs/applications/emulators/qmc2/default.nix
+++ /dev/null
@@ -1,41 +0,0 @@
-{ lib, stdenv
-, fetchurl, qttools, pkg-config
-, minizip, zlib
-, qtbase, qtsvg, qtmultimedia, qtwebkit, qttranslations, qtxmlpatterns
-, rsync, SDL2, xwininfo
-, util-linux
-, xorg
-}:
-
-stdenv.mkDerivation rec {
-  pname = "qmc2";
-  version = "0.195";
-
-  src = fetchurl {
-      url = "mirror://sourceforge/project/qmc2/qmc2/${version}/${pname}-${version}.tar.gz";
-      sha256 = "1dzmjlfk8pdspns6zg1jmd5fqzg8igd4q38cz4a1vf39lx74svns";
-  };
-
-  preBuild = ''
-    patchShebangs scripts
-  '';
-
-  nativeBuildInputs = [ qttools pkg-config ];
-  buildInputs = [ minizip qtbase qtsvg qtmultimedia qtwebkit
-                  qttranslations qtxmlpatterns rsync SDL2
-                  xwininfo zlib util-linux xorg.libxcb ];
-
-  makeFlags = [ "DESTDIR=$(out)"
-                "PREFIX=/"
-                "DATADIR=/share/"
-                "SYSCONFDIR=/etc" ];
-
-  meta = with lib; {
-    description = "A Qt frontend for MAME/MESS";
-    homepage = "https://qmc2.batcom-it.net";
-    license = licenses.gpl2;
-    maintainers = [ ];
-    platforms = platforms.linux;
-    broken = true;
-  };
-}
diff --git a/nixpkgs/pkgs/applications/emulators/resim/default.nix b/nixpkgs/pkgs/applications/emulators/resim/default.nix
index 49d7721174f5..d69aafcec2bd 100644
--- a/nixpkgs/pkgs/applications/emulators/resim/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/resim/default.nix
@@ -17,5 +17,10 @@ stdenv.mkDerivation {
     cp -v vc4emul/vc4emul $out/bin/vc4emul
   '';
 
+  cmakeFlags = [
+    # RPATH of binary /nix/store/.../bin/... contains a forbidden reference to /build/
+    "-DCMAKE_SKIP_BUILD_RPATH=ON"
+  ];
+
   meta.license = lib.licenses.mit;
 }
diff --git a/nixpkgs/pkgs/applications/emulators/retroarch/cores.nix b/nixpkgs/pkgs/applications/emulators/retroarch/cores.nix
index e0045a3827d1..ed47c579d642 100644
--- a/nixpkgs/pkgs/applications/emulators/retroarch/cores.nix
+++ b/nixpkgs/pkgs/applications/emulators/retroarch/cores.nix
@@ -1,23 +1,22 @@
 { lib
 , stdenv
-, SDL
 , alsa-lib
 , boost
-, buildPackages
 , bzip2
 , cmake
 , curl
 , fetchFromGitHub
 , ffmpeg
 , fluidsynth
+, gcc10Stdenv
 , gettext
 , hexdump
 , hidapi
 , icu
 , libaio
+, libevdev
 , libGL
 , libGLU
-, libevdev
 , libjpeg
 , libpcap
 , libpng
@@ -32,6 +31,7 @@
 , portaudio
 , python3
 , retroarch
+, SDL
 , sfml
 , snappy
 , udev
@@ -53,17 +53,19 @@ let
     , description
       # Check https://github.com/libretro/libretro-core-info for license information
     , license
+    , stdenvOverride ? stdenv
     , src ? (getCoreSrc core)
     , broken ? false
-    , version ? "unstable-2022-01-21"
+    , version ? "unstable-2022-04-21"
     , platforms ? retroarch.meta.platforms
       # The resulting core file is based on core name
       # Setting `normalizeCore` to `true` will convert `-` to `_` on the core filename
     , normalizeCore ? true
     , ...
     }@args:
-    stdenv.mkDerivation (
+    stdenvOverride.mkDerivation (
       let
+        inherit (stdenvOverride) hostPlatform;
         d2u = if normalizeCore then (lib.replaceChars [ "-" ] [ "_" ]) else (x: x);
       in
       (rec {
@@ -79,12 +81,12 @@ let
             linux = "unix";
             darwin = "osx";
             windows = "win";
-          }.${stdenv.hostPlatform.parsed.kernel.name} or stdenv.hostPlatform.parsed.kernel.name}"
+          }.${hostPlatform.parsed.kernel.name} or hostPlatform.parsed.kernel.name}"
           "ARCH=${{
             armv7l = "arm";
             armv6l = "arm";
             i686 = "x86";
-          }.${stdenv.hostPlatform.parsed.cpu.name} or stdenv.hostPlatform.parsed.cpu.name}"
+          }.${hostPlatform.parsed.cpu.name} or hostPlatform.parsed.cpu.name}"
         ] ++ (args.makeFlags or [ ]);
 
         coreDir = "${placeholder "out"}/lib/retroarch/cores";
@@ -94,9 +96,9 @@ let
 
           mkdir -p $out/bin
           mkdir -p $coreDir
-          mv ${d2u args.core}_libretro${stdenv.hostPlatform.extensions.sharedLibrary} $coreDir
+          mv ${d2u args.core}_libretro${hostPlatform.extensions.sharedLibrary} $coreDir
           makeWrapper ${retroarch}/bin/retroarch $out/bin/retroarch-${core} \
-            --add-flags "-L $coreDir/${d2u core}_libretro${stdenv.hostPlatform.extensions.sharedLibrary} $@"
+            --add-flags "-L $coreDir/${d2u core}_libretro${hostPlatform.extensions.sharedLibrary} $@"
 
           runHook postInstall
         '';
@@ -298,37 +300,11 @@ in
   citra = mkLibRetroCore {
     core = "citra";
     description = "Port of Citra to libretro";
+    stdenvOverride = gcc10Stdenv;
     license = lib.licenses.gpl2Plus;
-    extraNativeBuildInputs = [ cmake pkg-config ];
-    extraBuildInputs = [ libGLU libGL boost ];
-    makefile = "Makefile";
-    cmakeFlags = [
-      "-DENABLE_LIBRETRO=ON"
-      "-DENABLE_QT=OFF"
-      "-DENABLE_SDL2=OFF"
-      "-DENABLE_WEB_SERVICE=OFF"
-      "-DENABLE_DISCORD_PRESENCE=OFF"
-    ];
-    preConfigure = "sed -e '77d' -i externals/cmake-modules/GetGitRevisionDescription.cmake";
-    postBuild = "cd src/citra_libretro";
-  };
-
-  citra-canary = mkLibRetroCore {
-    core = "citra-canary";
-    description = "Port of Citra Canary/Experimental to libretro";
-    license = lib.licenses.gpl2Plus;
-    extraNativeBuildInputs = [ cmake pkg-config ];
-    extraBuildInputs = [ libGLU libGL boost ];
+    extraBuildInputs = [ libGLU libGL boost ffmpeg nasm ];
     makefile = "Makefile";
-    cmakeFlags = [
-      "-DENABLE_LIBRETRO=ON"
-      "-DENABLE_QT=OFF"
-      "-DENABLE_SDL2=OFF"
-      "-DENABLE_WEB_SERVICE=OFF"
-      "-DENABLE_DISCORD_PRESENCE=OFF"
-    ];
-    preConfigure = "sed -e '77d' -i externals/cmake-modules/GetGitRevisionDescription.cmake";
-    postBuild = "cd src/citra_libretro";
+    makeFlags = [ "HAVE_FFMPEG_STATIC=0" ];
   };
 
   desmume = mkLibRetroCore {
@@ -383,6 +359,7 @@ in
     core = "dosbox";
     description = "Port of DOSBox to libretro";
     license = lib.licenses.gpl2Only;
+    stdenvOverride = gcc10Stdenv;
   };
 
   eightyone = mkLibRetroCore {
@@ -476,11 +453,9 @@ in
     description = "Port of Hatari to libretro";
     license = lib.licenses.gpl2Only;
     extraBuildInputs = [ SDL zlib ];
-    extraNativeBuildInputs = [ cmake which ];
-    dontUseCmakeConfigure = true;
+    extraNativeBuildInputs = [ which ];
     dontConfigure = true;
     makeFlags = [ "EXTERNAL_ZLIB=1" ];
-    depsBuildBuild = [ buildPackages.stdenv.cc ];
   };
 
   mame = mkLibRetroCore {
@@ -488,7 +463,6 @@ in
     description = "Port of MAME to libretro";
     license = with lib.licenses; [ bsd3 gpl2Plus ];
     extraBuildInputs = [ alsa-lib libGLU libGL portaudio python3 xorg.libX11 ];
-    makefile = "Makefile.libretro";
   };
 
   mame2000 = mkLibRetroCore {
@@ -614,12 +588,18 @@ in
     preBuild = "cd libretro";
   };
 
+  nxengine = mkLibRetroCore {
+    core = "nxengine";
+    description = "NXEngine libretro port";
+    license = lib.licenses.gpl3Only;
+    makefile = "Makefile";
+  };
+
   np2kai = mkLibRetroCore rec {
     core = "np2kai";
     src = getCoreSrc core;
     description = "Neko Project II kai libretro port";
     license = lib.licenses.mit;
-    makefile = "Makefile.libretro";
     makeFlags = [
       # See https://github.com/AZO234/NP2kai/tags
       "NP2KAI_VERSION=rev.22"
@@ -699,7 +679,7 @@ in
     license = "MAME";
 
     extraBuildInputs = [ libpng SDL ];
-    SDL_CONFIG = "${SDL.dev}/bin/sdl-config";
+    SDL_CONFIG = "${lib.getDev SDL}/bin/sdl-config";
     dontAddPrefix = true;
     configurePlatforms = [ ];
     makeFlags = lib.optional stdenv.hostPlatform.isAarch64 [ "platform=aarch64" ];
diff --git a/nixpkgs/pkgs/applications/emulators/retroarch/default.nix b/nixpkgs/pkgs/applications/emulators/retroarch/default.nix
index 2c49874e5446..4a8c762b6a93 100644
--- a/nixpkgs/pkgs/applications/emulators/retroarch/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/retroarch/default.nix
@@ -5,6 +5,7 @@
 , withVulkan ? stdenv.isLinux
 , alsa-lib
 , AppKit
+, dbus
 , fetchFromGitHub
 , ffmpeg_4
 , Foundation
@@ -35,11 +36,11 @@
 }:
 
 let
-  version = "1.10.0";
+  version = "1.10.3";
   libretroCoreInfo = fetchFromGitHub {
     owner = "libretro";
     repo = "libretro-core-info";
-    sha256 = "sha256-3j7fvcfbgyk71MmbUUKYi+/0cpQFNbYXO+DMDUjDqkQ=";
+    sha256 = "sha256-wIIMEWrria8bZe/rcoJwDA9aCMWwbkDQFyEU80TZXFQ=";
     rev = "v${version}";
   };
   runtimeLibs = lib.optional withVulkan vulkan-loader
@@ -52,13 +53,13 @@ stdenv.mkDerivation rec {
   src = fetchFromGitHub {
     owner = "libretro";
     repo = "RetroArch";
-    sha256 = "sha256-bpTSzODVRKRs1OW6JafjbU3e/AqdQeGzWcg1lb9SIyo=";
+    sha256 = "sha256-nAv1yv0laqlOmB8UUkK5wSYy/ySqXloEErm+yV30bbA=";
     rev = "v${version}";
   };
 
   patches = [
-    ./0001-Disable-menu_show_core_updater.patch
-    ./0002-Use-fixed-paths-on-libretro_info_path.patch
+    ./disable-menu_show_core_updater.patch
+    ./use-fixed-paths-on-libretro_info_path.patch
   ];
 
   postPatch = ''
@@ -80,6 +81,7 @@ stdenv.mkDerivation rec {
     lib.optionals stdenv.isDarwin [ libobjc AppKit Foundation ] ++
     lib.optionals stdenv.isLinux [
       alsa-lib
+      dbus
       libX11
       libXdmcp
       libXext
@@ -95,7 +97,7 @@ stdenv.mkDerivation rec {
 
   enableParallelBuilding = true;
 
-  configureFlags = lib.optionals stdenv.isLinux [ "--enable-kms" "--enable-egl" ];
+  configureFlags = lib.optionals stdenv.isLinux [ "--enable-kms" "--enable-egl" "--enable-dbus" ];
 
   postInstall = ''
     mkdir -p $out/share/libretro/info
@@ -104,10 +106,35 @@ stdenv.mkDerivation rec {
   '' + lib.optionalString (runtimeLibs != [ ]) ''
     wrapProgram $out/bin/retroarch \
       --prefix LD_LIBRARY_PATH ':' ${lib.makeLibraryPath runtimeLibs}
+  '' + lib.optionalString stdenv.isDarwin ''
+    # https://github.com/libretro/RetroArch/blob/master/retroarch-apple-packaging.sh
+    app=$out/Applications/RetroArch.app
+    mkdir -p $app/Contents/MacOS
+    cp -r pkg/apple/OSX/* $app/Contents
+    cp $out/bin/retroarch $app/Contents/MacOS
+    # FIXME: using Info_Metal.plist results in input not working
+    # mv $app/Contents/Info_Metal.plist $app/Contents/Info.plist
+
+    substituteInPlace $app/Contents/Info.plist \
+      --replace '${"\${EXECUTABLE_NAME}"}' 'RetroArch' \
+      --replace '$(PRODUCT_BUNDLE_IDENTIFIER)' 'com.libretro.RetroArch' \
+      --replace '${"\${PRODUCT_NAME}"}' 'RetroArch' \
+      --replace '${"\${MACOSX_DEPLOYMENT_TARGET}"}' '10.13'
+
+    cp media/retroarch.icns $app/Contents/Resources/
   '';
 
   preFixup = "rm $out/bin/retroarch-cg2glsl";
 
+  # Workaround for the following error affecting newer versions of Clang:
+  # ./config.def.h:xxx:x: error: 'TARGET_OS_TV' is not defined, evaluates to 0 [-Werror,-Wundef-prefix=TARGET_OS_]
+  NIX_CFLAGS_COMPILE = lib.optionals stdenv.cc.isClang [ "-Wno-undef-prefix" ]
+    # Workaround build failure on -fno-common toolchains:
+    #   duplicate symbol '_apple_platform' in:ui_cocoa.o cocoa_common.o
+    # TODO: drop when upstream gets a fix for it:
+    #   https://github.com/libretro/RetroArch/issues/14025
+    ++ lib.optionals stdenv.isDarwin [ "-fcommon" ];
+
   meta = with lib; {
     homepage = "https://libretro.com";
     description = "Multi-platform emulator frontend for libretro cores";
@@ -115,8 +142,5 @@ stdenv.mkDerivation rec {
     platforms = platforms.unix;
     changelog = "https://github.com/libretro/RetroArch/blob/v${version}/CHANGES.md";
     maintainers = with maintainers; [ MP2E edwtjo matthewbauer kolbycrouch thiagokokada ];
-    # FIXME: exits with error on macOS:
-    # No Info.plist file in application bundle or no NSPrincipalClass in the Info.plist file, exiting
-    broken = stdenv.isDarwin;
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/retroarch/disable-menu-show-core-updater.patch b/nixpkgs/pkgs/applications/emulators/retroarch/disable-menu-show-core-updater.patch
deleted file mode 100644
index 34fea554ef71..000000000000
--- a/nixpkgs/pkgs/applications/emulators/retroarch/disable-menu-show-core-updater.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/retroarch.cfg b/retroarch.cfg
-index cdcb199c9f..ab72f3920f 100644
---- a/retroarch.cfg
-+++ b/retroarch.cfg
-@@ -681,7 +681,7 @@
- # menu_show_online_updater = true
- 
- # If disabled, will hide the ability to update cores (and core info files) inside the menu.
--# menu_show_core_updater = true
-+menu_show_core_updater = false
- 
- # If disabled, the libretro core will keep running in the background when we
- # are in the menu.
diff --git a/nixpkgs/pkgs/applications/emulators/retroarch/0001-Disable-menu_show_core_updater.patch b/nixpkgs/pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch
index 75018dc8c4d1..427cb4871dc9 100644
--- a/nixpkgs/pkgs/applications/emulators/retroarch/0001-Disable-menu_show_core_updater.patch
+++ b/nixpkgs/pkgs/applications/emulators/retroarch/disable-menu_show_core_updater.patch
@@ -1,7 +1,7 @@
 From 546b343294209abbb193883ab76b679b7f99c6d3 Mon Sep 17 00:00:00 2001
 From: Thiago Kenji Okada <thiagokokada@gmail.com>
 Date: Sat, 20 Nov 2021 16:03:50 -0300
-Subject: [PATCH 1/2] Disable "menu_show_core_updater"
+Subject: [PATCH] Disable "menu_show_core_updater"
 
 ---
  retroarch.cfg | 2 +-
diff --git a/nixpkgs/pkgs/applications/emulators/retroarch/hashes.json b/nixpkgs/pkgs/applications/emulators/retroarch/hashes.json
index 1280f25047d8..41649cbf4c00 100644
--- a/nixpkgs/pkgs/applications/emulators/retroarch/hashes.json
+++ b/nixpkgs/pkgs/applications/emulators/retroarch/hashes.json
@@ -2,8 +2,8 @@
     "atari800": {
         "owner": "libretro",
         "repo": "libretro-atari800",
-        "rev": "478a8ec99a7f8436a39d5ac193c5fe313233ee7b",
-        "sha256": "LJpRegJVR2+sS1UmTTpVest0rMrNDBMXmj/jRFVglWI="
+        "rev": "beab30e7ea10b7ed14d0514064f47d16f76cd995",
+        "sha256": "r9MsnasNhhYdFyr2VHJXkTXssB5U00JW6wN/+i+SNUk="
     },
     "beetle-gba": {
         "owner": "libretro",
@@ -14,62 +14,62 @@
     "beetle-lynx": {
         "owner": "libretro",
         "repo": "beetle-lynx-libretro",
-        "rev": "8930e88a4342945c023cbf713031a65de11a8e75",
-        "sha256": "bg/a+9ZJNTUIuEHKrFIss8sia3JWMWXIXbxha5qKVeI="
+        "rev": "de0d520d679cb92767876d4e98da908b1ea6a2d6",
+        "sha256": "BszU5bnlHBOwQSZOM9P4WIP863rS5RluNWvGBFxqzYs="
     },
     "beetle-ngp": {
         "owner": "libretro",
         "repo": "beetle-ngp-libretro",
-        "rev": "f7c393184e5228c3d3807ee74c951c4c549107d8",
-        "sha256": "7vki8VkwOzxwMZcUxekg1DFSskV7VNQ1SRaU3M1xHZ0="
+        "rev": "facf8e1f5440c5d289258ee3c483710f3bf916fb",
+        "sha256": "vDKDt7MvCB9XQYP291cwcEPDxfNIVgNSWtBYz9PVgcw="
     },
     "beetle-pce-fast": {
         "owner": "libretro",
         "repo": "beetle-pce-fast-libretro",
-        "rev": "0f43fd4dc406e7da6bbdc13b6eb1c105d6072f8a",
-        "sha256": "u1lOgXEYuGAF4sOLdsBzcA4/A5Yz1b82TjFBiM57yE4="
+        "rev": "e8801687f232a6f8828b3ff5dadbc9fe1b0076fc",
+        "sha256": "YM+URLnMqsdmk/5yqCg8U4mPpgtmj5qne2CrbTpTeN8="
     },
     "beetle-pcfx": {
         "owner": "libretro",
         "repo": "beetle-pcfx-libretro",
-        "rev": "6d2b11e17ad5a95907c983e7c8a70e75508c2d41",
-        "sha256": "WG2YpCYdL/MxW5EbiP2+1VtAjbX7yYDIcLXhb+YySI4="
+        "rev": "bfc0954e14b261a04dcf8dbe0df8798f16ae3f3c",
+        "sha256": "XzCb1lZFYgsg+3eQ1OqyycNxCgLtZFA30rno3ytdnoM="
     },
     "beetle-psx": {
         "owner": "libretro",
         "repo": "beetle-psx-libretro",
-        "rev": "297970e4ff080ea80a5670209aeea4fde8059020",
-        "sha256": "6kZher3/+5ywXyC3n9R9JVA4IVLZBaSfAcWEKp2SsDE="
+        "rev": "5a24d54d30dd00d817d267cf92fd5b3f4640928f",
+        "sha256": "uG1BhElNW75PnfM+rEYfbl97iwRT89hnl84yvlgx6fg="
     },
     "beetle-saturn": {
         "owner": "libretro",
         "repo": "beetle-saturn-libretro",
-        "rev": "e6ba71f8bcc647b646d94dec812b24d00c41cf3f",
-        "sha256": "tDbV+CsDr4bowBbJ/C8J9scfCryTAXxz58pGaUHU5yU="
+        "rev": "dd18f9c477106263b3b7b050f4970d331ff7b23a",
+        "sha256": "RN5dmORtNOjIklSz/n11lz37bZ4IcPD7cyRcBGS4Oi8="
     },
     "beetle-snes": {
         "owner": "libretro",
         "repo": "beetle-bsnes-libretro",
-        "rev": "bc867656d7438aaffc6818b3b92350587bc78a47",
-        "sha256": "TyUCRGK+uyXowDjXW9/4m+zL8Vh/3GGsX1eznrTCbAg="
+        "rev": "d770563fc3c4bd9abb522952cefb4aa923ba0b91",
+        "sha256": "zHPtfgp9hc8Q4gXJ5VgfJLWLeYjCsQhkfU1T5RM7AL0="
     },
     "beetle-supergrafx": {
         "owner": "libretro",
         "repo": "beetle-supergrafx-libretro",
-        "rev": "7bae6fb1a238f1e66b129c7c70c7cb6dbdc09fa1",
-        "sha256": "OAJ86XrwjDrgCjrk0RHMn8sHYaJFhJhLaQnhaEVXN38="
+        "rev": "59991a98c232b1a8350a9d67ac554c5b22771d3c",
+        "sha256": "zv3dAPWrj6hkNaFQ5vUKm5Orcrb2XO48WSkAFiAVUO0="
     },
     "beetle-vb": {
         "owner": "libretro",
         "repo": "beetle-vb-libretro",
-        "rev": "aa77198c6c60b935503b5ea2149b8ff7598344da",
-        "sha256": "ShsMYc2vjDoiN1yCCoSl91P5ecYJDj/V+VWUYuYVxas="
+        "rev": "246555f8ed7e0b9e5748b2ee2ed6743187c61393",
+        "sha256": "96lQlDqx2bvFeovqGGkemxqS2zlHw92O6YeTEGlgf34="
     },
     "beetle-wswan": {
         "owner": "libretro",
         "repo": "beetle-wswan-libretro",
-        "rev": "5717c101b314f64d4c384c23b1934d09fcbf82bb",
-        "sha256": "Nfezb6hja1qHv1fMGU9HMbbb56GHAfe/zIgRqrzz334="
+        "rev": "d1fb3f399a2bc16b9ad0f2e8c8ba9f7051cd26bd",
+        "sha256": "p9mJv7zBFjNh1sh5iAjBZzxP6k8ydUNDXLQIjHl9doQ="
     },
     "blastem": {
         "owner": "libretro",
@@ -80,14 +80,14 @@
     "bluemsx": {
         "owner": "libretro",
         "repo": "bluemsx-libretro",
-        "rev": "5dfdb75106e10ef8bc21b8bcea1432ecbd590b2a",
-        "sha256": "0D0xufIt3qmQ+/UjyWynoLyLDSza8cTrFp3UwGWBXko="
+        "rev": "92d0c41b4973854114c7b2d06ab727a266d404c5",
+        "sha256": "dL4k+zG8L4KK4lwf9eXPVGk/u5xQn2htIEpoKyj9kQI="
     },
     "bsnes": {
         "owner": "libretro",
         "repo": "bsnes-libretro",
-        "rev": "1b2987ab1e9caf5c8d7550da01ffa08edff2f128",
-        "sha256": "l6Jvn0ZgFaKSWjiV2bN9aemxLyfnNEQFc+HS1/MuiaY="
+        "rev": "26c583e1c5d09253b6c61e2b9d418e8758eef632",
+        "sha256": "Qa0ScFHcEgBUoWouNoW4JINZ2aHjNATndxhcwKw476Q="
     },
     "bsnes-hd": {
         "owner": "DerKoun",
@@ -98,152 +98,141 @@
     "bsnes-mercury": {
         "owner": "libretro",
         "repo": "bsnes-mercury",
-        "rev": "d232c6ea90552f5921fec33a06626f08d3e18b24",
-        "sha256": "fpl7hmqz+Ca+9ZeM6E1JSikbiu+NJUU8xXtyl6Dd9Gg="
+        "rev": "4ba6d8d88e57d3193d95e1bcf39e8d31121f76d4",
+        "sha256": "w2MVslgRlxW4SMzgcXP4gXr9A8B07N7LNrB1LXzk1Zk="
     },
     "citra": {
         "owner": "libretro",
         "repo": "citra",
-        "rev": "b1959d07a340bfd9af65ad464fd19eb6799a96ef",
-        "sha256": "bwnYkMvbtRF5bGZRYVtMWxnCu9P45qeX4+ntOj9eRds=",
-        "fetchSubmodules": true,
-        "leaveDotGit": true,
-        "deepClone": true
-    },
-    "citra-canary": {
-        "owner": "libretro",
-        "repo": "citra",
-        "rev": "5401990a9be46e4497abc92db3d5f2042674303d",
-        "sha256": "JKKJBa840i7ESwMrB5tKamCBmrYvvoEUdibqxkWg5Gc=",
-        "fetchSubmodules": true,
-        "leaveDotGit": true,
-        "deepClone": true
+        "rev": "44e01f99016008eff18bc7a28234d1098382358d",
+        "sha256": "vIrUStv+VM8pYeznnWSVBRfSA71/B7VIY7B/syymGzE=",
+        "fetchSubmodules": true
     },
     "desmume": {
         "owner": "libretro",
         "repo": "desmume",
-        "rev": "7ea0fc96804fcd9c8d33e8f76cf64b1be50cc5ea",
-        "sha256": "4S/CirRVOBN6PVbato5X5fu0tBn3Fu5FEAbdf3TBqng="
+        "rev": "5d0ae2be2c9fb6362af528b3722e81323318eb9f",
+        "sha256": "4bJ6fLZ+fV7SnZ71YT3JFcXFOgmskNUCmCHwc2QNl0A="
     },
     "desmume2015": {
         "owner": "libretro",
         "repo": "desmume2015",
-        "rev": "cd89fb7c48c735cb321311fbce7e6e9889dda1ce",
-        "sha256": "9Ou/n6pxRjJOp/Ybpyg4+Simosj2X26kLZCMEqeVL6U="
+        "rev": "af397ff3d1f208c27f3922cc8f2b8e08884ba893",
+        "sha256": "kEb+og4g7rJvCinBZKcb42geZO6W8ynGsTG9yqYgI+U="
     },
     "dolphin": {
         "owner": "libretro",
         "repo": "dolphin",
-        "rev": "3b19e6d1781584f3e1fd2922b48b8ae6b3bcb686",
-        "sha256": "EcgJhkMzdZfYRwSpU1OcsJqQyq4V8dq5PndVufZFy7k="
+        "rev": "6a0b6ee8a4d5363e669f5faf43abc8f17e4278a8",
+        "sha256": "TeeHnttGmCeOTDTK/gJM+RpusjDDndapZAa3T+oLiq0="
     },
     "dosbox": {
         "owner": "libretro",
         "repo": "dosbox-libretro",
-        "rev": "aa71b67d54eaaf9e41cdd3cb5153d9cff0ad116e",
-        "sha256": "L0Y67UROjldnXUlLQ+Xbd7RHLb96jDxlB/k+LR9Kbas="
+        "rev": "74cd17ed0ff810ff78cb8c1f1e45513bfe8a0f32",
+        "sha256": "0PIloW7j/87asDJ8IDw4r3r4muxNF+RbvkIRPLZQvRc="
     },
     "eightyone": {
         "owner": "libretro",
         "repo": "81-libretro",
-        "rev": "86d7d5afe98f16006d4b1fdb99d281f1d7ea6b2f",
-        "sha256": "QN7anzqv1z8SgY8dlkjr8Ns7reGWc7hTneiRmorXZSk="
+        "rev": "2e34567a320cba27b9162b1776db4de3cdb7cf03",
+        "sha256": "vjrHRLzc9Fy0MwV9d+LlcJTGJfVsRauEig8R+erBtfw="
     },
     "fbalpha2012": {
         "owner": "libretro",
         "repo": "fbalpha2012",
-        "rev": "23f98fc7cf4f2f216149c263cf5913d2e28be8d4",
-        "sha256": "dAInW6tTV7oXcPhKMnHWcmQaWQCTqRrYHD2yuaI1I1w="
+        "rev": "7f8860543a81ba79c0e1ce1aa219af44568c628a",
+        "sha256": "r1lH+CR+nVRCPkVo0XwLi35/ven/FEkNhWUTA6cUVxc="
     },
     "fbneo": {
         "owner": "libretro",
         "repo": "fbneo",
-        "rev": "4ecf2782a4eee042d1e126d1671e5231b6437b6e",
-        "sha256": "15MYI03r45mmRsXCwzWnjfBdtzSaHLp7DfmcACQFTvU="
+        "rev": "e4625a196b9232ba93a156e3a5164aa11193f20a",
+        "sha256": "/5JmwuLWWBQWXnqCMjKzOC2XG6wo5a6xgQOYX1P1zcw="
     },
     "fceumm": {
         "owner": "libretro",
         "repo": "libretro-fceumm",
-        "rev": "eb06d17e7912780a3ee117ae73bc50c3948c761c",
-        "sha256": "aBqskJtK1bFBjwaoo9hilr33fyAWsdj5+hFC3WY3sKk="
+        "rev": "b3c35b6515b2b6a789c589f976a4a323ebebe3eb",
+        "sha256": "zwFQGQyO0Vj/IBM1k8JB3D/jB3OwDuGdSHLavr8Fxgw="
     },
     "flycast": {
         "owner": "libretro",
         "repo": "flycast",
-        "rev": "0d8c6a2e717c002bc76ce26a152353b004fb15e7",
-        "sha256": "t2RGHAyYXeHVqTqqhayOUWx/msFN9q/Z9P2wXJUtQTI="
+        "rev": "4c293f306bc16a265c2d768af5d0cea138426054",
+        "sha256": "9IxpRBY1zifhOebLJSDMA/wiOfcZj+KOiPrgmjiFxvo="
     },
     "fmsx": {
         "owner": "libretro",
         "repo": "fmsx-libretro",
-        "rev": "dfcda056896576c6a1c75c002a82d0e6c1160ccc",
-        "sha256": "9ANZ1suAQcYOhqSchQ20Yuqvgw06j5Sd3Z1fjrp2UFc="
+        "rev": "11fa9f3c08cde567394c41320ca76798c2c64670",
+        "sha256": "1u5c5oDIjjXEquh6UBv2H1F/Ln7h44DTF1ohDG0Qnww="
     },
     "freeintv": {
         "owner": "libretro",
         "repo": "freeintv",
-        "rev": "d58caf23ed1438a1db58f8d6ac24ca521b411d3b",
-        "sha256": "nUV+A3Zh66M1K5NDK0ksNF5H1HS3AQdeYLaGfaA34n4="
+        "rev": "295dd3c9e4b2d4f652f6a6a904afbe90a8187068",
+        "sha256": "tz0X6AfD7IL3Y50vjgSO5r6sDhu++6Gj8Rp7de5OqMk="
     },
     "gambatte": {
         "owner": "libretro",
         "repo": "gambatte-libretro",
-        "rev": "79bb2e56d034c30d8dcac02b6c34a59ec8fe91bc",
-        "sha256": "H+Hkeep18whaSYbyG8DcaJqsVVu7DEX9T28pkfXfyCg="
+        "rev": "15536214cdce31894d374b2ffa2494543057082b",
+        "sha256": "cTSoK6rezRajnuWPt7WkYn3SWL0sTu7h5X3Ig1KukDA="
     },
     "genesis-plus-gx": {
         "owner": "libretro",
         "repo": "Genesis-Plus-GX",
-        "rev": "88c9ad000ba553b9c819d9eb259f741fabd877bb",
-        "sha256": "8ZCMq8/sk5TqwTNWMfDevZHRPSOM1PJ57kiZZ7qfQxA="
+        "rev": "7520ac8aae7b08262c0472e724e6ef0bfe41d285",
+        "sha256": "wKcO/dulgZKgXTuHdcQvfSrfxSI5UA0az6qMLtP4K6g="
     },
     "gpsp": {
         "owner": "libretro",
         "repo": "gpsp",
-        "rev": "e554360dd3ed283696fc607877024a219248b735",
-        "sha256": "ImsqB89XmjF8nvs7j8IZVvFltgZRYvF2L7LTcJG/xCU="
+        "rev": "f0f0b31f9ab95946965b75fed8d31e19290f3d43",
+        "sha256": "aiegBSpQDyXzVkyWuUpI66QvA1tqS8PQ8+75U89K10A="
     },
     "gw": {
         "owner": "libretro",
         "repo": "gw-libretro",
-        "rev": "0f1ccca156388880bf4507ad44741f80945dfc6f",
-        "sha256": "BVpx8pL224J2u9W6UDrxzfEv4qIsh6wrf3bDdd1R850="
+        "rev": "d08a08154ce8ed8e9de80582c108f157e4c6b226",
+        "sha256": "PWd/r4BBmhiNqJdV6OaXHr4XCdR1GyVipq3zvyBcqEs="
     },
     "handy": {
         "owner": "libretro",
         "repo": "libretro-handy",
-        "rev": "3b02159ba32aa37c1b93d7f7eac56b28e3715645",
-        "sha256": "mBKK+pdWgkxYkV4OOiBrlWbLAMugDX0fd6QRh0D7JYU="
+        "rev": "517bb2d02909271836604c01c8f09a79ad605297",
+        "sha256": "Igf/OvmnCzoWjCZBoep7T0pXsoBKq3NJpXlYhE7nr3s="
     },
     "hatari": {
         "owner": "libretro",
         "repo": "hatari",
-        "rev": "79d128888ca3efdd27d639a35edf72a9bc81a798",
-        "sha256": "du2xORgAXTSQArqNuFa5gjticgZ+weqySFHVz2Y2qzI="
+        "rev": "e5e36a5262cfeadc3d1c7b411b7a70719c4f293c",
+        "sha256": "T4I3NVEMBKr5HLs60x48VNRl2TMnhqvaF+LTtYQ7qdU="
     },
     "mame": {
         "owner": "libretro",
         "repo": "mame",
-        "rev": "2f9c793a77222ae46266c71f64d491cf7870dc1e",
-        "sha256": "WAhm6QMMVbnuSIK4PW7Ek+AAkMs7s95gGb6ERzlon0w="
+        "rev": "b7dd999590717638ceade2e24d16d63147aa12ad",
+        "sha256": "QgENNjykhO+WSxAb//J+R7QP3/rZnxqv7sarO4eBYuc="
     },
     "mame2000": {
         "owner": "libretro",
         "repo": "mame2000-libretro",
-        "rev": "4793742b457945afb74053c8a895e6ff0b36b033",
-        "sha256": "DA9fZTic/jlYzSAIiOjfhohyEyQZiBNdIa8YCZoKZNs="
+        "rev": "dd9d6612c29bf5b29bc2f94cab2d43fe3dcd69ee",
+        "sha256": "X0fP0bNBk2hqXVdRspylLIjZO563aMXkyX4qgx/3Vr8="
     },
     "mame2003": {
         "owner": "libretro",
         "repo": "mame2003-libretro",
-        "rev": "dbda6ddacdd8962cfea25000421dba398e551aef",
-        "sha256": "RSL3iZZEJCxOtsJqjnM5ZiT0yM2nAgg/Ujq6FBLMHkk="
+        "rev": "3eb27d5f161522cf873c0642f14b8e2267b3820f",
+        "sha256": "TQ4FwboKeEP58hOL2hYs4OYes2o0wSKFSp4CqZV5r6I="
     },
     "mame2003-plus": {
         "owner": "libretro",
         "repo": "mame2003-plus-libretro",
-        "rev": "9c0c954f0f88730f44abdd4d414691fef6b1cd7c",
-        "sha256": "NLdHc0VuZhqQhAzv+8kipc0mhqT2BNaJeLYZUx7DwRU="
+        "rev": "e5ee29ecb8182952f861f22516e5791625fe2671",
+        "sha256": "YunfAITR/Etm8lvEab/HigZoBz+ayJQ7ezjItWI/HvE="
     },
     "mame2010": {
         "owner": "libretro",
@@ -260,26 +249,26 @@
     "mame2016": {
         "owner": "libretro",
         "repo": "mame2016-libretro",
-        "rev": "bcff8046328da388d100b1634718515e1b15415d",
-        "sha256": "XxnX39+0VUbG9TF8+wFEFVxHCm2rzrJsIQryyNsF6zU="
+        "rev": "01058613a0109424c4e7211e49ed83ac950d3993",
+        "sha256": "IsM7f/zlzvomVOYlinJVqZllUhDfy4NNTeTPtNmdVak="
     },
     "melonds": {
         "owner": "libretro",
         "repo": "melonds",
-        "rev": "0053daa700018657bf2e47562b3b4eb86f9b9d03",
-        "sha256": "K6ZYuk7cE+ioq1rLRyAKNQxddCYIOXLU5SXT7sYgGnc="
+        "rev": "e93ec3e462d3dfc1556781510a3cee113f02abb2",
+        "sha256": "NDrsqX17OKw1/PIZSrWAxhVl+Qk/xG7lCnr6Ts+7YJ4="
     },
     "mesen": {
         "owner": "libretro",
         "repo": "mesen",
-        "rev": "094d82bf724448426acbaad45e83bc38994e32f6",
-        "sha256": "9+AqZRv8lugNNa+ZZzIPJNO87J1aBUEiOggL8aYno1M="
+        "rev": "bb9ea02eba28682986044a6f49329ec533aa26ba",
+        "sha256": "G2NQDpByvI9RFEwrRiKXcMnPtVtqpvEoZgk7/fk5qCU="
     },
     "mesen-s": {
         "owner": "libretro",
         "repo": "mesen-s",
-        "rev": "42eb0e8ad346608dae86feb8a04833d16ad21541",
-        "sha256": "q6zeoNiZtFy8ZYls9/E+O7o9BYTcVcmYjbJA48qiraU="
+        "rev": "b0b53409eecb696fb13f411ffde72e8f576feb09",
+        "sha256": "lDHyeIsVsI5+ZK8EJI50alrFuu0uJmxscda5bR1UmQQ="
     },
     "meteor": {
         "owner": "libretro",
@@ -290,39 +279,45 @@
     "mgba": {
         "owner": "libretro",
         "repo": "mgba",
-        "rev": "43da6e1d54ad0395f474346db88fe59a4c0aa451",
-        "sha256": "JxiWIBQi1fZoBV2lvx2r7iIvlQm0BYuJFz0TsxngUT8="
+        "rev": "5d48e0744059ebf38a4e937b256ffd5df4e0d103",
+        "sha256": "OYw2nlldFx5B7WX0E8Gbgfp1j4h65ZxyKDS9tneHXQg="
     },
     "mupen64plus": {
         "owner": "libretro",
         "repo": "mupen64plus-libretro-nx",
-        "rev": "350f90a73cf0f5d65357ce982ccbaa3b22fc3569",
-        "sha256": "9Hq93+dvO60LBbcXLIHsTq243QThicI0rVJW3tou/5Y="
+        "rev": "6e9dcd2cd9d23d3e79eaf2349bf7e9f25ad45bf1",
+        "sha256": "rs/VL2K6aS8Rl01IyxUiWipzLEzg+7+fbXxI0qN5X/I="
     },
     "neocd": {
         "owner": "libretro",
         "repo": "neocd_libretro",
-        "rev": "83d10f3be10fff2f28aa56fc674c687528cb7f5c",
-        "sha256": "yYZGoMsUfE8cpU9i826UWQGi1l0zPJPcBDb2CINxGeQ="
+        "rev": "327aeceecdf71c8a0c0af3d6dc53686c94fe44ad",
+        "sha256": "cY0P+0EQ0b9df+YT2EMvrxjp5L+DwIg31rEJqchU+hc="
     },
     "nestopia": {
         "owner": "libretro",
         "repo": "nestopia",
-        "rev": "8af07b7ab49e45495cbc4ba73cd2f879d9908b55",
-        "sha256": "Z447flP1L/7gWEovWhbBearPKzsZNnGE2cz7jH7kEnY="
+        "rev": "a9e197f2583ef4f36e9e77d930a677e63a2c2f62",
+        "sha256": "QqmWSk8Ejf7QMJk0cVBgpnyqcK6oLjCnnXMXInuWfYc="
     },
     "np2kai": {
         "owner": "AZO234",
         "repo": "NP2kai",
-        "rev": "30d4b6959c48db039207a37e278c868c7737ed69",
-        "sha256": "uIcgbpcEz6yUKrBe0r84Yq2ihWfT0+TdUTIF5kMT5mI=",
+        "rev": "2b09ea6a589cdcae27bca27160b3f82638fbb45d",
+        "sha256": "M3kGA1TU3xui6of9XgUspI+Zf+hjYP1d2mgKwxsy3IQ=",
         "fetchSubmodules": true
     },
+    "nxengine": {
+        "owner": "libretro",
+        "repo": "nxengine-libretro",
+        "rev": "bc692a392473a45f63cdccbb353c3445b530d671",
+        "sha256": "tAZkYHRKL+mI6f7YCnaU0qTSOZGW2o20p6wovMK1n2k="
+    },
     "o2em": {
         "owner": "libretro",
         "repo": "libretro-o2em",
-        "rev": "f1050243e0d5285e7769e94a882b0cf39d2b7370",
-        "sha256": "wD+iJ8cKC8jYFZ6OVvX71uO7sSh5b/LLoc5+g7f3Yyg="
+        "rev": "641f06d67d192a0677ec861fcb731d3ce8da0f87",
+        "sha256": "s3FreOziXeGhUyQdSoOywZldD21m3+OXK0EJ2Z8rXiY="
     },
     "opera": {
         "owner": "libretro",
@@ -333,59 +328,59 @@
     "parallel-n64": {
         "owner": "libretro",
         "repo": "parallel-n64",
-        "rev": "28c4572c9a09447b3bf5ed5fbd3594a558bc210d",
-        "sha256": "by8NvKjVT9OrgVhNtv5E4Fqmdva42lWV8UQi0SKfBL8="
+        "rev": "b804ab1a199d6ff1f8fef4aa7dfcf663990e430b",
+        "sha256": "zAet6hYa/79CBbvwZNTNs/ayWuHHlwg+0Y4BAUFddBc="
     },
     "pcsx2": {
         "owner": "libretro",
         "repo": "pcsx2",
-        "rev": "3ef2a36b0608e9dcae808c7ef01c7a760d628735",
-        "sha256": "ezqVntonhGfejiGx9cxQEnjsXEHqT++M1fO0Jz1t/Us="
+        "rev": "0251730a21d7238856d79aa25e2942b48edb38f6",
+        "sha256": "a/lWLBCww4QwxdO7Sbvmfq0XF9FnP4xzF51ljsWk46I="
     },
     "pcsx_rearmed": {
         "owner": "libretro",
         "repo": "pcsx_rearmed",
-        "rev": "12fc12797064599dfca2d44043d5c02a949711ef",
-        "sha256": "SXmNfHGyk+KChiwkKlA+d/oezzp/7p1DJY+w2bES6kg="
+        "rev": "e24732050e902bd5402b2b7da7c391d2ca8fa799",
+        "sha256": "tPz5E3QO6FucjYOzdjbY2FHLPz1Fmms10tdt7rZIW8U="
     },
     "picodrive": {
         "owner": "libretro",
         "repo": "picodrive",
-        "rev": "50b8b47838fea8096535d543caaacdcc56aa7df2",
-        "sha256": "C1Htwel5PHZcjkKmjiiN/QgRofMhqlArxktOSqoTxTc=",
+        "rev": "7ff457f2f833570013f2a7e2608ac40632e0735d",
+        "sha256": "xEG5swvvWFhvosC1XpFaZphESNaf4AtX+6UE02B57j8=",
         "fetchSubmodules": true
     },
     "play": {
         "owner": "jpd002",
         "repo": "Play-",
-        "rev": "fd6a5161030215090d48a8036680f57914c71bb0",
-        "sha256": "g6UBRV7biLjPBXdlejjXUSk3v1wrsYWA3quZlpPj23U=",
+        "rev": "39eb5c2eb6da65dc76b1c4d1319175a68120a77a",
+        "sha256": "EF3p0lvHjKGt4pxtTAkDM+uHsnW72lN+Ki8BaZIk/BQ=",
         "fetchSubmodules": true
     },
     "ppsspp": {
         "owner": "hrydgard",
         "repo": "ppsspp",
-        "rev": "54d63cc1daf2a0cdc812e9af85854bb4ae5ef399",
-        "sha256": "iB/8zf4FYdsbiKZVq/YISTEQSoo1kme1uZsyuhbOcoc=",
+        "rev": "83b8211abf7fb705835eb1ccf8feae04816ae96c",
+        "sha256": "8K4bz/GUnE8GrlAVFULMXLC+i3ZYvR28EpehEg6up4s=",
         "fetchSubmodules": true
     },
     "prboom": {
         "owner": "libretro",
         "repo": "libretro-prboom",
-        "rev": "af1b5bf89d01095326ee27e178f9257f9e728873",
-        "sha256": "pvTUv4E+wBOYfjz8Ph11CK4E7rIm1T+u90TWDNXEBIU="
+        "rev": "b22a6b19fd976a14374db9083baea9c91b079106",
+        "sha256": "NmEWRTHaZjV2Y6Wrc3WOamXCnOawKc2ja1KBDxokRiY="
     },
     "prosystem": {
         "owner": "libretro",
         "repo": "prosystem-libretro",
-        "rev": "89e6df7b60d151310fedbe118fb472959a9dcd61",
-        "sha256": "uxgKddS53X7ntPClE8MGezBAG+7OAFvMXTnyKpOOau0="
+        "rev": "fbf62c3dacaac694f7ec26cf9be10a51b27271e7",
+        "sha256": "Opb6CUeT/bnaTg4MJo7DNsVyaPa73PLbIor25HHWzZ0="
     },
     "quicknes": {
         "owner": "libretro",
         "repo": "QuickNES_Core",
-        "rev": "743e6e06db246c5edab27c738c7a573d83140485",
-        "sha256": "NYmP+HFeZGUeIRaT3bzdpWw9cmEAaBkA3EGnw/zpDXA="
+        "rev": "e6f08c165af45fc2d2f26c80ba0cfc33e26f9cfe",
+        "sha256": "JQtlqN3mvIwKy6iN9opHPHnh0E7AIn9JVitIfXklI/I="
     },
     "sameboy": {
         "owner": "libretro",
@@ -396,56 +391,56 @@
     "scummvm": {
         "owner": "libretro",
         "repo": "scummvm",
-        "rev": "80cb7269a33b233dcea27d8d01df084b0d35c80a",
-        "sha256": "5kMWM8d5aBbT7TseNyaYxw7VDkrLL0G+KUvJcUboQgA="
+        "rev": "2fb2e4c551c9c1510c56f6e890ee0300b7b3fca3",
+        "sha256": "wrlFqu+ONbYH4xMFDByOgySobGrkhVc7kYWI4JzA4ew="
     },
     "smsplus-gx": {
         "owner": "libretro",
         "repo": "smsplus-gx",
-        "rev": "3f1ffede55bcfe0168caa484a00bf041ab591abf",
-        "sha256": "fD+grzMPk4uXvmzGf+f9Mor0eefBLHIumCydsSHUsck="
+        "rev": "9de9847dc8ba458e9522d5ae8b87bf71ad437257",
+        "sha256": "XzqQ/3XH5L79UQep+DZ+mDHnUJKZQXzjNCZNZw2mGvY="
     },
     "snes9x": {
         "owner": "snes9xgit",
         "repo": "snes9x",
-        "rev": "34b6160805c4995a8edf5f9b3328f5e492ae4c44",
-        "sha256": "YRRqtd5iu2evRk+7SyQpqpxqTaEFOkDZ/XQHEjpSBcM="
+        "rev": "3c729a9763263bc3a69f48370e43ae05e672970a",
+        "sha256": "01M6Wvbu1omMwh3Xg4RGh028jirGs7mLpxwKJgMRQxA="
     },
     "snes9x2002": {
         "owner": "libretro",
         "repo": "snes9x2002",
-        "rev": "e16cb16efa00765b1bc3b8fee195680efb1542c7",
-        "sha256": "0dhLpNy+NUE3mE/ejEwbq3G28/a2HONS5NPslI5LOEc="
+        "rev": "c4397de75a5f11403d154abd935e39fe969bca94",
+        "sha256": "yL4SIRR1Er+7Iq3YPfoe5ES47nvyA3UmGK+upLzKiFA="
     },
     "snes9x2005": {
         "owner": "libretro",
         "repo": "snes9x2005",
-        "rev": "77e9cd293c791b47f4397da0a47242b329243cb5",
-        "sha256": "iHGfZIGzE4n3EHrVRxTULuYKsOse5NcJftmasoJFwFo="
+        "rev": "23f759bc4bf2e39733296f7749e446418e3cd0f3",
+        "sha256": "/bZrMp7NHgdYvA3Tw1ZoWXRg7VxmatRUX5cCJsU3NCY="
     },
     "snes9x2010": {
         "owner": "libretro",
         "repo": "snes9x2010",
-        "rev": "714b1c8e08c7580430190119b07e793405773ac2",
-        "sha256": "yKSQEE+lT4V2V1XqemfziHuIt79TcvC0ranU9ounTXo="
+        "rev": "c98224bc74aa0bbf355d128b22e4a2a4e94215b0",
+        "sha256": "mf5msdwdcRRfFWHwmWLS/qKd7gNlLwexGEB6wB6TfhE="
     },
     "stella": {
         "owner": "stella-emu",
         "repo": "stella",
-        "rev": "1db9de390a331a7d55c35591c93d9e89184cce5f",
-        "sha256": "vICKxx+UBYvMzZ3a3F86yzJRKfdo0jMxa27wsUX0KZw="
+        "rev": "efb2a9f299cad241e12d811580f28d75b6c3438d",
+        "sha256": "QYwDTd8EZUMXJiuSJtoW8XQXgl+Wx0lPkNLOwzM5bzA="
     },
     "stella2014": {
         "owner": "libretro",
         "repo": "stella2014-libretro",
-        "rev": "934c7a2a44ef038af529b68950ddba4f7ea3478e",
-        "sha256": "s7LQ47sAPTyk4COONk4qnebxCq78zGLIjh3Y2+1fIak="
+        "rev": "1351a4fe2ca6b1f3a66c7db0df2ec268ab002d41",
+        "sha256": "/sVDOfP5CE8k808lhmH3tT47oZ1ka3pgDG5LglfPmHc="
     },
     "swanstation": {
         "owner": "libretro",
         "repo": "swanstation",
-        "rev": "61c5debe60192b0fecd8c15310b2e4c4473f9438",
-        "sha256": "DZJApJnGDMsUhjO35TBc7tMldCGKDPPtrwxPLe0Ey1s="
+        "rev": "0e53a5ac09a30d73d78b628f7e4954ebe5615801",
+        "sha256": "vOu99fsm2oeSi96tWR+vV5suZSYCyXJVgOdvjnKbNhg="
     },
     "tgbdual": {
         "owner": "libretro",
@@ -462,8 +457,8 @@
     "tic80": {
         "owner": "libretro",
         "repo": "tic-80",
-        "rev": "967eb78c3610385a0e6cba8bb5c60ebc3b886d3e",
-        "sha256": "N0QFNTYFVbhWwt2yx5fLM7Dl6pJZPYrt9o3+6rjnWa8=",
+        "rev": "e9f62f85a154796c6baaee8a9f6fd0cfdd447019",
+        "sha256": "JTAoIqxqpaLjsQiIpJ4wQsREI5/rTxVxDywoL3oLI4Q=",
         "fetchSubmodules": true
     },
     "vba-m": {
@@ -475,25 +470,25 @@
     "vba-next": {
         "owner": "libretro",
         "repo": "vba-next",
-        "rev": "b218f48bb27b5d3885fa4076ff325922b5acd817",
-        "sha256": "idqGMbMA9mZlIh0QAba3BxpPDi/bFJJkUbnxV3xMOCo="
+        "rev": "4191e09e2b0fcf175a15348c1fa8a12bbc6320dd",
+        "sha256": "IG2oH4F17tlSv1cXYZobggb37tFNE53JOHzan/X0+ws="
     },
     "vecx": {
         "owner": "libretro",
         "repo": "libretro-vecx",
-        "rev": "28d6efc8972313903d0802a736ff8c3bc115e78f",
-        "sha256": "VYa8s+HB8IYF+HS6SA+sO5DzpgCtnMGrh88KTVNGICY="
+        "rev": "141af284202c86ed0d4ce9030c76954a144287cf",
+        "sha256": "p5vMuG2vr3BTJOQWNcTPb89MlkVrRvJNTIJSU8r9zfU="
     },
     "virtualjaguar": {
         "owner": "libretro",
         "repo": "virtualjaguar-libretro",
-        "rev": "d1b1b28a6ad2518b746e3f7537ec6d66db96ec57",
-        "sha256": "Io25dt80fqIqIxwzF2DK9J5UFz6YCUQoqThcIuxdEBo="
+        "rev": "263c979be4ca757c43fb525bd6f0887998e57041",
+        "sha256": "6Q6Y0IFUWS9ZPhnAK3EUo4hMGPdBn8eNEYCK/zLgAKU="
     },
     "yabause": {
         "owner": "libretro",
         "repo": "yabause",
-        "rev": "f30153ff9e534b96049c6f1ac3075b572642ceb5",
-        "sha256": "AdqCr5X3Bq8ic2jkIestmYi+CBByZ5Fyf0BUYwBkWnA="
+        "rev": "17dfcd8de4700341d972993501d3a043925675ce",
+        "sha256": "xwW7Oe3Cy3yC0xC5acLW6OGUIG+dKd1mwiXK5ZAumdo="
     }
 }
diff --git a/nixpkgs/pkgs/applications/emulators/retroarch/update.py b/nixpkgs/pkgs/applications/emulators/retroarch/update_cores.py
index 68f72103168e..bb6fd2884a50 100755
--- a/nixpkgs/pkgs/applications/emulators/retroarch/update.py
+++ b/nixpkgs/pkgs/applications/emulators/retroarch/update_cores.py
@@ -26,19 +26,7 @@ CORES = {
     "bsnes": {"repo": "bsnes-libretro"},
     "bsnes-hd": {"repo": "bsnes-hd", "owner": "DerKoun"},
     "bsnes-mercury": {"repo": "bsnes-mercury"},
-    "citra": {
-        "repo": "citra",
-        "fetch_submodules": True,
-        "deep_clone": True,
-        "leave_dot_git": True,
-    },
-    "citra-canary": {
-        "repo": "citra",
-        "fetch_submodules": True,
-        "deep_clone": True,
-        "leave_dot_git": True,
-        "rev": "canary",
-    },
+    "citra": { "repo": "citra", "fetch_submodules": True },
     "desmume": {"repo": "desmume"},
     "desmume2015": {"repo": "desmume2015"},
     "dolphin": {"repo": "dolphin"},
@@ -71,6 +59,7 @@ CORES = {
     "mupen64plus": {"repo": "mupen64plus-libretro-nx"},
     "neocd": {"repo": "neocd_libretro"},
     "nestopia": {"repo": "nestopia"},
+    "nxengine": {"repo": "nxengine-libretro"},
     "np2kai": {"repo": "NP2kai", "owner": "AZO234", "fetch_submodules": True},
     "o2em": {"repo": "libretro-o2em"},
     "opera": {"repo": "opera-libretro"},
@@ -119,10 +108,16 @@ def get_repo_hash_fetchFromGitHub(
     extra_args = []
     if deep_clone:
         extra_args.append("--deep-clone")
+    else:
+        extra_args.append("--no-deep-clone")
     if fetch_submodules:
         extra_args.append("--fetch-submodules")
+    else:
+        extra_args.append("--no-fetch-submodules")
     if leave_dot_git:
         extra_args.append("--leave-dot-git")
+    else:
+        extra_args.append("--no-leave-dot-git")
     if rev:
         extra_args.append("--rev")
         extra_args.append(rev)
diff --git a/nixpkgs/pkgs/applications/emulators/retroarch/0002-Use-fixed-paths-on-libretro_info_path.patch b/nixpkgs/pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch
index 9aa8db6ab048..fd3913ea157e 100644
--- a/nixpkgs/pkgs/applications/emulators/retroarch/0002-Use-fixed-paths-on-libretro_info_path.patch
+++ b/nixpkgs/pkgs/applications/emulators/retroarch/use-fixed-paths-on-libretro_info_path.patch
@@ -1,7 +1,7 @@
-From 6788718299e1aba3ff8b31cd6ef012e8d3643bd3 Mon Sep 17 00:00:00 2001
+From 7bf021529ff15ca2580b15b3c0bfdc137d5beffe Mon Sep 17 00:00:00 2001
 From: Thiago Kenji Okada <thiagokokada@gmail.com>
-Date: Sat, 20 Nov 2021 15:59:23 -0300
-Subject: [PATCH 2/2] Use fixed paths on "libretro_info_path"
+Date: Wed, 9 Mar 2022 18:24:15 +0000
+Subject: [PATCH] Use fixed paths on "libretro_info_path"
 
 This patch sets "libretro_info_path" to `handle = false`, so instead of
 using the values from `retroarch.cfg`, it will always use the default.
@@ -10,16 +10,16 @@ Also, it patches the default "libretro_info_path" to the
 `@libretro_info_path` string, so we can substitute it with the full path
 to it during build.
 ---
- configuration.c                    | 2 +-
- frontend/drivers/platform_darwin.m | 9 ++-------
- frontend/drivers/platform_unix.c   | 8 ++++----
- 3 files changed, 7 insertions(+), 12 deletions(-)
+ configuration.c                    |  2 +-
+ frontend/drivers/platform_darwin.m |  9 ++-------
+ frontend/drivers/platform_unix.c   | 12 ++++--------
+ 3 files changed, 7 insertions(+), 16 deletions(-)
 
 diff --git a/configuration.c b/configuration.c
-index e6a3841324..afb1d6e2ce 100644
+index 7e346ff6e9..c4b2100203 100644
 --- a/configuration.c
 +++ b/configuration.c
-@@ -1456,7 +1456,7 @@ static struct config_path_setting *populate_settings_path(
+@@ -1466,7 +1466,7 @@ static struct config_path_setting *populate_settings_path(
     SETTING_PATH("core_options_path",
           settings->paths.path_core_options, false, NULL, true);
     SETTING_PATH("libretro_info_path",
@@ -29,10 +29,10 @@ index e6a3841324..afb1d6e2ce 100644
           settings->paths.path_content_database, false, NULL, true);
     SETTING_PATH("cheat_database_path",
 diff --git a/frontend/drivers/platform_darwin.m b/frontend/drivers/platform_darwin.m
-index f922e50c55..52732f65ae 100644
+index 6c5fdca400..552dcb7e2b 100644
 --- a/frontend/drivers/platform_darwin.m
 +++ b/frontend/drivers/platform_darwin.m
-@@ -383,14 +383,9 @@ static void frontend_darwin_get_env(int *argc, char *argv[],
+@@ -388,14 +388,9 @@ static void frontend_darwin_get_env(int *argc, char *argv[],
           home_dir_buf, "shaders_glsl",
           sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER]));
  #endif
@@ -50,21 +50,25 @@ index f922e50c55..52732f65ae 100644
  #ifdef HAVE_VIDEO_LAYOUT
     fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT], home_dir_buf, "layouts", sizeof(g_defaults.dirs[DEFAULT_DIR_VIDEO_LAYOUT]));
 diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c
-index 722e1c595c..d87e01cf12 100644
+index b3b5dad173..7f1561e523 100644
 --- a/frontend/drivers/platform_unix.c
 +++ b/frontend/drivers/platform_unix.c
-@@ -1815,8 +1815,8 @@ static void frontend_unix_get_env(int *argc,
+@@ -1820,12 +1820,8 @@ static void frontend_unix_get_env(int *argc,
        strcpy_literal(base_path, "retroarch");
  #endif
  
--   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], base_path,
--         "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
+-   if (!string_is_empty(libretro_directory))
+-      strlcpy(g_defaults.dirs[DEFAULT_DIR_CORE], libretro_directory,
+-            sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
+-   else
+-      fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], base_path,
+-            "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
 +   fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE], "@libretro_directory@",
 +         "", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
  #if defined(DINGUX)
     /* On platforms that require manual core installation/
      * removal, placing core info files in the same directory
-@@ -1825,8 +1825,8 @@ static void frontend_unix_get_env(int *argc,
+@@ -1834,8 +1830,8 @@ static void frontend_unix_get_env(int *argc,
     fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE_INFO], base_path,
           "core_info", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE_INFO]));
  #else
@@ -76,5 +80,5 @@ index 722e1c595c..d87e01cf12 100644
     fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG], base_path,
           "autoconfig", sizeof(g_defaults.dirs[DEFAULT_DIR_AUTOCONFIG]));
 -- 
-2.31.1
+2.32.0
 
diff --git a/nixpkgs/pkgs/applications/emulators/retroarch/wrapper.nix b/nixpkgs/pkgs/applications/emulators/retroarch/wrapper.nix
index b3797c9e9e36..6adcb8ffd8b4 100644
--- a/nixpkgs/pkgs/applications/emulators/retroarch/wrapper.nix
+++ b/nixpkgs/pkgs/applications/emulators/retroarch/wrapper.nix
@@ -8,8 +8,7 @@ stdenv.mkDerivation {
 
   buildCommand = ''
     mkdir -p $out/lib
-    for coreDir in $cores
-    do
+    for coreDir in $cores; do
       ln -s $coreDir/* $out/lib/.
     done
 
@@ -29,9 +28,14 @@ stdenv.mkDerivation {
 
   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)
-      + ".";
+    longDescription = ''
+      RetroArch is the reference frontend for the libretro API.
+
+      The following cores are included:
+      ${lib.concatStringsSep "\n" (map (x: "  - ${x.name}") cores)}
+    '';
+    # FIXME: exits with error on macOS:
+    # No Info.plist file in application bundle or no NSPrincipalClass in the Info.plist file, exiting
+    broken = stdenv.isDarwin;
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/retrofe/default.nix b/nixpkgs/pkgs/applications/emulators/retrofe/default.nix
index dc1a23f33b39..2a0b41ba2b6c 100644
--- a/nixpkgs/pkgs/applications/emulators/retrofe/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/retrofe/default.nix
@@ -1,15 +1,16 @@
-{ lib, stdenv, fetchhg, cmake, glib, gst_all_1, makeWrapper, pkg-config
+{ lib, stdenv, fetchFromGitHub, cmake, glib, gst_all_1, makeWrapper, pkg-config
 , python2, SDL2, SDL2_image, SDL2_mixer, SDL2_ttf, sqlite, zlib, runtimeShell
 }:
 
 stdenv.mkDerivation {
   pname = "retrofe";
-  version = "0.6.169";
+  version = "0.10.31";
 
-  src = fetchhg {
-    url = "https://bitbucket.org/teamretro/retrofe";
-    rev = "8793e03";
-    sha256 = "0cvsg07ff0fdqh5zgiv2fs7s6c98hn150kpxmpw5fn6jilaszwkm";
+  src = fetchFromGitHub {
+    owner = "phulshof";
+    repo = "RetroFE";
+    rev = "2ddd65a76210d241031c4ac9268255f311df25d1";
+    sha256 = "sha256-uBfECbU2Df/pPpEXXq62S7Ec0YU4lPIsZ8k5UmKD7xQ=";
   };
 
   nativeBuildInputs = [ cmake makeWrapper pkg-config python2 ];
@@ -18,12 +19,9 @@ stdenv.mkDerivation {
     glib gst_all_1.gstreamer SDL2 SDL2_image SDL2_mixer SDL2_ttf sqlite zlib
   ] ++ (with gst_all_1; [ gst-libav gst-plugins-base gst-plugins-good ]);
 
-  patches = [ ./include-paths.patch ];
-
   configurePhase = ''
     cmake RetroFE/Source -BRetroFE/Build -DCMAKE_BUILD_TYPE=Release \
       -DVERSION_MAJOR=0 -DVERSION_MINOR=0 -DVERSION_BUILD=0 \
-      -DGSTREAMER_BASE_INCLUDE_DIRS='${gst_all_1.gst-plugins-base.dev}/include/gstreamer-1.0'
   '';
 
   buildPhase = ''
@@ -70,7 +68,7 @@ stdenv.mkDerivation {
 
   meta = with lib; {
     description = "A frontend for arcade cabinets and media PCs";
-    homepage = "http://retrofe.com";
+    homepage = "http://retrofe.nl/";
     license = licenses.gpl3Plus;
     maintainers = with maintainers; [ hrdinka ];
     platforms = with platforms; linux;
diff --git a/nixpkgs/pkgs/applications/emulators/retrofe/include-paths.patch b/nixpkgs/pkgs/applications/emulators/retrofe/include-paths.patch
deleted file mode 100644
index 02eef2594ea6..000000000000
--- a/nixpkgs/pkgs/applications/emulators/retrofe/include-paths.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -ur RetroFE.1/RetroFE/Source/CMakeLists.txt RetroFE.2/RetroFE/Source/CMakeLists.txt
---- RetroFE.1/RetroFE/Source/CMakeLists.txt	2016-02-21 14:52:36.726070602 +0100
-+++ RetroFE.2/RetroFE/Source/CMakeLists.txt	2016-02-21 14:38:43.036249029 +0100
-@@ -59,6 +59,7 @@
- set(RETROFE_INCLUDE_DIRS

- 	"${GLIB2_INCLUDE_DIRS}"

- 	"${GSTREAMER_INCLUDE_DIRS}"

-+	"${GSTREAMER_BASE_INCLUDE_DIRS}"

- 	"${SDL2_INCLUDE_DIRS}"

- 	"${SDL2_IMAGE_INCLUDE_DIRS}"

- 	"${SDL2_MIXER_INCLUDE_DIRS}"

diff --git a/nixpkgs/pkgs/applications/emulators/ripes/default.nix b/nixpkgs/pkgs/applications/emulators/ripes/default.nix
new file mode 100644
index 000000000000..8167c785013b
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/ripes/default.nix
@@ -0,0 +1,50 @@
+{ lib
+, mkDerivation
+, fetchFromGitHub
+, pkg-config
+, qtbase
+, qtsvg
+, qtcharts
+, wrapQtAppsHook
+, cmake
+, python3
+}:
+
+mkDerivation rec {
+  pname = "ripes";
+  version = "2.2.4";
+
+  src = fetchFromGitHub {
+    owner = "mortbopet";
+    repo = "Ripes";
+    rev = "v${version}";
+    fetchSubmodules = true;
+    sha256 = "sha256-Aal2A4xypzaY7Oa+boIrXk7ITNKnh5OZIP7DkJjcGu4=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+    pkg-config
+    python3
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    qtbase
+    qtsvg
+    qtcharts
+  ];
+
+  installPhase = ''
+    install -D Ripes $out/bin/Ripes
+    cp -r ${src}/appdir/usr/share $out/share
+  '';
+
+  meta = with lib; {
+    description = "A graphical processor simulator and assembly editor for the RISC-V ISA";
+    homepage = "https://github.com/mortbopet/Ripes";
+    license = licenses.mit;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ rewine ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/emulators/rpcs3/default.nix b/nixpkgs/pkgs/applications/emulators/rpcs3/default.nix
index 74c5b8ee6b35..46311c3ed45b 100644
--- a/nixpkgs/pkgs/applications/emulators/rpcs3/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/rpcs3/default.nix
@@ -9,10 +9,10 @@
 
 let
   # Keep these separate so the update script can regex them
-  rpcs3GitVersion = "13352-e58906cb4";
-  rpcs3Version = "0.0.21-13352-e58906cb4";
-  rpcs3Revision = "e58906cb4df26c14fcade07d7c15ab432dae6882";
-  rpcs3Sha256 = "1bzx6af77z5l6jdgazw8x59pi2xhwkz0knynmf5kzww39m6npx0a";
+  rpcs3GitVersion = "13907-cdef752a9";
+  rpcs3Version = "0.0.23-13907-cdef752a9";
+  rpcs3Revision = "cdef752a9c2004010279cd4a6d77b451b42cc6ab";
+  rpcs3Sha256 = "1mw6k097rsiljaw34harhvr32dvrh4xv22ryinylijnsjlm3hcan";
 
   ittapi = fetchFromGitHub {
     owner = "intel";
diff --git a/nixpkgs/pkgs/applications/emulators/ryujinx/default.nix b/nixpkgs/pkgs/applications/emulators/ryujinx/default.nix
index 7a4f4351dc94..b21bc5e5fa26 100644
--- a/nixpkgs/pkgs/applications/emulators/ryujinx/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/ryujinx/default.nix
@@ -13,22 +13,28 @@
 , gtk3
 , gdk-pixbuf
 , wrapGAppsHook
+, vulkan-loader
+, libICE
+, libSM
+, libXi
+, libXcursor
+, libXext
+, libXrandr
+, fontconfig
+, glew
 }:
 
 buildDotnetModule rec {
   pname = "ryujinx";
-  version = "1.1.77"; # Based off of the official github actions builds: https://github.com/Ryujinx/Ryujinx/actions/workflows/release.yml
+  version = "1.1.223"; # Based off of the official github actions builds: https://github.com/Ryujinx/Ryujinx/actions/workflows/release.yml
 
   src = fetchFromGitHub {
     owner = "Ryujinx";
     repo = "Ryujinx";
-    rev = "df70442c46e7ee133b1fb79dc23ddd134e618085";
-    sha256 = "1m9msp7kxsj7251l2yjcfzrb4k1lisk9sip7acm22pxmi1a7gw73";
+    rev = "951700fdd8f54fb34ffe8a3fb328a68b5bf37abe";
+    sha256 = "0kzchsxir8wh74rxvp582mci855hbd0vma6yhcc9vpz0zmhi2cpf";
   };
 
-  dotnet-sdk = dotnetCorePackages.sdk_6_0;
-  dotnet-runtime = dotnetCorePackages.runtime_6_0;
-
   projectFile = "Ryujinx.sln";
   nugetDeps = ./deps.nix;
 
@@ -36,7 +42,7 @@ buildDotnetModule rec {
 
   # TODO: Add the headless frontend. Currently errors on the following:
   # System.Exception: SDL2 initlaization failed with error "No available video device"
-  executables = [ "Ryujinx" ];
+  executables = [ "Ryujinx" "Ryujinx.Ava" ];
 
   nativeBuildInputs = [
     wrapGAppsHook
@@ -56,17 +62,34 @@ buildDotnetModule rec {
     libsoundio
     sndio
     pulseaudio
+    vulkan-loader
+    ffmpeg
+
+    # Avalonia UI
+    libICE
+    libSM
+    libXi
+    libXcursor
+    libXext
+    libXrandr
+    fontconfig
+    glew
   ];
 
   patches = [
     ./appdir.patch # Ryujinx attempts to write to the nix store. This patch redirects it to "~/.config/Ryujinx" on Linux.
   ];
 
+  makeWrapperArgs = [
+    # Without this Ryujinx fails to start on wayland. See https://github.com/Ryujinx/Ryujinx/issues/2714
+    "--set GDK_BACKEND x11"
+    "--set SDL_VIDEODRIVER x11"
+  ];
+
   preInstall = ''
-    # Ryujinx tries to use ffmpeg from PATH
-    makeWrapperArgs+=(
-      --suffix PATH : ${lib.makeBinPath [ ffmpeg ]}
-    )
+    # workaround for 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
   '';
 
   preFixup = ''
diff --git a/nixpkgs/pkgs/applications/emulators/ryujinx/deps.nix b/nixpkgs/pkgs/applications/emulators/ryujinx/deps.nix
index 33f55f8cb6e8..4db1f8d2fec7 100644
--- a/nixpkgs/pkgs/applications/emulators/ryujinx/deps.nix
+++ b/nixpkgs/pkgs/applications/emulators/ryujinx/deps.nix
@@ -1,37 +1,70 @@
 { fetchNuGet }: [
   (fetchNuGet { pname = "AtkSharp"; version = "3.22.25.128"; sha256 = "0fg01zi7v6127043jzxzihirsdp187pyj83gfa6p79cx763l7z94"; })
+  (fetchNuGet { pname = "Avalonia"; version = "0.10.15"; sha256 = "02rf96gxpafbk0ilg3nxf0fas9gkpb25kzqc2lnbxp8h366qg431"; })
+  (fetchNuGet { pname = "Avalonia.Angle.Windows.Natives"; version = "2.1.0.2020091801"; sha256 = "04jm83cz7vkhhr6n2c9hya2k8i2462xbf6np4bidk55as0jdq43a"; })
+  (fetchNuGet { pname = "Avalonia.Controls.DataGrid"; version = "0.10.15"; sha256 = "064l23dazs5aj8qj40py8vg362z3vpn2nxwh3m5h73qf85npyhgm"; })
+  (fetchNuGet { pname = "Avalonia.Desktop"; version = "0.10.15"; sha256 = "0wgc46vg227bv7nsybc9mxkqv9xlz2bj08bdipkigjlf23g0x4p6"; })
+  (fetchNuGet { pname = "Avalonia.Diagnostics"; version = "0.10.15"; sha256 = "0k3fq7nrfsx0l07mhnjnm0y2i0mydsnhjpa76jxsbh1kvi4mz56i"; })
+  (fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "0.10.15"; sha256 = "1bq2ha1mmgsb9gxmsibr3i6alcg6y3kizxi07qh4wgw38c3fkwzs"; })
+  (fetchNuGet { pname = "Avalonia.Markup.Xaml.Loader"; version = "0.10.15"; sha256 = "1qvay0wlpih6864hl6w85mskirs19k0xg513lxq2rhddqcnkh788"; })
+  (fetchNuGet { pname = "Avalonia.Native"; version = "0.10.15"; sha256 = "0p0ih6ql5kyvpfhc6ll2mgy23kx0vwn88qji74713id493w2ab02"; })
+  (fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "0.10.15"; sha256 = "1va9zwznfr161w2xjjg4swm5505685mdkxxs747l2s35mahl5072"; })
+  (fetchNuGet { pname = "Avalonia.Skia"; version = "0.10.14"; sha256 = "1cvyg94avqdscniszshx5r3vfvx0cnna262sp89ad4bianmd4qkj"; })
+  (fetchNuGet { pname = "Avalonia.Skia"; version = "0.10.15"; sha256 = "0xlnanssz24rcnybz1x0d3lclzmbzdjb9k0i37rd76dif3rgng0h"; })
+  (fetchNuGet { pname = "Avalonia.Svg"; version = "0.10.14"; sha256 = "102567bgj41sxhl3igzpd7gb6kizc6nyqlar23d7xvisyr0z037j"; })
+  (fetchNuGet { pname = "Avalonia.Svg.Skia"; version = "0.10.14"; sha256 = "1d8gkaw057xakaa50a100m8lf1njwv0mzrqzwidlfvjsiay2c28j"; })
+  (fetchNuGet { pname = "Avalonia.Win32"; version = "0.10.15"; sha256 = "1lxaj8la8bwc7j4d3cc3q5jklycc647lzpm8610ya241y64gryww"; })
+  (fetchNuGet { pname = "Avalonia.X11"; version = "0.10.15"; sha256 = "120d19i8ad3b2m1516v5r1bj4h7fddmad6szrbkbpd711x3sh6ka"; })
   (fetchNuGet { pname = "CairoSharp"; version = "3.22.25.128"; sha256 = "1rjdxd4fq5z3n51qx8vrcaf4i277ccc62jxk88xzbsxapdmjjdf9"; })
   (fetchNuGet { pname = "CommandLineParser"; version = "2.8.0"; sha256 = "1m32xyilv2b7k55jy8ddg08c20glbcj2yi545kxs9hj2ahanhrbb"; })
   (fetchNuGet { pname = "Concentus"; version = "1.1.7"; sha256 = "0y5z444wrbhlmsqpy2sxmajl1fbf74843lvgj3y6vz260dn2q0l0"; })
   (fetchNuGet { pname = "Crc32.NET"; version = "1.2.0"; sha256 = "0qaj3192k1vfji87zf50rhydn5mrzyzybrs2k4v7ap29k8i0vi5h"; })
   (fetchNuGet { pname = "DiscordRichPresence"; version = "1.0.175"; sha256 = "180sax976327d70qbinv07f65g3w2zbw80n49hckg8wd4rw209vd"; })
-  (fetchNuGet { pname = "FFmpeg.AutoGen"; version = "4.4.1"; sha256 = "01j989g68arm2d8abq44hp0f22pp6azf2xi7wi7hv7m4sl0l9cwp"; })
+  (fetchNuGet { pname = "DynamicData"; version = "7.9.4"; sha256 = "0mfmlsdd48dpwiphqhq8gsix2528mc6anp7rakd6vyzmig60f520"; })
+  (fetchNuGet { pname = "Fizzler"; version = "1.2.0"; sha256 = "1b8kvqli5wql53ab9fwyg78h572z4f286s8rjb9xxmsyav1hsyll"; })
+  (fetchNuGet { pname = "FluentAvaloniaUI"; version = "1.4.1"; sha256 = "1jddr3iqb6402gv4v9wr8zaqbd2lh7988znlk3l3bmkfdviiflsx"; })
   (fetchNuGet { pname = "GdkSharp"; version = "3.22.25.128"; sha256 = "0bmn0ddaw8797pnhpyl03h2zl8i5ha67yv38gly4ydy50az2xhj7"; })
   (fetchNuGet { pname = "GioSharp"; version = "3.22.25.128"; sha256 = "0syfa1f2hg7wsxln5lh86n8m1lihhprc51b6km91gkl25l5hw5bv"; })
   (fetchNuGet { pname = "GLibSharp"; version = "3.22.25.128"; sha256 = "1j8i5izk97ga30z1qpd765zqd2q5w71y8bhnkqq4bj59768fyxp5"; })
   (fetchNuGet { pname = "GtkSharp"; version = "3.22.25.128"; sha256 = "0z0wx0p3gc02r8d7y88k1rw307sb2vapbr1k1yc5qdc38fxz5jsy"; })
   (fetchNuGet { pname = "GtkSharp.Dependencies"; version = "1.1.1"; sha256 = "0ffywnc3ca1lwhxdnk99l238vsprsrsh678bgm238lb7ja7m52pw"; })
-  (fetchNuGet { pname = "LibHac"; version = "0.16.0"; sha256 = "1kivnf4c4km1a8y0sl34z9gfazlivna0x31q0065n0sz13g82spi"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.linux-x64"; version = "6.0.3"; sha256 = "0rrrfgkr7rzhlnsnajvzb1ijkybp99d992bqxy9pbawmq7d60bdk"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.osx-x64"; version = "6.0.3"; sha256 = "09whyl3i9mzy10n5zxlq66lj3l4p29hm75igmdip2fb376zxyam3"; })
-  (fetchNuGet { pname = "Microsoft.AspNetCore.App.Runtime.win-x64"; version = "6.0.3"; sha256 = "11kv50kll3iq88kn40f5v5qlq8mydv6y6xz2cbzjw4aadd44njwq"; })
+  (fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2"; sha256 = "12kxgnmv9ygmqzf92zcnw4dqz6l4m1wsaz5v9i7i88jja81k6l3a"; })
+  (fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2-preview.178"; sha256 = "1p5nwzl7jpypsd6df7hgcf47r977anjlyv21wacmalsj6lvdgnvn"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Linux"; version = "2.8.2-preview.178"; sha256 = "1402ylkxbgcnagcarqlfvg4gppy2pqs3bmin4n5mphva1g7bqb2p"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2"; sha256 = "0jkdqwjyhpxlkswd6pq45w4aix3ivl8937p68c1jl2y0m5p6259w"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2-preview.178"; sha256 = "0p8miaclnbfpacc1jaqxwfg0yfx9byagi4j4k91d9621vd19i8b2"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "2.8.2-preview.178"; sha256 = "1n9jay9sji04xly6n8bzz4591fgy8i65p21a8mv5ip9lsyj1c320"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2"; sha256 = "1g3i7rzns6xsiybsls3sifgnfr6ml148c2r8vs0hz4zlisyfr8pd"; })
+  (fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2-preview.178"; sha256 = "1r5syii96wv8q558cvsqw3lr10cdw6677lyiy82p6i3if51v3mr7"; })
+  (fetchNuGet { pname = "JetBrains.Annotations"; version = "10.3.0"; sha256 = "1grdx28ga9fp4hwwpwv354rizm8anfq4lp045q4ss41gvhggr3z8"; })
+  (fetchNuGet { pname = "jp2masa.Avalonia.Flexbox"; version = "0.2.0"; sha256 = "1abck2gad29mgf9gwqgc6wr8iwl64v50n0sbxcj1bcxgkgndraiq"; })
+  (fetchNuGet { pname = "LibHac"; version = "0.16.1"; sha256 = "131qnqa1asdmymwdvpjza6w646b05jzn1cxjdxgwh7qdcdb77xyx"; })
+  (fetchNuGet { pname = "MicroCom.CodeGenerator.MSBuild"; version = "0.10.4"; sha256 = "1bdgy6g15d1mln1xpvs6sy0l2zvfs4hxw6nc3qm16qb8hdgvb73y"; })
+  (fetchNuGet { pname = "MicroCom.Runtime"; version = "0.10.4"; sha256 = "0ccbzp0d01dcahm7ban7xyh1rk7k2pkml3l5i7s85cqk5lnczpw2"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "2.9.6"; sha256 = "18mr1f0wpq0fir8vjnq0a8pz50zpnblr7sabff0yqx37c975934a"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.3.3"; sha256 = "09m4cpry8ivm9ga1abrxmvw16sslxhy2k5sl14zckhqb1j164im6"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.4.0"; sha256 = "12rn6gl4viycwk3pz5hp5df63g66zvba4hnkwr3f0876jj5ivmsw"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "4.2.0"; sha256 = "0ld6xxgaqc3c6zgyimlvpgrxncsykbz8irqs01jyj40rv150kp8s"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.4.0"; sha256 = "0rhylcwa95bxawcgixk64knv7p7xrykdjcabmx3gknk8hvj1ai9y"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "4.2.0"; sha256 = "0i1c7055j3f5k1765bl66amp72dcw0zapczfszdldbg91iqmmkxg"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "3.4.0"; sha256 = "1h2f0z9xnw987x8bydka1sd42ijqjx973md6v1gvpy1qc6ad244g"; })
+  (fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "3.4.0"; sha256 = "195gqnpwqkg2wlvk8x6yzm7byrxfq9bki20xmhf6lzfsdw3z4mf2"; })
   (fetchNuGet { pname = "Microsoft.CodeCoverage"; version = "16.8.0"; sha256 = "1y05sjk7wgd29a47v1yhn2s1lrd8wgazkilvmjbvivmrrm3fqjs8"; })
   (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.0.1"; sha256 = "0zxc0apx1gcx361jlq8smc9pfdgmyjh6hpka8dypc9w23nlsh6yj"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb"; })
   (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.5.0"; sha256 = "01i28nvzccxbqmiz217fxs6hnjwmd5fafs37rd49a6qp53y6623l"; })
+  (fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
   (fetchNuGet { pname = "Microsoft.DotNet.InternalAbstractions"; version = "1.0.0"; sha256 = "0mp8ihqlb7fsa789frjzidrfjc1lrhk88qp3xm5qvr7vf4wy4z8x"; })
+  (fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "3.1.6"; sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5"; })
+  (fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "3.1.1"; sha256 = "0qa04dspjl4qk7l8d66wqyrvhp5dxcfn2j4r8mmj362xyrp3r8sh"; })
   (fetchNuGet { pname = "Microsoft.IdentityModel.JsonWebTokens"; version = "6.15.0"; sha256 = "0dwx7dk8jr10784nriqbi364qbxzfwq0c6xia0ac5rzrp7179r4d"; })
   (fetchNuGet { pname = "Microsoft.IdentityModel.Logging"; version = "6.15.0"; sha256 = "0jn9a20a2zixnkm3bmpmvmiv7mk0hqdlnpi0qgjkg1nir87czm19"; })
   (fetchNuGet { pname = "Microsoft.IdentityModel.Tokens"; version = "6.15.0"; sha256 = "1nbgydr45f7lp980xyrkzpyaw2mkkishjwp3slgxk7f0mz6q8i1v"; })
   (fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "16.8.0"; sha256 = "1ln2mva7j2mpsj9rdhpk8vhm3pgd8wn563xqdcwd38avnhp74rm9"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.linux-x64"; version = "6.0.3"; sha256 = "1py3nrfvllqlnb9mhs0qwgy7c14n33b2hfb0qc49rx22sqv8ylbp"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.win-x64"; version = "6.0.3"; sha256 = "1y428glba68s76icjzfl1v3p61pcz7rd78wybhabs8zq8w9cp2pj"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.App.Host.osx-x64"; version = "6.0.3"; sha256 = "0k9gc94cvn36p0v3pj296asg2sq9a8ah6lfw0xvvmd4hq2k72s79"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.linux-x64"; version = "6.0.3"; sha256 = "0f04srx6q0jk81a60n956hz32fdngzp0xmdb2x7gyl77gsq8yijj"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.osx-x64"; version = "6.0.3"; sha256 = "0180ipzzz9pc6f6l17rg5bxz1ghzbapmiqq66kdl33bmbny6vmm9"; })
-  (fetchNuGet { pname = "Microsoft.NETCore.App.Runtime.win-x64"; version = "6.0.3"; sha256 = "1rjkzs2013razi2xs943q62ys1jh8blhjcnj75qkvirf859d11qw"; })
   (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
   (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
   (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.0.0"; sha256 = "1fk2fk2639i7nzy58m9dvpdnzql4vb8yl8vr19r2fp8lmj9w2jr0"; })
+  (fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; })
   (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.0.1"; sha256 = "0ppdkwy6s9p7x9jix3v4402wb171cdiibq7js7i13nxpdky7074p"; })
   (fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
   (fetchNuGet { pname = "Microsoft.TestPlatform.ObjectModel"; version = "16.8.0"; sha256 = "0ii9d88py6mjsxzj9v3zx4izh6rb9ma6s9kj85xmc0xrw7jc2g3m"; })
@@ -40,19 +73,23 @@
   (fetchNuGet { pname = "Microsoft.Win32.Primitives"; version = "4.3.0"; sha256 = "0j0c1wj4ndj21zsgivsc24whiya605603kxrbiw6wkfdync464wq"; })
   (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.3.0"; sha256 = "1gxyzxam8163vk1kb6xzxjj4iwspjsz9zhgn1w9rjzciphaz0ig7"; })
   (fetchNuGet { pname = "Microsoft.Win32.Registry"; version = "4.5.0"; sha256 = "1zapbz161ji8h82xiajgriq6zgzmb1f3ar517p2h63plhsq5gh2q"; })
+  (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "4.5.0"; sha256 = "0fnkv3ky12227zqg4zshx4kw2mvysq2ppxjibfw02cc3iprv4njq"; })
   (fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; })
   (fetchNuGet { pname = "MsgPack.Cli"; version = "1.0.1"; sha256 = "1dk2bs3g16lsxcjjm7gfx6jxa4667wccw94jlh2ql7y7smvh9z8r"; })
   (fetchNuGet { pname = "NETStandard.Library"; version = "1.6.0"; sha256 = "0nmmv4yw7gw04ik8ialj3ak0j6pxa9spih67hnn1h2c38ba8h58k"; })
   (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.0"; sha256 = "1bc4ba8ahgk15m8k4nd7x406nhi0kwqzbgjk2dmw52ss553xz7iy"; })
+  (fetchNuGet { pname = "NETStandard.Library"; version = "2.0.3"; sha256 = "1fn9fxppfcg4jgypp2pmrpr6awl3qz1xmnri0cygpkwvyx27df1y"; })
   (fetchNuGet { pname = "Newtonsoft.Json"; version = "12.0.2"; sha256 = "0w2fbji1smd2y7x25qqibf1qrznmv4s6s0jvrbvr6alb7mfyqvh5"; })
   (fetchNuGet { pname = "Newtonsoft.Json"; version = "9.0.1"; sha256 = "0mcy0i7pnfpqm4pcaiyzzji4g0c8i3a5gjz28rrr28110np8304r"; })
   (fetchNuGet { pname = "NuGet.Frameworks"; version = "5.0.0"; sha256 = "18ijvmj13cwjdrrm52c8fpq021531zaz4mj4b4zapxaqzzxf2qjr"; })
   (fetchNuGet { pname = "NUnit"; version = "3.12.0"; sha256 = "1880j2xwavi8f28vxan3hyvdnph4nlh5sbmh285s4lc9l0b7bdk2"; })
   (fetchNuGet { pname = "NUnit3TestAdapter"; version = "3.17.0"; sha256 = "0kxc6z3b8ccdrcyqz88jm5yh5ch9nbg303v67q8sp5hhs8rl8nk6"; })
-  (fetchNuGet { pname = "OpenTK.Core"; version = "4.5.0"; sha256 = "06qxczikp0aah20d4skk3g588dgh2vn2xffn0ajyyv0475m61s9m"; })
-  (fetchNuGet { pname = "OpenTK.Graphics"; version = "4.5.0"; sha256 = "180g5c92fhhhpmwl6paihx4h1bil7akaihlz2qy124n28pf4s988"; })
-  (fetchNuGet { pname = "OpenTK.Mathematics"; version = "4.5.0"; sha256 = "1h9dxhq1llxdbgdzsi87ijqgj2ilr3rv0zkxhaa65xrc5x8j8fva"; })
-  (fetchNuGet { pname = "OpenTK.OpenAL"; version = "4.5.0"; sha256 = "0lqxpc3vnxglql42x2frvq5bpkl5cf3dpnf9nx6pr3q6qnhigkfb"; })
+  (fetchNuGet { pname = "OpenTK.Core"; version = "4.7.2"; sha256 = "023jav5xdn532kdlkq8pqrvcjl98g1p9ggc8r85fk9bry5121pra"; })
+  (fetchNuGet { pname = "OpenTK.Graphics"; version = "4.7.2"; sha256 = "1wnf9x45ga336vq4px2a2fmma4zc9xrcr4qwrsmsh3l4w0d9s6ps"; })
+  (fetchNuGet { pname = "OpenTK.Mathematics"; version = "4.7.2"; sha256 = "0ay1a8spmy8pn5nlvvac796smp74hjpxm3swvxdrbqqg4l4xqlfz"; })
+  (fetchNuGet { pname = "OpenTK.OpenAL"; version = "4.7.2"; sha256 = "1m0wgf4khikyz2pvns5d9ffwm7psxjn9r4h128aqlca1iyay23f6"; })
+  (fetchNuGet { pname = "OpenTK.redist.glfw"; version = "3.3.7.25"; sha256 = "0yf84sql0bayndjacr385lzar0vnjaxz5klrsxflfi48mgc8g55s"; })
+  (fetchNuGet { pname = "OpenTK.Windowing.GraphicsLibraryFramework"; version = "4.7.2"; sha256 = "14nswj5ws9yq6lkfyjj1y1pd6522rjqascxs5jy9cgnp954lv2hv"; })
   (fetchNuGet { pname = "PangoSharp"; version = "3.22.25.128"; sha256 = "0dkl9j0yd65s5ds9xj5z6yb7yca7wlycqz25m8dng20d13sqr1zp"; })
   (fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
   (fetchNuGet { pname = "runtime.any.System.Diagnostics.Tools"; version = "4.3.0"; sha256 = "1wl76vk12zhdh66vmagni66h5xbhgqq7zkdpgw21jhxhvlbcl8pk"; })
@@ -102,26 +139,51 @@
   (fetchNuGet { pname = "runtime.win.System.Net.Primitives"; version = "4.3.0"; sha256 = "1dixh195bi7473n17hspll6i562gghdz9m4jk8d4kzi1mlzjk9cf"; })
   (fetchNuGet { pname = "runtime.win.System.Net.Sockets"; version = "4.3.0"; sha256 = "0lr3zki831vs6qhk5wckv2b9qbfk9rcj0ds2926qvj1b9y9m6sck"; })
   (fetchNuGet { pname = "runtime.win.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1700famsxndccfbcdz9q14qb20p49lax67mqwpgy4gx3vja1yczr"; })
+  (fetchNuGet { pname = "runtime.win7-x64.runtime.native.System.IO.Compression"; version = "4.3.0"; sha256 = "1dmbmksnxg12fk2p0k7rzy16448mddr2sfrnqs0rhhrzl0z22zi5"; })
+  (fetchNuGet { pname = "runtime.win7.System.Private.Uri"; version = "4.3.0"; sha256 = "0bxkcmklp556dc43bra8ngc8wymcbbflcydi0xwq0j22gm66xf2m"; })
   (fetchNuGet { pname = "Ryujinx.Audio.OpenAL.Dependencies"; version = "1.21.0.1"; sha256 = "0z5k42h252nr60d02p2ww9190d7k1kzrb26vil4ydfhxqqqv6w9l"; })
-  (fetchNuGet { pname = "Ryujinx.Graphics.Nvdec.Dependencies"; version = "4.4.0-build7"; sha256 = "0g1l3lgs0ffxp64ka81v6q1cgsdirl1qlf73255v29r3v337074m"; })
-  (fetchNuGet { pname = "Ryujinx.Graphics.Nvdec.Dependencies"; version = "4.4.0-build9"; sha256 = "121zmh0byi22qsc9b25wv58kwcq6pmk7zf4f2rfafmdjvwx8bkxc"; })
-  (fetchNuGet { pname = "Ryujinx.SDL2-CS"; version = "2.0.17-build18"; sha256 = "0j0vs6075c4fniydqxhpp18pg3x679mq463x4gxqgkri3vhpj4vl"; })
+  (fetchNuGet { pname = "Ryujinx.Graphics.Nvdec.Dependencies"; version = "5.0.1-build10"; sha256 = "05r3fh92raaydf4vcih77ivymbs97kqwjlgqdpaxa11aqq0hq753"; })
+  (fetchNuGet { pname = "Ryujinx.SDL2-CS"; version = "2.0.22-build20"; sha256 = "03d1rv0rlr2z7ynqixgj9xqlksplk1vsvq5wxjf5c6c6zcknx01r"; })
+  (fetchNuGet { pname = "shaderc.net"; version = "0.1.0"; sha256 = "0f35s9h0vj9f1rx9bssj66hibc3j9bzrb4wgb5q2jwkf5xncxbpq"; })
   (fetchNuGet { pname = "SharpZipLib"; version = "1.3.3"; sha256 = "1gij11wfj1mqm10631cjpnhzw882bnzx699jzwhdqakxm1610q8x"; })
+  (fetchNuGet { pname = "ShimSkiaSharp"; version = "0.5.14"; sha256 = "0ym0ayik0vq2za9h0kr8mhjd9zk4hx25hrrfyyg9wrc164xa11qb"; })
+  (fetchNuGet { pname = "Silk.NET.Core"; version = "2.10.1"; sha256 = "02fabxqhfn2a8kyqmxcmraq09m1pvd8gbw8xad6y9iqyhr0q8s0j"; })
+  (fetchNuGet { pname = "Silk.NET.Vulkan"; version = "2.10.1"; sha256 = "03aapzb23lkn4qyq71lipcgj8h3ji12jjivrph535v0pwqx9db35"; })
+  (fetchNuGet { pname = "Silk.NET.Vulkan.Extensions.EXT"; version = "2.10.1"; sha256 = "0d8ml39dhxpj2rql88g7dw3rkcjxl5722rilw1wdnjaki7hqgrz7"; })
+  (fetchNuGet { pname = "Silk.NET.Vulkan.Extensions.KHR"; version = "2.10.1"; sha256 = "07zc7bjbg9h71m3l71i9gx5kwx7bhv4l7vha88wpi8h8f86zyvzd"; })
   (fetchNuGet { pname = "SixLabors.Fonts"; version = "1.0.0-beta0013"; sha256 = "0r0aw8xxd32rwcawawcz6asiyggz02hnzg5hvz8gimq8hvwx1wql"; })
   (fetchNuGet { pname = "SixLabors.ImageSharp"; version = "1.0.4"; sha256 = "0fmgn414my76gjgp89qlc210a0lqvnvkvk2fcwnpwxdhqpfvyilr"; })
   (fetchNuGet { pname = "SixLabors.ImageSharp.Drawing"; version = "1.0.0-beta11"; sha256 = "0hl0rs3kr1zdnx3gdssxgli6fyvmwzcfp99f4db71s0i8j8b2bp5"; })
-  (fetchNuGet { pname = "SPB"; version = "0.0.4-build17"; sha256 = "0arp7mwdn1w67qx8a0m90xh8waj15154ynswrbsp5w4wmzkcss1i"; })
+  (fetchNuGet { pname = "SkiaSharp"; version = "2.88.0"; sha256 = "0wqfgzyp2m4myqrni9rgchiqi95axbf279hlqjflrj4c9z2412ni"; })
+  (fetchNuGet { pname = "SkiaSharp"; version = "2.88.1-preview.1"; sha256 = "1i1px67hcr9kygmbfq4b9nqzlwm7v2gapsp4isg9i19ax5g8dlhm"; })
+  (fetchNuGet { pname = "SkiaSharp.HarfBuzz"; version = "2.88.0"; sha256 = "0ygkwlk2d59sqjvvw0s92hh92wxnm68rdlbp7wfs2gz5nipkgdvi"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.0-preview.178"; sha256 = "07kga1j51l3l302nvf537zg5clf6rflinjy0xd6i06cmhpkf3ksw"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.1-preview.1"; sha256 = "1r9qr3civk0ws1z7hg322qyr8yjm10853zfgs03szr2lvdqiy7d1"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.0"; sha256 = "0d0pdcm61jfy3fvgkxmm3hj9cijrwbmp6ky2af776m1l63ryii3q"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.1-preview.1"; sha256 = "1w55nrwpl42psn6klia5a9aw2j1n25hpw2fdhchypm9f0v2iz24h"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.0-preview.178"; sha256 = "09jmcg5k1vpsal8jfs90mwv0isf2y5wq3h4hd77rv6vffn5ic4sm"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.1-preview.1"; sha256 = "0mwj2yl4gn40lry03yqkj7sbi1drmm672dv88481sgah4c21lzrq"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.0"; sha256 = "135ni4rba4wy4wyzy9ip11f3dwb1ipn38z9ps1p9xhw8jc06y5vp"; })
+  (fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.1-preview.1"; sha256 = "1k50abd147pif9z9lkckbbk91ga1vv6k4skjz2n7wpll6fn0fvlv"; })
+  (fetchNuGet { pname = "SPB"; version = "0.0.4-build24"; sha256 = "13wfjx5n540mlxlvys39g2rajrqbycdkyci2pcp3wygkqn4d87hm"; })
+  (fetchNuGet { pname = "Svg.Custom"; version = "0.5.14"; sha256 = "1wjghs2n5hk7zszzk2p2a8m6ga2gc8sfd5mdqi15sbfkmwg2nbw7"; })
+  (fetchNuGet { pname = "Svg.Model"; version = "0.5.14"; sha256 = "1xilk95bmnsl93sbr7pah0jrjrnccf1ikcn8s7rkm0yjkj382hc8"; })
+  (fetchNuGet { pname = "Svg.Skia"; version = "0.5.14"; sha256 = "02wv040wi8ijw9mwg3c84f8bfyfv9n99ji8q1v2bs11b463zsyd1"; })
   (fetchNuGet { pname = "System.AppContext"; version = "4.1.0"; sha256 = "0fv3cma1jp4vgj7a8hqc9n7hr1f1kjp541s6z0q1r6nazb4iz9mz"; })
   (fetchNuGet { pname = "System.Buffers"; version = "4.0.0"; sha256 = "13s659bcmg9nwb6z78971z1lr6bmh2wghxi1ayqyzl4jijd351gr"; })
   (fetchNuGet { pname = "System.Buffers"; version = "4.3.0"; sha256 = "0fgns20ispwrfqll4q1zc1waqcmylb3zc50ys9x8zlwxh9pmd9jy"; })
+  (fetchNuGet { pname = "System.Buffers"; version = "4.5.1"; sha256 = "04kb1mdrlcixj9zh1xdi5as0k0qi8byr5mi3p3jcxx72qz93s2y3"; })
   (fetchNuGet { pname = "System.CodeDom"; version = "4.4.0"; sha256 = "1zgbafm5p380r50ap5iddp11kzhr9khrf2pnai6k593wjar74p1g"; })
   (fetchNuGet { pname = "System.CodeDom"; version = "6.0.0"; sha256 = "1i55cxp8ycc03dmxx4n22qi6jkwfl23cgffb95izq7bjar8avxxq"; })
   (fetchNuGet { pname = "System.Collections"; version = "4.0.11"; sha256 = "1ga40f5lrwldiyw6vy67d0sg7jd7ww6kgwbksm19wrvq9hr0bsm6"; })
   (fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
   (fetchNuGet { pname = "System.Collections.Concurrent"; version = "4.0.12"; sha256 = "07y08kvrzpak873pmyxs129g1ch8l27zmg51pcyj2jvq03n0r0fc"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "1.5.0"; sha256 = "1d5gjn5afnrf461jlxzawcvihz195gayqpcfbv6dd7pxa9ialn06"; })
+  (fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
   (fetchNuGet { pname = "System.Collections.NonGeneric"; version = "4.3.0"; sha256 = "07q3k0hf3mrcjzwj8fwk6gv3n51cb513w4mgkfxzm3i37sc9kz7k"; })
   (fetchNuGet { pname = "System.Collections.Specialized"; version = "4.3.0"; sha256 = "1sdwkma4f6j85m3dpb53v9vcgd0zyc9jb33f8g63byvijcj39n20"; })
   (fetchNuGet { pname = "System.ComponentModel"; version = "4.3.0"; sha256 = "0986b10ww3nshy30x9sjyzm0jx339dkjxjj3401r3q0f6fx2wkcb"; })
+  (fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
   (fetchNuGet { pname = "System.ComponentModel.EventBasedAsync"; version = "4.3.0"; sha256 = "1rv9bkb8yyhqqqrx6x95njv6mdxlbvv527b44mrd93g8fmgkifl7"; })
   (fetchNuGet { pname = "System.ComponentModel.Primitives"; version = "4.3.0"; sha256 = "1svfmcmgs0w0z9xdw2f2ps05rdxmkxxhf0l17xk9l1l8xfahkqr0"; })
   (fetchNuGet { pname = "System.ComponentModel.TypeConverter"; version = "4.3.0"; sha256 = "17ng0p7v3nbrg3kycz10aqrrlw4lz9hzhws09pfh8gkwicyy481x"; })
@@ -133,8 +195,10 @@
   (fetchNuGet { pname = "System.Diagnostics.Tools"; version = "4.0.1"; sha256 = "19cknvg07yhakcvpxg3cxa0bwadplin6kyxd8mpjjpwnp56nl85x"; })
   (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.1.0"; sha256 = "1d2r76v1x610x61ahfpigda89gd13qydz6vbwzhpqlyvq8jj6394"; })
   (fetchNuGet { pname = "System.Diagnostics.Tracing"; version = "4.3.0"; sha256 = "1m3bx6c2s958qligl67q7grkwfz3w53hpy7nc97mh6f7j5k168c4"; })
+  (fetchNuGet { pname = "System.Drawing.Common"; version = "4.5.0"; sha256 = "0knqa0zsm91nfr34br8gx5kjqq4v81zdhqkacvs2hzc8nqk0ddhc"; })
   (fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
   (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.0.11"; sha256 = "1pla2dx8gkidf7xkciig6nifdsb494axjvzvann8g2lp3dbqasm9"; })
+  (fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
   (fetchNuGet { pname = "System.Globalization"; version = "4.0.11"; sha256 = "070c5jbas2v7smm660zaf1gh0489xanjqymkvafcs4f8cdrs1d5d"; })
   (fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
   (fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.0.1"; sha256 = "0bv0alrm2ck2zk3rz25lfyk9h42f3ywq77mx1syl6vvyncnpg4qh"; })
@@ -152,25 +216,35 @@
   (fetchNuGet { pname = "System.Linq"; version = "4.1.0"; sha256 = "1ppg83svb39hj4hpp5k7kcryzrf3sfnm08vxd5sm2drrijsla2k5"; })
   (fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
   (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.1.0"; sha256 = "1gpdxl6ip06cnab7n3zlcg6mqp7kknf73s8wjinzi4p0apw82fpg"; })
+  (fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
   (fetchNuGet { pname = "System.Management"; version = "6.0.0"; sha256 = "0ra1g75ykapg6i5y0za721kpjd6xcq6dalijkdm6fsxxmz8iz4dr"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.3"; sha256 = "0naqahm3wljxb5a911d37mwjqjdxv9l0b49p5dmfyijvni2ppy8a"; })
+  (fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
   (fetchNuGet { pname = "System.Net.Http"; version = "4.1.0"; sha256 = "1i5rqij1icg05j8rrkw4gd4pgia1978mqhjzhsjg69lvwcdfg8yb"; })
   (fetchNuGet { pname = "System.Net.NameResolution"; version = "4.3.0"; sha256 = "15r75pwc0rm3vvwsn8rvm2krf929mjfwliv0mpicjnii24470rkq"; })
   (fetchNuGet { pname = "System.Net.Primitives"; version = "4.0.11"; sha256 = "10xzzaynkzkakp7jai1ik3r805zrqjxiz7vcagchyxs2v26a516r"; })
+  (fetchNuGet { pname = "System.Net.Primitives"; version = "4.3.0"; sha256 = "0c87k50rmdgmxx7df2khd9qj7q35j9rzdmm2572cc55dygmdk3ii"; })
   (fetchNuGet { pname = "System.Net.Sockets"; version = "4.1.0"; sha256 = "1385fvh8h29da5hh58jm1v78fzi9fi5vj93vhlm2kvqpfahvpqls"; })
   (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.3.0"; sha256 = "05kji1mv4sl75iwmc613p873145nynm02xiajx8pn0h2kx53d23s"; })
+  (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.4.0"; sha256 = "0rdvma399070b0i46c4qq1h2yvjj3k013sqzkilz4bz5cwmx1rba"; })
   (fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
   (fetchNuGet { pname = "System.ObjectModel"; version = "4.0.12"; sha256 = "1sybkfi60a4588xn34nd9a58png36i0xr4y4v4kqpg8wlvy5krrj"; })
+  (fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
   (fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
+  (fetchNuGet { pname = "System.Reactive"; version = "5.0.0"; sha256 = "1lafmpnadhiwxyd543kraxa3jfdpm6ipblxrjlibym9b1ykpr5ik"; })
   (fetchNuGet { pname = "System.Reflection"; version = "4.1.0"; sha256 = "1js89429pfw79mxvbzp8p3q93il6rdff332hddhzi5wqglc4gml9"; })
   (fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
   (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.0.1"; sha256 = "0ydqcsvh6smi41gyaakglnv252625hf29f7kywy2c70nhii2ylqp"; })
   (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
+  (fetchNuGet { pname = "System.Reflection.Emit"; version = "4.7.0"; sha256 = "121l1z2ypwg02yz84dy6gr82phpys0njk7yask3sihgy214w43qp"; })
   (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.0.1"; sha256 = "1pcd2ig6bg144y10w7yxgc9d22r7c7ww7qn1frdfwgxr24j9wvv0"; })
   (fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
   (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.0.1"; sha256 = "1s4b043zdbx9k39lfhvsk68msv1nxbidhkq6nbm27q7sf8xcsnxr"; })
   (fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
   (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.0.1"; sha256 = "0m7wqwq0zqq9gbpiqvgk3sr92cbrw7cp3xn53xvw7zj6rz6fdirn"; })
   (fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "1.6.0"; sha256 = "1wdbavrrkajy7qbdblpbpbalbdl48q3h34cchz24gvdgyrlf15r4"; })
+  (fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss"; })
   (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.0.1"; sha256 = "1bangaabhsl4k9fg8khn83wm6yial8ik1sza7401621jc6jrym28"; })
   (fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
   (fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.1.0"; sha256 = "1bjli8a7sc7jlxqgcagl9nh8axzfl11f4ld3rjqsyxc516iijij7"; })
@@ -179,7 +253,11 @@
   (fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
   (fetchNuGet { pname = "System.Runtime"; version = "4.1.0"; sha256 = "02hdkgk13rvsd6r9yafbwzss8kr55wnj8d5c7xjnp8gqrwc8sn0m"; })
   (fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.5.2"; sha256 = "1vz4275fjij8inf31np78hw50al8nqkngk04p3xv5n4fcmf1grgi"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.6.0"; sha256 = "0xmzi2gpbmgyfr75p24rqqsba3cmrqgmcv45lsqp5amgrdwd0f0m"; })
   (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.0"; sha256 = "16r6sn4czfjk8qhnz7bnqlyiaaszr0ihinb7mq9zzr1wba257r54"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "5.0.0"; sha256 = "02k25ivn50dmqx5jn8hawwmz24yf0454fjd823qk6lygj9513q4x"; })
+  (fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
   (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.1.0"; sha256 = "0rw4rm4vsm3h3szxp9iijc3ksyviwsv6f63dng3vhqyg4vjdkc2z"; })
   (fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
   (fetchNuGet { pname = "System.Runtime.Handles"; version = "4.0.1"; sha256 = "1g0zrdi5508v49pfm3iii2hn6nm00bgvfpjq1zxknfjrxxa20r4g"; })
@@ -203,10 +281,14 @@
   (fetchNuGet { pname = "System.Security.Principal"; version = "4.3.0"; sha256 = "12cm2zws06z4lfc4dn31iqv7072zyi4m910d4r6wm8yx85arsfxf"; })
   (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.3.0"; sha256 = "00a0a7c40i3v4cb20s2cmh9csb5jv2l0frvnlzyfxh848xalpdwr"; })
   (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.5.0"; sha256 = "0rmj89wsl5yzwh0kqjgx45vzf694v9p92r4x4q6yxldk1cv1hi86"; })
+  (fetchNuGet { pname = "System.Security.Principal.Windows"; version = "4.7.0"; sha256 = "1a56ls5a9sr3ya0nr086sdpa9qv0abv31dd6fp27maqa9zclqq5d"; })
   (fetchNuGet { pname = "System.Text.Encoding"; version = "4.0.11"; sha256 = "1dyqv0hijg265dwxg6l7aiv74102d6xjiwplh2ar1ly6xfaa4iiw"; })
   (fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
+  (fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "6.0.0"; sha256 = "0gm2kiz2ndm9xyzxgi0jhazgwslcs427waxgfa30m7yqll1kcrww"; })
   (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.0.11"; sha256 = "08nsfrpiwsg9x5ml4xyl3zyvjfdi4mvbqf93kjdh11j4fwkznizs"; })
   (fetchNuGet { pname = "System.Text.Encoding.Extensions"; version = "4.3.0"; sha256 = "11q1y8hh5hrp5a3kw25cb6l00v5l5dvirkz8jr3sq00h1xgcgrxy"; })
+  (fetchNuGet { pname = "System.Text.Json"; version = "4.7.0"; sha256 = "0fp3xrysccm5dkaac4yb51d793vywxks978kkl5x4db9gw29rfdr"; })
   (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.1.0"; sha256 = "1mw7vfkkyd04yn2fbhm38msk7dz2xwvib14ygjsb8dq2lcvr18y7"; })
   (fetchNuGet { pname = "System.Text.RegularExpressions"; version = "4.3.0"; sha256 = "1bgq51k7fwld0njylfn7qc5fmwrk2137gdq7djqdsw347paa9c2l"; })
   (fetchNuGet { pname = "System.Threading"; version = "4.0.11"; sha256 = "19x946h926bzvbsgj28csn46gak2crv2skpwsx80hbgazmkgb1ls"; })
@@ -216,13 +298,18 @@
   (fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
   (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.0.0"; sha256 = "1cb51z062mvc2i8blpzmpn9d9mm4y307xrwi65di8ri18cz5r1zr"; })
   (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.3.0"; sha256 = "1xxcx2xh8jin360yjwm4x4cf5y3a2bwpn2ygkfkwkicz7zk50s2z"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.3"; sha256 = "0g7r6hm572ax8v28axrdxz1gnsblg6kszq17g51pj14a5rn2af7i"; })
+  (fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
   (fetchNuGet { pname = "System.Threading.Thread"; version = "4.3.0"; sha256 = "0y2xiwdfcph7znm2ysxanrhbqqss6a3shi1z3c779pj2s523mjx4"; })
   (fetchNuGet { pname = "System.Threading.ThreadPool"; version = "4.3.0"; sha256 = "027s1f4sbx0y1xqw2irqn6x161lzj8qwvnh2gn78ciiczdv10vf1"; })
   (fetchNuGet { pname = "System.Threading.Timer"; version = "4.0.1"; sha256 = "15n54f1f8nn3mjcjrlzdg6q3520571y012mx7v991x2fvp73lmg6"; })
+  (fetchNuGet { pname = "System.ValueTuple"; version = "4.5.0"; sha256 = "00k8ja51d0f9wrq4vv5z2jhq8hy31kac2rg0rv06prylcybzl8cy"; })
   (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.0.11"; sha256 = "0c6ky1jk5ada9m94wcadih98l6k1fvf6vi7vhn1msjixaha419l5"; })
   (fetchNuGet { pname = "System.Xml.ReaderWriter"; version = "4.3.0"; sha256 = "0c47yllxifzmh8gq6rq6l36zzvw4kjvlszkqa9wq3fr59n0hl3s1"; })
   (fetchNuGet { pname = "System.Xml.XDocument"; version = "4.0.11"; sha256 = "0n4lvpqzy9kc7qy1a4acwwd7b7pnvygv895az5640idl2y9zbz18"; })
   (fetchNuGet { pname = "System.Xml.XmlDocument"; version = "4.3.0"; sha256 = "0bmz1l06dihx52jxjr22dyv5mxv6pj4852lx68grjm7bivhrbfwi"; })
   (fetchNuGet { pname = "System.Xml.XPath"; version = "4.3.0"; sha256 = "1cv2m0p70774a0sd1zxc8fm8jk3i5zk2bla3riqvi8gsm0r4kpci"; })
   (fetchNuGet { pname = "System.Xml.XPath.XmlDocument"; version = "4.3.0"; sha256 = "1h9lh7qkp0lff33z847sdfjj8yaz98ylbnkbxlnsbflhj9xyfqrm"; })
+  (fetchNuGet { pname = "Tmds.DBus"; version = "0.9.0"; sha256 = "0vvx6sg8lxm23g5jvm5wh2gfs95mv85vd52lkq7d1b89bdczczf3"; })
+  (fetchNuGet { pname = "XamlNameReferenceGenerator"; version = "1.3.4"; sha256 = "0w1bz5sr6y5fhgx1f54xyl8rx7y3kyf1fhacnd6akq8970zjdkdi"; })
 ]
diff --git a/nixpkgs/pkgs/applications/emulators/ryujinx/updater.sh b/nixpkgs/pkgs/applications/emulators/ryujinx/updater.sh
index 9c2f69e606ca..5827271138d6 100755
--- a/nixpkgs/pkgs/applications/emulators/ryujinx/updater.sh
+++ b/nixpkgs/pkgs/applications/emulators/ryujinx/updater.sh
@@ -1,59 +1,78 @@
 #! /usr/bin/env nix-shell
-#! nix-shell -i bash -p coreutils gnused curl common-updater-scripts nuget-to-nix nix-prefetch-git jq dotnet-sdk_6
+#! nix-shell -I nixpkgs=./. -i bash -p coreutils gnused curl common-updater-scripts nix-prefetch-git jq
 set -euo pipefail
 cd "$(dirname "${BASH_SOURCE[0]}")"
 
 DEPS_FILE="$(realpath "./deps.nix")"
 
-RELEASE_JOB_DATA=$(
-    curl -s -H "Accept: application/vnd.github.v3+json" \
-        https://api.github.com/repos/Ryujinx/Ryujinx/actions/workflows |
-        jq -r '.workflows[] | select(.name == "Release job") | { id, path }'
-)
-RELEASE_JOB_ID=$(echo "$RELEASE_JOB_DATA" | jq -r '.id')
-RELEASE_JOB_FILE=$(echo "$RELEASE_JOB_DATA" | jq -r '.path')
-
-BASE_VERSION=$(
-    curl -s "https://raw.githubusercontent.com/Ryujinx/Ryujinx/master/${RELEASE_JOB_FILE}" |
-        grep -Po 'RYUJINX_BASE_VERSION:.*?".*"' |
-        sed 's/RYUJINX_BASE_VERSION: "\(.*\)"/\1/'
-)
-
-LATEST_RELEASE_JOB_DATA=$(
-    curl -s -H "Accept: application/vnd.github.v3+json" \
-        "https://api.github.com/repos/Ryujinx/Ryujinx/actions/workflows/${RELEASE_JOB_ID}/runs" |
-        jq -r '.workflow_runs[0] | { head_sha, run_number }'
-)
-COMMIT=$(echo "$LATEST_RELEASE_JOB_DATA" | jq -r '.head_sha')
-PATCH_VERSION=$(echo "$LATEST_RELEASE_JOB_DATA" | jq -r '.run_number')
-
-NEW_VERSION="${BASE_VERSION}.${PATCH_VERSION}"
+# provide a github token so you don't get rate limited
+# if you use gh cli you can use:
+#     `export GITHUB_TOKEN="$(cat ~/.config/gh/config.yml | yq '.hosts."github.com".oauth_token' -r)"`
+# or just set your token by hand:
+#     `read -s -p "Enter your token: " GITHUB_TOKEN; export GITHUB_TOKEN`
+#     (we use read so it doesn't show in our shell history and in secret mode so the token you paste isn't visible)
+if [ -z "${GITHUB_TOKEN:-}" ]; then
+    echo "no GITHUB_TOKEN provided - you could meet API request limiting" >&2
+fi
+
+# or provide the new version manually
+# manually modify and uncomment or export these env vars in your shell so they're accessable within the script
+# make sure you don't commit your changes here
+#
+# NEW_VERSION=""
+# COMMIT=""
+
+if [ -z ${NEW_VERSION+x} ] && [ -z ${COMMIT+x} ]; then
+    RELEASE_JOB_DATA=$(
+        curl -s -H "Accept: application/vnd.github.v3+json" \
+            ${GITHUB_TOKEN:+ -H "Authorization: bearer $GITHUB_TOKEN"} \
+            https://api.github.com/repos/Ryujinx/Ryujinx/actions/workflows
+    )
+    if [ -z "$RELEASE_JOB_DATA" ] || [[ $RELEASE_JOB_DATA =~ "rate limit exceeded" ]]; then
+        echo "failed to get release job data" >&2
+        exit 1
+    fi
+    RELEASE_JOB_ID=$(echo "$RELEASE_JOB_DATA" | jq -r '.workflows[] | select(.name == "Release job") | .id')
+    RELEASE_JOB_FILE=$(echo "$RELEASE_JOB_DATA" | jq -r '.workflows[] | select(.name == "Release job") | .path')
+
+    LATEST_RELEASE_JOB_DATA=$(
+        curl -s -H "Accept: application/vnd.github.v3+json" \
+            ${GITHUB_TOKEN:+ -H "Authorization: bearer $GITHUB_TOKEN"} \
+            "https://api.github.com/repos/Ryujinx/Ryujinx/actions/workflows/${RELEASE_JOB_ID}/runs"
+    )
+    if [ -z "$LATEST_RELEASE_JOB_DATA" ] || [[ $LATEST_RELEASE_JOB_DATA =~ "rate limit exceeded" ]]; then
+        echo "failed to get latest release job data" >&2
+        exit 1
+    fi
+    COMMIT=$(echo "$LATEST_RELEASE_JOB_DATA" | jq -r '.workflow_runs[0] | .head_sha')
+    PATCH_VERSION=$(echo "$LATEST_RELEASE_JOB_DATA" | jq -r '.workflow_runs[0] | .run_number')
+
+    BASE_VERSION=$(
+        curl -s "https://raw.githubusercontent.com/Ryujinx/Ryujinx/master/${RELEASE_JOB_FILE}" |
+            grep -Po 'RYUJINX_BASE_VERSION:.*?".*"' |
+            sed 's/RYUJINX_BASE_VERSION: "\(.*\)"/\1/'
+    )
+
+    NEW_VERSION="${BASE_VERSION}.${PATCH_VERSION}"
+fi
 
 OLD_VERSION="$(sed -nE 's/\s*version = "(.*)".*/\1/p' ./default.nix)"
 
 echo "comparing versions $OLD_VERSION -> $NEW_VERSION"
 if [[ "$OLD_VERSION" == "$NEW_VERSION" ]]; then
-    echo "Already up to date! Doing nothing"
-    exit 0
+    echo "Already up to date!"
+    if [[ "${1-default}" != "--deps-only" ]]; then
+      exit 0
+    fi
 fi
 
-SHA="$(nix-prefetch-git https://github.com/ryujinx/ryujinx --rev "$COMMIT" --quiet | jq -r '.sha256')"
-
 cd ../../../..
-update-source-version ryujinx "$NEW_VERSION" "$SHA" --rev="$COMMIT"
-
-echo "building Nuget lockfile"
 
-STORE_SRC="$(nix-build . -A ryujinx.src --no-out-link)"
-SRC="$(mktemp -d /tmp/ryujinx-src.XXX)"
-cp -rT "$STORE_SRC" "$SRC"
-chmod -R +w "$SRC"
-pushd "$SRC"
-
-mkdir nuget_tmp.packages
-DOTNET_CLI_TELEMETRY_OPTOUT=1 dotnet restore Ryujinx.sln --packages nuget_tmp.packages
+if [[ "${1-default}" != "--deps-only" ]]; then
+    SHA="$(nix-prefetch-git https://github.com/ryujinx/ryujinx --rev "$COMMIT" --quiet | jq -r '.sha256')"
+    update-source-version ryujinx "$NEW_VERSION" "$SHA" --rev="$COMMIT"
+fi
 
-nuget-to-nix ./nuget_tmp.packages >"$DEPS_FILE"
+echo "building Nuget lockfile"
 
-popd
-rm -r "$SRC"
+$(nix-build -A ryujinx.fetch-deps --no-out-link) "$DEPS_FILE"
diff --git a/nixpkgs/pkgs/applications/emulators/simh/default.nix b/nixpkgs/pkgs/applications/emulators/simh/default.nix
index 1e939538cda3..6f3409ec0637 100644
--- a/nixpkgs/pkgs/applications/emulators/simh/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/simh/default.nix
@@ -22,6 +22,11 @@ stdenv.mkDerivation rec {
 
   dontConfigure = true;
 
+  # Workaround to build against upstream gcc-10 and clang-11.
+  # Can be removed when next release contains
+  #    https://github.com/simh/simh/issues/794
+  NIX_CFLAGS_COMPILE = [ "-fcommon" ];
+
   makeFlags = [ "GCC=${stdenv.cc.targetPrefix}cc" "CC_STD=-std=c99" "LDFLAGS=-lm" ];
 
   preInstall = ''
diff --git a/nixpkgs/pkgs/applications/emulators/snes9x-gtk/default.nix b/nixpkgs/pkgs/applications/emulators/snes9x-gtk/default.nix
deleted file mode 100644
index ff7df4b09440..000000000000
--- a/nixpkgs/pkgs/applications/emulators/snes9x-gtk/default.nix
+++ /dev/null
@@ -1,37 +0,0 @@
-{ lib, stdenv, fetchFromGitHub, meson, ninja, pkg-config, wrapGAppsHook, alsa-lib
-, SDL2, zlib, gtkmm3, libXv, libepoxy, minizip, pulseaudio, portaudio }:
-
-stdenv.mkDerivation rec {
-  pname = "snes9x-gtk";
-  version = "1.61";
-
-  src = fetchFromGitHub {
-    owner = "snes9xgit";
-    repo = "snes9x";
-    rev = version;
-    fetchSubmodules = true;
-    sha256 = "1kay7aj30x0vn8rkylspdycydrzsc0aidjbs0dd238hr5hid723b";
-  };
-
-  nativeBuildInputs = [ meson ninja pkg-config wrapGAppsHook ];
-  buildInputs = [ alsa-lib SDL2 zlib gtkmm3 libXv libepoxy minizip pulseaudio portaudio ];
-
-  preConfigure = "cd gtk";
-
-  meta = with lib; {
-    homepage = "https://www.snes9x.com";
-    description = "Super Nintendo Entertainment System (SNES) emulator";
-
-    longDescription = ''
-      Snes9x is a portable, freeware Super Nintendo Entertainment System (SNES)
-      emulator. It basically allows you to play most games designed for the SNES
-      and Super Famicom Nintendo game systems on your PC or Workstation; which
-      includes some real gems that were only ever released in Japan.
-    '';
-
-    # see https://github.com/snes9xgit/snes9x/blob/master/LICENSE for exact details
-    license = licenses.unfreeRedistributable;
-    maintainers = with maintainers; [ qknight xfix ];
-    platforms = platforms.linux;
-  };
-}
diff --git a/nixpkgs/pkgs/applications/emulators/snes9x/default.nix b/nixpkgs/pkgs/applications/emulators/snes9x/default.nix
new file mode 100644
index 000000000000..779e4dab3b3d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/snes9x/default.nix
@@ -0,0 +1,130 @@
+{ lib
+, stdenv
+, alsa-lib
+, autoreconfHook
+, fetchFromGitHub
+, fetchpatch
+, gtkmm3
+, libepoxy
+, libpng
+, libX11
+, libXv
+, libXext
+, libXinerama
+, meson
+, minizip
+, ninja
+, pkg-config
+, portaudio
+, pulseaudio
+, SDL2
+, wrapGAppsHook
+, zlib
+, withGtk ? false
+}:
+
+stdenv.mkDerivation rec {
+  pname =
+    if withGtk then
+      "snes9x-gtk"
+    else
+      "snes9x";
+  version = "1.61";
+
+  src = fetchFromGitHub {
+    owner = "snes9xgit";
+    repo = "snes9x";
+    rev = version;
+    fetchSubmodules = true;
+    sha256 = "1kay7aj30x0vn8rkylspdycydrzsc0aidjbs0dd238hr5hid723b";
+  };
+
+  patches = [
+    # Fix cross-compilation, otherwise it fails to detect host compiler features
+    # Doesn't affect non CC builds
+    (fetchpatch {
+      url = "https://mirror.its.dal.ca/gentoo-portage/games-emulation/snes9x/files/snes9x-1.53-cross-compile.patch";
+      sha256 = "sha256-ZCmnprimz8PtDIXkB1dYD0oura9icW81yKvJ4coKaDg=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    pkg-config
+  ]
+  ++ lib.optionals (!withGtk) [
+    autoreconfHook
+  ]
+  ++ lib.optionals withGtk [
+    meson
+    ninja
+    wrapGAppsHook
+  ];
+
+  buildInputs = [
+    libX11
+    libXext
+    libXv
+    minizip
+    zlib
+  ]
+  # on non-Linux platforms this will build without sound support on X11 build
+  ++ lib.optionals stdenv.isLinux [
+    alsa-lib
+    pulseaudio
+  ]
+  ++ lib.optionals (!withGtk) [
+    libpng
+    libXinerama
+  ]
+  ++ lib.optionals withGtk [
+    gtkmm3
+    libepoxy
+    portaudio
+    SDL2
+  ];
+
+  configureFlags =
+    lib.optional stdenv.hostPlatform.sse4_1Support "--enable-sse41"
+    ++ lib.optional stdenv.hostPlatform.avx2Support "--enable-avx2";
+
+  installPhase = lib.optionalString (!withGtk) ''
+    runHook preInstall
+
+    install -Dm755 snes9x -t "$out/bin/"
+    install -Dm644 snes9x.conf.default -t "$out/share/doc/${pname}/"
+    install -Dm644 ../docs/{control-inputs,controls,snapshots}.txt -t \
+      "$out/share/doc/${pname}/"
+
+    runHook postInstall
+  '';
+
+  preAutoreconf = lib.optionalString (!withGtk) "cd unix";
+  preConfigure = lib.optionalString withGtk "cd gtk";
+
+  enableParallelBuilding = true;
+
+  meta = with lib;
+    let
+      interface = if withGtk then "GTK" else "X11";
+    in
+    {
+      homepage = "https://www.snes9x.com";
+      description = "Super Nintendo Entertainment System (SNES) emulator, ${interface} version";
+
+      longDescription = ''
+        Snes9x is a portable, freeware Super Nintendo Entertainment System (SNES)
+        emulator. It basically allows you to play most games designed for the SNES
+        and Super Famicom Nintendo game systems on your PC or Workstation; which
+        includes some real gems that were only ever released in Japan.
+
+        Version build with ${interface} interface.
+      '';
+
+      license = licenses.unfreeRedistributable // {
+        url = "https://github.com/snes9xgit/snes9x/blob/${version}/LICENSE";
+      };
+      maintainers = with maintainers; [ qknight xfix thiagokokada ];
+      platforms = platforms.unix;
+      broken = (withGtk && stdenv.isDarwin);
+    };
+}
diff --git a/nixpkgs/pkgs/applications/emulators/stella/default.nix b/nixpkgs/pkgs/applications/emulators/stella/default.nix
index 212c06690468..593845cca61c 100644
--- a/nixpkgs/pkgs/applications/emulators/stella/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/stella/default.nix
@@ -7,13 +7,13 @@
 
 stdenv.mkDerivation rec {
   pname = "stella";
-  version = "6.6";
+  version = "6.7";
 
   src = fetchFromGitHub {
     owner = "stella-emu";
     repo = pname;
     rev = version;
-    hash = "sha256-+ZvSCnnoKGyToSFqUQOArolFdgUcBBFNjFw8aoVDkYI=";
+    hash = "sha256-E8vbBbsVMOSY3iSSE+UCwBwmfHU7Efmre1cYlexVZ+E=";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/applications/emulators/tinyemu/default.nix b/nixpkgs/pkgs/applications/emulators/tinyemu/default.nix
index c32fd24fe477..ca3f8acd88ca 100644
--- a/nixpkgs/pkgs/applications/emulators/tinyemu/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/tinyemu/default.nix
@@ -21,7 +21,12 @@ stdenv.mkDerivation rec {
     openssl
   ];
 
-  makeFlags = [ "DESTDIR=$(out)" "bindir=/bin" ];
+  makeFlags = [
+    "CC:=$(CC)"
+    "STRIP:=$(STRIP)"
+    "DESTDIR=$(out)"
+    "bindir=/bin"
+  ];
 
   preInstall = ''
     mkdir -p "$out/bin"
diff --git a/nixpkgs/pkgs/applications/emulators/uae/default.nix b/nixpkgs/pkgs/applications/emulators/uae/default.nix
index 64f311c4a8a6..aeceb0dc6f84 100644
--- a/nixpkgs/pkgs/applications/emulators/uae/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/uae/default.nix
@@ -15,6 +15,10 @@ stdenv.mkDerivation rec {
   buildInputs = [ gtk2 alsa-lib SDL ];
 
   hardeningDisable = [ "format" ];
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: bsdsocket.o:(.bss+0x0): multiple definition of
+  #     `socketbases'; main.o:(.bss+0x2792c0): first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
   LDFLAGS = [ "-lm" ];
 
   meta = {
diff --git a/nixpkgs/pkgs/applications/emulators/wibo/default.nix b/nixpkgs/pkgs/applications/emulators/wibo/default.nix
new file mode 100644
index 000000000000..7a0d4e5f096d
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/wibo/default.nix
@@ -0,0 +1,34 @@
+{ lib
+, stdenv
+, fetchFromGitHub
+, cmake
+}:
+
+stdenv.mkDerivation rec {
+  pname = "wibo";
+  version = "0.2.0";
+
+  src = fetchFromGitHub {
+    owner = "decompals";
+    repo = "WiBo";
+    rev = version;
+    sha256 = "sha256-zv+FiordPo7aho3RJqDEe/1sJtjVt6Vy665VeNul/Kw=";
+  };
+
+  nativeBuildInputs = [
+    cmake
+  ];
+
+  meta = with lib; {
+    description = "Quick-and-dirty wrapper to run 32-bit windows EXEs on linux";
+    longDescription = ''
+      A minimal, low-fuss wrapper that can run really simple command-line
+      32-bit Windows binaries on Linux - with less faff and less dependencies
+      than WINE.
+    '';
+    homepage = "https://github.com/decompals/WiBo";
+    license = licenses.mit;
+    maintainers = with maintainers; [ r-burns ];
+    platforms = [ "i686-linux" ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/emulators/wine/base.nix b/nixpkgs/pkgs/applications/emulators/wine/base.nix
index 7788b13b4ecb..a280b9d3e3d6 100644
--- a/nixpkgs/pkgs/applications/emulators/wine/base.nix
+++ b/nixpkgs/pkgs/applications/emulators/wine/base.nix
@@ -6,7 +6,7 @@
   patches,
   vkd3dArches,
   moltenvk,
-  buildScript ? null, configureFlags ? []
+  buildScript ? null, configureFlags ? [], mainProgram ? "wine"
 }:
 
 with import ./util.nix { inherit lib; };
@@ -191,9 +191,13 @@ stdenv.mkDerivation ((lib.optionalAttrs (buildScript != null) {
     inherit version;
     homepage = "https://www.winehq.org/";
     license = with lib.licenses; [ lgpl21Plus ];
+    sourceProvenance = with lib.sourceTypes; [
+      fromSource
+      binaryNativeCode  # mono, gecko
+    ];
     description = if supportFlags.waylandSupport then "An Open Source implementation of the Windows API on top of OpenGL and Unix (with experimental Wayland support)" else "An Open Source implementation of the Windows API on top of X, OpenGL, and Unix";
     platforms = if supportFlags.waylandSupport then (lib.remove "x86_64-darwin" prevPlatforms) else prevPlatforms;
     maintainers = with lib.maintainers; [ avnik raskin bendlas jmc-figueira ];
-    mainProgram = "wine";
+    inherit mainProgram;
   };
 })
diff --git a/nixpkgs/pkgs/applications/emulators/wine/packages.nix b/nixpkgs/pkgs/applications/emulators/wine/packages.nix
index c119feb783d3..3b5aa19658ce 100644
--- a/nixpkgs/pkgs/applications/emulators/wine/packages.nix
+++ b/nixpkgs/pkgs/applications/emulators/wine/packages.nix
@@ -28,6 +28,7 @@ in with src; {
     monos =  [ mono ];
     configureFlags = [ "--enable-win64" ];
     platforms = [ "x86_64-linux" "x86_64-darwin" ];
+    mainProgram = "wine64";
   };
   wineWow = callPackage ./base.nix {
     pname = "wine-wow";
@@ -40,5 +41,6 @@ in with src; {
     monos =  [ mono ];
     buildScript = ./builder-wow.sh;
     platforms = [ "x86_64-linux" ];
+    mainProgram = "wine64";
   };
 }
diff --git a/nixpkgs/pkgs/applications/emulators/wine/sources.nix b/nixpkgs/pkgs/applications/emulators/wine/sources.nix
index 23538a237e4a..fbd318cb4a12 100644
--- a/nixpkgs/pkgs/applications/emulators/wine/sources.nix
+++ b/nixpkgs/pkgs/applications/emulators/wine/sources.nix
@@ -21,14 +21,14 @@ in rec {
 
     ## see http://wiki.winehq.org/Gecko
     gecko32 = fetchurl rec {
-      version = "2.47.2";
+      version = "2.47.3";
       url = "https://dl.winehq.org/wine/wine-gecko/${version}/wine-gecko-${version}-x86.msi";
-      sha256 = "07d6nrk2g0614kvwdjym1wq21d2bwy3pscwikk80qhnd6rrww875";
+      sha256 = "sha256-5bmwbTzjVWRqjS5y4ETjfh4MjRhGTrGYWtzRh6f0jgE=";
     };
     gecko64 = fetchurl rec {
-      version = "2.47.2";
+      version = "2.47.3";
       url = "https://dl.winehq.org/wine/wine-gecko/${version}/wine-gecko-${version}-x86_64.msi";
-      sha256 = "0iffhvdawc499nbn4k99k33cr7g8sdfcvq8k3z1g6gw24h87d5h5";
+      sha256 = "sha256-pT7pVDkrbR/j1oVF9uTiqXr7yNyLA6i0QzSVRc4TlnU=";
     };
 
     ## see http://wiki.winehq.org/Mono
@@ -46,22 +46,22 @@ in rec {
 
   unstable = fetchurl rec {
     # NOTE: Don't forget to change the SHA256 for staging as well.
-    version = "7.4";
+    version = "7.13";
     url = "https://dl.winehq.org/wine/source/7.x/wine-${version}.tar.xz";
-    sha256 = "sha256-co6GbW5JzpKioMUUMz6f8Ivb9shvXvTmGAFDuNK31BY=";
+    sha256 = "sha256-a/6+kz2qUJVprnmwv2ofG08H4b+K/Balm+4TdIuSymQ=";
     inherit (stable) gecko32 gecko64 patches;
 
     mono = fetchurl rec {
-      version = "7.1.1";
+      version = "7.3.0";
       url = "https://dl.winehq.org/wine/wine-mono/${version}/wine-mono-${version}-x86.msi";
-      sha256 = "sha256-ncjlYDt7xkNU65SuTqD2ghQkdno/9E/w0Z40akkMEeo=";
+      sha256 = "sha256-k54vVmlyDQ0Px+MFQmYioRozt644XE1+WB4p6iZOIv8=";
     };
   };
 
   staging = fetchFromGitHub rec {
     # https://github.com/wine-staging/wine-staging/releases
     inherit (unstable) version;
-    sha256 = "0vlj3b8bnidyhlgkjrnlbah3878zjy3s557vbp16qka42zjaa51q";
+    sha256 = "sha256-U1awbhJRT3aAJstyEjv2Dp20FqyQ4ntnFFRYJb12C/U=";
     owner = "wine-staging";
     repo = "wine-staging";
     rev = "v${version}";
@@ -84,8 +84,8 @@ in rec {
 
   winetricks = fetchFromGitHub rec {
     # https://github.com/Winetricks/winetricks/releases
-    version = "20210825";
-    sha256 = "sha256-exMhj3dS8uXCEgOaWbftaq94mBOmtZIXsXb9xNX5ha8=";
+    version = "20220411";
+    sha256 = "sha256-FjH10nZDYbqXI6/vKpZJKfv2maXSVkahNDf5UTU3eyU=";
     owner = "Winetricks";
     repo = "winetricks";
     rev = version;
diff --git a/nixpkgs/pkgs/applications/emulators/wine/vkd3d.nix b/nixpkgs/pkgs/applications/emulators/wine/vkd3d.nix
index 4f06b886e231..c345c052c458 100644
--- a/nixpkgs/pkgs/applications/emulators/wine/vkd3d.nix
+++ b/nixpkgs/pkgs/applications/emulators/wine/vkd3d.nix
@@ -4,11 +4,11 @@
 
 stdenv.mkDerivation rec {
   pname = "vkd3d";
-  version = "1.3";
+  version = "1.4";
 
   src = fetchurl {
     url = "https://dl.winehq.org/vkd3d/source/vkd3d-${version}.tar.xz";
-    sha256 = "134b347806d34a4d2b39ea29ff1c2b38443793803a3adc50800855bb929fb8b2";
+    sha256 = "sha256-yLqF9gSCyHPAVs9tuw6veRvIq30W1ipH83uYQbapCr0=";
   };
 
   nativeBuildInputs = [ flex bison ];
diff --git a/nixpkgs/pkgs/applications/emulators/yuzu/base.nix b/nixpkgs/pkgs/applications/emulators/yuzu/base.nix
deleted file mode 100644
index aff09134fae9..000000000000
--- a/nixpkgs/pkgs/applications/emulators/yuzu/base.nix
+++ /dev/null
@@ -1,86 +0,0 @@
-{ pname, version, src, branchName
-, stdenv, lib, wrapQtAppsHook
-, cmake, pkg-config
-, libpulseaudio, libjack2, alsa-lib, sndio
-, vulkan-loader, vulkan-headers
-, qtbase, qtwebengine, qttools
-, nlohmann_json, rapidjson
-, zlib, zstd, libzip, lz4
-, glslang
-, boost173
-, catch2
-, fmt_8
-, SDL2
-, udev
-, libusb1
-, ffmpeg
-}:
-
-stdenv.mkDerivation rec {
-  inherit pname version src;
-
-  nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
-  buildInputs = [
-    libpulseaudio libjack2 alsa-lib sndio
-    vulkan-loader vulkan-headers
-    qtbase qtwebengine qttools
-    nlohmann_json rapidjson
-    zlib zstd libzip lz4
-    glslang
-    boost173
-    catch2
-    fmt_8
-    SDL2
-    udev
-    libusb1
-    ffmpeg
-  ];
-
-  cmakeFlags = [
-    "-DYUZU_USE_BUNDLED_QT=OFF"
-    "-DYUZU_USE_BUNDLED_SDL2=OFF"
-    "-DYUZU_USE_BUNDLED_FFMPEG=OFF"
-    "-DENABLE_QT_TRANSLATION=ON"
-    "-DYUZU_USE_QT_WEB_ENGINE=ON"
-    "-DUSE_DISCORD_PRESENCE=ON"
-  ];
-
-  # This changes `ir/opt` to `ir/var/empty` in `externals/dynarmic/src/dynarmic/CMakeLists.txt`
-  # making the build fail, as that path does not exist
-  dontFixCmake = true;
-
-  preConfigure = ''
-    # Trick the configure system. This prevents a check for submodule directories.
-    rm -f .gitmodules
-
-    # see https://github.com/NixOS/nixpkgs/issues/114044, setting this through cmakeFlags does not work.
-    cmakeFlagsArray+=(
-      "-DTITLE_BAR_FORMAT_IDLE=yuzu ${branchName} ${version}"
-      "-DTITLE_BAR_FORMAT_RUNNING=yuzu ${branchName} ${version} | {3}"
-    )
-  '';
-
-  # Fix vulkan detection
-  postFixup = ''
-    wrapProgram $out/bin/yuzu --prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib
-    wrapProgram $out/bin/yuzu-cmd --prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib
-  '';
-
-  meta = with lib; {
-    homepage = "https://yuzu-emu.org";
-    description = "The ${branchName} branch of an experimental Nintendo Switch emulator written in C++";
-    longDescription = ''
-      An experimental Nintendo Switch emulator written in C++.
-      Using the mainline branch is recommanded for general usage.
-      Using the early-access branch is recommanded if you would like to try out experimental features, with a cost of stability.
-    '';
-    license = with licenses; [
-      gpl2Plus
-      # Icons
-      cc-by-nd-30 cc0
-    ];
-    maintainers = with maintainers; [ ivar joshuafern sbruder ];
-    platforms = platforms.linux;
-    broken = stdenv.isAarch64; # Currently aarch64 is not supported.
-  };
-}
diff --git a/nixpkgs/pkgs/applications/emulators/yuzu/default.nix b/nixpkgs/pkgs/applications/emulators/yuzu/default.nix
index f212abb448a6..923dc5427997 100644
--- a/nixpkgs/pkgs/applications/emulators/yuzu/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/yuzu/default.nix
@@ -1,28 +1,45 @@
-{ branch ? "mainline", libsForQt5, fetchFromGitHub }:
+{ branch ? "mainline"
+, libsForQt5
+, fetchFromGitHub
+, fetchurl
+}:
+
 let
-  inherit libsForQt5 fetchFromGitHub;
+  # Fetched from https://api.yuzu-emu.org/gamedb, last updated 2022-07-14
+  # Please make sure to update this when updating yuzu!
+  compat-list = fetchurl {
+    name = "yuzu-compat-list";
+    url = "https://web.archive.org/web/20220714160745/https://api.yuzu-emu.org/gamedb";
+    sha256 = "sha256-anOmO7NscHDsQxT03+YbJEyBkXjhcSVGgKpDwt//GHw=";
+  };
 in {
-  mainline = libsForQt5.callPackage ./base.nix rec {
+  mainline = libsForQt5.callPackage ./generic.nix rec {
     pname = "yuzu-mainline";
-    version = "953";
-    branchName = branch;
+    version = "1131";
+
     src = fetchFromGitHub {
       owner = "yuzu-emu";
       repo = "yuzu-mainline";
       rev = "mainline-0-${version}";
-      sha256 = "0p07gybyhr6flzmhz92qlrwcq7l37c2wmcxw8sbrvhj2pgaaw9ic";
+      sha256 = "0lh8s59hrysfjz69yr0f44s3l4aaznmclq0xfnyblsk0cw9ripf6";
       fetchSubmodules = true;
     };
+
+    inherit branch compat-list;
   };
-  early-access = libsForQt5.callPackage ./base.nix rec {
+
+  early-access = libsForQt5.callPackage ./generic.nix rec {
     pname = "yuzu-ea";
-    version = "2557";
-    branchName = branch;
+    version = "2901";
+
     src = fetchFromGitHub {
       owner = "pineappleEA";
       repo = "pineapple-src";
       rev = "EA-${version}";
-      sha256 = "013xxgyn8y5fv0xbrm0zfl9xmi0gx4hpflrbjskg1hcvb2bjqyvj";
+      sha256 = "0jymm9sdsnayjaffmcbpjck4k2yslx8zid2vsm4jfdaajr244q2z";
+      fetchSubmodules = true;
     };
+
+    inherit branch compat-list;
   };
 }.${branch}
diff --git a/nixpkgs/pkgs/applications/emulators/yuzu/generic.nix b/nixpkgs/pkgs/applications/emulators/yuzu/generic.nix
new file mode 100644
index 000000000000..9dac4409ce44
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/yuzu/generic.nix
@@ -0,0 +1,167 @@
+{ pname
+, version
+, src
+, branch
+, compat-list
+
+, lib
+, stdenv
+, runCommandLocal
+, substituteAll
+, wrapQtAppsHook
+, alsa-lib
+, boost
+, catch2
+, cmake
+, doxygen
+, ffmpeg
+, fmt_8
+, glslang
+, libjack2
+, libopus
+, libpulseaudio
+, libusb1
+, libva
+, libzip
+, lz4
+, nlohmann_json
+, perl
+, pkg-config
+, python3
+, qtbase
+, qttools
+, qtwebengine
+, rapidjson
+, SDL2
+, sndio
+, speexdsp
+, udev
+, vulkan-headers
+, vulkan-loader
+, zlib
+, zstd
+}:
+
+stdenv.mkDerivation rec {
+  inherit pname version src;
+
+  # Replace icons licensed under CC BY-ND 3.0 with free ones to allow
+  # for binary redistribution: https://github.com/yuzu-emu/yuzu/pull/8104
+  # The patch hosted on GitHub has the binary information in git format, which
+  # can’t be applied with patch(1), so it has been regenerated with
+  # "git format-patch --text --full-index --binary".
+  # Because pineapple strips all files beginning with a dot, the patch needs to
+  # be edited manually afterwards to remove all changes to those.
+  patches = [ ./yuzu-free-icons.patch ];
+
+  nativeBuildInputs = [
+    cmake
+    doxygen
+    perl
+    pkg-config
+    python3
+    wrapQtAppsHook
+  ];
+
+  buildInputs = [
+    alsa-lib
+    boost
+    catch2
+    ffmpeg
+    fmt_8
+    glslang
+    libjack2
+    libopus
+    libpulseaudio
+    libusb1
+    libva
+    libzip
+    lz4
+    nlohmann_json
+    qtbase
+    qttools
+    qtwebengine
+    rapidjson
+    SDL2
+    sndio
+    speexdsp
+    udev
+    zlib
+    zstd
+  ];
+
+  doCheck = true;
+
+  # This changes `ir/opt` to `ir/var/empty` in `externals/dynarmic/src/dynarmic/CMakeLists.txt`
+  # making the build fail, as that path does not exist
+  dontFixCmake = true;
+
+  cmakeFlags = [
+    "-DYUZU_USE_BUNDLED_QT=OFF"
+    "-DYUZU_USE_BUNDLED_FFMPEG=OFF"
+    "-DYUZU_USE_BUNDLED_OPUS=OFF"
+    "-DYUZU_USE_EXTERNAL_SDL2=OFF"
+
+    "-DENABLE_QT_TRANSLATION=ON"
+    "-DYUZU_USE_QT_WEB_ENGINE=ON"
+    "-DUSE_DISCORD_PRESENCE=ON"
+
+    # We dont want to bother upstream with potentially outdated compat reports
+    "-DYUZU_ENABLE_COMPATIBILITY_REPORTING=OFF"
+    "-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF" # We provide this deterministically
+  ];
+
+  preConfigure = ''
+    # This prevents a check for submodule directories.
+    rm -f .gitmodules
+
+    # see https://github.com/NixOS/nixpkgs/issues/114044, setting this through cmakeFlags does not work.
+    cmakeFlagsArray+=(
+      "-DTITLE_BAR_FORMAT_IDLE=yuzu ${branch} ${version}"
+      "-DTITLE_BAR_FORMAT_RUNNING=yuzu ${branch} ${version} | {3}"
+    )
+  '';
+
+  # This must be done after cmake finishes as it overwrites the file
+  postConfigure = ''
+    ln -sf ${compat-list} ./dist/compatibility_list/compatibility_list.json
+  '';
+
+  # Fix vulkan detection
+  postFixup = ''
+    for bin in $out/bin/yuzu $out/bin/yuzu-cmd; do
+      wrapProgram $bin --prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib
+    done
+  '';
+
+  passthru.updateScript = runCommandLocal "yuzu-${branch}-updateScript" {
+    script = substituteAll {
+      src = ./update.sh;
+      inherit branch;
+    };
+  } "install -Dm755 $script $out";
+
+  meta = with lib; {
+    homepage = "https://yuzu-emu.org";
+    changelog = "https://yuzu-emu.org/entry";
+    description = "The ${branch} branch of an experimental Nintendo Switch emulator written in C++";
+    longDescription = ''
+      An experimental Nintendo Switch emulator written in C++.
+      Using the mainline branch is recommanded for general usage.
+      Using the early-access branch is recommanded if you would like to try out experimental features, with a cost of stability.
+    '';
+    mainProgram = "yuzu";
+    platforms = [ "x86_64-linux" ];
+    license = with licenses; [
+      gpl3Plus
+      # Icons. Note that this would be cc0 and cc-by-nd-30 without the "yuzu-free-icons" patch
+      asl20 mit cc0
+    ];
+    maintainers = with maintainers; [
+      ashley
+      ivar
+      joshuafern
+      sbruder
+    ];
+  };
+}
diff --git a/nixpkgs/pkgs/applications/emulators/yuzu/update.sh b/nixpkgs/pkgs/applications/emulators/yuzu/update.sh
new file mode 100755
index 000000000000..4972427627e7
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/yuzu/update.sh
@@ -0,0 +1,84 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p nix nix-prefetch-git coreutils curl jq gnused
+
+set -e
+
+# Will be replaced with the actual branch when running this from passthru.updateScript
+BRANCH="@branch@"
+
+if [[ ! "$(basename $PWD)" = "yuzu" ]]; then
+    echo "error: Script must be ran from yuzu's directory!"
+    exit 1
+fi
+
+getLocalVersion() {
+    pushd ../../../.. >/dev/null
+    nix eval --raw -f default.nix "$1".version
+    popd >/dev/null
+}
+
+getLocalHash() {
+    pushd ../../../.. >/dev/null
+    nix eval --raw -f default.nix "$1".src.drvAttrs.outputHash
+    popd >/dev/null
+}
+
+updateMainline() {
+    OLD_MAINLINE_VERSION="$(getLocalVersion "yuzu-mainline")"
+    OLD_MAINLINE_HASH="$(getLocalHash "yuzu-mainline")"
+
+    NEW_MAINLINE_VERSION="$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} \
+        "https://api.github.com/repos/yuzu-emu/yuzu-mainline/releases?per_page=1" | jq -r '.[0].name' | cut -d" " -f2)"
+
+    if [[ "${OLD_MAINLINE_VERSION}" = "${NEW_MAINLINE_VERSION}" ]]; then
+        echo "yuzu-mainline is already up to date!"
+
+        [ "$KEEP_GOING" ] && return || exit
+    else
+        echo "yuzu-mainline: ${OLD_MAINLINE_VERSION} -> ${NEW_MAINLINE_VERSION}"
+    fi
+
+    echo "  Fetching source code..."
+
+    NEW_MAINLINE_HASH="$(nix-prefetch-git --quiet --fetch-submodules --rev "mainline-0-${NEW_MAINLINE_VERSION}" "https://github.com/yuzu-emu/yuzu-mainline" | jq -r '.sha256')"
+
+    echo "  Succesfully fetched. hash: ${NEW_MAINLINE_HASH}"
+
+    sed -i "s/${OLD_MAINLINE_VERSION}/${NEW_MAINLINE_VERSION}/" ./default.nix
+    sed -i "s/${OLD_MAINLINE_HASH}/${NEW_MAINLINE_HASH}/" ./default.nix
+}
+
+updateEarlyAccess() {
+    OLD_EA_VERSION="$(getLocalVersion "yuzu-ea")"
+    OLD_EA_HASH="$(getLocalHash "yuzu-ea")"
+
+    NEW_EA_VERSION="$(curl -s ${GITHUB_TOKEN:+"-u \":$GITHUB_TOKEN\""} \
+        "https://api.github.com/repos/pineappleEA/pineapple-src/releases?per_page=2" | jq -r '.[].tag_name' | grep '^EA-[0-9]*' | head -n1 | cut -d"-" -f2 | cut -d" " -f1)"
+
+    if [[ "${OLD_EA_VERSION}" = "${NEW_EA_VERSION}" ]]; then
+        echo "yuzu-ea is already up to date!"
+
+        [ "$KEEP_GOING" ] && return || exit
+    else
+        echo "yuzu-ea: ${OLD_EA_VERSION} -> ${NEW_EA_VERSION}"
+    fi
+
+    echo "  Fetching source code..."
+
+    NEW_EA_HASH="$(nix-prefetch-git --quiet --fetch-submodules --rev "EA-${NEW_EA_VERSION}" "https://github.com/pineappleEA/pineapple-src" | jq -r '.sha256')"
+
+    echo "  Succesfully fetched. hash: ${NEW_EA_HASH}"
+
+    sed -i "s/${OLD_EA_VERSION}/${NEW_EA_VERSION}/" ./default.nix
+    sed -i "s/${OLD_EA_HASH}/${NEW_EA_HASH}/" ./default.nix
+}
+
+if [[ "$BRANCH" = "mainline" ]]; then
+    updateMainline
+elif [[ "$BRANCH" = "early-access" ]]; then
+    updateEarlyAccess
+else
+    KEEP_GOING=1
+    updateMainline
+    updateEarlyAccess
+fi
diff --git a/nixpkgs/pkgs/applications/emulators/yuzu/yuzu-free-icons.patch b/nixpkgs/pkgs/applications/emulators/yuzu/yuzu-free-icons.patch
new file mode 100644
index 000000000000..4332d29e3193
--- /dev/null
+++ b/nixpkgs/pkgs/applications/emulators/yuzu/yuzu-free-icons.patch
@@ -0,0 +1,1177 @@
+From 44edc19f8f1ac0046770d6f3587a17bdd0f82d32 Mon Sep 17 00:00:00 2001
+From: Kyle Kienapfel <Docteh@users.noreply.github.com>
+Date: Tue, 19 Jul 2022 07:08:29 -0700
+Subject: [PATCH] Moving Icons away from CC BY-ND 3.0 for FOSS packaging
+ purposes
+
+I've seen some comments stating that sharing pre-compiled packages
+of yuzu is problematic for linux distributions due to some contents
+having license of CC BY-ND 3.0
+
+Better licensed sources of icons have been found for most cases,
+see the changes to the .reuse/dep5 file for details.
+
+Placeholders for connected/disconnected icons
+
+At the time of writing I consider these icons to be placeholders,
+hence three copies. colorful is grey, default is black, qdarkstyle is white
+
+connected is gnome/16x16/network-idle.png with no changes
+connected_notification is gnome/16x16/network-error.png with changes
+disconnected is gnome/16x16/network-offline.png with changes
+
+Looking at licenses: GNOME icon theme is distributed under the terms of either
+GNU LGPL v.3 or Creative Commons BY-SA 3.0 license.
+
+Debian appears to explicitly state they're licensing under
+Creative Commons Attribution-Share Alike 3.0
+
+From a tarball at the following link suggests we can just attribute GNOME Project
+https://download.gnome.org/sources/gnome-icon-theme/
+
+When attributing the artwork, using "GNOME Project" is enough.
+Please link to http://www.gnome.org where available.
+---
+ LICENSES/CC-BY-ND-3.0.txt                     |  87 ------------------
+ LICENSES/CC-BY-SA-3.0.txt                     |  60 ++++++++++++
+ .../colorful/icons/16x16/connected.png        | Bin 362 -> 575 bytes
+ .../icons/16x16/connected_notification.png    | Bin 607 -> 760 bytes
+ .../colorful/icons/16x16/disconnected.png     | Bin 784 -> 648 bytes
+ .../colorful/icons/48x48/list-add.png         | Bin 496 -> 204 bytes
+ .../colorful/icons/48x48/sd_card.png          | Bin 680 -> 981 bytes
+ dist/qt_themes/colorful/icons/48x48/star.png  | Bin 1248 -> 1108 bytes
+ .../icons/16x16/lock.png                      | Bin 401 -> 0 bytes
+ .../icons/16x16/view-refresh.png              | Bin 362 -> 0 bytes
+ .../colorful_midnight_blue/style.qrc          |   4 +-
+ .../qt_themes/default/icons/16x16/checked.png | Bin 657 -> 414 bytes
+ .../default/icons/16x16/connected.png         | Bin 269 -> 575 bytes
+ .../icons/16x16/connected_notification.png    | Bin 517 -> 760 bytes
+ .../default/icons/16x16/disconnected.png      | Bin 306 -> 648 bytes
+ dist/qt_themes/default/icons/16x16/failed.png | Bin 524 -> 431 bytes
+ dist/qt_themes/default/icons/16x16/lock.png   | Bin 279 -> 318 bytes
+ .../default/icons/256x256/plus_folder.png     | Bin 3135 -> 3521 bytes
+ .../default/icons/48x48/bad_folder.png        | Bin 1088 -> 1007 bytes
+ dist/qt_themes/default/icons/48x48/chip.png   | Bin 15070 -> 511 bytes
+ dist/qt_themes/default/icons/48x48/folder.png | Bin 410 -> 535 bytes
+ .../default/icons/48x48/list-add.png          | Bin 316 -> 204 bytes
+ .../default/icons/48x48/no_avatar.png         | Bin 588 -> 678 bytes
+ .../qt_themes/default/icons/48x48/sd_card.png | Bin 614 -> 561 bytes
+ dist/qt_themes/default/icons/48x48/star.png   | Bin 686 -> 1029 bytes
+ .../qdarkstyle/icons/16x16/connected.png      | Bin 397 -> 575 bytes
+ .../icons/16x16/connected_notification.png    | Bin 526 -> 760 bytes
+ .../qdarkstyle/icons/16x16/disconnected.png   | Bin 444 -> 648 bytes
+ .../qt_themes/qdarkstyle/icons/16x16/lock.png | Bin 304 -> 343 bytes
+ .../qdarkstyle/icons/256x256/plus_folder.png  | Bin 3438 -> 3931 bytes
+ .../qdarkstyle/icons/48x48/bad_folder.png     | Bin 1098 -> 1061 bytes
+ .../qt_themes/qdarkstyle/icons/48x48/chip.png | Bin 15120 -> 551 bytes
+ .../qdarkstyle/icons/48x48/folder.png         | Bin 542 -> 594 bytes
+ .../qdarkstyle/icons/48x48/list-add.png       | Bin 339 -> 204 bytes
+ .../qdarkstyle/icons/48x48/no_avatar.png      | Bin 708 -> 763 bytes
+ .../qdarkstyle/icons/48x48/sd_card.png        | Bin 676 -> 587 bytes
+ .../qt_themes/qdarkstyle/icons/48x48/star.png | Bin 725 -> 1055 bytes
+ 38 files changed, 103 insertions(+), 103 deletions(-)
+ delete mode 100644 LICENSES/CC-BY-ND-3.0.txt
+ create mode 100644 LICENSES/CC-BY-SA-3.0.txt
+ delete mode 100644 dist/qt_themes/colorful_midnight_blue/icons/16x16/lock.png
+ delete mode 100644 dist/qt_themes/colorful_midnight_blue/icons/16x16/view-refresh.png
+
+diff --git a/LICENSES/CC-BY-ND-3.0.txt b/LICENSES/CC-BY-ND-3.0.txt
+deleted file mode 100644
+index d9265b9f19e250785f5fc953c73e5f8915fcdd21..0000000000000000000000000000000000000000
+--- a/LICENSES/CC-BY-ND-3.0.txt
++++ /dev/null
+@@ -1,87 +0,0 @@
+-Creative Commons Attribution-NoDerivs 3.0 Unported
+-
+- CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
+-
+-License
+-
+-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+-
+-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+-
+-1. Definitions
+-
+-     a. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+-
+-     b. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+-
+-     c. "Distribute" means to make available to the public the original and copies of the Work through sale or other transfer of ownership.
+-
+-     d. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+-
+-     e. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+-
+-     f. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+-
+-     g. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+-
+-     h. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+-
+-     i. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+-
+-2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+-
+-3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+-
+-     a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; and,
+-
+-     b. to Distribute and Publicly Perform the Work including as incorporated in Collections.
+-
+-     c. For the avoidance of doubt:
+-
+-          i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+-
+-          ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
+-
+-          iii. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
+-
+-The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats, but otherwise you have no rights to make Adaptations. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
+-
+-4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+-
+-     a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested.
+-
+-     b. If You Distribute, or Publicly Perform the Work or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work. The credit required by this Section 4(b) may be implemented in any reasonable manner; provided, however, that in the case of a Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+-
+-     c. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation.
+-
+-5. Representations, Warranties and Disclaimer
+-
+-UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+-
+-6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+-
+-7. Termination
+-
+-     a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+-
+-     b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+-
+-8. Miscellaneous
+-
+-     a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+-
+-     b. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+-
+-     c. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+-
+-     d. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+-
+-     e. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
+-
+-Creative Commons Notice
+-
+-Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
+-
+-Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License.
+-
+-Creative Commons may be contacted at http://creativecommons.org/.
+diff --git a/LICENSES/CC-BY-SA-3.0.txt b/LICENSES/CC-BY-SA-3.0.txt
+new file mode 100644
+index 0000000000000000000000000000000000000000..a29ac86c302d49546b1f854ada7f0c1ca5d7f659
+--- /dev/null
++++ b/LICENSES/CC-BY-SA-3.0.txt
+@@ -0,0 +1,60 @@
++Creative Commons Attribution-ShareAlike 3.0 Unported
++
++CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
++
++License
++
++THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
++
++BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
++
++1. Definitions
++a. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
++b. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License.
++c. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License.
++d. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
++e. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike.
++f. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
++g. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
++h. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
++i. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
++j. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
++k. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
++2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
++3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
++a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
++b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
++c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
++d. to Distribute and Publicly Perform Adaptations.
++e. For the avoidance of doubt:
++i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
++ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
++iii. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
++The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
++
++4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
++a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.
++b. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License.
++c. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv), consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
++d. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
++5. Representations, Warranties and Disclaimer
++UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
++
++6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
++7. Termination
++a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
++b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
++8. Miscellaneous
++a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
++b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
++c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
++d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
++e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
++f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
++Creative Commons Notice
++
++Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor.
++
++Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License.
++
++Creative Commons may be contacted at http://creativecommons.org/.
+\ No newline at end of file
+diff --git a/dist/qt_themes/colorful/icons/16x16/connected.png b/dist/qt_themes/colorful/icons/16x16/connected.png
+index d6052f1a09a9a828bf8d43ad1827d4d9d9cbae0f..0afc18cb7a19028fd567a7ca7ced62cd164657de 100644
+--- a/dist/qt_themes/colorful/icons/16x16/connected.png
++++ b/dist/qt_themes/colorful/icons/16x16/connected.png
+@@ -1,4 +1,5 @@
+ PNG

+ 
+-
+-*RR`uuS
ɫa; yRLзxuSG7&P
+\ No newline at end of file
++
++NIRE
&"
++\;y@^);1T~
+\ No newline at end of file
+diff --git a/dist/qt_themes/colorful/icons/16x16/connected_notification.png b/dist/qt_themes/colorful/icons/16x16/connected_notification.png
+index 0dfe032d58160f1a24f54040964b5b5f2e97a724..72466e098e471ae5a97c49a56536dd4bf62b3a08 100644
+--- a/dist/qt_themes/colorful/icons/16x16/connected_notification.png
++++ b/dist/qt_themes/colorful/icons/16x16/connected_notification.png
+@@ -1,6 +1,8 @@
+ PNG

+ 
+-
+-"DJED AUS- 'm Hb)l
+-AYiƲmg|;UOыY_g됢bdPsrbVXښEKA+0Yn+Gf
+-uVrg\d ujbo	`I%Ȁg;O
-tݡi+iEcC
+\ No newline at end of file
++
++BTjmkwwθIA^ν;9\8zt:ƹM=8s/#8zj:DCQs*(agi\\b1<d4,\2#lnH,{cZ`1.#m];~MAAP<yǫ' fʵK]	_,x}w::@
h[Iݏl9nfdB~Tlζ8堹0RɄ LbB-$9 K!7zJt]/cWJj+^|[(t[AXn-v>C)PQ"ƺ:5?9mfp05mvN
++|f|jjɛJy 64trfx>:
EQȊ(C
tC),Ӑ&JyU7͎šW)fgRB
++a	Ub
++'iyiSM\6.IDߍcCm σB\!#'OX߿OӋLo9#P@d]͍F4漒442
++3!@|Wl	[>O"LmifX?PN\
+\ No newline at end of file
+diff --git a/dist/qt_themes/colorful/icons/16x16/disconnected.png b/dist/qt_themes/colorful/icons/16x16/disconnected.png
+index bacee3aebfe9f9058f7d49bde34d8d6e5963e2bb..7258a8cfe5ab54a3f53252c08520824ed91969a8 100644
+--- a/dist/qt_themes/colorful/icons/16x16/disconnected.png
++++ b/dist/qt_themes/colorful/icons/16x16/disconnected.png
+@@ -1,3 +1,4 @@
+ PNG

+ 
+-
+\ No newline at end of file
++
++N}ȡԖ&V"ȷӵR%ټ`ۨT9v<]_JMfEHa=
+\ No newline at end of file
+diff --git a/dist/qt_themes/colorful/icons/48x48/list-add.png b/dist/qt_themes/colorful/icons/48x48/list-add.png
+index bc2c47c91a761228dc4ebdc8df8713119d5fec3a..74e4882aaedc98b57cce65ae5c0a2683bab31279 100644
+--- a/dist/qt_themes/colorful/icons/48x48/list-add.png
++++ b/dist/qt_themes/colorful/icons/48x48/list-add.png
+@@ -1,3 +1,6 @@
+ PNG

+ 
+-
+\ No newline at end of file
++
++
++r*)
++D
+\ No newline at end of file
+diff --git a/dist/qt_themes/colorful/icons/48x48/sd_card.png b/dist/qt_themes/colorful/icons/48x48/sd_card.png
+index 29be71a0d4307c9653e22a31e77e43e87a907beb..47e491d32c99fe208c59dae4d4a568e8e7dd6485 100644
+--- a/dist/qt_themes/colorful/icons/48x48/sd_card.png
++++ b/dist/qt_themes/colorful/icons/48x48/sd_card.png
+@@ -1,6 +1,7 @@
+ PNG

+ 
+-
+-y+JO;W7Ÿ៍ ߤT\@d15Dz)A9y~ܑt=1ϞzsbU#PTTTTTTTTTTTTT
+--y`bS.^7tbE'nsA_֥¯kU%6ת?x%k,^w!Зl,q
+-(
+\ No newline at end of file
++
++ޭI/-hA'zV Zj'EzPTCيlfofgIl"}'Sv-tG8pjn6~	fM^%"h7S6SW`/&˓we%cI~6淧
{1׆y;lP
r7W'krEU.j:A4Spn!Win<enq>QxK8%hVPC,6W,fFY<p01-Q.[',{m؎ErJl
x4KW<
8uM춿s
ޤ%Or銧'SWM~p6W\MftɻyIr6
++50p銧A q;brB6~o%ր
++	E4Y3Wpp/v<6n\EIJXc+r'4t㵚	E,RJ
++-&]ck$I46{PB3@S3XOlX]XNͥGXL%Ytk%?MC3@QѴnT|G:bÀj<mַ9LpVA.[ym`6:ae*ù
+\ No newline at end of file
+diff --git a/dist/qt_themes/colorful/icons/48x48/star.png b/dist/qt_themes/colorful/icons/48x48/star.png
+index 43b5d52ed7cca57aec41d75670cf29cfa98e849d..19d55a0a8065cf4168752568bc67d4ebc3b8ec9f 100644
+--- a/dist/qt_themes/colorful/icons/48x48/star.png
++++ b/dist/qt_themes/colorful/icons/48x48/star.png
+@@ -1,8 +1,7 @@
+ PNG

+ 
+-
+-*	*, +]AsRXKEҴݝٹϿ33wڇ0;ss20a6a7%ս!g+zۧ4</đNj#(
+-WO#9|残zۧ6c
+-I1u⬟;$}i0falffDn5CixL18U8;}	g㫠ˮ`$*cZB;Q
˯|Dw*U:bxҙB%Ӿ
+-܇H7/_dʹŒw
+-R2Gh2RP_3:AX:L_&@(	Cȵ(~C4U?lkZCwZ[;mCePvdD8S[{[mG̕DK%A1.S=`(]`5:5EeOm|	ZT⩀!snݶZ_D+klCTRBP@y`|KJӡ~Ͱ<|K>;L2c̜uYؤoz4ĤQĞ	?ؿIMu
+\ No newline at end of file
++
++֑
=_aYn/[&8t@KDђuBɀܯ_^;qY#8t\I4x!ٶZxrqha5m!vA,Ԯ`BܑT_]J^ZH	)bAAd)wTbDAcԲ/XɀܫiHĠ񈹅~7k1jpΩ!j]~FI<g={8yU4mt!_F0Ʃe"#(/>%ˏq%e+[MSaGs(wVF;Zzi,}Dk>9ptbԦ-|[+~sieB\L:~'w㶇*mD:9ku^Qp.A7BL
++=h";۵rR;'rS;m\yEQm]im
++s&"
++GS!զ086?`1>)$^׃b\Ck%03pDK``g4B2X=++ka]h*yz\mw^QA#uZ̋d.a0av)8]AS'UcV!yF7LJQ9+S_/fބǩs
+\ No newline at end of file
+diff --git a/dist/qt_themes/colorful_midnight_blue/icons/16x16/lock.png b/dist/qt_themes/colorful_midnight_blue/icons/16x16/lock.png
+deleted file mode 100644
+index 32c505848ebc0ac4c84f8b544e94d077270297f4..0000000000000000000000000000000000000000
+--- a/dist/qt_themes/colorful_midnight_blue/icons/16x16/lock.png
++++ /dev/null
+@@ -1,9 +0,0 @@
+-PNG

+-
+-
+- 
+-:@@L {Yx-?f	G"r`趭o-Xc"P^$*M57gʲ,p:<oFu+
+-e9s
+- Ï:q`jׁ$(`sGˣ?PNxb'{䠹9-X%׼[*>/Az
+-L'tn2
+-m`+
;w`;̉/O{
+\ No newline at end of file
+diff --git a/dist/qt_themes/colorful_midnight_blue/icons/16x16/view-refresh.png b/dist/qt_themes/colorful_midnight_blue/icons/16x16/view-refresh.png
+deleted file mode 100644
+index d4afd76f949ff5c65e039b69ff999325bff5d7b8..0000000000000000000000000000000000000000
+--- a/dist/qt_themes/colorful_midnight_blue/icons/16x16/view-refresh.png
++++ /dev/null
+@@ -1,4 +0,0 @@
+-PNG

+-
+-
+-@JDo+0v|iٝu#("("D2V)}%f(0Ťy\crٰ`J9^q7?ADlDĢ܏8_7%e^|AC33ܵ<pٕ#1A8=njaNRkq?L)v޼6|E		no
+\ No newline at end of file
+diff --git a/dist/qt_themes/colorful_midnight_blue/style.qrc b/dist/qt_themes/colorful_midnight_blue/style.qrc
+index 1081d281d8f873e160396a28eac7b470f61c4a9f..b9821c6722cbe91d6bbf185da0a2051f2aa32059 100644
+--- a/dist/qt_themes/colorful_midnight_blue/style.qrc
++++ b/dist/qt_themes/colorful_midnight_blue/style.qrc
+@@ -6,8 +6,8 @@ SPDX-License-Identifier: GPL-2.0-or-later
+ <RCC>
+     <qresource prefix="icons/colorful_midnight_blue">
+         <file alias="index.theme">icons/index.theme</file>
+-        <file alias="16x16/lock.png">icons/16x16/lock.png</file>
+-        <file alias="16x16/view-refresh.png">icons/16x16/view-refresh.png</file>
++        <file alias="16x16/lock.png">../colorful_dark/icons/16x16/lock.png</file>
++        <file alias="16x16/view-refresh.png">../qdarkstyle/icons/16x16/view-refresh.png</file>
+         <file alias="48x48/bad_folder.png">../colorful/icons/48x48/bad_folder.png</file>
+         <file alias="48x48/chip.png">../colorful/icons/48x48/chip.png</file>
+         <file alias="48x48/folder.png">../colorful/icons/48x48/folder.png</file>
+diff --git a/dist/qt_themes/default/icons/16x16/checked.png b/dist/qt_themes/default/icons/16x16/checked.png
+index 3e017b715802d120d3c93343e374ef3566c954d3..b9e64e9e083479d3ee98f767e7db0afa918733a4 100644
+--- a/dist/qt_themes/default/icons/16x16/checked.png
++++ b/dist/qt_themes/default/icons/16x16/checked.png
+@@ -1,3 +1,4 @@
+ PNG

+ 
+-
+\ No newline at end of file
++
++1{>a%>4Ž7_5/	anl&s5}hRm,$ʗ.r&{ՌF&M$\Gi3D\2\z!4G
i:)&VOA*{'h=T@.&u-9/V
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/16x16/connected.png b/dist/qt_themes/default/icons/16x16/connected.png
+index afa7973948c2fd69a5b838ebc993a4a618e20e31..0afc18cb7a19028fd567a7ca7ced62cd164657de 100644
+--- a/dist/qt_themes/default/icons/16x16/connected.png
++++ b/dist/qt_themes/default/icons/16x16/connected.png
+@@ -1,4 +1,5 @@
+ PNG

+ 
+-
+-hme``<~!sҁn꤮)a=wV+
+\ No newline at end of file
++
++NIRE
&"
++\;y@^);1T~
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/16x16/connected_notification.png b/dist/qt_themes/default/icons/16x16/connected_notification.png
+index e64901378b000db1871d03db88af5f06c454cb01..72466e098e471ae5a97c49a56536dd4bf62b3a08 100644
+--- a/dist/qt_themes/default/icons/16x16/connected_notification.png
++++ b/dist/qt_themes/default/icons/16x16/connected_notification.png
+@@ -1,4 +1,8 @@
+ PNG

+ 
+-
+-bgae"jgV$Bb'SܹsΜ?^y`z?Fq@̠S"+_D,x^\+3n`?Hx[*BQW"pŽbcsr=ƫ/VDe'O;&Kdx?bw@I)>tgfq$pn쉈LY:jȫx3zզ#CTq Kv|w}~bCHI̻YR/1{>ҏ[)6RdK?/t^';|ŬƑkcIhB1|P1
+\ No newline at end of file
++
++BTjmkwwθIA^ν;9\8zt:ƹM=8s/#8zj:DCQs*(agi\\b1<d4,\2#lnH,{cZ`1.#m];~MAAP<yǫ' fʵK]	_,x}w::@
h[Iݏl9nfdB~Tlζ8堹0RɄ LbB-$9 K!7zJt]/cWJj+^|[(t[AXn-v>C)PQ"ƺ:5?9mfp05mvN
++|f|jjɛJy 64trfx>:
EQȊ(C
tC),Ӑ&JyU7͎šW)fgRB
++a	Ub
++'iyiSM\6.IDߍcCm σB\!#'OX߿OӋLo9#P@d]͍F4漒442
++3!@|Wl	[>O"LmifX?PN\
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/16x16/disconnected.png b/dist/qt_themes/default/icons/16x16/disconnected.png
+index 835b1f0d6b5ceeb11e9a2b7d68c61521aef7bcb8..7258a8cfe5ab54a3f53252c08520824ed91969a8 100644
+--- a/dist/qt_themes/default/icons/16x16/disconnected.png
++++ b/dist/qt_themes/default/icons/16x16/disconnected.png
+@@ -1,6 +1,4 @@
+ PNG

+ 
+-
+-ЁN
+-P̚d&9eM5,]~
+-ѡ8<IF:Bj
+\ No newline at end of file
++
++N}ȡԖ&V"ȷӵR%ټ`ۨT9v<]_JMfEHa=
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/16x16/failed.png b/dist/qt_themes/default/icons/16x16/failed.png
+index 7c4047dd0842e321cb89bd20038772bafc6300cd..a1872835df734e35fc97e363b2ebdcb6b5e814e0 100644
+--- a/dist/qt_themes/default/icons/16x16/failed.png
++++ b/dist/qt_themes/default/icons/16x16/failed.png
+@@ -1,8 +1,3 @@
+ PNG

+ 
+-
+->tkQ'xk[}U^0f ʾV@jPa%*
+-a+<+F%C\8G3ION݌mHM`90?A6;[QRf *
+-n"sʚ~
+-+w9%$_[>Dem`S9Kބ*b@مXH
+-2-
+\ No newline at end of file
++
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/16x16/lock.png b/dist/qt_themes/default/icons/16x16/lock.png
+index 496b58078983bc3c4f7dc2808fd02b8deb8b7b67..69d399050804cfa45e00850d4330a5b7cfaa3a43 100644
+--- a/dist/qt_themes/default/icons/16x16/lock.png
++++ b/dist/qt_themes/default/icons/16x16/lock.png
+@@ -1,7 +1,6 @@
+ PNG

+ 
+-
+-
+-
+-[_㡽p8+-7xB\eqOiW`;b)3jq혂s/N1}$c2LUqOl>T&3
+-
+\ No newline at end of file
++
++1Ex[AkSsXyS۪ڨ$3f!0W6~/(&w%]
++qWiߘ7
++qW!5-_!V]|备^Oþ<S9`2"IALRd$')
ʍINR-LrG$xr&*X靼8`9e
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/256x256/plus_folder.png b/dist/qt_themes/default/icons/256x256/plus_folder.png
+index ae4afccc768e0a2163b23d5c457a821ef536dd73..3a49669a3ae3f0ea46ebd5ddd0e51f2b31b37d47 100644
+--- a/dist/qt_themes/default/icons/256x256/plus_folder.png
++++ b/dist/qt_themes/default/icons/256x256/plus_folder.png
+@@ -1,12 +1,18 @@
+ PNG

+ 
+-
+-[l
+-xX+͐rttYQB@{8~?SeEJ
+-
+-aĿͻYNG#f
+-=D?	j;a)l><FX
h
+-ި!LtHkG;]A8|"I]?J[`oRT$k`]?NX.$;yMc4
+-<pp/p"~I嵖ps_q!(JR~OX8tU-[O8̐Ftd/=D8G

+-<6NJf<R<"IJ}'&-條}="-MniQVOX2\RskKwGA?Z
+- 3HXٷ$I$I$I$I?tEZ
+\ No newline at end of file
++
++Љݕ+(/(i'(*@tk*˔Зt7(@g?D]	}I4jG*%#
++E
++
++
++
++
++
++@zlH9((!
++@zfYJpMYo1?SvQ
++@Z1 AHKϯH
++],*&s{Z#
++@=7USI
z~[MWSP?YPU΢Yp\
++@}*
++eDq+gѡÕ{Y0st
++@3&XBL^ݮcD\,SP^PKS[ck4=x\㋥rU,V||%-hV~ZFRC{Rb`\}{ кo:
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/48x48/bad_folder.png b/dist/qt_themes/default/icons/48x48/bad_folder.png
+index 2527c1318575236c92c8111413bcdf1caeacbd27..364ec646f6f1c6b5b632fb68efd2602aa2c87f25 100644
+--- a/dist/qt_themes/default/icons/48x48/bad_folder.png
++++ b/dist/qt_themes/default/icons/48x48/bad_folder.png
+@@ -1,8 +1,7 @@
+ PNG

+ 
+-
+-V)C5"*>f+VMNlQ?v=rBM4qq~h[ \
+-MQ) j4Dx
+-b`˗e-NWgǁޠ[WPs١q+Ǎs`3w3lLնqx?F˦O&8v~ 
+-(I'
+-"6cA`MZZqhۊπ69FZā5gm\5l2X*DFkՂiQ^,}-
+\ No newline at end of file
++
++\w2."/7삲d*4Om$uvxԲ
++Qbx(M<WYЉ7)^%PCD	h^C{;O6)dJ#p0b,_JFZy'qbŴNLx"z<{L$QZ@xsCGI06VT)j@,֏W1^}b:yy'T"!j,*e/]юƆx%`Bf L 3gmhi;g_3õh{ q ]`
~R	r/54b=c"MPikn
++ `])AȖE9s(ss[LR	}DdP<OK1ptmRH3DG'zvbN5]`vCᎦ}>Z\
+++kh7g/H_CmiYHmNo@s0	]tA
Qjk-La7wlh>VtAAz:&q:HV@;ȑ#[&<!\(
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/48x48/chip.png b/dist/qt_themes/default/icons/48x48/chip.png
+index 3efdf301eb52a587f18b7d2f94d6ea64773a0231..1b573d51af66864f03a7e20179d3ea4d5f36a012 100644
+--- a/dist/qt_themes/default/icons/48x48/chip.png
++++ b/dist/qt_themes/default/icons/48x48/chip.png
+@@ -1,163 +1,6 @@
+ PNG

+ 
+-
+-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c138 79.159824, 2016/09/14-01:09:01        ">
+-   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+-      <rdf:Description rdf:about=""
+-            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+-            xmlns:dc="http://purl.org/dc/elements/1.1/"
+-            xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
+-            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+-            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
+-            xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
+-            xmlns:exif="http://ns.adobe.com/exif/1.0/">
+-         <xmp:CreatorTool>Adobe Photoshop CC 2017 (Windows)</xmp:CreatorTool>
+-         <xmp:CreateDate>2018-07-25T20:26:27+08:00</xmp:CreateDate>
+-         <xmp:ModifyDate>2018-07-25T20:30:37+08:00</xmp:ModifyDate>
+-         <xmp:MetadataDate>2018-07-25T20:30:37+08:00</xmp:MetadataDate>
+-         <dc:format>image/png</dc:format>
+-         <photoshop:ColorMode>3</photoshop:ColorMode>
+-         <xmpMM:InstanceID>xmp.iid:a03a1ab2-4145-5444-bda5-17fcd23a669a</xmpMM:InstanceID>
+-         <xmpMM:DocumentID>xmp.did:a03a1ab2-4145-5444-bda5-17fcd23a669a</xmpMM:DocumentID>
+-         <xmpMM:OriginalDocumentID>xmp.did:a03a1ab2-4145-5444-bda5-17fcd23a669a</xmpMM:OriginalDocumentID>
+-         <xmpMM:History>
+-            <rdf:Seq>
+-               <rdf:li rdf:parseType="Resource">
+-                  <stEvt:action>created</stEvt:action>
+-                  <stEvt:instanceID>xmp.iid:a03a1ab2-4145-5444-bda5-17fcd23a669a</stEvt:instanceID>
+-                  <stEvt:when>2018-07-25T20:26:27+08:00</stEvt:when>
+-                  <stEvt:softwareAgent>Adobe Photoshop CC 2017 (Windows)</stEvt:softwareAgent>
+-               </rdf:li>
+-            </rdf:Seq>
+-         </xmpMM:History>
+-         <tiff:Orientation>1</tiff:Orientation>
+-         <tiff:XResolution>960000/10000</tiff:XResolution>
+-         <tiff:YResolution>960000/10000</tiff:YResolution>
+-         <tiff:ResolutionUnit>2</tiff:ResolutionUnit>
+-         <exif:ColorSpace>65535</exif:ColorSpace>
+-         <exif:PixelXDimension>48</exif:PixelXDimension>
+-         <exif:PixelYDimension>48</exif:PixelYDimension>
+-      </rdf:Description>
+-   </rdf:RDF>
+-</x:xmpmeta>
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                            
+-<?xpacket end="w"?>6
+\ No newline at end of file
++
++^f_Mck"$7EgdYjL+s`[<t6MVD41L,h
++(;`
Td1p++= 9+4asar n-
++XE`(ZYމSJ׷oAHmFy4Z5}GZ% )-hYN|-!:Cl!)RF9E. 5Ԍ
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/48x48/folder.png b/dist/qt_themes/default/icons/48x48/folder.png
+index 2e67d8b38fe9219a9bee674472f6a1356cae3698..507337fae59964244795a3b0bc528e07de52df3e 100644
+--- a/dist/qt_themes/default/icons/48x48/folder.png
++++ b/dist/qt_themes/default/icons/48x48/folder.png
+@@ -1,4 +1,6 @@
+ PNG

+ 
+-
+--U`i@6	|/|CN<眄p"e`KhTm`4a*
+\ No newline at end of file
++
++%>u
++:$|-RPz;FvfWIw7w)x<|S44b'6b%>1W'،5aVHkb_V@V=!8Mͩ_Q*6zI|ka'ce0΢9pRrK@}%EpO^,J1D7Wj&	p(]HG5}s=j(,?4M,rf1JKX\p5>k|
++O{p.ӭ
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/48x48/list-add.png b/dist/qt_themes/default/icons/48x48/list-add.png
+index dbc74687b177ea85ffa48be3864db8a49bed76cb..fd8a06132ccd4e99b947cecffafa3a593b1cce25 100644
+--- a/dist/qt_themes/default/icons/48x48/list-add.png
++++ b/dist/qt_themes/default/icons/48x48/list-add.png
+@@ -1,3 +1,6 @@
+ PNG

+ 
+-
+\ No newline at end of file
++
++
++r*)
++D
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/48x48/no_avatar.png b/dist/qt_themes/default/icons/48x48/no_avatar.png
+index d4bf82026a63d3498c57615ed744ef6ad1a11db4..76f812349b462cd8b05465d12a7e1a4df6788ea9 100644
+--- a/dist/qt_themes/default/icons/48x48/no_avatar.png
++++ b/dist/qt_themes/default/icons/48x48/no_avatar.png
+@@ -1,5 +1,5 @@
+ PNG

+ 
+-
+-]:;_zf3:v׋[
&.Zo_P'gzA]ȋG5IK_
+-gw(v
+\ No newline at end of file
++
++k.ɚsiabM
|'kcXWnG9Rer6d,V"G4P}4/0	!bSJ
i40P:0	VavJ:YƮp`ܫZz%8RtmS5blRVFjeO&ܐ-|.n&gۙDVq@KlOxDzpwSy`I>+a?0C}~lb-\ћs,]ZZܩ@<̴R-ܪA)O/(Xq,6E/+?$pa& hue~4@8w9K!lop0<D7<
++DbZEW=f^(Ęl
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/48x48/sd_card.png b/dist/qt_themes/default/icons/48x48/sd_card.png
+index edacaeeb5629c5cf4a86d24eb35a4d37c45bfa77..60dfba2693ca39fe823f89fbcbeb25ea274698cd 100644
+--- a/dist/qt_themes/default/icons/48x48/sd_card.png
++++ b/dist/qt_themes/default/icons/48x48/sd_card.png
+@@ -1,6 +1,7 @@
+ PNG

+ 
+-
+-\1>\ƍ?UGF=Z#?+06g9=oRaZڤ4yL=UݮU|զU/_"8؜ݣt=~U߰Qg#=ҷi1ۑx;PY+*dwNoɨ}`RS8KBC^vp*BR&HM 59@jr
+-ްq)\
+-a#Rq+R`(:N.c'P*3iS
+\ No newline at end of file
++
++T8~yrƴ6])uc<K+!g]E\hQ
++ȓsӒ3xyxˣmѾ+
++$4la?̌Eh9h9ϳL6i;b`
++`β!ov9J}-/͆
+\ No newline at end of file
+diff --git a/dist/qt_themes/default/icons/48x48/star.png b/dist/qt_themes/default/icons/48x48/star.png
+index 740f7f3e75da9160a8db6a1941b159509a7ab8ee..c2b78f0c3e543913b18d4f95956109c7d2646ba8 100644
+--- a/dist/qt_themes/default/icons/48x48/star.png
++++ b/dist/qt_themes/default/icons/48x48/star.png
+@@ -1,8 +1,4 @@
+ PNG

+ 
+-
+-Pj5"QI<4:
+-$]#	wV|d̜sЦM%1/$zb
0VaF%SljBF;.('OXF9yjfϱL0S>%ze
/+0v\]-Ƶ
+-?4n`~뻴-,V~wzlΑk}%L\̶$k9ۏ{cx'lC
+-wu^Ob/V2#>pߕOa]kѬ)1_7|j<+Q~[ʧ,ǣ_aݿʧt?fɧtfWs.-,)r9
EӕyEv̫ǎ5g",͞B
+-܁!ּIEysמ
!ul2q'1cΤ[jd,ʫ༰o(fwL>SHaA_`:F{MtT=gUl]LrR3U㒩()<
I4Vpv7,/Q6
+\ No newline at end of file
++
++_z%4GMtP/|b	z#N=%Z]bP)1}˸k8;p)*_
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/16x16/connected.png b/dist/qt_themes/qdarkstyle/icons/16x16/connected.png
+index 90feb372af3e4c1dd9782e075993946c26b1e5b0..0afc18cb7a19028fd567a7ca7ced62cd164657de 100644
+--- a/dist/qt_themes/qdarkstyle/icons/16x16/connected.png
++++ b/dist/qt_themes/qdarkstyle/icons/16x16/connected.png
+@@ -1,4 +1,5 @@
+ PNG

+ 
+-
+-uKc@],+0A3eL؏0t%6Vn
2EBXy'e}Ҷ*qhg-d-P[ʙddb!,O0͋'o)}?Wr*aC_*
YJ6G_/(xFԒ$+9FI
+\ No newline at end of file
++
++NIRE
&"
++\;y@^);1T~
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/16x16/connected_notification.png b/dist/qt_themes/qdarkstyle/icons/16x16/connected_notification.png
+index 7cd8b9d2930d99340778360c68bf28923a66609c..72466e098e471ae5a97c49a56536dd4bf62b3a08 100644
+--- a/dist/qt_themes/qdarkstyle/icons/16x16/connected_notification.png
++++ b/dist/qt_themes/qdarkstyle/icons/16x16/connected_notification.png
+@@ -1,5 +1,8 @@
+ PNG

+ 
+-
+-U!0	t&"<VNPoO
+-v[kn0``P1WҕNQ:v+, =߽7;rTk
+\ No newline at end of file
++
++BTjmkwwθIA^ν;9\8zt:ƹM=8s/#8zj:DCQs*(agi\\b1<d4,\2#lnH,{cZ`1.#m];~MAAP<yǫ' fʵK]	_,x}w::@
h[Iݏl9nfdB~Tlζ8堹0RɄ LbB-$9 K!7zJt]/cWJj+^|[(t[AXn-v>C)PQ"ƺ:5?9mfp05mvN
++|f|jjɛJy 64trfx>:
EQȊ(C
tC),Ӑ&JyU7͎šW)fgRB
++a	Ub
++'iyiSM\6.IDߍcCm σB\!#'OX߿OӋLo9#P@d]͍F4漒442
++3!@|Wl	[>O"LmifX?PN\
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/16x16/disconnected.png b/dist/qt_themes/qdarkstyle/icons/16x16/disconnected.png
+index fc5f23894e4aedae7a49981f68ba017a177b065b..7258a8cfe5ab54a3f53252c08520824ed91969a8 100644
+--- a/dist/qt_themes/qdarkstyle/icons/16x16/disconnected.png
++++ b/dist/qt_themes/qdarkstyle/icons/16x16/disconnected.png
+@@ -1,4 +1,4 @@
+ PNG

+ 
+-
+-Qw
+\ No newline at end of file
++
++N}ȡԖ&V"ȷӵR%ټ`ۨT9v<]_JMfEHa=
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/16x16/lock.png b/dist/qt_themes/qdarkstyle/icons/16x16/lock.png
+index c750a39e855800fe4cde217a1bf28f841030e501..7e63927b2c047718f80ec29512472f1a2d9d357e 100644
+--- a/dist/qt_themes/qdarkstyle/icons/16x16/lock.png
++++ b/dist/qt_themes/qdarkstyle/icons/16x16/lock.png
+@@ -1,3 +1,5 @@
+ PNG

+ 
+-
+\ No newline at end of file
++
++0B٩B
++7U]KXL~^^m	K`j4&\IƬ%j\#XګOQ\@
[ƽ07ؓ阱Z9u![CzsQF;h@ߘ*
|8'8H`_25`q
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/256x256/plus_folder.png b/dist/qt_themes/qdarkstyle/icons/256x256/plus_folder.png
+index 303f9a321890fc4c2054e2cff498adf23f654b70..002101114d150e304765a3466be9bf267ae96382 100644
+--- a/dist/qt_themes/qdarkstyle/icons/256x256/plus_folder.png
++++ b/dist/qt_themes/qdarkstyle/icons/256x256/plus_folder.png
+@@ -1,17 +1,47 @@
+ PNG

+ 
+-
+-,b
+-lv
+- 3.|q'_k""^a 3WWg41^=
+-ny@f;@D`D+DWd)uĩG"AT 3,8pD\:2Td_z-ȭoFAT9tf~WxgD,Du
+-3@f
+-
cMf_:78A4ex%54p` -=2IYQ=!4JP􀕥Chhe+57$?/5T:=|`Rc"3}:d
+-x;/
+-Y
+-\gΡ!Y
+-?1,̷g
+-cX
+-E:ʜH7_GĖ9ƞ@qpO? U*fH
+-EHP͓!Xp/EٶgND̩,*@,2z?"<oBY
+-2̼@/"ZK6d%:%3g懁
-Ms;@&<zK}fg7ɒ`mZ,`oV1W%U:"]
+\ No newline at end of file
++
++Ο/	$nG(E a	>+
++Ca$F
++#H G
++@fGQ!qzPqL +(
++%
++
++X
++
++@ԙj]M>\v;8/=OgEH:rR|c;c QDn.ebA9z	a
++@Zm AHK-@HK'LBx2Q
++^󽮽"&m#}͏zx]=@hC|ZL(N^	О_(ts(
++@9
++@9oآr[bP
++@hGe:>ktob1Ga:zҲ֫/V2QU)UySaR)˔G腹T,
++@B\U=iT.
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++@Zތmވ-@HK˱E(
++@ZU
cw 4
Gn;
++@z.QW*B{łc}MjE*(
++@}r2=gF<S0[mL8.s=FʞTeC^PD{TV_j*q8EJ}@$VC}r5J]$
++VVG
o.ea@".^ۀiP
++@;U}vD'
{`Uf"5Dž9
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/bad_folder.png b/dist/qt_themes/qdarkstyle/icons/48x48/bad_folder.png
+index 4a9709623476fcf4070c4e3da2bb17375222082e..245f96c7ba65c9a792abc01a1b76c39accd3ee5e 100644
+--- a/dist/qt_themes/qdarkstyle/icons/48x48/bad_folder.png
++++ b/dist/qt_themes/qdarkstyle/icons/48x48/bad_folder.png
+@@ -1,8 +1,7 @@
+ PNG

+ 
+-
+-%ͭ0G,ndfͬ1He5a
+-=XzMU+ŷUȯdvj
+-v\ےr@^4
+-./Ϥ!@҇@0N
|9!u"l~2 mT$0}MRHGWS
+-sH~Tq4N$]WJNx_1{^G
+\ No newline at end of file
++
++Q R$Fo%E^^QɢC=QiAn|Y:m?{Ι曋J4i6*0 7TeAfx]VUuH~'4ǻO. Q%"0F(@%чI.);]	OIzA`<EC[xh?."]f
rn#lMsz7ȃM
++
++^=̵	6i%FS!
B-am-i-a
++*un;3kFtŐ"}Cp,I&Mb(?R{"!
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/chip.png b/dist/qt_themes/qdarkstyle/icons/48x48/chip.png
+index 973fabd052e389c28ef36c482cf44d764795a3b4..db0cadac1338a971b7b890c33f5920580c1013a5 100644
+--- a/dist/qt_themes/qdarkstyle/icons/48x48/chip.png
++++ b/dist/qt_themes/qdarkstyle/icons/48x48/chip.png
+@@ -1,165 +1,5 @@
+ PNG

+ 
+-
+-<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c138 79.159824, 2016/09/14-01:09:01        ">
+-   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+-      <rdf:Description rdf:about=""
+-            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+-            xmlns:dc="http://purl.org/dc/elements/1.1/"
+-            xmlns:photoshop="http://ns.adobe.com/photoshop/1.0/"
+-            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+-            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
+-            xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
+-            xmlns:exif="http://ns.adobe.com/exif/1.0/">
+-         <xmp:CreatorTool>Adobe Photoshop CC 2017 (Windows)</xmp:CreatorTool>
+-         <xmp:CreateDate>2018-07-25T21:37:27+08:00</xmp:CreateDate>
+-         <xmp:ModifyDate>2018-07-25T21:38:09+08:00</xmp:ModifyDate>
+-         <xmp:MetadataDate>2018-07-25T21:38:09+08:00</xmp:MetadataDate>
+-         <dc:format>image/png</dc:format>
+-         <photoshop:ColorMode>3</photoshop:ColorMode>
+-         <xmpMM:InstanceID>xmp.iid:d24b6914-04d7-6e40-94e6-a3f5f4d24f35</xmpMM:InstanceID>
+-         <xmpMM:DocumentID>xmp.did:d24b6914-04d7-6e40-94e6-a3f5f4d24f35</xmpMM:DocumentID>
+-         <xmpMM:OriginalDocumentID>xmp.did:d24b6914-04d7-6e40-94e6-a3f5f4d24f35</xmpMM:OriginalDocumentID>
+-         <xmpMM:History>
+-            <rdf:Seq>
+-               <rdf:li rdf:parseType="Resource">
+-                  <stEvt:action>created</stEvt:action>
+-                  <stEvt:instanceID>xmp.iid:d24b6914-04d7-6e40-94e6-a3f5f4d24f35</stEvt:instanceID>
+-                  <stEvt:when>2018-07-25T21:37:27+08:00</stEvt:when>
+-                  <stEvt:softwareAgent>Adobe Photoshop CC 2017 (Windows)</stEvt:softwareAgent>
+-               </rdf:li>
+-            </rdf:Seq>
+-         </xmpMM:History>
+-         <tiff:Orientation>1</tiff:Orientation>
+-         <tiff:XResolution>960000/10000</tiff:XResolution>
+-         <tiff:YResolution>960000/10000</tiff:YResolution>
+-         <tiff:ResolutionUnit>2</tiff:ResolutionUnit>
+-         <exif:ColorSpace>65535</exif:ColorSpace>
+-         <exif:PixelXDimension>48</exif:PixelXDimension>
+-         <exif:PixelYDimension>48</exif:PixelYDimension>
+-      </rdf:Description>
+-   </rdf:RDF>
+-</x:xmpmeta>
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                                                                                                    
+-                            
+-<?xpacket end="w"?>(
+-4p$v'! hwZ>;%B(c@+Ȇ5nEb9.E@
#Žq.[jVӎI(
+-PFRqI)GJv{Y` fU{Y$լwr[p&}`NW`B>O'"

+\ No newline at end of file
++
++Rsy
j7W*D7nO1Z$+":^XTm|Yj4._Dmf940D8
++/M+
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/folder.png b/dist/qt_themes/qdarkstyle/icons/48x48/folder.png
+index 0f1e987d6aa24b1d2f26d40181ec05b62c5862da..11a76b5c1256ade016d4e22cf048656cb0788ad3 100644
+--- a/dist/qt_themes/qdarkstyle/icons/48x48/folder.png
++++ b/dist/qt_themes/qdarkstyle/icons/48x48/folder.png
+@@ -1,3 +1,5 @@
+ PNG

+ 
+-
+\ No newline at end of file
++
++|ư´}Ȫ!}OY-"
2MvڇNWQ>-k(͆!NeqkׇLr`۰5\:%VC.xD ZJ&Bd$C=8?;);86|NaUy!Y H@?ryTltt|$#MW/]I
++46il
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/list-add.png b/dist/qt_themes/qdarkstyle/icons/48x48/list-add.png
+index 16cc8b4f44d52009d4a3f4c9d46f5bb0e20babcf..8fbe78011661fb22d94921dfe4e4ac7a513c445b 100644
+--- a/dist/qt_themes/qdarkstyle/icons/48x48/list-add.png
++++ b/dist/qt_themes/qdarkstyle/icons/48x48/list-add.png
+@@ -1,4 +1,6 @@
+ PNG

+ 
+-
+-׾V+pm8oVy
+\ No newline at end of file
++
++
++r*)
++D
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/no_avatar.png b/dist/qt_themes/qdarkstyle/icons/48x48/no_avatar.png
+index 43e0dd267598453717004f7399e1713891663857..a7a48d33cabde1803124a13f321adc4bc317a0c6 100644
+--- a/dist/qt_themes/qdarkstyle/icons/48x48/no_avatar.png
++++ b/dist/qt_themes/qdarkstyle/icons/48x48/no_avatar.png
+@@ -1,4 +1,6 @@
+ PNG

+ 
+-
+-WMѢv{cG:US)Sn`Kux^i%f>RK3%edd<rk7\\Y
+\ No newline at end of file
++
++BR"Hl'
@D0L!	'Jr,^ldf63o3СĊ+cQ`'[z
L
++IgZ=Q?.uxy˪G!_BClB3*O3V|_	uvz<(%VV%Y@xWl`J	y$4!gEwuY+v%!1-Bx	܋on|2`	J ?R|-Yj
++.ig@elޥ[m3jj27*3bzB:sl}}NJb!<*,l5
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/sd_card.png b/dist/qt_themes/qdarkstyle/icons/48x48/sd_card.png
+index 0291c6542d05a40a350bb5bdbd99a15c01467161..87ae5186d95a9aaee49247dea04264aea58a2353 100644
+--- a/dist/qt_themes/qdarkstyle/icons/48x48/sd_card.png
++++ b/dist/qt_themes/qdarkstyle/icons/48x48/sd_card.png
+@@ -1,7 +1,4 @@
+ PNG

+ 
+-
+-xAM&quwv}ޝ]=6TJ'X"[~(^Ě+ߖа˪I;ugly>634|<r,v@'[7!%=-8#m$Y~^˶yy9co63.rZON#pT˿|.(댆k	86L$u֊*IFE3:z)'
+-17#d4SZ6!*&b%vx	tYK
+-!WD*P*T 6@lRؤIb
+-&M*T 6@lj"WY5T%pE*m$na8efS0WUkb!}Ht_;5MIo$ݑt7'u
+\ No newline at end of file
++
++)_qCxiUcK(ԑs{^Pp(G@:QzA}& mRHm X=*F	0=r1x);:0QMB'q#ةv6BaӁ]8؇	kk33XUmDPvM2`RNz氓4@K}?xq*yw6M;_RU46il
+\ No newline at end of file
+diff --git a/dist/qt_themes/qdarkstyle/icons/48x48/star.png b/dist/qt_themes/qdarkstyle/icons/48x48/star.png
+index 90d423a1d4c1e05ccec0a01fa34abca9fe99676d..546779e2a810e73169f65a79850aa07dffd70267 100644
+--- a/dist/qt_themes/qdarkstyle/icons/48x48/star.png
++++ b/dist/qt_themes/qdarkstyle/icons/48x48/star.png
+@@ -1,4 +1,8 @@
+ PNG

+ 
+-
+-pKeb*eLG+(5)xDpo?dFD㍫ǣg=N=Ҙ7kg\G|(JS0_c\|f%W! ^S+w@`
+\ No newline at end of file
++
++lKX!lx4?V<Ll
++~
++H!,Ig]Ftj53'Vv~9r<mG7U&JTCާp֨rS7ߣ&\[ૄz`}^)Ζ|+C`;
++nHq@F3 \S
++[N`'y&<r8jЇ>6
+\ No newline at end of file
+-- 
+2.36.0
+
diff --git a/nixpkgs/pkgs/applications/emulators/zesarux/default.nix b/nixpkgs/pkgs/applications/emulators/zesarux/default.nix
index 4df6cfafbc01..4a00f9b03496 100644
--- a/nixpkgs/pkgs/applications/emulators/zesarux/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/zesarux/default.nix
@@ -50,6 +50,14 @@ stdenv.mkDerivation rec {
       url = "https://github.com/chernandezba/zesarux/commit/4493439b38f565c5be7c36239ecaf0cf80045627.diff";
       sha256 = "sha256-f+21naPcPXdcVvqU8ymlGfl1WkYGOeOBe9B/WFUauTI=";
     })
+
+    # Patch pending upstream release for libcaca-0.99.beta20 support:
+    #  https://github.com/chernandezba/zesarux/pull/1
+    (fetchpatch {
+      name = "libcaca-0.99.beta20.patch";
+      url = "https://github.com/chernandezba/zesarux/commit/542786338d00ab6fcdf712bbd6f5e891e8b26c34.diff";
+      sha256 = "sha256-UvXvBb9Nzw5HNz0uiv2SV1Oeiw7aVCa0jhEbThDRVec=";
+    })
   ];
 
   postPatch = ''
diff --git a/nixpkgs/pkgs/applications/emulators/zsnes/default.nix b/nixpkgs/pkgs/applications/emulators/zsnes/default.nix
index a14109bc8572..956604cd6cc6 100644
--- a/nixpkgs/pkgs/applications/emulators/zsnes/default.nix
+++ b/nixpkgs/pkgs/applications/emulators/zsnes/default.nix
@@ -32,6 +32,10 @@ in stdenv.mkDerivation {
     done
   '';
 
+  # Workaround build failure on -fno-common toolchains:
+  #   ld: initc.o:(.bss+0x28): multiple definition of `HacksDisable'; cfg.o:(.bss+0x59e3): first defined here
+  NIX_CFLAGS_COMPILE = "-fcommon";
+
   preConfigure = ''
     cd src
     sed -i "/^STRIP/d" configure