diff --git a/flake.nix b/flake.nix index 116b312..ad70f32 100644 --- a/flake.nix +++ b/flake.nix @@ -43,6 +43,7 @@ meshd = pkgs.callPackage ./packages/mesh/meshd.nix { }; meshd-linkd = pkgs.callPackage ./packages/mesh/meshd-linkd.nix { }; meshd-exitd = pkgs.callPackage ./packages/mesh/meshd-exitd.nix { }; + bearbrowser = pkgs.callPackage ./packages/browser/bearbrowser.nix { }; lampstand = pkgs.callPackage ./packages/search/lampstand.nix { inherit lampstand-src; }; diff --git a/packages/browser/bearbrowser.nix b/packages/browser/bearbrowser.nix new file mode 100644 index 0000000..515a39c --- /dev/null +++ b/packages/browser/bearbrowser.nix @@ -0,0 +1,120 @@ +# BearBrowser — SourceOS privacy / anti-fingerprinting browser. +# +# Packages the prebuilt Linux Gecko build (compiled with the BearBrowser engine +# anti-fingerprint patches: canvas text-metric quantization + audio farble in +# libxul) from the BearBrowser GitHub release. This is a prebuilt-binary wrapper +# (firefox-bin style) — autoPatchelf + the Gecko runtime libs + a desktop entry. +# +# NOTE: built from the v0.1.0-alpha "human-secure" Linux artifact. When a new +# release is cut, bump `version` + `src.url` + `src.hash`. +{ lib +, stdenv +, fetchurl +, autoPatchelfHook +, makeWrapper +, wrapGAppsHook3 +, gtk3 +, glib +, dbus-glib +, libXt +, alsa-lib +, libX11 +, libXcursor +, libXdamage +, libXrandr +, libXcomposite +, libXext +, libXfixes +, libXrender +, libXtst +, libXScrnSaver +, nspr +, nss +, pango +, atk +, cairo +, gdk-pixbuf +, freetype +, fontconfig +, libxcb +, mesa +, pciutils +, ffmpeg +, libnotify +, gnome2 ? null +}: + +stdenv.mkDerivation rec { + pname = "bearbrowser"; + version = "0.1.0-alpha"; + + src = fetchurl { + url = "https://github.com/SourceOS-Linux/BearBrowser/releases/download/v${version}/bearbrowser-${version}-linux-x86_64.tar.gz"; + hash = "sha256-K17S8uORD1RDL7OLPyU2LkxcXgo5fTBGIRJ+Nd/gNRA="; + }; + + nativeBuildInputs = [ autoPatchelfHook makeWrapper wrapGAppsHook3 ]; + + # Gecko runtime libraries (autoPatchelf resolves the binary's NEEDED libs here). + buildInputs = [ + stdenv.cc.cc # libstdc++ / libgcc_s + gtk3 glib dbus-glib libXt alsa-lib + libX11 libXcursor libXdamage libXrandr libXcomposite libXext libXfixes + libXrender libXtst libXScrnSaver + nspr nss pango atk cairo gdk-pixbuf freetype fontconfig libxcb mesa + pciutils ffmpeg libnotify + ]; + + # The release tarball is a dist/bin tree rooted at ./bin/. + sourceRoot = "."; + + dontConfigure = true; + dontBuild = true; + + installPhase = '' + runHook preInstall + + # Stage the Gecko dist under libexec, expose a wrapped launcher on PATH. + mkdir -p "$out/libexec/bearbrowser" "$out/bin" "$out/share/applications" "$out/share/pixmaps" + cp -r bin/* "$out/libexec/bearbrowser/" + + # The executable is named "bearbrowser" (--with-app-name=bearbrowser). + makeWrapper "$out/libexec/bearbrowser/bearbrowser" "$out/bin/bearbrowser" \ + --prefix LD_LIBRARY_PATH : "$out/libexec/bearbrowser" \ + --set MOZ_LEGACY_PROFILES 1 \ + --set MOZ_ALLOW_DOWNGRADE 1 + + # Icon (fall back silently if the dist layout differs). + if [ -f "$out/libexec/bearbrowser/browser/chrome/icons/default/default128.png" ]; then + cp "$out/libexec/bearbrowser/browser/chrome/icons/default/default128.png" \ + "$out/share/pixmaps/bearbrowser.png" || true + fi + + cat > "$out/share/applications/bearbrowser.desktop" <