From feff32f4c0cc448a76f0090805a0c6617b219e89 Mon Sep 17 00:00:00 2001 From: Olivier Date: Sun, 11 Jan 2026 19:06:53 -0400 Subject: [PATCH] Add flow-browser-bin package --- default.nix | 1 + pkgs/flow-browser-bin/default.nix | 80 +++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 pkgs/flow-browser-bin/default.nix diff --git a/default.nix b/default.nix index 4c55c62..d07e7ae 100644 --- a/default.nix +++ b/default.nix @@ -16,6 +16,7 @@ # example-package = pkgs.callPackage ./pkgs/example-package { }; librepods = pkgs.callPackage ./pkgs/librepods { }; + flow-browser-bin = pkgs.callPackage ./pkgs/flow-browser-bin { }; # some-qt5-package = pkgs.libsForQt5.callPackage ./pkgs/some-qt5-package { }; # ... } diff --git a/pkgs/flow-browser-bin/default.nix b/pkgs/flow-browser-bin/default.nix new file mode 100644 index 0000000..ea55035 --- /dev/null +++ b/pkgs/flow-browser-bin/default.nix @@ -0,0 +1,80 @@ +{ lib +, appimageTools +, fetchurl +, runCommand +, stdenv +, vips +}: + +let + pname = "flow-browser-bin"; + version = "0.8.6"; + + # Flow bundles `sharp`, which attempts to dlopen libvips with a filename that + # includes the libvips version (e.g. libvips-cpp.so.8.17.3). Nixpkgs provides + # libvips with a different SONAME-based filename (e.g. libvips-cpp.so.42.19.3), + # so we provide compatibility symlinks in the FHS env. + vipsSharpCompat = runCommand "flow-browser-vips-compat" { } '' + mkdir -p $out/lib + # Link to the SONAME symlinks provided by nixpkgs, so we don't hardcode the + # 42.x.y patchlevel. + ln -s ${vips.out}/lib/libvips-cpp.so.42 $out/lib/libvips-cpp.so.${vips.version} + ln -s ${vips.out}/lib/libvips.so.42 $out/lib/libvips.so.${vips.version} + ''; + + src = + if stdenv.hostPlatform.system == "x86_64-linux" then + fetchurl { + url = "https://github.com/MultiboxLabs/flow-browser/releases/download/v${version}/flow-browser-${version}-x86_64.AppImage"; + sha256 = "1s4i419vlwgqzy8p73msb6djf6bbdk530inwc6hr7rwz611cf0gz"; + } + else if stdenv.hostPlatform.system == "aarch64-linux" then + fetchurl { + url = "https://github.com/MultiboxLabs/flow-browser/releases/download/v${version}/flow-browser-${version}-arm64.AppImage"; + sha256 = "0n2cp0519z43z5aa6mc7xzrhp6mpfjl7fkls29hk6db4mzv6sfsn"; + } + else + throw "flow-browser-bin: unsupported system: ${stdenv.hostPlatform.system}"; + + appimageContents = appimageTools.extractType2 { + inherit pname version src; + }; +in +appimageTools.wrapType2 { + inherit pname version src; + + extraPkgs = pkgs: [ vipsSharpCompat ]; + + # Ensure `sharp` can find libvips in the bubblewrapped FHS env. + # (Relying on /usr/lib64 + ld.so cache can be flaky depending on the env.) + profile = '' + export LD_LIBRARY_PATH="${vipsSharpCompat}/lib''${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH" + ''; + + extraInstallCommands = '' + # Desktop entry + install -D -m 444 ${appimageContents}/Flow.desktop \ + $out/share/applications/flow-browser.desktop + + substituteInPlace $out/share/applications/flow-browser.desktop \ + --replace-fail 'Exec=AppRun' 'Exec=${pname}' + + # Icon + install -D -m 444 ${appimageContents}/usr/share/icons/hicolor/512x512/apps/Flow.png \ + $out/share/icons/hicolor/512x512/apps/flow-browser.png + + substituteInPlace $out/share/applications/flow-browser.desktop \ + --replace-fail 'Icon=Flow' 'Icon=flow-browser' + ''; + + meta = { + description = "A modern, privacy-focused browser with a minimalistic design (binary AppImage)"; + homepage = "https://github.com/multiboxlabs/flow-browser"; + license = lib.licenses.gpl3Only; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + platforms = [ "x86_64-linux" "aarch64-linux" ]; + mainProgram = "flow-browser-bin"; + }; +} + +