diff --git a/home/bin/executable_linux-add-nonsteam-games b/home/bin/executable_linux-add-nonsteam-games index 00b4f0c3..4d63071c 100644 --- a/home/bin/executable_linux-add-nonsteam-games +++ b/home/bin/executable_linux-add-nonsteam-games @@ -7,7 +7,7 @@ rm $shortcuts_vdf apps=( "/run/current-system/sw/bin/dolphin-emu Dolphin Emulator" - "/run/current-system/sw/bin/yuzu Yuzu Emulator" + "/run/current-system/sw/bin/sudachi Sudachi Emulator" "/run/current-system/sw/bin/ppsspp PPSSPP Emulator" "/run/current-system/sw/bin/retroarch Retroarch Emulator" "/run/current-system/sw/bin/ryujinx Ryujinx Emulator" diff --git a/provision/modules/gaming/emulation.nix b/provision/modules/gaming/emulation.nix index d9f1a664..604f3905 100644 --- a/provision/modules/gaming/emulation.nix +++ b/provision/modules/gaming/emulation.nix @@ -5,9 +5,10 @@ in { options.modules.gaming.emulation.enable = lib.mkEnableOption "emulation"; config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ - yuzu-archive # Nintendo Switch emulator. ryujinx-archive # Nintendo Switch emulator written in C#. + sudachi # Nintendo Switch emulator written in C++. dolphin-emu # GameCube and Wii emulator. ppsspp # PSP emulator. mgba # Game Boy Advance emulator. diff --git a/provision/overlays/default.nix b/provision/overlays/default.nix index d6de48ba..6f48bab1 100644 --- a/provision/overlays/default.nix +++ b/provision/overlays/default.nix @@ -4,7 +4,7 @@ final: prev: { advcpmv = final.callPackage ../pkgs/advcpmv.nix {}; nx_tzdb = final.callPackage ../pkgs/nx_tzdb.nix {}; - yuzu-archive = final.libsForQt5.callPackage ../pkgs/yuzu-archive.nix {}; + sudachi = final.kdePackages.callPackage ../pkgs/sudachi.nix {}; gnome-set-panel-monitor = final.callPackage ../pkgs/gnome-set-panel-monitor.nix {}; gnome-fullscreen-to-empty-workspace = final.callPackage ../pkgs/gnome-fullscreen-to-empty-workspace.nix {}; ryujinx-archive = final.callPackage ../pkgs/ryujinx-archive/default.nix {}; diff --git a/provision/pkgs/sudachi.nix b/provision/pkgs/sudachi.nix new file mode 100644 index 00000000..de7c12b9 --- /dev/null +++ b/provision/pkgs/sudachi.nix @@ -0,0 +1,196 @@ +{ + lib, + stdenv, + fetchzip, + fetchFromGitea, + cmake, + glslang, + pkg-config, + qttools, + wrapQtAppsHook, + boost, + fmt, + lz4, + nlohmann_json, + qtbase, + qtmultimedia, + qtwayland, + qtwebengine, + zlib, + zstd, + rapidjson, + libva, + libvdpau, + nv-codec-headers-12, + yasm, + autoconf, + automake, + libtool, + spirv-headers, + catch2_3, + vulkan-loader, + vulkan-headers, +}: + +let + # Derived from externals/nx_tzdb/CMakeLists.txt + nx_tzdb = fetchzip { + url = "https://github.com/lat9nq/tzdb_to_nx/releases/download/221202/221202.zip"; + stripRoot = false; + hash = "sha256-YOIElcKTiclem05trZsA3YJReozu/ex7jJAKD6nAMwc="; + }; + suyu = fetchFromGitea { + domain = "git.suyu.dev"; + owner = "suyu"; + repo = "suyu"; + rev = "ee365bad9501c73ff49936e72ec91cd9c3ce5c24"; + hash = "sha256-vw9VcSbCaG4MS0PL/fJ73CDALLbd3n0CBT7gkyp5hRc="; + fetchSubmodules = true; + }; +in +stdenv.mkDerivation (finalAttrs: { + pname = "sudachi"; + version = "1.0.11"; + + src = fetchzip { + url = "https://github.com/emuplace/sudachi.emuplace.app/releases/download/v1.0.11/latest.zip"; + hash = "sha256-aQ1cNFG6JCNrMz4N9uv6QRidjNwvyJqGunhwhJpvv4s="; + }; + + nativeBuildInputs = [ + cmake + glslang + pkg-config + qttools + wrapQtAppsHook + ]; + + buildInputs = [ + vulkan-headers + boost + fmt + lz4 + nlohmann_json + qtbase + qtmultimedia + qtwayland + qtwebengine + zlib + zstd + + # vendored discord-rpc deps + rapidjson + + # vendored ffmpeg deps + libva # for accelerated video decode on non-nvidia + libvdpau # for accelerated video decode on non-nvidia + nv-codec-headers-12 # for accelerated video decode on nvidia + yasm + + # vendored libusb deps + autoconf + automake + libtool + + # vendored sirit deps + spirv-headers + ]; + + cmakeFlags = [ + # actually has a noticeable performance impact + "-DSUDACHI_ENABLE_LTO=ON" + + # build with qt6 + "-DENABLE_QT6=ON" + + # enable some optional features + "-DSUDACHI_USE_QT_WEB_ENGINE=ON" + "-DSUDACHI_USE_QT_MULTIMEDIA=ON" + "-DUSE_DISCORD_PRESENCE=ON" + + # compatibility list currently 404's + "-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF" + + # don't check for missing submodules + "-DSUDACHI_CHECK_SUBMODULES=OFF" + + # use system libraries + # NB: "external" here means "from the externals/ directory in the source", + # so "off" means "use system" + "-DSUDACHI_USE_EXTERNAL_VULKAN_HEADERS=OFF" + + # Disable SDL2 audio + # Sudachi seems to have a bug that ignores SUDACHI_USE_EXTERNAL_SDL2 flag + "-DENABLE_SDL2=OFF" + + # don't use system ffmpeg, sudachi uses internal APIs + "-DSUDACHI_USE_BUNDLED_FFMPEG=ON" + "-DFFmpeg_COMPONENTS='swscale;avutil;avfilter;avcodec'" + "-DFFmpeg_PREFIX=$src/externals/ffmpeg/ffmpeg" + + # use system spriv headers for sirit + "-DSIRIT_USE_SYSTEM_SPIRV_HEADERS=ON" + ]; + + # Does some handrolled SIMD + env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isx86_64 "-msse4.1"; + + # 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 = '' + # see https://github.com/NixOS/nixpkgs/issues/114044, setting this through cmakeFlags does not work. + cmakeFlagsArray+=( + "-DTITLE_BAR_FORMAT_IDLE=${finalAttrs.pname} | ${finalAttrs.version} (nixpkgs) {}" + "-DTITLE_BAR_FORMAT_RUNNING=${finalAttrs.pname} | ${finalAttrs.version} (nixpkgs) | {}" + ) + + # Copy suyu externals + rm -R externals/ + cp -R ${suyu}/externals . + + # replace "SUYU" with "SUDACHI" in externals cmake args + chmod u+rw -R externals/ + grep -rl SUYU | xargs sed -i 's/SUYU/SUDACHI/g' + + # provide pre-downloaded tz data + mkdir -p build/externals/nx_tzdb + ln -s ${nx_tzdb} build/externals/nx_tzdb/nx_tzdb + ''; + + doCheck = true; + checkInputs = [ catch2_3 ]; + + # Fixes vulkan detection. + # FIXME: patchelf --add-rpath corrupts the binary for some reason, investigate + qtWrapperArgs = [ "--prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib" ]; + + postInstall = '' + install -Dm444 "$src/dist/72-sudachi-input.rules" "$out/lib/udev/rules.d/72-sudachi-input.rules" + mkdir -p "$out/share/sudachi" + cp -R "$src" "$out/share/sudachi/src" + ''; + + meta = with lib; { + description = "Nintendo Switch emulator written in C++"; + homepage = "https://sudachiemu.com/"; + changelog = "https://sudachi.emuplace.app/"; + mainProgram = "sudachi"; + platforms = [ + "aarch64-linux" + "x86_64-linux" + ]; + + license = with licenses; [ + gpl3Plus + + # Icons + asl20 + mit + cc0 + ]; + + maintainers = with maintainers; [ starr-dusT ]; + }; +}) diff --git a/provision/pkgs/yuzu-archive.nix b/provision/pkgs/yuzu-archive.nix deleted file mode 100644 index d7137a0f..00000000 --- a/provision/pkgs/yuzu-archive.nix +++ /dev/null @@ -1,191 +0,0 @@ -{ lib -, stdenv -, fetchFromGitea -, nix-update-script -, wrapQtAppsHook -, autoconf -, boost -, catch2_3 -, cmake -, cpp-jwt -, cubeb -, discord-rpc -, enet -, fmt -, glslang -, libopus -, libusb1 -, libva -, lz4 -, nlohmann_json -, nv-codec-headers-12 -, pkg-config -, qtbase -, qtmultimedia -, qttools -, qtwayland -, qtwebengine -, SDL2 -, vulkan-headers -, vulkan-loader -, yasm -, zlib -, zstd -, fetchzip -, fetchgit -, runCommand -, gnutar -, nx_tzdb -}: -stdenv.mkDerivation(finalAttrs: { - - pname = "yuzu-archive"; - version = "4176"; - - src = fetchFromGitea { - domain = "git.tstarr.us"; - owner = "tstarr"; - repo = "yuzu-mainline"; - rev = "d3a974b64679229e77a3af921994dab82d092249"; - hash = "sha256-sn/CfaZkS3noDH9lmEtIES6Xc7aoZ5tbHo1AJc5nxac="; - fetchSubmodules = true; - }; - - nativeBuildInputs = [ - cmake - glslang - pkg-config - qttools - wrapQtAppsHook - ]; - - buildInputs = [ - # vulkan-headers must come first, so the older propagated versions - # don't get picked up by accident - vulkan-headers - - boost - catch2_3 - cpp-jwt - cubeb - discord-rpc - # intentionally omitted: dynarmic - prefer vendored version for compatibility - enet - - # vendored ffmpeg deps - autoconf - yasm - libva # for accelerated video decode on non-nvidia - nv-codec-headers-12 # for accelerated video decode on nvidia - # end vendored ffmpeg deps - - fmt - # intentionally omitted: gamemode - loaded dynamically at runtime - # intentionally omitted: httplib - upstream requires an older version than what we have - libopus - libusb1 - # intentionally omitted: LLVM - heavy, only used for stack traces in the debugger - lz4 - nlohmann_json - qtbase - qtmultimedia - qtwayland - qtwebengine - # intentionally omitted: renderdoc - heavy, developer only - SDL2 - # not packaged in nixpkgs: simpleini - # intentionally omitted: stb - header only libraries, vendor uses git snapshot - # not packaged in nixpkgs: vulkan-memory-allocator - # intentionally omitted: xbyak - prefer vendored version for compatibility - zlib - zstd - ]; - - # 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 = [ - # actually has a noticeable performance impact - "-DYUZU_ENABLE_LTO=ON" - - # build with qt6 - "-DENABLE_QT6=ON" - "-DENABLE_QT_TRANSLATION=ON" - - # use system libraries - # NB: "external" here means "from the externals/ directory in the source", - # so "off" means "use system" - "-DYUZU_USE_EXTERNAL_SDL2=OFF" - "-DYUZU_USE_EXTERNAL_VULKAN_HEADERS=OFF" - - # don't use system ffmpeg, yuzu uses internal APIs - "-DYUZU_USE_BUNDLED_FFMPEG=ON" - - # don't check for missing submodules - "-DYUZU_CHECK_SUBMODULES=OFF" - - # enable some optional features - "-DYUZU_USE_QT_WEB_ENGINE=ON" - "-DYUZU_USE_QT_MULTIMEDIA=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 - ]; - - # Does some handrolled SIMD - env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.hostPlatform.isx86_64 "-msse4.1"; - - # Fixes vulkan detection. - # FIXME: patchelf --add-rpath corrupts the binary for some reason, investigate - qtWrapperArgs = [ - "--prefix LD_LIBRARY_PATH : ${vulkan-loader}/lib" - ]; - - preConfigure = '' - # see https://github.com/NixOS/nixpkgs/issues/114044, setting this through cmakeFlags does not work. - cmakeFlagsArray+=( - "-DTITLE_BAR_FORMAT_IDLE=${finalAttrs.pname} | ${finalAttrs.version} (nixpkgs) {}" - "-DTITLE_BAR_FORMAT_RUNNING=${finalAttrs.pname} | ${finalAttrs.version} (nixpkgs) | {}" - ) - - # provide pre-downloaded tz data - mkdir -p build/externals/nx_tzdb - ln -s ${nx_tzdb} build/externals/nx_tzdb/nx_tzdb - ''; - - postInstall = '' - install -Dm444 $src/dist/72-yuzu-input.rules $out/lib/udev/rules.d/72-yuzu-input.rules - ''; - - passthru.updateScript = nix-update-script { - extraArgs = [ "--version-regex" "mainline-0-(.*)" ]; - }; - - meta = with lib; { - homepage = "https://yuzu-emu.org"; - changelog = "https://yuzu-emu.org/entry"; - description = "An experimental Nintendo Switch emulator written in C++"; - longDescription = '' - An experimental Nintendo Switch emulator written in C++. - Using the mainline branch is recommended for general usage. - Using the early-access branch is recommended if you would like to try out experimental features, with a cost of stability. - ''; - mainProgram = "yuzu"; - platforms = [ "aarch64-linux" "x86_64-linux" ]; - license = with licenses; [ - gpl3Plus - # Icons - asl20 mit cc0 - ]; - maintainers = with maintainers; [ - ashley - ivar - joshuafern - sbruder - k900 - ]; - }; -}) diff --git a/resources/img/Sudachi/boxart.png b/resources/img/Sudachi/boxart.png new file mode 100644 index 00000000..8f60208f Binary files /dev/null and b/resources/img/Sudachi/boxart.png differ diff --git a/resources/img/Sudachi/hero.png b/resources/img/Sudachi/hero.png new file mode 100644 index 00000000..b0e0ad54 Binary files /dev/null and b/resources/img/Sudachi/hero.png differ diff --git a/resources/img/Sudachi/icons.png b/resources/img/Sudachi/icons.png new file mode 100644 index 00000000..0c2eee50 Binary files /dev/null and b/resources/img/Sudachi/icons.png differ diff --git a/resources/img/Sudachi/logo.png b/resources/img/Sudachi/logo.png new file mode 100644 index 00000000..b77a5620 Binary files /dev/null and b/resources/img/Sudachi/logo.png differ diff --git a/resources/img/Sudachi/tenfoot.png b/resources/img/Sudachi/tenfoot.png new file mode 100644 index 00000000..a0aeaa5c Binary files /dev/null and b/resources/img/Sudachi/tenfoot.png differ diff --git a/resources/img/Yuzu/boxart.png b/resources/img/Yuzu/boxart.png deleted file mode 100644 index 07012654..00000000 Binary files a/resources/img/Yuzu/boxart.png and /dev/null differ diff --git a/resources/img/Yuzu/hero.png b/resources/img/Yuzu/hero.png deleted file mode 100644 index ab69f22b..00000000 Binary files a/resources/img/Yuzu/hero.png and /dev/null differ diff --git a/resources/img/Yuzu/icons.png b/resources/img/Yuzu/icons.png deleted file mode 100644 index c0957479..00000000 Binary files a/resources/img/Yuzu/icons.png and /dev/null differ diff --git a/resources/img/Yuzu/logo.png b/resources/img/Yuzu/logo.png deleted file mode 100644 index a3037994..00000000 Binary files a/resources/img/Yuzu/logo.png and /dev/null differ diff --git a/resources/img/Yuzu/tenfoot.png b/resources/img/Yuzu/tenfoot.png deleted file mode 100644 index 85f5cc00..00000000 Binary files a/resources/img/Yuzu/tenfoot.png and /dev/null differ