diff options
Diffstat (limited to 'pkgs/by-name/br/bruno/package.nix')
-rw-r--r-- | pkgs/by-name/br/bruno/package.nix | 164 |
1 files changed, 130 insertions, 34 deletions
diff --git a/pkgs/by-name/br/bruno/package.nix b/pkgs/by-name/br/bruno/package.nix index 4dfa1375ef7a..9c4069b41bc8 100644 --- a/pkgs/by-name/br/bruno/package.nix +++ b/pkgs/by-name/br/bruno/package.nix @@ -1,52 +1,147 @@ { lib + , stdenv -, fetchurl -, autoPatchelfHook -, dpkg -, wrapGAppsHook -, alsa-lib -, gtk3 -, mesa -, nspr -, nss -, systemd +, fetchFromGitHub +, buildNpmPackage , nix-update-script +, electron +, writeShellScriptBin +, makeWrapper +, copyDesktopItems +, makeDesktopItem +, pkg-config +, pixman +, cairo +, pango +, npm-lockfile-fix +, overrideSDK +, darwin }: -stdenv.mkDerivation rec { +let + # fix for: https://github.com/NixOS/nixpkgs/issues/272156 + buildNpmPackage' = + buildNpmPackage.override { + stdenv = if stdenv.isDarwin then overrideSDK stdenv "11.0" else stdenv; + }; +in +buildNpmPackage' rec { pname = "bruno"; - version = "0.17.0"; + version = "1.11.0"; + + src = fetchFromGitHub { + owner = "usebruno"; + repo = "bruno"; + rev = "v${version}"; + hash = "sha256-Urskhzs00OEucoR17NDXNtnrcXk9h75E806Re0HvYyw="; - src = fetchurl { - url = "https://github.com/usebruno/bruno/releases/download/v${version}/bruno_${version}_amd64_linux.deb"; - hash = "sha256-4FF9SEgWuIPQSarOBTaEvgdgRTkR1caRYr/bjfFmTLE="; + postFetch = '' + ${lib.getExe npm-lockfile-fix} $out/package-lock.json + ''; }; - nativeBuildInputs = [ autoPatchelfHook dpkg wrapGAppsHook ]; + npmDepsHash = "sha256-48xzx7dTalceXzjFBHIkkUS83pqP/OQ0L2tnMESpHII="; + npmFlags = [ "--legacy-peer-deps" ]; + + nativeBuildInputs = [ + (writeShellScriptBin "phantomjs" "echo 2.1.1") + pkg-config + ] ++ lib.optionals (! stdenv.isDarwin) [ + makeWrapper + copyDesktopItems + ]; buildInputs = [ - alsa-lib - gtk3 - mesa - nspr - nss + pixman + cairo + pango + ] ++ lib.optionals stdenv.isDarwin [ + darwin.apple_sdk_11_0.frameworks.CoreText ]; - runtimeDependencies = [ (lib.getLib systemd) ]; + desktopItems = [ + (makeDesktopItem { + name = "bruno"; + desktopName = "Bruno"; + exec = "bruno %U"; + icon = "bruno"; + comment = "Opensource API Client for Exploring and Testing APIs"; + categories = [ "Development" ]; + startupWMClass = "Bruno"; + }) + ]; + + postPatch = '' + substituteInPlace scripts/build-electron.sh \ + --replace 'if [ "$1" == "snap" ]; then' 'exit 0; if [ "$1" == "snap" ]; then' + ''; + + ELECTRON_SKIP_BINARY_DOWNLOAD=1; + + dontNpmBuild = true; + postBuild = '' + npm run build --workspace=packages/bruno-common + npm run build --workspace=packages/bruno-graphql-docs + npm run build --workspace=packages/bruno-app + npm run build --workspace=packages/bruno-query + + bash scripts/build-electron.sh + + pushd packages/bruno-electron + + ${if stdenv.isDarwin then '' + cp -r ${electron}/Applications/Electron.app ./ + find ./Electron.app -name 'Info.plist' | xargs -d '\n' chmod +rw + + substituteInPlace electron-builder-config.js \ + --replace "identity: 'Anoop MD (W7LPPWA48L)'" 'identity: null' \ + --replace "afterSign: 'notarize.js'," "" + + npm exec electron-builder -- \ + --dir \ + --config electron-builder-config.js \ + -c.electronDist=./ \ + -c.electronVersion=${electron.version} \ + -c.npmRebuild=false + '' else '' + npm exec electron-builder -- \ + --dir \ + -c.electronDist=${electron}/libexec/electron \ + -c.electronVersion=${electron.version} \ + -c.npmRebuild=false + ''} + + popd + ''; + + npmPackFlags = [ "--ignore-scripts" ]; installPhase = '' runHook preInstall - mkdir -p "$out/bin" - cp -R opt $out - cp -R "usr/share" "$out/share" - ln -s "$out/opt/Bruno/bruno" "$out/bin/bruno" - chmod -R g-w "$out" - runHook postInstall - ''; - postFixup = '' - substituteInPlace "$out/share/applications/bruno.desktop" \ - --replace "/opt/Bruno/bruno" "$out/bin/bruno" + + ${if stdenv.isDarwin then '' + mkdir -p $out/Applications + + cp -R packages/bruno-electron/out/**/Bruno.app $out/Applications/ + '' else '' + mkdir -p $out/opt/bruno $out/bin + + cp -r packages/bruno-electron/dist/linux*-unpacked/{locales,resources{,.pak}} $out/opt/bruno + + makeWrapper ${lib.getExe electron} $out/bin/bruno \ + --add-flags $out/opt/bruno/resources/app.asar \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \ + --set-default ELECTRON_IS_DEV 0 \ + --inherit-argv0 + + for s in 16 32 48 64 128 256 512 1024; do + size=${"$"}{s}x$s + install -Dm644 $src/packages/bruno-electron/resources/icons/png/$size.png $out/share/icons/hicolor/$size/apps/bruno.png + done + ''} + + runHook postInstall ''; passthru.updateScript = nix-update-script { }; @@ -54,8 +149,9 @@ stdenv.mkDerivation rec { meta = with lib; { description = "Open-source IDE For exploring and testing APIs."; homepage = "https://www.usebruno.com"; + inherit (electron.meta) platforms; license = licenses.mit; - maintainers = with maintainers; [ water-sucks lucasew ]; - platforms = [ "x86_64-linux" ]; + maintainers = with maintainers; [ water-sucks lucasew kashw2 mattpolzin ]; + mainProgram = "bruno"; }; } |