diff --git a/home/bin/executable_linux-add-nonsteam-games b/home/bin/executable_linux-add-nonsteam-games index 4d63071c..c984980e 100644 --- a/home/bin/executable_linux-add-nonsteam-games +++ b/home/bin/executable_linux-add-nonsteam-games @@ -11,6 +11,7 @@ apps=( "/run/current-system/sw/bin/ppsspp PPSSPP Emulator" "/run/current-system/sw/bin/retroarch Retroarch Emulator" "/run/current-system/sw/bin/ryujinx Ryujinx Emulator" + "/run/current-system/sw/bin/yuzu Yuzu Emulator" ) for app in "${apps[@]}" diff --git a/home/bin/executable_linux-tree-dir b/home/bin/executable_linux-tree-dir deleted file mode 100644 index 627b971c..00000000 --- a/home/bin/executable_linux-tree-dir +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -# Check if the directory is provided -if [ -z "$1" ]; then - echo "Usage: $0 " - exit 1 -fi - -# Function to print the tree with SHA256 sums -print_tree_with_sha256() { - local dir="$1" - - # Use find to recursively list files, and calculate sha256sum for each file - find "$dir" -type f | while read -r file; do - sha256=$(sha256sum "$file" | awk '{print $1}') - echo "$file - $sha256" - done -} - -# Call the function with the provided directory -print_tree_with_sha256 "$1" - diff --git a/provision/modules/gaming/emulation.nix b/provision/modules/gaming/emulation.nix index 0979804e..b7285cbf 100644 --- a/provision/modules/gaming/emulation.nix +++ b/provision/modules/gaming/emulation.nix @@ -7,8 +7,9 @@ in { environment.systemPackages = with pkgs; [ - ryujinx # Nintendo Switch emulator written in C#. + ryujinx # Fuck Nintendo! sudachi # Nintendo Switch emulator written in C++. + yuzu # Fuck Nintendo! dolphin-emu # GameCube and Wii emulator. ppsspp # PSP emulator. mgba # Game Boy Advance emulator. @@ -18,7 +19,7 @@ in { snes9x # Super Nintendo Entertainment System (SNES) emulator. mgba # Game Boy Advance emulator. melonds # Nintendo DS emulator. - citra # Nintendo 3DS emulator. + citra # Fuck Nintendo! ]; }) ]; diff --git a/provision/overlays/default.nix b/provision/overlays/default.nix index cf14d068..855db315 100644 --- a/provision/overlays/default.nix +++ b/provision/overlays/default.nix @@ -5,6 +5,7 @@ final: prev: { advcpmv = final.callPackage ../pkgs/advcpmv.nix {}; nx_tzdb = final.callPackage ../pkgs/nx_tzdb.nix {}; sudachi = final.kdePackages.callPackage ../pkgs/sudachi.nix {}; + yuzu = final.libsForQt5.callPackage ../pkgs/yuzu.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 = final.callPackage ../pkgs/ryujinx/default.nix {}; diff --git a/provision/pkgs/yuzu.nix b/provision/pkgs/yuzu.nix new file mode 100644 index 00000000..4d157a39 --- /dev/null +++ b/provision/pkgs/yuzu.nix @@ -0,0 +1,191 @@ +{ 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"; + 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/Yuzu/boxart.png b/resources/img/Yuzu/boxart.png new file mode 100644 index 00000000..07012654 Binary files /dev/null and b/resources/img/Yuzu/boxart.png differ diff --git a/resources/img/Yuzu/hero.png b/resources/img/Yuzu/hero.png new file mode 100644 index 00000000..ab69f22b Binary files /dev/null and b/resources/img/Yuzu/hero.png differ diff --git a/resources/img/Yuzu/icons.png b/resources/img/Yuzu/icons.png new file mode 100644 index 00000000..c0957479 Binary files /dev/null and b/resources/img/Yuzu/icons.png differ diff --git a/resources/img/Yuzu/logo.png b/resources/img/Yuzu/logo.png new file mode 100644 index 00000000..a3037994 Binary files /dev/null and b/resources/img/Yuzu/logo.png differ diff --git a/resources/img/Yuzu/tenfoot.png b/resources/img/Yuzu/tenfoot.png new file mode 100644 index 00000000..85f5cc00 Binary files /dev/null and b/resources/img/Yuzu/tenfoot.png differ