From b8485829e54be9e028a39e0ad79f1eefea5ac08b Mon Sep 17 00:00:00 2001 From: Sirius902 <10891979+Sirius902@users.noreply.github.com> Date: Fri, 5 Sep 2025 18:26:58 -0700 Subject: [PATCH] archipelago: avoid bwrap Archipelago clients that rely on reading/writing memory of other processes cannot do so under bwrap. --- pkgs/by-name/ar/archipelago/package.nix | 92 +++++++++++++++++++------ 1 file changed, 72 insertions(+), 20 deletions(-) diff --git a/pkgs/by-name/ar/archipelago/package.nix b/pkgs/by-name/ar/archipelago/package.nix index 995cc280bb6d..60e8c67760ab 100644 --- a/pkgs/by-name/ar/archipelago/package.nix +++ b/pkgs/by-name/ar/archipelago/package.nix @@ -1,35 +1,87 @@ { lib, + pkgs, + stdenvNoCC, appimageTools, + autoPatchelfHook, + makeWrapper, + gobject-introspection, + openssl, + lttng-ust, + mtdev, + xsel, + xclip, + zenity, fetchurl, nix-update-script, - extraPackages ? [ ], }: -let +stdenvNoCC.mkDerivation (finalAttrs: { pname = "archipelago"; version = "0.6.3"; src = fetchurl { - url = "https://github.com/ArchipelagoMW/Archipelago/releases/download/${version}/Archipelago_${version}_linux-x86_64.AppImage"; + url = "https://github.com/ArchipelagoMW/Archipelago/releases/download/${finalAttrs.version}/Archipelago_${finalAttrs.version}_linux-x86_64.AppImage"; hash = "sha256-PetlGYsdhyvThIFqy+7wbPLAXDcgN2Kcl2WF3rta8PA="; }; - appimageContents = appimageTools.extractType2 { inherit pname version src; }; -in -appimageTools.wrapType2 { - inherit pname version src; - extraPkgs = - pkgs: - [ - pkgs.xsel - pkgs.xclip - pkgs.mtdev - ] - ++ extraPackages; - extraInstallCommands = '' - install -Dm444 ${appimageContents}/archipelago.desktop -t $out/share/applications + dontUnpack = true; + + nativeBuildInputs = [ + autoPatchelfHook + makeWrapper + ]; + + buildInputs = finalAttrs.runtimeDependencies; + + runtimeDependencies = [ + gobject-introspection + lttng-ust + openssl + ] + ++ appimageTools.defaultFhsEnvArgs.targetPkgs pkgs + ++ appimageTools.defaultFhsEnvArgs.multiPkgs pkgs; + + libraryPath = lib.makeLibraryPath [ + mtdev + ]; + + binPath = lib.makeBinPath [ + xsel + xclip + zenity + ]; + + appimageContents = appimageTools.extractType2 { inherit (finalAttrs) pname version src; }; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp ${finalAttrs.appimageContents}/AppRun $out/bin/archipelago + + mkdir -p $out/lib/opt + cp -r ${finalAttrs.appimageContents}/opt/* $out/lib/opt + + wrapProgram $out/bin/archipelago \ + --set APPDIR $out/lib \ + --prefix LD_LIBRARY_PATH : "${finalAttrs.libraryPath}" \ + --prefix PATH : "${finalAttrs.binPath}" + + install -Dm444 ${finalAttrs.appimageContents}/archipelago.desktop -t $out/share/applications substituteInPlace $out/share/applications/archipelago.desktop \ --replace-fail 'opt/Archipelago/ArchipelagoLauncher' "archipelago" - cp -r ${appimageContents}/usr/share/icons $out/share + cp -r ${finalAttrs.appimageContents}/usr/share/icons $out/share + + runHook postInstall + ''; + + preFixup = '' + patchelf \ + --replace-needed libcrypto.so.1.0.0 libcrypto.so \ + --replace-needed libssl.so.1.0.0 libssl.so \ + $out/lib/opt/Archipelago/EnemizerCLI/System.Security.Cryptography.Native.OpenSsl.so + + patchelf --replace-needed liblttng-ust.so.0 liblttng-ust.so \ + $out/lib/opt/Archipelago/EnemizerCLI/libcoreclrtraceptprovider.so ''; passthru.updateScript = nix-update-script { }; @@ -37,7 +89,7 @@ appimageTools.wrapType2 { meta = { description = "Multi-Game Randomizer and Server"; homepage = "https://archipelago.gg"; - changelog = "https://github.com/ArchipelagoMW/Archipelago/releases/tag/${version}"; + changelog = "https://github.com/ArchipelagoMW/Archipelago/releases/tag/${finalAttrs.version}"; license = lib.licenses.mit; mainProgram = "archipelago"; maintainers = with lib.maintainers; [ @@ -46,4 +98,4 @@ appimageTools.wrapType2 { ]; platforms = lib.platforms.linux; }; -} +})