Merge pull request #225322 from felschr/mullvad-browser

mullvad-browser: init at 12.0.4
This commit is contained in:
Sandro 2023-04-17 18:26:20 +02:00 committed by GitHub
commit 962237b672
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 233 additions and 0 deletions

View File

@ -0,0 +1,231 @@
{ lib
, stdenv
, fetchurl
, makeDesktopItem
, copyDesktopItems
, makeWrapper
, writeText
# Common run-time dependencies
, zlib
# libxul run-time dependencies
, atk
, cairo
, dbus
, dbus-glib
, fontconfig
, freetype
, gdk-pixbuf
, glib
, gtk3
, libxcb
, libX11
, libXext
, libXrender
, libXt
, libXtst
, mesa
, pango
, pciutils
, libnotifySupport ? stdenv.isLinux
, libnotify
, audioSupport ? mediaSupport
, pulseaudioSupport ? mediaSupport
, libpulseaudio
, apulse
, alsa-lib
# Media support (implies audio support)
, mediaSupport ? true
, ffmpeg
# Extra preferences
, extraPrefs ? ""
}:
let
libPath = lib.makeLibraryPath (
[
alsa-lib
atk
cairo
dbus
dbus-glib
fontconfig
freetype
gdk-pixbuf
glib
gtk3
libxcb
libX11
libXext
libXrender
libXt
libXtst
mesa # for libgbm
pango
pciutils
stdenv.cc.cc
stdenv.cc.libc
zlib
] ++ lib.optionals libnotifySupport [ libnotify ]
++ lib.optionals pulseaudioSupport [ libpulseaudio ]
++ lib.optionals mediaSupport [ ffmpeg ]
);
tag = "mullvad-browser-102.9.0esr-12.0-2-build1";
version = "12.0.4";
lang = "ALL";
srcs = {
x86_64-linux = fetchurl {
url = "https://github.com/mullvad/mullvad-browser/releases/download/${tag}/mullvad-browser-linux64-${version}_${lang}.tar.xz";
hash = "sha256-q4dTKNQkcqaRwiF25iVOQSvwVLA3tJRlQ4DzC3tuG5A=";
};
};
distributionIni = writeText "distribution.ini" (lib.generators.toINI {} {
# Some light branding indicating this build uses our distro preferences
Global = {
id = "nixos";
version = "1.0";
about = "Mullvad Browser for NixOS";
};
});
policiesJson = writeText "policies.json" (builtins.toJSON {
policies.DisableAppUpdate = true;
});
in
stdenv.mkDerivation rec {
pname = "mullvad-browser";
inherit version;
src = srcs.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
nativeBuildInputs = [ copyDesktopItems makeWrapper ];
preferLocalBuild = true;
allowSubstitutes = false;
desktopItems = [(makeDesktopItem {
name = "mullvadbrowser";
exec = "mullvad-browser %U";
icon = "mullvad-browser";
desktopName = "Mullvad Browser";
genericName = "Web Browser";
comment = meta.description;
categories = [ "Network" "WebBrowser" "Security" ];
})];
buildPhase = ''
runHook preBuild
# For convenience ...
MB_IN_STORE=$out/share/mullvad-browser
# Unpack & enter
mkdir -p "$MB_IN_STORE"
tar xf "$src" -C "$MB_IN_STORE" --strip-components=2
pushd "$MB_IN_STORE"
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" "mullvadbrowser.real"
# mullvadbrowser is a wrapper that checks for a more recent libstdc++ & appends it to the ld path
mv mullvadbrowser.real mullvadbrowser
# store state at `~/.mullvad` instead of relative to executable
touch "$MB_IN_STORE/system-install"
# Add bundled libraries to libPath.
libPath=${libPath}:$MB_IN_STORE
# apulse uses a non-standard library path. For now special-case it.
${lib.optionalString (audioSupport && !pulseaudioSupport) ''
libPath=${apulse}/lib/apulse:$libPath
''}
# Prepare for autoconfig.
#
# See https://developer.mozilla.org/en-US/Firefox/Enterprise_deployment
cat >defaults/pref/autoconfig.js <<EOF
//
pref("general.config.filename", "mozilla.cfg");
pref("general.config.obscure_value", 0);
EOF
# Hard-coded Firefox preferences.
cat >mozilla.cfg <<EOF
// First line must be a comment
// Reset pref that captures store paths.
clearPref("extensions.xpiState");
// Stop obnoxious first-run redirection.
lockPref("noscript.firstRunRedirection", false);
// Allow sandbox access to sound devices if using ALSA directly
${if (audioSupport && !pulseaudioSupport) then ''
pref("security.sandbox.content.write_path_whitelist", "/dev/snd/");
'' else ''
clearPref("security.sandbox.content.write_path_whitelist");
''}
${lib.optionalString (extraPrefs != "") ''
${extraPrefs}
''}
EOF
# FONTCONFIG_FILE is required to make fontconfig read the MB
# fonts.conf; upstream uses FONTCONFIG_PATH, but FC_DEBUG=1024
# indicates the system fonts.conf being used instead.
FONTCONFIG_FILE=$MB_IN_STORE/fontconfig/fonts.conf
sed -i "$FONTCONFIG_FILE" \
-e "s,<dir>fonts</dir>,<dir>$MB_IN_STORE/fonts</dir>,"
mkdir -p $out/bin
makeWrapper "$MB_IN_STORE/mullvadbrowser" "$out/bin/mullvad-browser" \
--prefix LD_LIBRARY_PATH : "$libPath" \
--set FONTCONFIG_FILE "$FONTCONFIG_FILE" \
--set-default MOZ_ENABLE_WAYLAND 1
# Easier access to docs
mkdir -p $out/share/doc
ln -s $MB_IN_STORE/Data/Docs $out/share/doc/mullvad-browser
# Install icons
for i in 16 32 48 64 128; do
mkdir -p $out/share/icons/hicolor/''${i}x''${i}/apps/
ln -s $out/share/mullvad-browser/browser/chrome/icons/default/default$i.png $out/share/icons/hicolor/''${i}x''${i}/apps/mullvad-browser.png
done
# Check installed apps
echo "Checking mullvad-browser wrapper ..."
$out/bin/mullvad-browser --version >/dev/null
runHook postBuild
'';
postInstall = ''
# Install distribution customizations
install -Dvm644 ${distributionIni} $out/share/mullvad-browser/distribution/distribution.ini
install -Dvm644 ${policiesJson} $out/share/mullvad-browser/distribution/policies.json
'';
meta = with lib; {
description = "Privacy-focused browser made in a collaboration between The Tor Project and Mullvad";
homepage = "https://www.mullvad.net/en/browser";
changelog = "https://github.com/mullvad/mullvad-browser/releases/tag/${tag}";
platforms = attrNames srcs;
maintainers = with maintainers; [ felschr ];
# MPL2.0+, GPL+, &c. While it's not entirely clear whether
# the compound is "libre" in a strict sense (some components place certain
# restrictions on redistribution), it's free enough for our purposes.
license = with licenses; [ mpl20 lgpl21Plus lgpl3Plus free ];
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
};
}

View File

@ -25247,6 +25247,8 @@ with pkgs;
mullvad-vpn = callPackage ../applications/networking/mullvad-vpn { };
mullvad-browser = callPackage ../applications/networking/browsers/mullvad-browser { };
mycorrhiza = callPackage ../servers/mycorrhiza { };
napalm = with python3Packages; toPythonApplication (