From bba65682952119723ec4cab1e0511cd781398e8a Mon Sep 17 00:00:00 2001 From: lucasew Date: Fri, 29 Dec 2023 14:50:45 -0300 Subject: [PATCH 1/2] npm-lockfile-fix: init at 0.1.0 Signed-off-by: lucasew --- pkgs/by-name/np/npm-lockfile-fix/package.nix | 33 ++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 pkgs/by-name/np/npm-lockfile-fix/package.nix diff --git a/pkgs/by-name/np/npm-lockfile-fix/package.nix b/pkgs/by-name/np/npm-lockfile-fix/package.nix new file mode 100644 index 000000000000000..8e5564172dafa56 --- /dev/null +++ b/pkgs/by-name/np/npm-lockfile-fix/package.nix @@ -0,0 +1,33 @@ +{ lib +, python3 +, fetchFromGitHub +, nix-update-script +}: + + +python3.pkgs.buildPythonApplication rec { + pname = "npm-lockfile-fix"; + version = "0.1.0"; + + src = fetchFromGitHub { + owner = "jeslie0"; + repo = "npm-lockfile-fix"; + rev = "v${version}"; + hash = "sha256-0EGPCPmCf6bxbso3aHCeJ1XBOpYp3jtMXv8LGdwrsbs="; + }; + + propagatedBuildInputs = [ + python3.pkgs.requests + ]; + + doCheck = false; # no tests + + passthru.updateScript = nix-update-script {}; + + meta = with lib; { + description = "Add missing integrity and resolved fields to a package-lock.json file"; + mainProgram = "npm-lockfile-fix"; + license = lib.licenses.mit; + maintainers = [ maintainers.lucasew ]; + }; +} From 4c1d5da1b298f6f0316a52349c5b085c6c02db8e Mon Sep 17 00:00:00 2001 From: lucasew Date: Fri, 29 Dec 2023 14:51:07 -0300 Subject: [PATCH 2/2] bruno: package from source Signed-off-by: lucasew --- pkgs/by-name/br/bruno/package.nix | 127 ++++++++++++++++++++++-------- 1 file changed, 92 insertions(+), 35 deletions(-) diff --git a/pkgs/by-name/br/bruno/package.nix b/pkgs/by-name/br/bruno/package.nix index 01f3642fc577206..1687065fbd9b48b 100644 --- a/pkgs/by-name/br/bruno/package.nix +++ b/pkgs/by-name/br/bruno/package.nix @@ -1,62 +1,119 @@ { 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 }: -stdenv.mkDerivation rec { +buildNpmPackage rec { pname = "bruno"; version = "1.5.1"; - src = fetchurl { - url = "https://github.com/usebruno/bruno/releases/download/v${version}/bruno_${version}_amd64_linux.deb"; - hash = "sha256-kJfS3yORwvh7rMGgDV5Bn2L7+7ZMa8ZBpRI1P5y+ShQ="; + src = fetchFromGitHub { + owner = "usebruno"; + repo = "bruno"; + rev = "v${version}"; + hash = "sha256-GgXnsPEUurPHrijf966x5ldp+1lDrgS1iBinU+EkdYU=b"; + + postFetch = '' + ${lib.getExe npm-lockfile-fix} $out/package-lock.json + ''; }; - nativeBuildInputs = [ autoPatchelfHook dpkg wrapGAppsHook ]; + npmDepsHash = "sha256-R5dEL4QbwCSE9+HHCXlf/pYLmjCaD15tmdSSLbZgmt0="; + + nativeBuildInputs = [ + (writeShellScriptBin "phantomjs" "echo 2.1.1") + makeWrapper + copyDesktopItems + pkg-config + ]; buildInputs = [ - alsa-lib - gtk3 - mesa - nspr - nss + pixman + cairo + pango + ]; + + desktopItems = [ + (makeDesktopItem { + name = "bruno"; + desktopName = "Bruno"; + exec = "bruno %U"; + icon = "bruno"; + comment = "Opensource API Client for Exploring and Testing APIs"; + categories = [ "Development" ]; + startupWMClass = "Bruno"; + }) ]; - runtimeDependencies = [ (lib.getLib systemd) ]; + 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-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 + + 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" + 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 { }; meta = with lib; { - description = "Open-source IDE For exploring and testing APIs"; + 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 kashw2 ]; - platforms = [ "x86_64-linux" ]; - sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + mainProgram = "bruno"; }; }