Last active
June 21, 2024 20:05
-
-
Save cidkidnix/a9892434f926c334524eb4c977f4feb3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
self: super: super.lib.optionalAttrs (super.stdenv.targetPlatform.isAarch64) rec { | |
#-------# | |
# Box64 # | |
#-------# | |
mapNamesToPackage = { | |
"libX11" = super.xorg.libX11; | |
"libXcursor" = super.xorg.libXcursor; | |
"libXi" = super.xorg.libXi; | |
"libXrandr" = super.xorg.libXrandr; | |
"libXxf86vm" = super.xorg.libXxf86vm; | |
"libxcb" = super.xorg.libxcb; | |
#"libxkbcommon" = super.xorg.libxkbcommon; | |
"libXext" = super.xorg.libXext; | |
"glu" = super.libglvnd; | |
"gtk+3" = super.gtk3; | |
"libXScrnSaver" = super.xorg.libXScrnSaver; | |
"libXcomposite" = super.xorg.libXcomposite; | |
"libXdamage" = super.xorg.libXdamage; | |
"libXfixes" = super.xorg.libXfixes; | |
"libXrender" = super.xorg.libXrender; | |
"libXtst" = super.xorg.libXtst; | |
"util-linux-minimal" = super.libuuid; | |
"libxshmfence" = super.xorg.libxshmfence; | |
"git-minimal" = super.gitMinimal; | |
"libXinerama" = super.xorg.libXinerama; | |
"libXau" = super.xorg.libXau; | |
"libXdmcp" = super.xorg.libXdmcp; | |
"adwaita-icon-theme" = super.gnome.adwaita-icon-theme; | |
"libdbusmenu-glib" = super.libdbusmenu; | |
"systemd-minimal-libs" = super.systemdLibs; | |
}; | |
box64 = super.box64.overrideAttrs (old: { | |
version = "git"; | |
cmakeFlags = (old.cmakeFlags or []) ++ [ | |
"-DADLINK=1" | |
]; | |
doCheck = false; | |
patches = []; | |
src = super.fetchFromGitHub { | |
owner = "ptitSeb"; | |
repo = "box64"; | |
rev = "239ef8951d3a3620becbf1e2382cc5559aa66ffb"; | |
sha256 = "sha256-bsVDo5KF9B7a1zfh/lBq2Eh5+zg1qRA2OkvndzawkC4="; | |
}; | |
}); | |
programNames = a: builtins.map (b: b.pname) (a.buildInputs ++ (a.runtimeDependencies or []) ++ (a.propogatedBuildInputs or []) ++ (super.wrapGAppsHook.propogatedBuildInputs or [])); | |
toNativePackages = pkg: map (a: let | |
package = if mapNamesToPackage ? "${a}" then | |
mapNamesToPackage."${a}".out | |
else super."${a}".out; | |
in package) (programNames pkg); | |
makeBoxPath = { program, extraDeps ? [] }: let | |
nativePackages = toNativePackages program; | |
allDeps = nativePackages ++ extraDeps; | |
in super.runCommandNoCC "makeLibraryPath" {} ('' | |
set -eux | |
mkdir -p $out/lib | |
'' + (builtins.concatStringsSep "\n" (map (v: '' | |
chmod -R +w $out/lib | |
if [[ -d ${v}/lib ]]; then | |
cp -r ${v}/lib/* $out/lib | |
else | |
echo "No Library Dir!" | |
fi | |
'' + '' | |
if [[ -f $out/lib/libgcc_s.so.1 ]]; then | |
chmod 0555 $out/lib/libgcc_s.so.1 | |
else | |
echo "No libgcc_s.so.1!" | |
fi | |
'') allDeps))); | |
wrapX86Programs = { program, extraDeps ? [], loglevel ? 0 }: let | |
dir = builtins.readDir "${program.outPath}/bin"; | |
boxPath = makeBoxPath { | |
inherit program extraDeps; | |
}; | |
wrappedProgramList = map (a: let | |
box64Program = super.writeShellScriptBin "${a}-box64" '' | |
export LD_LIBRARY_PATH="${boxPath}/lib" | |
export BOX64_LD_LIBRARY_PATH="${self.nixpkgs_x86.openssl.out}/lib" | |
export BOX64_BASH=${super.pkgsCross.gnu64.bash}/bin/sh | |
export BOX64_LOG=${toString loglevel} | |
export ARGS=$@ | |
echo $ARGS | |
if [[ -f "${program.outPath}/bin/.${program.pname}-wrapped" ]]; then | |
export COMMAND=${program.outPath}/bin/.${a}-wrapped | |
else | |
export COMMAND=${program.outPath}/bin/${a} | |
fi | |
${box64}/bin/box64 $COMMAND $ARGS | |
''; | |
in box64Program) (builtins.attrNames dir); | |
programOutPaths = map (a: a.outPath) wrappedProgramList; | |
in super.runCommandNoCC "${program.pname or program.name}-x86-wrapped" {} ('' | |
set -eux | |
mkdir -p $out/bin | |
'' + | |
(builtins.concatStringsSep "\n" | |
(map | |
(v: "cp -r ${v}/bin $out" | |
) programOutPaths))); | |
installAllBinaries = p: let | |
dir = builtins.readDir "${p.outPath}/bin"; | |
in map (v: { | |
name = "${v}"; | |
path = "bin/${v}"; | |
}) (builtins.attrNames dir); | |
wrapX64Programs = { | |
program, | |
global ? {}, | |
binaries ? [{}], | |
loglevel ? 0, | |
nobanner ? 1, | |
makeDesktopFiles ? false | |
}: let | |
allNativeDeps = toNativePackages program; | |
globalDeps = global.extraDeps or []; | |
globalX64Deps = global.extraX64Deps or []; | |
makeBinaries = map (a: let | |
name = a.name; | |
path = a.path or "bin/${name}"; | |
extraDeps = a.extraDeps or []; | |
extraX64Deps = a.extraX64Deps or []; | |
extraArgs = builtins.concatStringsSep "" (a.extraArgs or []); | |
extraScript = a.extraScript or ""; | |
libraryPath = super.lib.makeLibraryPath (extraDeps ++ allNativeDeps ++ globalDeps); | |
box64LibraryPath = super.lib.makeLibraryPath (extraX64Deps ++ globalX64Deps); | |
in super.writeShellScriptBin "${name}" '' | |
export LD_LIBRARY_PATH=${libraryPath} | |
export BOX64_LD_LIBRARY_PATH=${box64LibraryPath} | |
export BOX64_LOG=${toString loglevel} | |
export BOX64_NOBANNER=${toString nobanner} | |
${extraScript} | |
${box64}/bin/box64 ${program.outPath}/${path} ${extraArgs} "$@" | |
'') binaries; | |
in super.runCommandNoCC "${program.pname}-wrapped-box64" {} ('' | |
set -eux | |
mkdir -p $out/bin | |
mkdir -p $out/share/applications | |
${builtins.concatStringsSep "\n" (map (v: "cp -r ${v}/bin $out") makeBinaries)} | |
'' + super.lib.optionalString (makeDesktopFiles) '' | |
for i in $out/bin/*; do | |
local name=$(basename $i) | |
echo -e "[Desktop Entry]\nName=''${name^}\nType=Application\nExec=$out/bin/$name" > $out/share/applications/$name.desktop | |
done | |
''); | |
nixpkgs_x86 = import super.path { system = "x86_64-linux"; config.allowUnfree = true; }; | |
mesa-demos_x64 = self.wrapX64Programs rec { | |
program = self.nixpkgs_x86.mesa-demos; | |
binaries = self.installAllBinaries program; | |
}; | |
wine64_x64 = self.wrapX64Programs rec { | |
program = self.nixpkgs_x86.wine64Packages.stable; | |
global = { | |
extraDeps = with super; [ | |
xz.out | |
fontconfig.lib | |
expat | |
cups.lib | |
dbus.lib | |
libcap.lib | |
]; | |
}; | |
binaries = self.installAllBinaries program; | |
}; | |
clonehero_x64 = wrapX64Programs { | |
makeDesktopFiles = true; | |
program = self.nixpkgs_x86.clonehero.overrideAttrs (old: { | |
src = builtins.fetchTarball { | |
url = "https://github.com/clonehero-game/releases/releases/download/V1.0.0.4080/CloneHero-linux.tar.xz"; | |
sha256 = "sha256:01jkga3wjdhh0hi5dkmx57v2w296bzd5q5b8vdyadca4k5kymhbz"; | |
}; | |
}); | |
loglevel = 1; | |
global = { | |
extraDeps = with super; [ | |
xorg.libX11 | |
gcc.cc.libgcc | |
dbus.lib | |
libGL | |
libbsd | |
]; | |
}; | |
binaries = [ | |
{ | |
name = "clonehero"; | |
} | |
]; | |
}; | |
spotify_x64 = self.wrapX64Programs { | |
program = self.nixpkgs_x86.spotify-unwrapped; | |
makeDesktopFiles = true; | |
binaries = [ | |
{ | |
name = "spotify"; | |
path = "share/spotify/.spotify-wrapped"; | |
extraDeps = with super; [ | |
avahi | |
libdrm | |
glib.out | |
cups.lib | |
xorg.libICE | |
atkmm | |
xorg.libSM | |
gtk3 | |
cairo | |
alsa-lib | |
pango | |
xorg.libX11 | |
xorg.libXext | |
curlWithGnuTls.out | |
libgccjit | |
mesa | |
nss.out | |
libudev0-shim | |
pulseaudio | |
libnotify | |
pciutils | |
vulkan-tools | |
]; | |
extraX64Deps = with self.nixpkgs_x86; [ | |
gcc.cc.libgcc | |
]; | |
} | |
]; | |
}; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment