diff --git a/pkgs/by-name/mo/mongodb-compass/darwin.nix b/pkgs/by-name/mo/mongodb-compass/darwin.nix new file mode 100644 index 000000000000..b2036833d536 --- /dev/null +++ b/pkgs/by-name/mo/mongodb-compass/darwin.nix @@ -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 + ''; +} diff --git a/pkgs/by-name/mo/mongodb-compass/linux.nix b/pkgs/by-name/mo/mongodb-compass/linux.nix new file mode 100644 index 000000000000..c3c4797bc501 --- /dev/null +++ b/pkgs/by-name/mo/mongodb-compass/linux.nix @@ -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 + ''; +} diff --git a/pkgs/by-name/mo/mongodb-compass/package.nix b/pkgs/by-name/mo/mongodb-compass/package.nix index 890ac0aca6b9..b18ca42c7b66 100644 --- a/pkgs/by-name/mo/mongodb-compass/package.nix +++ b/pkgs/by-name/mo/mongodb-compass/package.nix @@ -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; }