mongodb-compass: add darwin support and split package file

Moved most of the package.nix code into linux.nix and introduced darwin.nix,
enabling mongodb-compass on x86_64-darwin and aarch64-darwin.
This commit is contained in:
iamanaws 2025-02-20 19:48:52 -08:00
parent e3b579bed0
commit 2c14a3e73e
3 changed files with 210 additions and 132 deletions

View file

@ -0,0 +1,63 @@
{
stdenvNoCC,
fetchurl,
unzip,
runtimeShell,
pname,
version,
meta,
}:
let
appName = "MongoDB Compass.app";
dist =
{
aarch64-darwin = {
arch = "arm64";
sha256 = "sha256-naSOCYxdDLt/zDtR4MhTE96gJypfbk98CWKx2i8kiTk=";
};
x86_64-darwin = {
arch = "x64";
sha256 = "sha256-TnoXaiSNYiblgJS5nygTHOe9HBgVCTfffX37wrwtxZ8=";
};
}
.${stdenvNoCC.hostPlatform.system}
or (throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}");
in
stdenvNoCC.mkDerivation {
inherit pname version meta;
src = fetchurl {
url = "https://downloads.mongodb.com/compass/mongodb-compass-${version}-darwin-${dist.arch}.zip";
inherit (dist) sha256;
name = "${pname}-${version}.zip";
};
nativeBuildInputs = [ unzip ];
# The archive will be automatically unzipped; tell Nix where the source root is.
dontFixup = true;
sourceRoot = appName;
installPhase = ''
runHook preInstall
# Create directories for the application bundle and the launcher script.
mkdir -p "$out/Applications/${appName}" "$out/bin"
# Copy the unzipped app bundle into the Applications folder.
cp -R . "$out/Applications/${appName}"
# Create a launcher script that opens the app.
cat > "$out/bin/${pname}" << EOF
#!${runtimeShell}
open -na "$out/Applications/${appName}" --args "\$@"
EOF
chmod +x "$out/bin/${pname}"
runHook postInstall
'';
}

View file

@ -0,0 +1,132 @@
{
alsa-lib,
at-spi2-atk,
at-spi2-core,
atk,
cairo,
cups,
curl,
dbus,
dpkg,
expat,
fetchurl,
fontconfig,
freetype,
gdk-pixbuf,
glib,
gtk3,
lib,
libdrm,
libGL,
libnotify,
libsecret,
libuuid,
libxcb,
libxkbcommon,
libgbm,
nspr,
nss,
pango,
stdenv,
systemd,
wrapGAppsHook3,
xorg,
pname,
version,
meta,
}:
let
rpath = lib.makeLibraryPath [
alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
curl
dbus
expat
fontconfig
freetype
gdk-pixbuf
glib
gtk3
libdrm
libGL
libnotify
libsecret
libuuid
libxcb
libxkbcommon
libgbm
nspr
nss
pango
stdenv.cc.cc
systemd
xorg.libX11
xorg.libXScrnSaver
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXtst
xorg.libxkbfile
xorg.libxshmfence
(lib.getLib stdenv.cc.cc)
];
in
stdenv.mkDerivation {
inherit pname version meta;
src =
if stdenv.hostPlatform.system == "x86_64-linux" then
fetchurl {
url = "https://downloads.mongodb.com/compass/mongodb-compass_${version}_amd64.deb";
hash = "sha256-cwhYiV5G8GRBT7MST20MPUxEMQM1mzxlLUfzGO6jv10=";
}
else
throw "MongoDB compass is not supported on ${stdenv.hostPlatform.system}";
buildInputs = [
dpkg
wrapGAppsHook3
gtk3
];
dontUnpack = true;
buildCommand = ''
IFS=$'\n'
# The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
dpkg --fsys-tarfile $src | tar --extract
mkdir -p $out
mv usr/* $out
# cp -av $out/usr/* $out
rm -rf $out/share/lintian
# The node_modules are bringing in non-linux files/dependencies
find $out -name "*.app" -exec rm -rf {} \; || true
find $out -name "*.dll" -delete
find $out -name "*.exe" -delete
# Otherwise it looks "suspicious"
chmod -R g-w $out
for file in `find $out -type f -perm /0111 -o -name \*.so\*`; do
echo "Manipulating file: $file"
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
patchelf --set-rpath ${rpath}:$out/lib/mongodb-compass "$file" || true
done
wrapGAppsHook $out/bin/mongodb-compass
'';
}

View file

@ -1,149 +1,32 @@
{
alsa-lib,
at-spi2-atk,
at-spi2-core,
atk,
cairo,
cups,
curl,
dbus,
dpkg,
expat,
fetchurl,
fontconfig,
freetype,
gdk-pixbuf,
glib,
gtk3,
lib,
libdrm,
libGL,
libnotify,
libsecret,
libuuid,
libxcb,
libxkbcommon,
libgbm,
nspr,
nss,
pango,
stdenv,
systemd,
wrapGAppsHook3,
xorg,
callPackage,
lib,
...
}:
let
version = "1.46.0";
rpath = lib.makeLibraryPath [
alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
curl
dbus
expat
fontconfig
freetype
gdk-pixbuf
glib
gtk3
libdrm
libGL
libnotify
libsecret
libuuid
libxcb
libxkbcommon
libgbm
nspr
nss
pango
stdenv.cc.cc
systemd
xorg.libX11
xorg.libXScrnSaver
xorg.libXcomposite
xorg.libXcursor
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXi
xorg.libXrandr
xorg.libXrender
xorg.libXtst
xorg.libxkbfile
xorg.libxshmfence
(lib.getLib stdenv.cc.cc)
];
src =
if stdenv.hostPlatform.system == "x86_64-linux" then
fetchurl {
url = "https://downloads.mongodb.com/compass/mongodb-compass_${version}_amd64.deb";
hash = "sha256-cwhYiV5G8GRBT7MST20MPUxEMQM1mzxlLUfzGO6jv10=";
}
else
throw "MongoDB compass is not supported on ${stdenv.hostPlatform.system}";
# NOTE While MongoDB Compass is available to darwin, I do not have resources to test it
# Feel free to make a PR adding support if desired
in
stdenv.mkDerivation {
pname = "mongodb-compass";
inherit version;
inherit src;
buildInputs = [
dpkg
wrapGAppsHook3
gtk3
];
dontUnpack = true;
buildCommand = ''
IFS=$'\n'
# The deb file contains a setuid binary, so 'dpkg -x' doesn't work here
dpkg --fsys-tarfile $src | tar --extract
mkdir -p $out
mv usr/* $out
# cp -av $out/usr/* $out
rm -rf $out/share/lintian
# The node_modules are bringing in non-linux files/dependencies
find $out -name "*.app" -exec rm -rf {} \; || true
find $out -name "*.dll" -delete
find $out -name "*.exe" -delete
# Otherwise it looks "suspicious"
chmod -R g-w $out
for file in `find $out -type f -perm /0111 -o -name \*.so\*`; do
echo "Manipulating file: $file"
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "$file" || true
patchelf --set-rpath ${rpath}:$out/lib/mongodb-compass "$file" || true
done
wrapGAppsHook $out/bin/mongodb-compass
'';
version = "1.46.0";
meta = {
description = "GUI for MongoDB";
maintainers = with lib.maintainers; [
bryanasdev000
friedow
iamanaws
];
homepage = "https://github.com/mongodb-js/compass";
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = lib.licenses.sspl;
platforms = [ "x86_64-linux" ];
platforms = [
"x86_64-linux"
"aarch64-darwin"
"x86_64-darwin"
];
mainProgram = "mongodb-compass";
};
}
in
if stdenv.hostPlatform.isDarwin then
callPackage ./darwin.nix { inherit pname version meta; }
else
callPackage ./linux.nix { inherit pname version meta; }