aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/networking/browsers')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/amfora/default.nix29
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/asuka/default.nix26
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/av-98/default.nix21
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/bombadillo/default.nix21
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/brave/default.nix164
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/browsh/default.nix61
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/browsh/deps.nix264
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/captive-browser/default.nix21
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/castor/default.nix50
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/README.md69
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/browser.nix86
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/common.nix316
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/default.nix210
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/no-build-timestamps.patch17
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/widevine-79.patch13
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/plugins.nix92
-rwxr-xr-xinfra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/update.py121
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/upstream-info.json46
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/dillo/default.nix32
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/elinks/default.nix61
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/eolie/default.nix82
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ephemeral/default.nix71
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/falkon/default.nix59
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/beta_sources.nix965
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/default.nix206
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix965
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/mozilla.ascbin0 -> 6109 bytes
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix965
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/update.nix93
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/common.nix392
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir.patch6
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/no-buildconfig-ffx76.patch24
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix66
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/update.nix35
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/wrapper.nix364
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/google-chrome/default.nix157
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/kristall/default.nix31
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/links2/default.nix40
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/luakit/default.nix68
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/lynx/default.nix50
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/midori/default.nix59
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer/default.nix147
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer/standalone.nix106
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/browser.nix83
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/buildsystem.nix24
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/default.nix36
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libcss.nix44
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libdom.nix43
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libhubbub.nix44
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsbmp.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsfb.nix32
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsgif.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnslog.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnspsl.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsutils.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libparserutils.nix29
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libsvgtiny.nix39
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libutf8proc.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libwapcaplet.nix31
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/nsgenbind.nix30
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/nyxt/default.nix57
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/opera/default.nix122
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/palemoon/default.nix159
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qtchan/default.nix31
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/default.nix122
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch19
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/surf/default.nix48
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix414
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle/extensions.nix111
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/browser.nix87
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/common.nix358
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/default.nix218
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/patches/no-build-timestamps.patch17
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/patches/widevine-79.patch13
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/plugins.nix92
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/ungoogled-src.nix6
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/ungoogled.nix42
-rwxr-xr-xinfra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/update.py105
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/upstream-info.json41
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vimb/default.nix34
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix96
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix32
-rwxr-xr-xinfra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update.sh46
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/widevine.nix33
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/RAND_egd.libressl.patch11
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/default.nix100
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/no-x11.patch14
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/webbrowser/default.nix108
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/webmacs/default.nix75
89 files changed, 9897 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/amfora/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/amfora/default.nix
new file mode 100644
index 000000000000..925cc1a4f912
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/amfora/default.nix
@@ -0,0 +1,29 @@
+{ lib, fetchFromGitHub, buildGoModule }:
+
+buildGoModule rec {
+ pname = "amfora";
+ version = "1.6.0";
+
+ src = fetchFromGitHub {
+ owner = "makeworld-the-better-one";
+ repo = "amfora";
+ rev = "v${version}";
+ sha256 = "1f5r12hmdgj26p4ss5pcpfcvqlcn19fr9xvvvk2izckcr48p4fy7";
+ };
+
+ vendorSha256 = "0mkk7xxfxxp1w9890mkmag11mzxhy2zmh8v1macpyp1zmzgs21f8";
+
+ postInstall = ''
+ sed -i "s:amfora:$out/bin/amfora:" amfora.desktop
+ install -Dm644 amfora.desktop -t $out/share/applications
+ '';
+
+ doCheck = false;
+
+ meta = with lib; {
+ description = "A fancy terminal browser for the Gemini protocol";
+ homepage = "https://github.com/makeworld-the-better-one/amfora";
+ license = with licenses; [ gpl3 ];
+ maintainers = with maintainers; [ deifactor ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/asuka/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/asuka/default.nix
new file mode 100644
index 000000000000..89f4fda88a18
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/asuka/default.nix
@@ -0,0 +1,26 @@
+{ stdenv, rustPlatform, fetchurl, pkgconfig, ncurses, openssl, Security }:
+
+rustPlatform.buildRustPackage rec {
+ pname = "asuka";
+ version = "0.8.1";
+
+ src = fetchurl {
+ url = "https://git.sr.ht/~julienxx/${pname}/archive/${version}.tar.gz";
+ sha256 = "07i80qmdpwfdgwrk1gzs10wln91v23qjrsk0x134xf5mjnakxc06";
+ };
+
+ cargoSha256 = "0p0x4ch04kydg76bfal5zqzr9hvn5268wf3k2v9h7g8r4y8xqlhw";
+
+ nativeBuildInputs = [ pkgconfig ];
+
+ buildInputs = [ ncurses openssl ]
+ ++ stdenv.lib.optional stdenv.isDarwin Security;
+
+ meta = with stdenv.lib; {
+ description = "Gemini Project client written in Rust with NCurses";
+ homepage = "https://git.sr.ht/~julienxx/asuka";
+ license = licenses.mit;
+ platforms = platforms.unix;
+ maintainers = with maintainers; [ sikmir ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/av-98/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/av-98/default.nix
new file mode 100644
index 000000000000..2184c8d699a4
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/av-98/default.nix
@@ -0,0 +1,21 @@
+{ lib, python3Packages, fetchgit }:
+
+python3Packages.buildPythonApplication rec {
+ pname = "av-98";
+ version = "1.0.2dev";
+
+ src = fetchgit {
+ url = "https://tildegit.org/solderpunk/AV-98.git";
+ rev = "96cf8e13fe5714c8cdc754f51eef9f0293b8ca1f";
+ sha256 = "09iskh33hl5aaif763j1fmbz7yvf0yqsxycfd41scj7vbwdsbxl0";
+ };
+
+ propagatedBuildInputs = with python3Packages; [ ansiwrap cryptography ];
+
+ meta = with lib; {
+ homepage = "https://tildegit.org/solderpunk/AV-98";
+ description = "Experimental console client for the Gemini protocol";
+ license = licenses.bsd2;
+ maintainers = with maintainers; [ ehmry ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/bombadillo/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/bombadillo/default.nix
new file mode 100644
index 000000000000..c24f91c4e103
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/bombadillo/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchgit, buildGoModule }:
+
+buildGoModule rec {
+ pname = "bombadillo";
+ version = "2.3.3";
+
+ src = fetchgit {
+ url = "https://tildegit.org/sloum/bombadillo.git";
+ rev = version;
+ sha256 = "02w6h44sxzmk3bkdidl8xla0i9rwwpdqljnvcbydx5kyixycmg0q";
+ };
+
+ vendorSha256 = "0sjjj9z1dhilhpc8pq4154czrb79z9cm044jvn75kxcjv6v5l2m5";
+
+ meta = with lib; {
+ description = "Non-web client for the terminal, supporting Gopher, Gemini and more";
+ homepage = "https://bombadillo.colorfield.space/";
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ ehmry ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/brave/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/brave/default.nix
new file mode 100644
index 000000000000..d76dd8b9daa7
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/brave/default.nix
@@ -0,0 +1,164 @@
+{ stdenv, lib, fetchurl
+, dpkg
+, alsaLib
+, at-spi2-atk
+, at-spi2-core
+, atk
+, cairo
+, cups
+, dbus
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gnome2
+, gnome3
+, gsettings-desktop-schemas
+, gtk3
+, libpulseaudio
+, libuuid
+, libdrm
+, libX11
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libxkbcommon
+, libXrandr
+, libXrender
+, libXScrnSaver
+, libXtst
+, mesa
+, nspr
+, nss
+, pango
+, udev
+, xorg
+, zlib
+, xdg_utils
+, wrapGAppsHook
+}:
+
+let
+
+rpath = lib.makeLibraryPath [
+ alsaLib
+ at-spi2-atk
+ at-spi2-core
+ atk
+ cairo
+ cups
+ dbus
+ expat
+ fontconfig
+ freetype
+ gdk-pixbuf
+ glib
+ gnome2.GConf
+ gtk3
+ libdrm
+ libpulseaudio
+ libX11
+ libxkbcommon
+ libXScrnSaver
+ libXcomposite
+ libXcursor
+ libXdamage
+ libXext
+ libXfixes
+ libXi
+ libxkbcommon
+ libXrandr
+ libXrender
+ libXtst
+ libuuid
+ mesa
+ nspr
+ nss
+ pango
+ udev
+ xdg_utils
+ xorg.libxcb
+ zlib
+];
+
+in
+
+stdenv.mkDerivation rec {
+ pname = "brave";
+ version = "1.17.73";
+
+ src = fetchurl {
+ url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb";
+ sha256 = "18bd6kgzfza5r0y2ggfy82pdpnfr2hzgjcfy9vxqq658z7q3jpqy";
+ };
+
+ dontConfigure = true;
+ dontBuild = true;
+ dontPatchELF = true;
+
+ nativeBuildInputs = [ dpkg wrapGAppsHook ];
+
+ buildInputs = [ glib gsettings-desktop-schemas gnome3.adwaita-icon-theme ];
+
+ unpackPhase = "dpkg-deb --fsys-tarfile $src | tar -x --no-same-permissions --no-same-owner";
+
+ installPhase = ''
+ mkdir -p $out $out/bin
+
+ cp -R usr/share $out
+ cp -R opt/ $out/opt
+
+ export BINARYWRAPPER=$out/opt/brave.com/brave/brave-browser
+
+ # Fix path to bash in $BINARYWRAPPER
+ substituteInPlace $BINARYWRAPPER \
+ --replace /bin/bash ${stdenv.shell}
+
+ ln -sf $BINARYWRAPPER $out/bin/brave
+
+ patchelf \
+ --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+ --set-rpath "${rpath}" $out/opt/brave.com/brave/brave
+
+ # Fix paths
+ substituteInPlace $out/share/applications/brave-browser.desktop \
+ --replace /usr/bin/brave-browser-stable $out/bin/brave
+ substituteInPlace $out/share/gnome-control-center/default-apps/brave-browser.xml \
+ --replace /opt/brave.com $out/opt/brave.com
+ substituteInPlace $out/share/menu/brave-browser.menu \
+ --replace /opt/brave.com $out/opt/brave.com
+ substituteInPlace $out/opt/brave.com/brave/default-app-block \
+ --replace /opt/brave.com $out/opt/brave.com
+
+ # Correct icons location
+ icon_sizes=("16" "22" "24" "32" "48" "64" "128" "256")
+
+ for icon in ''${icon_sizes[*]}
+ do
+ mkdir -p $out/share/icons/hicolor/$icon\x$icon/apps
+ ln -s $out/opt/brave.com/brave/product_logo_$icon.png $out/share/icons/hicolor/$icon\x$icon/apps/brave-browser.png
+ done
+
+ # Replace xdg-settings and xdg-mime
+ ln -sf ${xdg_utils}/bin/xdg-settings $out/opt/brave.com/brave/xdg-settings
+ ln -sf ${xdg_utils}/bin/xdg-mime $out/opt/brave.com/brave/xdg-mime
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = "https://brave.com/";
+ description = "Privacy-oriented browser for Desktop and Laptop computers";
+ changelog = "https://github.com/brave/brave-browser/blob/v${version}/CHANGELOG.md";
+ longDescription = ''
+ Brave browser blocks the ads and trackers that slow you down,
+ chew up your bandwidth, and invade your privacy. Brave lets you
+ contribute to your favorite creators automatically.
+ '';
+ license = licenses.mpl20;
+ maintainers = with maintainers; [ uskudnik rht jefflabonte nasirhm ];
+ platforms = [ "x86_64-linux" ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/browsh/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/browsh/default.nix
new file mode 100644
index 000000000000..3662c3badd3e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/browsh/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, buildGoPackage, fetchurl, fetchFromGitHub, go-bindata }:
+
+let
+ version = "1.6.4";
+
+ # TODO: must build the extension instead of downloading it. But since it's
+ # literally an asset that is indifferent regardless of the platform, this
+ # might be just enough.
+ webext = fetchurl {
+ url = "https://github.com/browsh-org/browsh/releases/download/v${version}/browsh-${version}-an.fx.xpi";
+ sha256 = "1shf1s9s525wns5vrsc4ns21zjxm1si43lx6v0q8ma6vd5x5445l";
+ };
+
+in buildGoPackage rec {
+ inherit version;
+
+ pname = "browsh";
+
+ goPackagePath = "browsh";
+
+ # further go package dependencies are defined in deps.nix, see line below.
+ src = fetchFromGitHub {
+ owner = "browsh-org";
+ repo = "browsh";
+ rev = "v${version}";
+ sha256 = "0gvf5k1gm81xxg7ha309kgfkgl5357dli0fbc4z01rmfgbl0rfa0";
+ };
+
+ nativeBuildInputs = [ go-bindata ];
+
+ # embed the web extension in a go file and place it where it's supposed to
+ # be. See
+ # https://github.com/browsh-org/browsh/blob/v1.5.0/interfacer/contrib/xpi2bin.sh
+ preBuild = ''
+ xpiprefix="$(mktemp -d)"
+ cp "${webext}" "$xpiprefix/browsh.xpi"
+ go-bindata \
+ -prefix "$xpiprefix" \
+ -pkg browsh \
+ -o "$NIX_BUILD_TOP/go/src/${goPackagePath}/interfacer/src/browsh/webextension.go" \
+ "$xpiprefix/browsh.xpi"
+
+ sed \
+ -e 's:Asset("/browsh.xpi"):Asset("browsh.xpi"):g' \
+ -i "$NIX_BUILD_TOP/go/src/${goPackagePath}/interfacer/src/browsh/firefox.go"
+ '';
+
+ postBuild = ''
+ mv "$NIX_BUILD_TOP/go/bin/src" "$NIX_BUILD_TOP/go/bin/browsh"
+ '';
+
+ goDeps = ./deps.nix;
+
+ meta = with stdenv.lib; {
+ description = "A fully-modern text-based browser, rendering to TTY and browsers";
+ homepage = "https://www.brow.sh/";
+ maintainers = [ maintainers.kalbasit ];
+ license = stdenv.lib.licenses.lgpl21;
+ platforms = stdenv.lib.platforms.linux ++ stdenv.lib.platforms.darwin;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/browsh/deps.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/browsh/deps.nix
new file mode 100644
index 000000000000..9a6a898beb5b
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/browsh/deps.nix
@@ -0,0 +1,264 @@
+# file generated from Gopkg.lock using dep2nix (https://github.com/nixcloud/dep2nix)
+[
+ {
+ goPackagePath = "github.com/NYTimes/gziphandler";
+ fetch = {
+ type = "git";
+ url = "https://github.com/NYTimes/gziphandler";
+ rev = "dd0439581c7657cb652dfe5c71d7d48baf39541d";
+ sha256 = "0rhrjlw220hnymzfccm0yir3pc9dpj7h3gwzhzq2cbsb3hhsqvyy";
+ };
+ }
+ {
+ goPackagePath = "github.com/fsnotify/fsnotify";
+ fetch = {
+ type = "git";
+ url = "https://github.com/fsnotify/fsnotify";
+ rev = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9";
+ sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
+ };
+ }
+ {
+ goPackagePath = "github.com/gdamore/encoding";
+ fetch = {
+ type = "git";
+ url = "https://github.com/gdamore/encoding";
+ rev = "6289cdc94c00ac4aa177771c5fce7af2f96b626d";
+ sha256 = "1vmm5zll92i2fm4ajqx0gyx0p9j36496x5nabi3y0x7h0inv0pk9";
+ };
+ }
+ {
+ goPackagePath = "github.com/gdamore/tcell";
+ fetch = {
+ type = "git";
+ url = "https://github.com/gdamore/tcell";
+ rev = "b5d0c1ac570211e469f43ff88c0c6aa4b56cc99a";
+ sha256 = "0g2zfbgyk3djlk0qpmrgcyy0ba9ad932yswpaacswi21qyf9gwag";
+ };
+ }
+ {
+ goPackagePath = "github.com/go-errors/errors";
+ fetch = {
+ type = "git";
+ url = "https://github.com/go-errors/errors";
+ rev = "a6af135bd4e28680facf08a3d206b454abc877a4";
+ sha256 = "0rznpknk19rxkr7li6dqs52c26pjazp69lh493l4ny4sxn5922lp";
+ };
+ }
+ {
+ goPackagePath = "github.com/gorilla/websocket";
+ fetch = {
+ type = "git";
+ url = "https://github.com/gorilla/websocket";
+ rev = "66b9c49e59c6c48f0ffce28c2d8b8a5678502c6d";
+ sha256 = "00i4vb31nsfkzzk7swvx3i75r2d960js3dri1875vypk3v2s0pzk";
+ };
+ }
+ {
+ goPackagePath = "github.com/hashicorp/hcl";
+ fetch = {
+ type = "git";
+ url = "https://github.com/hashicorp/hcl";
+ rev = "8cb6e5b959231cc1119e43259c4a608f9c51a241";
+ sha256 = "0q6ml0qqs0yil76mpn4mdx4lp94id8vbv575qm60jzl1ijcl5i66";
+ };
+ }
+ {
+ goPackagePath = "github.com/hpcloud/tail";
+ fetch = {
+ type = "git";
+ url = "https://github.com/hpcloud/tail";
+ rev = "a30252cb686a21eb2d0b98132633053ec2f7f1e5";
+ sha256 = "1njpzc0pi1acg5zx9y6vj9xi6ksbsc5d387rd6904hy6rh2m6kn0";
+ };
+ }
+ {
+ goPackagePath = "github.com/lucasb-eyer/go-colorful";
+ fetch = {
+ type = "git";
+ url = "https://github.com/lucasb-eyer/go-colorful";
+ rev = "30298f24079860c4dee452fdef6519b362a4a026";
+ sha256 = "0fig06880bvk1l92j4127v4x9sar4ds7ga8959gxxghb2w70b7l2";
+ };
+ }
+ {
+ goPackagePath = "github.com/magiconair/properties";
+ fetch = {
+ type = "git";
+ url = "https://github.com/magiconair/properties";
+ rev = "de8848e004dd33dc07a2947b3d76f618a7fc7ef1";
+ sha256 = "19zqw1x0w0crh8zc84yy82nkcc5yjz72gviaf2xjgfm5a8np7nyb";
+ };
+ }
+ {
+ goPackagePath = "github.com/mattn/go-runewidth";
+ fetch = {
+ type = "git";
+ url = "https://github.com/mattn/go-runewidth";
+ rev = "3ee7d812e62a0804a7d0a324e0249ca2db3476d3";
+ sha256 = "00b3ssm7wiqln3k54z2wcnxr3k3c7m1ybyhb9h8ixzbzspld0qzs";
+ };
+ }
+ {
+ goPackagePath = "github.com/mitchellh/mapstructure";
+ fetch = {
+ type = "git";
+ url = "https://github.com/mitchellh/mapstructure";
+ rev = "3536a929edddb9a5b34bd6861dc4a9647cb459fe";
+ sha256 = "03bpv28jz9zhn4947saqwi328ydj7f6g6pf1m2d4m5zdh5jlfkrr";
+ };
+ }
+ {
+ goPackagePath = "github.com/onsi/ginkgo";
+ fetch = {
+ type = "git";
+ url = "https://github.com/onsi/ginkgo";
+ rev = "eea6ad008b96acdaa524f5b409513bf062b500ad";
+ sha256 = "1326s5fxgasdpz1qqwrw4n5p3k0vz44msnyz14knrhlw5l97lx33";
+ };
+ }
+ {
+ goPackagePath = "github.com/onsi/gomega";
+ fetch = {
+ type = "git";
+ url = "https://github.com/onsi/gomega";
+ rev = "90e289841c1ed79b7a598a7cd9959750cb5e89e2";
+ sha256 = "1n7i4hksdgv410m43v2sw14bl5vy59dkp6nlw5l76nibbh37syr9";
+ };
+ }
+ {
+ goPackagePath = "github.com/pelletier/go-toml";
+ fetch = {
+ type = "git";
+ url = "https://github.com/pelletier/go-toml";
+ rev = "728039f679cbcd4f6a54e080d2219a4c4928c546";
+ sha256 = "1v76s3vds0i9dxaha4ikd6xjm7vqqfk6sy9l6jc2lsvmj99d5sy6";
+ };
+ }
+ {
+ goPackagePath = "github.com/pkg/errors";
+ fetch = {
+ type = "git";
+ url = "https://github.com/pkg/errors";
+ rev = "ba968bfe8b2f7e042a574c888954fccecfa385b4";
+ sha256 = "0g5qcb4d4fd96midz0zdk8b9kz8xkzwfa8kr1cliqbg8sxsy5vd1";
+ };
+ }
+ {
+ goPackagePath = "github.com/shibukawa/configdir";
+ fetch = {
+ type = "git";
+ url = "https://github.com/shibukawa/configdir";
+ rev = "e180dbdc8da04c4fa04272e875ce64949f38bd3e";
+ sha256 = "0vbma9jkwh0ifz8dk2ssgmy7aiaify63lpa0lah7i4dkkxr94c9z";
+ };
+ }
+ {
+ goPackagePath = "github.com/spf13/afero";
+ fetch = {
+ type = "git";
+ url = "https://github.com/spf13/afero";
+ rev = "588a75ec4f32903aa5e39a2619ba6a4631e28424";
+ sha256 = "0j9r65qgd58324m85lkl49vk9dgwd62g7dwvkfcm3k6i9dc555a9";
+ };
+ }
+ {
+ goPackagePath = "github.com/spf13/cast";
+ fetch = {
+ type = "git";
+ url = "https://github.com/spf13/cast";
+ rev = "8c9545af88b134710ab1cd196795e7f2388358d7";
+ sha256 = "0xq1ffqj8y8h7dcnm0m9lfrh0ga7pssnn2c1dnr09chqbpn4bdc5";
+ };
+ }
+ {
+ goPackagePath = "github.com/spf13/jwalterweatherman";
+ fetch = {
+ type = "git";
+ url = "https://github.com/spf13/jwalterweatherman";
+ rev = "94f6ae3ed3bceceafa716478c5fbf8d29ca601a1";
+ sha256 = "1ywmkwci5zyd88ijym6f30fj5c0k2yayxarkmnazf5ybljv50q7b";
+ };
+ }
+ {
+ goPackagePath = "github.com/spf13/pflag";
+ fetch = {
+ type = "git";
+ url = "https://github.com/spf13/pflag";
+ rev = "298182f68c66c05229eb03ac171abe6e309ee79a";
+ sha256 = "1cj3cjm7d3zk0mf1xdybh0jywkbbw7a6yr3y22x9sis31scprswd";
+ };
+ }
+ {
+ goPackagePath = "github.com/spf13/viper";
+ fetch = {
+ type = "git";
+ url = "https://github.com/spf13/viper";
+ rev = "b5bf975e5823809fb22c7644d008757f78a4259e";
+ sha256 = "1zpzxvn13wpvbblbbn73svaq39zgxfjqhci9d68g3qf309pcfy19";
+ };
+ }
+ {
+ goPackagePath = "github.com/ulule/limiter";
+ fetch = {
+ type = "git";
+ url = "https://github.com/ulule/limiter";
+ rev = "38b2a440be905c8be884fd5e114dc893a64e5d81";
+ sha256 = "0sbbfz9k3m2hf45cx7y7xshsr3rac495lks9ciwmnrzsnxfdh3l5";
+ };
+ }
+ {
+ goPackagePath = "golang.org/x/net";
+ fetch = {
+ type = "git";
+ url = "https://go.googlesource.com/net";
+ rev = "461777fb6f67e8cb9d70cda16573678d085a74cf";
+ sha256 = "0sc0llch05q6h7nqgayi3sgismsznpnlsz4gh89y4klpymdcpbh2";
+ };
+ }
+ {
+ goPackagePath = "golang.org/x/sys";
+ fetch = {
+ type = "git";
+ url = "https://go.googlesource.com/sys";
+ rev = "93c9922d18aeb82498a065f07aec7ad7fa60dfb7";
+ sha256 = "0hv96nwbv0li3nrv43ldfzmf12yrrbji2cf8n44iibv8ps5kfssx";
+ };
+ }
+ {
+ goPackagePath = "golang.org/x/text";
+ fetch = {
+ type = "git";
+ url = "https://go.googlesource.com/text";
+ rev = "342b2e1fbaa52c93f31447ad2c6abc048c63e475";
+ sha256 = "0flv9idw0jm5nm8lx25xqanbkqgfiym6619w575p7nrdh0riqwqh";
+ };
+ }
+ {
+ goPackagePath = "gopkg.in/fsnotify.v1";
+ fetch = {
+ type = "git";
+ url = "https://github.com/fsnotify/fsnotify";
+ rev = "c2828203cd70a50dcccfb2761f8b1f8ceef9a8e9";
+ sha256 = "07va9crci0ijlivbb7q57d2rz9h27zgn2fsm60spjsqpdbvyrx4g";
+ };
+ }
+ {
+ goPackagePath = "gopkg.in/tomb.v1";
+ fetch = {
+ type = "git";
+ url = "https://github.com/go-tomb/tomb";
+ rev = "dd632973f1e7218eb1089048e0798ec9ae7dceb8";
+ sha256 = "1lqmq1ag7s4b3gc3ddvr792c5xb5k6sfn0cchr3i2s7f1c231zjv";
+ };
+ }
+ {
+ goPackagePath = "gopkg.in/yaml.v2";
+ fetch = {
+ type = "git";
+ url = "https://github.com/go-yaml/yaml";
+ rev = "51d6538a90f86fe93ac480b35f37b2be17fef232";
+ sha256 = "01wj12jzsdqlnidpyjssmj0r4yavlqy7dwrg7adqd8dicjc4ncsa";
+ };
+ }
+] \ No newline at end of file
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/captive-browser/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/captive-browser/default.nix
new file mode 100644
index 000000000000..b302be4e013c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/captive-browser/default.nix
@@ -0,0 +1,21 @@
+{ lib, fetchFromGitHub, buildGoPackage }:
+
+buildGoPackage rec {
+ name = "captive-browser";
+ version = "2019-04-16";
+ goPackagePath = name;
+
+ src = fetchFromGitHub {
+ owner = "FiloSottile";
+ repo = "captive-browser";
+ rev = "08450562e58bf9564ee98ad64ef7b2800e53338f";
+ sha256 = "17icgjg7h0xm8g4yy38qjhsvlz9pmlmj9kydz01y2nyl0v02i648";
+ };
+
+ meta = with lib; {
+ description = "Dedicated Chrome instance to log into captive portals without messing with DNS settings";
+ homepage = "https://blog.filippo.io/captive-browser";
+ license = licenses.mit;
+ maintainers = with maintainers; [ volth ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/castor/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/castor/default.nix
new file mode 100644
index 000000000000..c9ad213cf1d1
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/castor/default.nix
@@ -0,0 +1,50 @@
+{ stdenv
+, fetchurl
+, rustPlatform
+, pkg-config
+, wrapGAppsHook
+, openssl
+, gtk3
+, gdk-pixbuf
+, pango
+, atk
+, cairo
+}:
+
+rustPlatform.buildRustPackage rec {
+ pname = "castor";
+ version = "0.8.16";
+
+ src = fetchurl {
+ url = "https://git.sr.ht/~julienxx/castor/archive/${version}.tar.gz";
+ sha256 = "1qwsprwazkzcs70h219fhh5jj5s5hm1k120fn3pk4qivii4lyhah";
+ };
+
+ cargoSha256 = "0yn2kfiaz6d8wc8rdqli2pwffp5vb1v3zi7520ysrd5b6fc2csf2";
+
+ nativeBuildInputs = [
+ pkg-config
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ openssl
+ gtk3
+ gdk-pixbuf
+ pango
+ atk
+ cairo
+ ];
+
+ postInstall = "make PREFIX=$out copy-data";
+
+ # Sometimes tests fail when run in parallel
+ cargoParallelTestThreads = false;
+
+ meta = with stdenv.lib; {
+ description = "A graphical client for plain-text protocols written in Rust with GTK. It currently supports the Gemini, Gopher and Finger protocols";
+ homepage = "https://sr.ht/~julienxx/Castor";
+ license = licenses.mit;
+ maintainers = with maintainers; [ fgaz ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/README.md b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/README.md
new file mode 100644
index 000000000000..8e4eae75f960
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/README.md
@@ -0,0 +1,69 @@
+# Maintainers
+
+- TODO: We need more maintainers:
+ - https://github.com/NixOS/nixpkgs/issues/78450
+ - If you just want to help out without becoming a maintainer:
+ - Look for open Nixpkgs issues or PRs related to Chromium
+ - Make your own PRs (but please try to make reviews as easy as possible)
+- Primary maintainer (responsible for updating Chromium): @primeos
+- Testers (test all stable channel updates)
+ - `nixos-unstable`:
+ - `x86_64`: @danielfullmer
+ - `aarch64`: @thefloweringash
+ - Stable channel:
+ - `x86_64`: @Frostman
+- Other relevant packages:
+ - `chromiumBeta` and `chromiumDev`: For testing purposes (not build on Hydra)
+ - `google-chrome`, `google-chrome-beta`, `google-chrome-dev`: Updated via
+ Chromium's `upstream-info.json`
+ - `ungoogled-chromium`: Based on `chromium` (the expressions are regularly
+ copied over and patched accordingly)
+
+# Upstream links
+
+- Source code: https://source.chromium.org/chromium/chromium/src
+- Bugs: https://bugs.chromium.org/p/chromium/issues/list
+- Release updates: https://chromereleases.googleblog.com/
+ - Available as Atom or RSS feed (filter for
+ "Stable Channel Update for Desktop")
+ - Channel overview: https://omahaproxy.appspot.com/
+ - Release schedule: https://chromiumdash.appspot.com/schedule
+
+# Updating Chromium
+
+Simply run `./pkgs/applications/networking/browsers/chromium/update.py` to
+update `upstream-info.json`. After updates it is important to test at least
+`nixosTests.chromium` (or basic manual testing) and `google-chrome` (which
+reuses `upstream-info.json`).
+
+After updating, please also update pkgs/development/tools/selenium/chromedriver/default.nix
+to a matching version.
+
+## Backports
+
+All updates are considered security critical and should be ported to the stable
+channel ASAP. When there is a new stable release the old one should receive
+security updates for roughly one month. After that it is important to mark
+Chromium as insecure (see 69e4ae56c4b for an example; it is important that the
+tested job still succeeds and that all browsers that use `upstream-info.json`
+are marked as insecure).
+
+## Major version updates
+
+Unfortunately, Chromium regularly breaks on major updates and might need
+various patches. Either due to issues with the Nix build sandbox (e.g. we cannot
+fetch dependencies via the network and do not use standard FHS paths) or due to
+missing upstream fixes that need to be backported.
+
+Good sources for such patches and other hints:
+- https://github.com/archlinux/svntogit-packages/tree/packages/chromium/trunk
+- https://gitweb.gentoo.org/repo/gentoo.git/tree/www-client/chromium
+- https://src.fedoraproject.org/rpms/chromium/tree/master
+
+If the build fails immediately due to unknown compiler flags this usually means
+that a new major release of LLVM is required.
+
+## Beta and Dev channels
+
+Those channels are only used to test and fix builds in advance. They may be
+broken at times and must not delay stable channel updates.
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/browser.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/browser.nix
new file mode 100644
index 000000000000..d3953da71d28
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/browser.nix
@@ -0,0 +1,86 @@
+{ stdenv, mkChromiumDerivation, channel, enableWideVine }:
+
+with stdenv.lib;
+
+mkChromiumDerivation (base: rec {
+ name = "chromium-browser";
+ packageName = "chromium";
+ buildTargets = [ "mksnapshot" "chrome_sandbox" "chrome" ];
+
+ outputs = ["out" "sandbox"];
+
+ sandboxExecutableName = "__chromium-suid-sandbox";
+
+ installPhase = ''
+ mkdir -p "$libExecPath"
+ cp -v "$buildPath/"*.so "$buildPath/"*.pak "$buildPath/"*.bin "$libExecPath/"
+ cp -v "$buildPath/icudtl.dat" "$libExecPath/"
+ cp -vLR "$buildPath/locales" "$buildPath/resources" "$libExecPath/"
+ cp -v "$buildPath/chrome" "$libExecPath/$packageName"
+
+ # Swiftshader
+ # See https://stackoverflow.com/a/4264351/263061 for the find invocation.
+ if [ -n "$(find "$buildPath/swiftshader/" -maxdepth 1 -name '*.so' -print -quit)" ]; then
+ echo "Swiftshader files found; installing"
+ mkdir -p "$libExecPath/swiftshader"
+ cp -v "$buildPath/swiftshader/"*.so "$libExecPath/swiftshader/"
+ else
+ echo "Swiftshader files not found"
+ fi
+
+ mkdir -p "$sandbox/bin"
+ cp -v "$buildPath/chrome_sandbox" "$sandbox/bin/${sandboxExecutableName}"
+
+ mkdir -vp "$out/share/man/man1"
+ cp -v "$buildPath/chrome.1" "$out/share/man/man1/$packageName.1"
+
+ for icon_file in chrome/app/theme/chromium/product_logo_*[0-9].png; do
+ num_and_suffix="''${icon_file##*logo_}"
+ icon_size="''${num_and_suffix%.*}"
+ expr "$icon_size" : "^[0-9][0-9]*$" || continue
+ logo_output_prefix="$out/share/icons/hicolor"
+ logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps"
+ mkdir -vp "$logo_output_path"
+ cp -v "$icon_file" "$logo_output_path/$packageName.png"
+ done
+
+ # Install Desktop Entry
+ install -D chrome/installer/linux/common/desktop.template \
+ $out/share/applications/chromium-browser.desktop
+
+ substituteInPlace $out/share/applications/chromium-browser.desktop \
+ --replace "@@MENUNAME@@" "Chromium" \
+ --replace "@@PACKAGE@@" "chromium" \
+ --replace "Exec=/usr/bin/@@USR_BIN_SYMLINK_NAME@@" "Exec=chromium"
+
+ # Append more mime types to the end
+ sed -i '/^MimeType=/ s,$,x-scheme-handler/webcal;x-scheme-handler/mailto;x-scheme-handler/about;x-scheme-handler/unknown,' \
+ $out/share/applications/chromium-browser.desktop
+
+ # See https://github.com/NixOS/nixpkgs/issues/12433
+ sed -i \
+ -e '/\[Desktop Entry\]/a\' \
+ -e 'StartupWMClass=chromium-browser' \
+ $out/share/applications/chromium-browser.desktop
+ '';
+
+ passthru = { inherit sandboxExecutableName; };
+
+ requiredSystemFeatures = [ "big-parallel" ];
+
+ meta = {
+ description = "An open source web browser from Google";
+ longDescription = ''
+ Chromium is an open source web browser from Google that aims to build a
+ safer, faster, and more stable way for all Internet users to experience
+ the web. It has a minimalist user interface and provides the vast majority
+ of source code for Google Chrome (which has some additional features).
+ '';
+ homepage = "https://www.chromium.org/";
+ maintainers = with maintainers; [ primeos thefloweringash bendlas ]; # See README.md
+ license = if enableWideVine then licenses.unfree else licenses.bsd3;
+ platforms = platforms.linux;
+ hydraPlatforms = if channel == "stable" then ["aarch64-linux" "x86_64-linux"] else [];
+ timeout = 172800; # 48 hours (increased from the Hydra default of 10h)
+ };
+})
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/common.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/common.nix
new file mode 100644
index 000000000000..0c16d0c9ec60
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/common.nix
@@ -0,0 +1,316 @@
+{ stdenv, lib, llvmPackages, gnChromium, ninja, which, nodejs, fetchpatch, fetchurl
+
+# default dependencies
+, gnutar, bzip2, flac, speex, libopus
+, libevent, expat, libjpeg, snappy
+, libpng, libcap
+, xdg_utils, yasm, nasm, minizip, libwebp
+, libusb1, pciutils, nss, re2
+
+, python2Packages, perl, pkgconfig
+, nspr, systemd, kerberos
+, util-linux, alsaLib
+, bison, gperf
+, glib, gtk3, dbus-glib
+, glibc
+, libXScrnSaver, libXcursor, libXtst, libGLU, libGL
+, protobuf, speechd, libXdamage, cups
+, ffmpeg, libxslt, libxml2, at-spi2-core
+, jre8
+, pipewire_0_2
+, libva
+
+# optional dependencies
+, libgcrypt ? null # gnomeSupport || cupsSupport
+, libdrm ? null, wayland ? null, mesa ? null, libxkbcommon ? null # useOzone
+
+# package customization
+, useOzone ? true
+, gnomeSupport ? false, gnome ? null
+, gnomeKeyringSupport ? false, libgnome-keyring3 ? null
+, proprietaryCodecs ? true
+, cupsSupport ? true
+, pulseSupport ? false, libpulseaudio ? null
+
+, channel
+, upstream-info
+}:
+
+buildFun:
+
+with stdenv.lib;
+
+let
+ jre = jre8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
+
+ # The additional attributes for creating derivations based on the chromium
+ # source tree.
+ extraAttrs = buildFun base;
+
+ githubPatch = commit: sha256: fetchpatch {
+ url = "https://github.com/chromium/chromium/commit/${commit}.patch";
+ inherit sha256;
+ };
+
+ mkGnFlags =
+ let
+ # Serialize Nix types into GN types according to this document:
+ # https://source.chromium.org/gn/gn/+/master:docs/language.md
+ mkGnString = value: "\"${escape ["\"" "$" "\\"] value}\"";
+ sanitize = value:
+ if value == true then "true"
+ else if value == false then "false"
+ else if isList value then "[${concatMapStringsSep ", " sanitize value}]"
+ else if isInt value then toString value
+ else if isString value then mkGnString value
+ else throw "Unsupported type for GN value `${value}'.";
+ toFlag = key: value: "${key}=${sanitize value}";
+ in attrs: concatStringsSep " " (attrValues (mapAttrs toFlag attrs));
+
+ # https://source.chromium.org/chromium/chromium/src/+/master:build/linux/unbundle/replace_gn_files.py
+ gnSystemLibraries = [
+ "ffmpeg"
+ "flac"
+ "libjpeg"
+ "libpng"
+ "libwebp"
+ "libxslt"
+ "opus"
+ "snappy"
+ "zlib"
+ ];
+
+ opusWithCustomModes = libopus.override {
+ withCustomModes = true;
+ };
+
+ defaultDependencies = [
+ bzip2 flac speex opusWithCustomModes
+ libevent expat libjpeg snappy
+ libpng libcap
+ xdg_utils minizip libwebp
+ libusb1 re2
+ ffmpeg libxslt libxml2
+ nasm
+ ];
+
+ # build paths and release info
+ packageName = extraAttrs.packageName or extraAttrs.name;
+ buildType = "Release";
+ buildPath = "out/${buildType}";
+ libExecPath = "$out/libexec/${packageName}";
+
+ versionRange = min-version: upto-version:
+ let inherit (upstream-info) version;
+ result = versionAtLeast version min-version && versionOlder version upto-version;
+ stable-version = (importJSON ./upstream-info.json).stable.version;
+ in if versionAtLeast stable-version upto-version
+ then warn "chromium: stable version ${stable-version} is newer than a patchset bounded at ${upto-version}. You can safely delete it."
+ result
+ else result;
+
+ base = rec {
+ name = "${packageName}-unwrapped-${version}";
+ inherit (upstream-info) version;
+ inherit channel packageName buildType buildPath;
+
+ src = fetchurl {
+ url = "https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${version}.tar.xz";
+ inherit (upstream-info) sha256;
+ };
+
+ nativeBuildInputs = [
+ llvmPackages.lldClang.bintools
+ ninja which python2Packages.python perl pkgconfig
+ python2Packages.ply python2Packages.jinja2 nodejs
+ gnutar python2Packages.setuptools
+ ];
+
+ buildInputs = defaultDependencies ++ [
+ nspr nss systemd
+ util-linux alsaLib
+ bison gperf kerberos
+ glib gtk3 dbus-glib
+ libXScrnSaver libXcursor libXtst libGLU libGL
+ pciutils protobuf speechd libXdamage at-spi2-core
+ jre
+ pipewire_0_2
+ libva
+ ] ++ optional gnomeKeyringSupport libgnome-keyring3
+ ++ optionals gnomeSupport [ gnome.GConf libgcrypt ]
+ ++ optionals cupsSupport [ libgcrypt cups ]
+ ++ optional pulseSupport libpulseaudio
+ ++ optionals useOzone [ libdrm wayland mesa.drivers libxkbcommon ];
+
+ patches = [
+ ./patches/no-build-timestamps.patch # Optional patch to use SOURCE_DATE_EPOCH in compute_build_timestamp.py (should be upstreamed)
+ ./patches/widevine-79.patch # For bundling Widevine (DRM), might be replaceable via bundle_widevine_cdm=true in gnFlags
+ # ++ optional (versionRange "68" "72") ( githubPatch "<patch>" "0000000000000000000000000000000000000000000000000000000000000000" )
+ ];
+
+ postPatch = ''
+ # remove unused third-party
+ for lib in ${toString gnSystemLibraries}; do
+ if [ -d "third_party/$lib" ]; then
+ find "third_party/$lib" -type f \
+ \! -path "third_party/$lib/chromium/*" \
+ \! -path "third_party/$lib/google/*" \
+ \! -path "third_party/harfbuzz-ng/utils/hb_scoped.h" \
+ \! -regex '.*\.\(gn\|gni\|isolate\)' \
+ -delete
+ fi
+ done
+
+ # Required for patchShebangs (unsupported interpreter directive, basename: invalid option -- '*', etc.):
+ substituteInPlace native_client/SConstruct --replace "#! -*- python -*-" ""
+ if [ -e third_party/harfbuzz-ng/src/src/update-unicode-tables.make ]; then
+ substituteInPlace third_party/harfbuzz-ng/src/src/update-unicode-tables.make \
+ --replace "/usr/bin/env -S make -f" "/usr/bin/make -f"
+ fi
+
+ # We want to be able to specify where the sandbox is via CHROME_DEVEL_SANDBOX
+ substituteInPlace sandbox/linux/suid/client/setuid_sandbox_host.cc \
+ --replace \
+ 'return sandbox_binary;' \
+ 'return base::FilePath(GetDevelSandboxPath());'
+
+ substituteInPlace services/audio/audio_sandbox_hook_linux.cc \
+ --replace \
+ '/usr/share/alsa/' \
+ '${alsaLib}/share/alsa/' \
+ --replace \
+ '/usr/lib/x86_64-linux-gnu/gconv/' \
+ '${glibc}/lib/gconv/' \
+ --replace \
+ '/usr/share/locale/' \
+ '${glibc}/share/locale/'
+
+ sed -i -e 's@"\(#!\)\?.*xdg-@"\1${xdg_utils}/bin/xdg-@' \
+ chrome/browser/shell_integration_linux.cc
+
+ sed -i -e '/lib_loader.*Load/s!"\(libudev\.so\)!"${lib.getLib systemd}/lib/\1!' \
+ device/udev_linux/udev?_loader.cc
+
+ sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \
+ gpu/config/gpu_info_collector_linux.cc
+
+ # Allow to put extensions into the system-path.
+ sed -i -e 's,/usr,/run/current-system/sw,' chrome/common/chrome_paths.cc
+
+ patchShebangs .
+ # use our own nodejs
+ mkdir -p third_party/node/linux/node-linux-x64/bin
+ ln -s "$(command -v node)" third_party/node/linux/node-linux-x64/bin/node
+
+ # Allow building against system libraries in official builds
+ sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' tools/generate_shim_headers/generate_shim_headers.py
+
+ '' + optionalString stdenv.isAarch64 ''
+ substituteInPlace build/toolchain/linux/BUILD.gn \
+ --replace 'toolprefix = "aarch64-linux-gnu-"' 'toolprefix = ""'
+ '';
+
+ gnFlags = mkGnFlags ({
+ custom_toolchain = "//build/toolchain/linux/unbundle:default";
+ host_toolchain = "//build/toolchain/linux/unbundle:default";
+ is_official_build = true;
+
+ use_vaapi = !stdenv.isAarch64; # TODO: Remove once M88 is released
+ use_sysroot = false;
+ use_gnome_keyring = gnomeKeyringSupport;
+ use_gio = gnomeSupport;
+ # ninja: error: '../../native_client/toolchain/linux_x86/pnacl_newlib/bin/x86_64-nacl-objcopy',
+ # needed by 'nacl_irt_x86_64.nexe', missing and no known rule to make it
+ enable_nacl = false;
+ # Enabling the Widevine component here doesn't affect whether we can
+ # redistribute the chromium package; the Widevine component is either
+ # added later in the wrapped -wv build or downloaded from Google.
+ enable_widevine = true;
+ use_cups = cupsSupport;
+ # Provides the enable-webrtc-pipewire-capturer flag to support Wayland screen capture.
+ rtc_use_pipewire = true;
+
+ treat_warnings_as_errors = false;
+ clang_use_chrome_plugins = false;
+ blink_symbol_level = 0;
+ symbol_level = 0;
+ fieldtrial_testing_like_official_build = true;
+
+ # Google API keys, see:
+ # http://www.chromium.org/developers/how-tos/api-keys
+ # Note: These are for NixOS/nixpkgs use ONLY. For your own distribution,
+ # please get your own set of keys.
+ google_api_key = "AIzaSyDGi15Zwl11UNe6Y-5XW_upsfyw31qwZPI";
+ google_default_client_id = "404761575300.apps.googleusercontent.com";
+ google_default_client_secret = "9rIFQjfnkykEmqb6FfjJQD1D";
+ } // optionalAttrs proprietaryCodecs {
+ # enable support for the H.264 codec
+ proprietary_codecs = true;
+ enable_hangout_services_extension = true;
+ ffmpeg_branding = "Chrome";
+ } // optionalAttrs pulseSupport {
+ use_pulseaudio = true;
+ link_pulseaudio = true;
+ } // optionalAttrs useOzone {
+ use_ozone = true;
+ use_xkbcommon = true;
+ use_glib = true;
+ use_gtk = true;
+ use_system_libwayland = true;
+ use_system_minigbm = true;
+ use_system_libdrm = true;
+ system_wayland_scanner_path = "${wayland}/bin/wayland-scanner";
+ } // (extraAttrs.gnFlags or {}));
+
+ configurePhase = ''
+ runHook preConfigure
+
+ # This is to ensure expansion of $out.
+ libExecPath="${libExecPath}"
+ python build/linux/unbundle/replace_gn_files.py --system-libraries ${toString gnSystemLibraries}
+ ${gnChromium}/bin/gn gen --args=${escapeShellArg gnFlags} out/Release | tee gn-gen-outputs.txt
+
+ # Fail if `gn gen` contains a WARNING.
+ grep -o WARNING gn-gen-outputs.txt && echo "Found gn WARNING, exiting nix build" && exit 1
+
+ runHook postConfigure
+ '';
+
+ # Don't spam warnings about unknown warning options. This is useful because
+ # our Clang is always older than Chromium's and the build logs have a size
+ # of approx. 25 MB without this option (and this saves e.g. 66 %).
+ NIX_CFLAGS_COMPILE = "-Wno-unknown-warning-option";
+
+ buildPhase = let
+ buildCommand = target: ''
+ ninja -C "${buildPath}" -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES "${target}"
+ (
+ source chrome/installer/linux/common/installer.include
+ PACKAGE=$packageName
+ MENUNAME="Chromium"
+ process_template chrome/app/resources/manpage.1.in "${buildPath}/chrome.1"
+ )
+ '';
+ targets = extraAttrs.buildTargets or [];
+ commands = map buildCommand targets;
+ in concatStringsSep "\n" commands;
+
+ postFixup = ''
+ # Make sure that libGLESv2 is found by dlopen (if using EGL).
+ chromiumBinary="$libExecPath/$packageName"
+ origRpath="$(patchelf --print-rpath "$chromiumBinary")"
+ patchelf --set-rpath "${libGL}/lib:$origRpath" "$chromiumBinary"
+ '';
+
+ passthru = {
+ updateScript = ./update.py;
+ chromiumDeps = {
+ gn = gnChromium;
+ };
+ };
+ };
+
+# Remove some extraAttrs we supplied to the base attributes already.
+in stdenv.mkDerivation (base // removeAttrs extraAttrs [
+ "name" "gnFlags" "buildTargets"
+] // { passthru = base.passthru // (extraAttrs.passthru or {}); })
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/default.nix
new file mode 100644
index 000000000000..e35e4d945dde
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/default.nix
@@ -0,0 +1,210 @@
+{ newScope, config, stdenv, fetchurl, makeWrapper
+, llvmPackages_11, ed, gnugrep, coreutils, xdg_utils
+, glib, gtk3, gnome3, gsettings-desktop-schemas, gn, fetchgit
+, libva ? null
+, pipewire_0_2
+, gcc, nspr, nss, runCommand
+, lib
+
+# package customization
+# Note: enable* flags should not require full rebuilds (i.e. only affect the wrapper)
+, channel ? "stable"
+, gnomeSupport ? false, gnome ? null
+, gnomeKeyringSupport ? false
+, proprietaryCodecs ? true
+, enablePepperFlash ? false
+, enableWideVine ? false
+, enableVaapi ? false # Disabled by default due to unofficial support
+, cupsSupport ? true
+, pulseSupport ? config.pulseaudio or stdenv.isLinux
+, commandLineArgs ? ""
+}:
+
+let
+ llvmPackages = llvmPackages_11;
+ stdenv = llvmPackages.stdenv;
+
+ callPackage = newScope chromium;
+
+ chromium = rec {
+ inherit stdenv llvmPackages;
+
+ upstream-info = (lib.importJSON ./upstream-info.json).${channel};
+
+ mkChromiumDerivation = callPackage ./common.nix ({
+ inherit channel gnome gnomeSupport gnomeKeyringSupport proprietaryCodecs
+ cupsSupport pulseSupport;
+ gnChromium = gn.overrideAttrs (oldAttrs: {
+ inherit (upstream-info.deps.gn) version;
+ src = fetchgit {
+ inherit (upstream-info.deps.gn) url rev sha256;
+ };
+ });
+ });
+
+ browser = callPackage ./browser.nix { inherit channel enableWideVine; };
+
+ plugins = callPackage ./plugins.nix {
+ inherit enablePepperFlash;
+ };
+ };
+
+ pkgSuffix = if channel == "dev" then "unstable" else channel;
+ pkgName = "google-chrome-${pkgSuffix}";
+ chromeSrc = fetchurl {
+ urls = map (repo: "${repo}/${pkgName}/${pkgName}_${version}-1_amd64.deb") [
+ "https://dl.google.com/linux/chrome/deb/pool/main/g"
+ "http://95.31.35.30/chrome/pool/main/g"
+ "http://mirror.pcbeta.com/google/chrome/deb/pool/main/g"
+ "http://repo.fdzh.org/chrome/deb/pool/main/g"
+ ];
+ sha256 = chromium.upstream-info.sha256bin64;
+ };
+
+ mkrpath = p: "${lib.makeSearchPathOutput "lib" "lib64" p}:${lib.makeLibraryPath p}";
+ widevineCdm = stdenv.mkDerivation {
+ name = "chrome-widevine-cdm";
+
+ src = chromeSrc;
+
+ phases = [ "unpackPhase" "patchPhase" "installPhase" "checkPhase" ];
+
+ unpackCmd = let
+ widevineCdmPath =
+ if channel == "stable" then
+ "./opt/google/chrome/WidevineCdm"
+ else if channel == "beta" then
+ "./opt/google/chrome-beta/WidevineCdm"
+ else if channel == "dev" then
+ "./opt/google/chrome-unstable/WidevineCdm"
+ else
+ throw "Unknown chromium channel.";
+ in ''
+ # Extract just WidevineCdm from upstream's .deb file
+ ar p "$src" data.tar.xz | tar xJ "${widevineCdmPath}"
+
+ # Move things around so that we don't have to reference a particular
+ # chrome-* directory later.
+ mv "${widevineCdmPath}" ./
+
+ # unpackCmd wants a single output directory; let it take WidevineCdm/
+ rm -rf opt
+ '';
+
+ doCheck = true;
+ checkPhase = ''
+ ! find -iname '*.so' -exec ldd {} + | grep 'not found'
+ '';
+
+ PATCH_RPATH = mkrpath [ gcc.cc glib nspr nss ];
+
+ patchPhase = ''
+ patchelf --set-rpath "$PATCH_RPATH" _platform_specific/linux_x64/libwidevinecdm.so
+ '';
+
+ installPhase = ''
+ mkdir -p $out/WidevineCdm
+ cp -a * $out/WidevineCdm/
+ '';
+
+ meta = {
+ platforms = [ "x86_64-linux" ];
+ license = lib.licenses.unfree;
+ };
+ };
+
+ suffix = if channel != "stable" then "-" + channel else "";
+
+ sandboxExecutableName = chromium.browser.passthru.sandboxExecutableName;
+
+ version = chromium.browser.version;
+
+ # We want users to be able to enableWideVine without rebuilding all of
+ # chromium, so we have a separate derivation here that copies chromium
+ # and adds the unfree WidevineCdm.
+ chromiumWV = let browser = chromium.browser; in if enableWideVine then
+ runCommand (browser.name + "-wv") { version = browser.version; }
+ ''
+ mkdir -p $out
+ cp -a ${browser}/* $out/
+ chmod u+w $out/libexec/chromium
+ cp -a ${widevineCdm}/WidevineCdm $out/libexec/chromium/
+ ''
+ else browser;
+
+in stdenv.mkDerivation {
+ name = "chromium${suffix}-${version}";
+ inherit version;
+
+ buildInputs = [
+ makeWrapper ed
+
+ # needed for GSETTINGS_SCHEMAS_PATH
+ gsettings-desktop-schemas glib gtk3
+
+ # needed for XDG_ICON_DIRS
+ gnome3.adwaita-icon-theme
+ ];
+
+ outputs = ["out" "sandbox"];
+
+ buildCommand = let
+ browserBinary = "${chromiumWV}/libexec/chromium/chromium";
+ getWrapperFlags = plugin: "$(< \"${plugin}/nix-support/wrapper-flags\")";
+ libPath = stdenv.lib.makeLibraryPath [ libva pipewire_0_2 ];
+
+ in with stdenv.lib; ''
+ mkdir -p "$out/bin"
+
+ eval makeWrapper "${browserBinary}" "$out/bin/chromium" \
+ --add-flags ${escapeShellArg (escapeShellArg commandLineArgs)} \
+ ${lib.optionalString enableVaapi "--add-flags --enable-accelerated-video-decode"} \
+ ${concatMapStringsSep " " getWrapperFlags chromium.plugins.enabled}
+
+ ed -v -s "$out/bin/chromium" << EOF
+ 2i
+
+ if [ -x "/run/wrappers/bin/${sandboxExecutableName}" ]
+ then
+ export CHROME_DEVEL_SANDBOX="/run/wrappers/bin/${sandboxExecutableName}"
+ else
+ export CHROME_DEVEL_SANDBOX="$sandbox/bin/${sandboxExecutableName}"
+ fi
+
+ '' + lib.optionalString (libPath != "") ''
+ # To avoid loading .so files from cwd, LD_LIBRARY_PATH here must not
+ # contain an empty section before or after a colon.
+ export LD_LIBRARY_PATH="\$LD_LIBRARY_PATH\''${LD_LIBRARY_PATH:+:}${libPath}"
+ '' + ''
+
+ # libredirect causes chromium to deadlock on startup
+ export LD_PRELOAD="\$(echo -n "\$LD_PRELOAD" | ${coreutils}/bin/tr ':' '\n' | ${gnugrep}/bin/grep -v /lib/libredirect\\\\.so$ | ${coreutils}/bin/tr '\n' ':')"
+
+ export XDG_DATA_DIRS=$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH\''${XDG_DATA_DIRS:+:}\$XDG_DATA_DIRS
+
+ # Mainly for xdg-open but also other xdg-* tools:
+ export PATH="${xdg_utils}/bin\''${PATH:+:}\$PATH"
+
+ .
+ w
+ EOF
+
+ ln -sv "${chromium.browser.sandbox}" "$sandbox"
+
+ ln -s "$out/bin/chromium" "$out/bin/chromium-browser"
+
+ mkdir -p "$out/share"
+ for f in '${chromium.browser}'/share/*; do # hello emacs */
+ ln -s -t "$out/share/" "$f"
+ done
+ '';
+
+ inherit (chromium.browser) packageName;
+ meta = chromium.browser.meta;
+ passthru = {
+ inherit (chromium) upstream-info browser;
+ mkDerivation = chromium.mkChromiumDerivation;
+ inherit chromeSrc sandboxExecutableName;
+ updateScript = ./update.py;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/no-build-timestamps.patch b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/no-build-timestamps.patch
new file mode 100644
index 000000000000..6b788f43d29c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/no-build-timestamps.patch
@@ -0,0 +1,17 @@
+--- chromium-70.0.3538.67/build/compute_build_timestamp.py.orig 2018-11-02 16:00:34.368933077 +0200
++++ chromium-70.0.3538.67/build/compute_build_timestamp.py 2018-11-08 04:06:21.658105129 +0200
+@@ -94,6 +94,14 @@
+ 'build_type', help='The type of build', choices=('official', 'default'))
+ args = argument_parser.parse_args()
+
++ # I don't trust LASTCHANGE magic, and I definelly want something deterministic here
++ SOURCE_DATE_EPOCH = os.getenv("SOURCE_DATE_EPOCH", None)
++ if SOURCE_DATE_EPOCH is not None:
++ print(SOURCE_DATE_EPOCH)
++ return 0
++ else:
++ raise RuntimeError("SOURCE_DATE_EPOCH not set")
++
+ # The mtime of the revision in build/util/LASTCHANGE is stored in a file
+ # next to it. Read it, to get a deterministic time close to "now".
+ # That date is then modified as described at the top of the file so that
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/widevine-79.patch b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/widevine-79.patch
new file mode 100644
index 000000000000..32f0ae2fb5e6
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/patches/widevine-79.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/widevine/cdm/BUILD.gn b/third_party/widevine/cdm/BUILD.gn
+index ed0e2f5208b..5b431a030d5 100644
+--- a/third_party/widevine/cdm/BUILD.gn
++++ b/third_party/widevine/cdm/BUILD.gn
+@@ -14,7 +14,7 @@ buildflag_header("buildflags") {
+
+ flags = [
+ "ENABLE_WIDEVINE=$enable_widevine",
+- "BUNDLE_WIDEVINE_CDM=$bundle_widevine_cdm",
++ "BUNDLE_WIDEVINE_CDM=true",
+ "ENABLE_WIDEVINE_CDM_COMPONENT=$enable_widevine_cdm_component",
+ ]
+ }
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/plugins.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/plugins.nix
new file mode 100644
index 000000000000..c725f87d3a27
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/plugins.nix
@@ -0,0 +1,92 @@
+{ stdenv, gcc
+, jshon
+, glib
+, nspr
+, nss
+, fetchzip
+, enablePepperFlash ? false
+
+, upstream-info
+}:
+
+with stdenv.lib;
+
+let
+ mkrpath = p: "${makeSearchPathOutput "lib" "lib64" p}:${makeLibraryPath p}";
+
+ # Generate a shell fragment that emits flags appended to the
+ # final makeWrapper call for wrapping the browser's main binary.
+ #
+ # Note that this is shell-escaped so that only the variable specified
+ # by the "output" attribute is substituted.
+ mkPluginInfo = { output ? "out", allowedVars ? [ output ]
+ , flags ? [], envVars ? {}
+ }: let
+ shSearch = ["'"] ++ map (var: "@${var}@") allowedVars;
+ shReplace = ["'\\''"] ++ map (var: "'\"\${${var}}\"'") allowedVars;
+ # We need to triple-escape "val":
+ # * First because makeWrapper doesn't do any quoting of its arguments by
+ # itself.
+ # * Second because it's passed to the makeWrapper call separated by IFS but
+ # not by the _real_ arguments, for example the Widevine plugin flags
+ # contain spaces, so they would end up as separate arguments.
+ # * Third in order to be correctly quoted for the "echo" call below.
+ shEsc = val: "'${replaceStrings ["'"] ["'\\''"] val}'";
+ mkSh = val: "'${replaceStrings shSearch shReplace (shEsc val)}'";
+ mkFlag = flag: ["--add-flags" (shEsc flag)];
+ mkEnvVar = key: val: ["--set" (shEsc key) (shEsc val)];
+ envList = mapAttrsToList mkEnvVar envVars;
+ quoted = map mkSh (flatten ((map mkFlag flags) ++ envList));
+ in ''
+ mkdir -p "''$${output}/nix-support"
+ echo ${toString quoted} > "''$${output}/nix-support/wrapper-flags"
+ '';
+
+ flash = stdenv.mkDerivation rec {
+ pname = "flashplayer-ppapi";
+ version = "32.0.0.445";
+
+ src = fetchzip {
+ url = "https://fpdownload.adobe.com/pub/flashplayer/pdc/${version}/flash_player_ppapi_linux.x86_64.tar.gz";
+ sha256 = "1r9vd210d2qp501q40pjx60mzah08rg0f8jk5rpp52ddajwggalv";
+ stripRoot = false;
+ };
+
+ patchPhase = ''
+ chmod +x libpepflashplayer.so
+ patchelf --set-rpath "${mkrpath [ gcc.cc ]}" libpepflashplayer.so
+ '';
+
+ doCheck = true;
+ checkPhase = ''
+ ! find -iname '*.so' -exec ldd {} + | grep 'not found'
+ '';
+
+ installPhase = ''
+ flashVersion="$(
+ "${jshon}/bin/jshon" -F manifest.json -e version -u
+ )"
+
+ install -vD libpepflashplayer.so "$out/lib/libpepflashplayer.so"
+
+ ${mkPluginInfo {
+ allowedVars = [ "out" "flashVersion" ];
+ flags = [
+ "--ppapi-flash-path=@out@/lib/libpepflashplayer.so"
+ "--ppapi-flash-version=@flashVersion@"
+ ];
+ }}
+ '';
+
+ dontStrip = true;
+
+ meta = {
+ license = stdenv.lib.licenses.unfree;
+ maintainers = with stdenv.lib.maintainers; [ taku0 ];
+ platforms = platforms.x86_64;
+ };
+ };
+
+in {
+ enabled = optional enablePepperFlash flash;
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/update.py b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/update.py
new file mode 100755
index 000000000000..9e1f0aec598d
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/update.py
@@ -0,0 +1,121 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i python -p python3 nix nix-prefetch-git
+
+import csv
+import json
+import re
+import subprocess
+import sys
+
+from codecs import iterdecode
+from collections import OrderedDict
+from datetime import datetime
+from os.path import abspath, dirname
+from urllib.request import urlopen
+
+HISTORY_URL = 'https://omahaproxy.appspot.com/history?os=linux'
+DEB_URL = 'https://dl.google.com/linux/chrome/deb/pool/main/g'
+BUCKET_URL = 'https://commondatastorage.googleapis.com/chromium-browser-official'
+
+JSON_PATH = dirname(abspath(__file__)) + '/upstream-info.json'
+
+def load_json(path):
+ with open(path, 'r') as f:
+ return json.load(f)
+
+def nix_prefetch_url(url, algo='sha256'):
+ print(f'nix-prefetch-url {url}')
+ out = subprocess.check_output(['nix-prefetch-url', '--type', algo, url])
+ return out.decode('utf-8').rstrip()
+
+def nix_prefetch_git(url, rev):
+ print(f'nix-prefetch-git {url} {rev}')
+ out = subprocess.check_output(['nix-prefetch-git', '--quiet', '--url', url, '--rev', rev])
+ return json.loads(out)
+
+def get_file_revision(revision, file_path):
+ url = f'https://raw.githubusercontent.com/chromium/chromium/{revision}/{file_path}'
+ with urlopen(url) as http_response:
+ return http_response.read()
+
+def get_matching_chromedriver(version):
+ # See https://chromedriver.chromium.org/downloads/version-selection
+ build = re.sub('.[0-9]+$', '', version)
+ chromedriver_version_url = f'https://chromedriver.storage.googleapis.com/LATEST_RELEASE_{build}'
+ with urlopen(chromedriver_version_url) as http_response:
+ chromedriver_version = http_response.read().decode()
+ def get_chromedriver_url(system):
+ return f'https://chromedriver.storage.googleapis.com/{chromedriver_version}/chromedriver_{system}.zip'
+ return {
+ 'version': chromedriver_version,
+ 'sha256_linux': nix_prefetch_url(get_chromedriver_url('linux64')),
+ 'sha256_darwin': nix_prefetch_url(get_chromedriver_url('mac64'))
+ }
+
+def get_channel_dependencies(channel):
+ deps = get_file_revision(channel['version'], 'DEPS')
+ gn_pattern = b"'gn_version': 'git_revision:([0-9a-f]{40})'"
+ gn_commit = re.search(gn_pattern, deps).group(1).decode()
+ gn = nix_prefetch_git('https://gn.googlesource.com/gn', gn_commit)
+ return {
+ 'gn': {
+ 'version': datetime.fromisoformat(gn['date']).date().isoformat(),
+ 'url': gn['url'],
+ 'rev': gn['rev'],
+ 'sha256': gn['sha256']
+ }
+ }
+
+channels = {}
+last_channels = load_json(JSON_PATH)
+
+print(f'GET {HISTORY_URL}', file=sys.stderr)
+with urlopen(HISTORY_URL) as resp:
+ builds = csv.DictReader(iterdecode(resp, 'utf-8'))
+ for build in builds:
+ channel_name = build['channel']
+
+ # If we've already found a newer build for this channel, we're
+ # no longer interested in it.
+ if channel_name in channels:
+ continue
+
+ # If we're back at the last build we used, we don't need to
+ # keep going -- there's no new version available, and we can
+ # just reuse the info from last time.
+ if build['version'] == last_channels[channel_name]['version']:
+ channels[channel_name] = last_channels[channel_name]
+ continue
+
+ channel = {'version': build['version']}
+ suffix = 'unstable' if channel_name == 'dev' else channel_name
+
+ try:
+ channel['sha256'] = nix_prefetch_url(f'{BUCKET_URL}/chromium-{build["version"]}.tar.xz')
+ channel['sha256bin64'] = nix_prefetch_url(f'{DEB_URL}/google-chrome-{suffix}/google-chrome-{suffix}_{build["version"]}-1_amd64.deb')
+ except subprocess.CalledProcessError:
+ # This build isn't actually available yet. Continue to
+ # the next one.
+ continue
+
+ channel['deps'] = get_channel_dependencies(channel)
+ if channel_name == 'stable':
+ channel['chromedriver'] = get_matching_chromedriver(channel['version'])
+
+ channels[channel_name] = channel
+
+with open(JSON_PATH, 'w') as out:
+ def get_channel_key(item):
+ channel_name = item[0]
+ if channel_name == 'stable':
+ return 0
+ elif channel_name == 'beta':
+ return 1
+ elif channel_name == 'dev':
+ return 2
+ else:
+ print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr)
+ sys.exit(1)
+ sorted_channels = OrderedDict(sorted(channels.items(), key=get_channel_key))
+ json.dump(sorted_channels, out, indent=2)
+ out.write('\n')
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/upstream-info.json b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/upstream-info.json
new file mode 100644
index 000000000000..6343dd4b2468
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/chromium/upstream-info.json
@@ -0,0 +1,46 @@
+{
+ "stable": {
+ "version": "87.0.4280.88",
+ "sha256": "1h09g9b2zxad85vd146ymvg3w2kpngpi78yig3dn1vrmhwr4aiiy",
+ "sha256bin64": "0n3fm6wf8zfkv135d50xl8xxrnng3q55vyxkck1da8jyvh18bijb",
+ "deps": {
+ "gn": {
+ "version": "2020-09-09",
+ "url": "https://gn.googlesource.com/gn",
+ "rev": "e002e68a48d1c82648eadde2f6aafa20d08c36f2",
+ "sha256": "0x4c7amxwzxs39grqs3dnnz0531mpf1p75niq7zhinyfqm86i4dk"
+ }
+ },
+ "chromedriver": {
+ "version": "87.0.4280.88",
+ "sha256_linux": "141mr2jiy3nslwd3s43m4i6plkv9wv5fgi78cn7mz0ac9x6fpcgx",
+ "sha256_darwin": "048hsqp6575r980m769lzznvxypmfcwn89f1d3ik751ymzmb5r78"
+ }
+ },
+ "beta": {
+ "version": "88.0.4324.27",
+ "sha256": "0mciiyh3sn2zrl8g6znylc2pm9sb0wzsclgavf7mmlknri5sjblc",
+ "sha256bin64": "0qf2j1j3p94s724rwh8fydpjn88cs9yxxhjf5axvqwi7q3h35cfx",
+ "deps": {
+ "gn": {
+ "version": "2020-11-05",
+ "url": "https://gn.googlesource.com/gn",
+ "rev": "53d92014bf94c3893886470a1c7c1289f8818db0",
+ "sha256": "1xcm07qjk6m2czi150fiqqxql067i832adck6zxrishm70c9jbr9"
+ }
+ }
+ },
+ "dev": {
+ "version": "89.0.4343.0",
+ "sha256": "0jmc1l0lysl5zax98fjhzsfq3c1sqh3n3xscidafflx362wcfpwa",
+ "sha256bin64": "1v6xik8kf531y0g5xj0c8szjmak0qvh77kwkw7p7hqxqmnwwp06d",
+ "deps": {
+ "gn": {
+ "version": "2020-11-05",
+ "url": "https://gn.googlesource.com/gn",
+ "rev": "53d92014bf94c3893886470a1c7c1289f8818db0",
+ "sha256": "1xcm07qjk6m2czi150fiqqxql067i832adck6zxrishm70c9jbr9"
+ }
+ }
+ }
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/dillo/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/dillo/default.nix
new file mode 100644
index 000000000000..fa1fa76340c3
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/dillo/default.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl
+, fltk
+, openssl
+, libjpeg, libpng
+, perl
+, libXcursor, libXi, libXinerama }:
+
+stdenv.mkDerivation rec {
+ version = "3.0.5";
+ pname = "dillo";
+
+ src = fetchurl {
+ url = "https://www.dillo.org/download/${pname}-${version}.tar.bz2";
+ sha256 = "12ql8n1lypv3k5zqgwjxlw1md90ixz3ag6j1gghfnhjq3inf26yv";
+ };
+
+ buildInputs = with stdenv.lib;
+ [ perl fltk openssl libjpeg libpng libXcursor libXi libXinerama ];
+
+ configureFlags = [ "--enable-ssl" ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.dillo.org/";
+ description = "A fast graphical web browser with a small footprint";
+ longDescription = ''
+ Dillo is a small, fast web browser, tailored for older machines.
+ '';
+ maintainers = [ maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ license = licenses.gpl3;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/elinks/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/elinks/default.nix
new file mode 100644
index 000000000000..79f3cb76a01a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/elinks/default.nix
@@ -0,0 +1,61 @@
+{ stdenv, fetchFromGitHub, fetchpatch, ncurses, xlibsWrapper, bzip2, zlib
+, brotli, zstd, lzma, openssl, autoreconfHook, gettext, pkgconfig, libev
+, gpm, libidn, tre, expat
+, # Incompatible licenses, LGPLv3 - GPLv2
+ enableGuile ? false, guile ? null
+, enablePython ? false, python ? null
+, enablePerl ? (stdenv.hostPlatform == stdenv.buildPlatform), perl ? null
+# re-add javascript support when upstream supports modern spidermonkey
+}:
+
+assert enableGuile -> guile != null;
+assert enablePython -> python != null;
+
+stdenv.mkDerivation rec {
+ pname = "elinks";
+ version = "0.13.5";
+
+ src = fetchFromGitHub {
+ owner = "rkd77";
+ repo = "felinks";
+ rev = "v${version}";
+ sha256 = "067l9m47j40039q8mvvnxd1amwrac3x6vv0c0svimfpvj4ammgkg";
+ };
+
+ buildInputs = [
+ ncurses xlibsWrapper bzip2 zlib brotli zstd lzma
+ openssl libidn tre expat libev
+ ]
+ ++ stdenv.lib.optional stdenv.isLinux gpm
+ ++ stdenv.lib.optional enableGuile guile
+ ++ stdenv.lib.optional enablePython python
+ ++ stdenv.lib.optional enablePerl perl
+ ;
+
+ nativeBuildInputs = [ autoreconfHook gettext pkgconfig ];
+
+ configureFlags = [
+ "--enable-finger"
+ "--enable-html-highlight"
+ "--enable-gopher"
+ "--enable-cgi"
+ "--enable-bittorrent"
+ "--enable-nntp"
+ "--enable-256-colors"
+ "--enable-true-color"
+ "--with-lzma"
+ "--with-libev"
+ "--with-terminfo"
+ ] ++ stdenv.lib.optional enableGuile "--with-guile"
+ ++ stdenv.lib.optional enablePython "--with-python"
+ ++ stdenv.lib.optional enablePerl "--with-perl"
+ ;
+
+ meta = with stdenv.lib; {
+ description = "Full-featured text-mode web browser (package based on the fork felinks)";
+ homepage = "https://github.com/rkd77/felinks";
+ license = licenses.gpl2;
+ platforms = with platforms; linux ++ darwin;
+ maintainers = with maintainers; [ iblech gebner ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/eolie/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/eolie/default.nix
new file mode 100644
index 000000000000..a16beb652089
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/eolie/default.nix
@@ -0,0 +1,82 @@
+{ stdenv, fetchgit, meson, ninja, pkgconfig, nix-update-script
+, python3, gtk3, libsecret, gst_all_1, webkitgtk, glib
+, glib-networking, gtkspell3, hunspell, desktop-file-utils
+, gobject-introspection, wrapGAppsHook, gnome3 }:
+
+python3.pkgs.buildPythonApplication rec {
+ pname = "eolie";
+ version = "0.9.99";
+
+ format = "other";
+ doCheck = false;
+
+ src = fetchgit {
+ url = "https://gitlab.gnome.org/World/eolie";
+ rev = "refs/tags/${version}";
+ fetchSubmodules = true;
+ sha256 = "077jww5mqg6bbqbj0j1gss2j3dxlfr2xw8bc43k8vg52drqg6g8w";
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gobject-introspection
+ meson
+ ninja
+ pkgconfig
+ wrapGAppsHook
+ ];
+
+ buildInputs = with gst_all_1; [
+ glib-networking
+ gobject-introspection
+ gst-libav
+ gst-plugins-base
+ gst-plugins-ugly
+ gstreamer
+ gnome3.gnome-settings-daemon
+ gtk3
+ gtkspell3
+ hunspell
+ libsecret
+ (webkitgtk.override {enableGLES = false;})
+ glib
+ ];
+
+ propagatedBuildInputs = with python3.pkgs; [
+ pyfxa
+ beautifulsoup4
+ cryptography
+ pycairo
+ pygobject3
+ python-dateutil
+ pycrypto
+ ];
+
+ postPatch = ''
+ chmod +x meson_post_install.py
+ patchShebangs meson_post_install.py
+ '';
+
+ dontWrapGApps = true;
+ preFixup = ''
+ buildPythonPath "$out $propagatedBuildInputs"
+ patchPythonScript "$out/libexec/eolie-sp"
+ makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
+ '';
+
+ passthru = {
+ updateScript = nix-update-script {
+ attrPath = pname;
+ };
+ };
+
+ strictDeps = false;
+
+ meta = with stdenv.lib; {
+ description = "A new GNOME web browser";
+ homepage = "https://wiki.gnome.org/Apps/Eolie";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ samdroid-apps worldofpeace ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ephemeral/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ephemeral/default.nix
new file mode 100644
index 000000000000..6d8aa3649a90
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ephemeral/default.nix
@@ -0,0 +1,71 @@
+{ stdenv
+, fetchFromGitHub
+, nix-update-script
+, desktop-file-utils
+, vala
+, gettext
+, glib
+, gtk3
+, libgee
+, libdazzle
+, meson
+, ninja
+, pantheon
+, pkgconfig
+, python3
+, webkitgtk
+, wrapGAppsHook
+, glib-networking
+}:
+
+stdenv.mkDerivation rec {
+ pname = "ephemeral";
+ version = "7.0.4";
+
+ src = fetchFromGitHub {
+ owner = "cassidyjames";
+ repo = "ephemeral";
+ rev = version;
+ sha256 = "18chvfdmka21zvjgqfpinm3nrj0ba09szxhhm39anpvpbj92ra8j";
+ };
+
+ nativeBuildInputs = [
+ desktop-file-utils
+ gettext
+ meson
+ ninja
+ vala
+ pkgconfig
+ python3
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ glib
+ glib-networking
+ gtk3
+ libdazzle
+ libgee
+ pantheon.granite
+ webkitgtk
+ ];
+
+ postPatch = ''
+ chmod +x meson/post_install.py
+ patchShebangs meson/post_install.py
+ '';
+
+ passthru = {
+ updateScript = nix-update-script {
+ attrPath = pname;
+ };
+ };
+
+ meta = with stdenv.lib; {
+ description = "The always-incognito web browser";
+ homepage = "https://github.com/cassidyjames/ephemeral";
+ maintainers = with maintainers; [ xiorcale ] ++ pantheon.maintainers;
+ platforms = platforms.linux;
+ license = licenses.gpl3;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/falkon/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/falkon/default.nix
new file mode 100644
index 000000000000..3c2aace79b26
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/falkon/default.nix
@@ -0,0 +1,59 @@
+{ stdenv, mkDerivation, lib, fetchFromGitHub, fetchpatch
+, cmake, extra-cmake-modules, pkgconfig, qmake
+, libpthreadstubs, libxcb, libXdmcp
+, qtsvg, qttools, qtwebengine, qtx11extras
+, qtwayland, wrapQtAppsHook
+, kwallet
+}:
+
+mkDerivation rec {
+ pname = "falkon";
+ version = "3.1.0";
+
+ src = fetchFromGitHub {
+ owner = "KDE";
+ repo = "falkon";
+ rev = "v${version}";
+ sha256 = "1w64slh9wpcfi4v7ds9wci1zvwh0dh787ndpi6hd4kmdgnswvsw7";
+ };
+
+ patches = [
+ # fixes build with qt5 5.14
+ (fetchpatch {
+ url = "https://github.com/KDE/falkon/commit/bbde5c6955c43bc744ed2c4024598495de908f2a.diff";
+ sha256 = "0f7qcddvvdnij3di0acg7jwvwfwyd0xizlav4wccclbj8x7qp5ld";
+ })
+ ];
+
+ preConfigure = ''
+ export NONBLOCK_JS_DIALOGS=true
+ export KDE_INTEGRATION=true
+ export GNOME_INTEGRATION=false
+ export FALKON_PREFIX=$out
+ '';
+
+ buildInputs = [
+ libpthreadstubs libxcb libXdmcp
+ qtsvg qttools qtwebengine qtx11extras
+ kwallet
+ ] ++ lib.optionals stdenv.isLinux [ qtwayland ];
+
+ nativeBuildInputs = [
+ cmake
+ extra-cmake-modules
+ pkgconfig
+ qmake
+ qttools
+ wrapQtAppsHook
+ ];
+
+ enableParallelBuilding = true;
+
+ meta = with stdenv.lib; {
+ description = "QtWebEngine based cross-platform web browser";
+ homepage = "https://community.kde.org/Incubator/Projects/Falkon";
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ peterhoeg ];
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/beta_sources.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/beta_sources.nix
new file mode 100644
index 000000000000..98cf28ec3e18
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/beta_sources.nix
@@ -0,0 +1,965 @@
+{
+ version = "84.0b4";
+ sources = [
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ach/firefox-84.0b4.tar.bz2";
+ locale = "ach";
+ arch = "linux-x86_64";
+ sha256 = "da9290899d245d86b3d2d378072af403106596ae1e02a36d40a93deea9e57000";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/af/firefox-84.0b4.tar.bz2";
+ locale = "af";
+ arch = "linux-x86_64";
+ sha256 = "28810946bde4c2335714c0f8b0dffad1a1650c167370e38c6eb5e2ee5d2e54be";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/an/firefox-84.0b4.tar.bz2";
+ locale = "an";
+ arch = "linux-x86_64";
+ sha256 = "d32e9e13b2c1f484686d9394f20a87e2c1d833703e0115de1f9c8c552d1e9d8a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ar/firefox-84.0b4.tar.bz2";
+ locale = "ar";
+ arch = "linux-x86_64";
+ sha256 = "de8348caf98ca0551f3f080eb32ef94c00706676bc8df1723377d98f10221e56";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ast/firefox-84.0b4.tar.bz2";
+ locale = "ast";
+ arch = "linux-x86_64";
+ sha256 = "104cc96b0e14c030848be4bc07a1b2b836a241e9ddba581b9ca24018c54356ee";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/az/firefox-84.0b4.tar.bz2";
+ locale = "az";
+ arch = "linux-x86_64";
+ sha256 = "e96087b52f1dc18c8bd29d486faa00ad06a2165d1e14cbd47e37cafb40602a87";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/be/firefox-84.0b4.tar.bz2";
+ locale = "be";
+ arch = "linux-x86_64";
+ sha256 = "d67c2c1556b6859e0acae5b69b3b7eeac77b3bb1594b48682a97a72742c79d05";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/bg/firefox-84.0b4.tar.bz2";
+ locale = "bg";
+ arch = "linux-x86_64";
+ sha256 = "b3bad1b330a5d4c515b37cddb3e89e538c5cd66ffce68dbf8d1e9adaf4881431";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/bn/firefox-84.0b4.tar.bz2";
+ locale = "bn";
+ arch = "linux-x86_64";
+ sha256 = "9c50c4e12061279133177ade4b22b7e2bb7e14dcc1875464f57efb7c7e360bf7";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/br/firefox-84.0b4.tar.bz2";
+ locale = "br";
+ arch = "linux-x86_64";
+ sha256 = "79eb76af707b26fa4d46acf11d0be25ccd144abda6c853373c9ec0cc872c2a8f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/bs/firefox-84.0b4.tar.bz2";
+ locale = "bs";
+ arch = "linux-x86_64";
+ sha256 = "2cbf15a604f90c4a6212f5da251372d09e2247f5ed338193ff93a94695bca308";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ca-valencia/firefox-84.0b4.tar.bz2";
+ locale = "ca-valencia";
+ arch = "linux-x86_64";
+ sha256 = "a9b6cacf6ee8a6a1f733f3ff3741c1bb12eff823664279205906e8e59b646679";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ca/firefox-84.0b4.tar.bz2";
+ locale = "ca";
+ arch = "linux-x86_64";
+ sha256 = "1ea49a5d59129c820f359fbad2253e051adbb260cedd4b62bb20122562466bfd";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/cak/firefox-84.0b4.tar.bz2";
+ locale = "cak";
+ arch = "linux-x86_64";
+ sha256 = "b18651df9ae2e16ea9855c30fa393dd34103cf338a515d41d3c1802e52fb92a1";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/cs/firefox-84.0b4.tar.bz2";
+ locale = "cs";
+ arch = "linux-x86_64";
+ sha256 = "4dca051e5349372d6caf5a7f6e8e6e12fe42bf96110a1c6e2f7f6e408f365b80";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/cy/firefox-84.0b4.tar.bz2";
+ locale = "cy";
+ arch = "linux-x86_64";
+ sha256 = "3117d47bcec1cf0f5a547a33c62ca5ecfee34435c13a478f23d1d9f0ac187f4f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/da/firefox-84.0b4.tar.bz2";
+ locale = "da";
+ arch = "linux-x86_64";
+ sha256 = "34a38c76997bdd41e6b12cebf08345e7cd19838bd92f5a8d082ba3087cb063c7";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/de/firefox-84.0b4.tar.bz2";
+ locale = "de";
+ arch = "linux-x86_64";
+ sha256 = "65e417603cf383d92058b8976c1f6499dc5804d02a22bb639e416c4e730b4a62";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/dsb/firefox-84.0b4.tar.bz2";
+ locale = "dsb";
+ arch = "linux-x86_64";
+ sha256 = "08dacb91773d7b49eb8f08668627badae2967193c441ff2fb6b9d88063c5ffb9";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/el/firefox-84.0b4.tar.bz2";
+ locale = "el";
+ arch = "linux-x86_64";
+ sha256 = "78e870b673c204e4d9fca2a3fbab06031c724a8b0696a3b6e2dea5ac07a5bb88";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/en-CA/firefox-84.0b4.tar.bz2";
+ locale = "en-CA";
+ arch = "linux-x86_64";
+ sha256 = "4c862eb5c53e65af1ddc212a093eb23e33653341fa7db53d935ed8482637aed8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/en-GB/firefox-84.0b4.tar.bz2";
+ locale = "en-GB";
+ arch = "linux-x86_64";
+ sha256 = "f505cf16328603d0164e330fcef60fcfeccdad186d1f91e0b4cee1b8cc7c740d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/en-US/firefox-84.0b4.tar.bz2";
+ locale = "en-US";
+ arch = "linux-x86_64";
+ sha256 = "f0561469f04ab83dd52ae4e3a8ca451d6569845e37d9e04c5a91085654661f8a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/eo/firefox-84.0b4.tar.bz2";
+ locale = "eo";
+ arch = "linux-x86_64";
+ sha256 = "c64d227d6b21876ea48182795d6fd8ec3ca486e5328629a0bbfb936e8463b0a8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/es-AR/firefox-84.0b4.tar.bz2";
+ locale = "es-AR";
+ arch = "linux-x86_64";
+ sha256 = "73b45f6b8d1e53bef003b3e77cc1217b8a85dde49cb0900b4fa2991895e5c184";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/es-CL/firefox-84.0b4.tar.bz2";
+ locale = "es-CL";
+ arch = "linux-x86_64";
+ sha256 = "e7025e4c5fc311aae2798da99ec5e5863bca5ad8b8460981cef86e29ae37d74a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/es-ES/firefox-84.0b4.tar.bz2";
+ locale = "es-ES";
+ arch = "linux-x86_64";
+ sha256 = "e819644eb6337255004fda8286e1f2ed898423c4b97694c8355c28f4d449da61";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/es-MX/firefox-84.0b4.tar.bz2";
+ locale = "es-MX";
+ arch = "linux-x86_64";
+ sha256 = "07de091ca3b06b94e35b84add7fbc5c8fa6ea84ddfe548e5f55b3bc7980a9bd3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/et/firefox-84.0b4.tar.bz2";
+ locale = "et";
+ arch = "linux-x86_64";
+ sha256 = "d6af9ab39f1a13efc772cbb63dd731dcf988c10f13649f348d7ddb3f6ab6ca60";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/eu/firefox-84.0b4.tar.bz2";
+ locale = "eu";
+ arch = "linux-x86_64";
+ sha256 = "110e667568429dd2b0c752962e1148884c44aaef9939926c6b0f49ba5bdb1182";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/fa/firefox-84.0b4.tar.bz2";
+ locale = "fa";
+ arch = "linux-x86_64";
+ sha256 = "f7a783f12bb08ccb06074f903bb2eaaab13b348c6a2950a9699beee28ad97b5e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ff/firefox-84.0b4.tar.bz2";
+ locale = "ff";
+ arch = "linux-x86_64";
+ sha256 = "b2e47bc8ae8d1e54a1b5799a87b4742d049696edd9913f0cc6beb52a89cc261d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/fi/firefox-84.0b4.tar.bz2";
+ locale = "fi";
+ arch = "linux-x86_64";
+ sha256 = "f5ee09f1b9d41506ad1023ad05dbdee95ac049eb4bfd38dd99c06cf682e111a8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/fr/firefox-84.0b4.tar.bz2";
+ locale = "fr";
+ arch = "linux-x86_64";
+ sha256 = "f8c33819a6ceab041bed80f1663d94a80ee3bdb6e859eab1eb8ec9d0b67f4222";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/fy-NL/firefox-84.0b4.tar.bz2";
+ locale = "fy-NL";
+ arch = "linux-x86_64";
+ sha256 = "6ed233042e570e9a04ecc1e25f6211deb7685c117db75f32a541076d95d1cebf";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ga-IE/firefox-84.0b4.tar.bz2";
+ locale = "ga-IE";
+ arch = "linux-x86_64";
+ sha256 = "b28337429a0c1d26653fda1d93b59ea0383061a253be5b763442166fdb21bbca";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/gd/firefox-84.0b4.tar.bz2";
+ locale = "gd";
+ arch = "linux-x86_64";
+ sha256 = "546bf2f1a4a8a643b161554bc92e771644ff9ae46c6b10fb2a60b920a2454f44";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/gl/firefox-84.0b4.tar.bz2";
+ locale = "gl";
+ arch = "linux-x86_64";
+ sha256 = "cfc32d3e7e3ba5379895a8b348d9399bd3962a819d0677f14a365f6e0c314676";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/gn/firefox-84.0b4.tar.bz2";
+ locale = "gn";
+ arch = "linux-x86_64";
+ sha256 = "b2b5e826540d3f9b52d67e092fa755b26a34ea9acd0cb1c69eb6f0bc332354d0";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/gu-IN/firefox-84.0b4.tar.bz2";
+ locale = "gu-IN";
+ arch = "linux-x86_64";
+ sha256 = "497b8a954ed2c9fa13e207462730dd39d2d0de10a38e3762dac3ef1fbd36282c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/he/firefox-84.0b4.tar.bz2";
+ locale = "he";
+ arch = "linux-x86_64";
+ sha256 = "8cdac2e9d2cf10171f2744727ddd80e21a4d46e2082947e49f4a255f174db968";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/hi-IN/firefox-84.0b4.tar.bz2";
+ locale = "hi-IN";
+ arch = "linux-x86_64";
+ sha256 = "d37c55e60329220de3d792894d7b801adf7dc7ab8ff4ab39bd2e24b59443b973";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/hr/firefox-84.0b4.tar.bz2";
+ locale = "hr";
+ arch = "linux-x86_64";
+ sha256 = "bebb6709dd3be119be45d9fdb0bac41b81514d78a384a221e2ffbb51b46dbea8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/hsb/firefox-84.0b4.tar.bz2";
+ locale = "hsb";
+ arch = "linux-x86_64";
+ sha256 = "c43aea7fdd8a57653d6d9af4aa7c0be6e860f5292366ddd91c5860dfde2ee1bf";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/hu/firefox-84.0b4.tar.bz2";
+ locale = "hu";
+ arch = "linux-x86_64";
+ sha256 = "71e6b509dd3a6937d9851c262fc7a1bc9e551cbe0515089586fc22098bc51151";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/hy-AM/firefox-84.0b4.tar.bz2";
+ locale = "hy-AM";
+ arch = "linux-x86_64";
+ sha256 = "c92eaf9f6bfa97651075d2342e45b988ae89c1a4cb55559dad71bfae5912ee83";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ia/firefox-84.0b4.tar.bz2";
+ locale = "ia";
+ arch = "linux-x86_64";
+ sha256 = "3c71aafb7dddcd3f9bcc8e169281614ac1087400d1d0ba02afb18c68b1914128";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/id/firefox-84.0b4.tar.bz2";
+ locale = "id";
+ arch = "linux-x86_64";
+ sha256 = "8075ef0b1d7eb2fc6141262cbb0d3831c3d8508eb43d3e9e142d96946ed2036d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/is/firefox-84.0b4.tar.bz2";
+ locale = "is";
+ arch = "linux-x86_64";
+ sha256 = "5ef96d77bea5c94e7147a5657d76eb5c7f206208a0464245242cca3fc7fb79f0";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/it/firefox-84.0b4.tar.bz2";
+ locale = "it";
+ arch = "linux-x86_64";
+ sha256 = "eb76a1f3bd1ac065772d4ea4a435c53b5f7b1d5b643c7b62b7ccfee205ea4e81";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ja/firefox-84.0b4.tar.bz2";
+ locale = "ja";
+ arch = "linux-x86_64";
+ sha256 = "80b644648b9e40ed592ab9ea2b9d7f1e2abcf8d6b0f925aa57cd6cf28d53dcf0";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ka/firefox-84.0b4.tar.bz2";
+ locale = "ka";
+ arch = "linux-x86_64";
+ sha256 = "03c34e7b08a8b6140e612739118c35b05dcdef1257b4857d2fda87a1cf8852ff";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/kab/firefox-84.0b4.tar.bz2";
+ locale = "kab";
+ arch = "linux-x86_64";
+ sha256 = "419a4758cf2e2e24968f4da384dbfb03ef8398713c6070ab29ce379772168f18";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/kk/firefox-84.0b4.tar.bz2";
+ locale = "kk";
+ arch = "linux-x86_64";
+ sha256 = "cfe96420e125dd12c9a9e79e45a8d7ee260d1957abddab5ed887afd1a1e3f499";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/km/firefox-84.0b4.tar.bz2";
+ locale = "km";
+ arch = "linux-x86_64";
+ sha256 = "4b3599a9b30132b6105e4bbda7de370e54e21d8e498bb3c4c3d9807282fbf246";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/kn/firefox-84.0b4.tar.bz2";
+ locale = "kn";
+ arch = "linux-x86_64";
+ sha256 = "5da3ddc9d9824e3ba59e1cdc89ee3fb8900c661faec1f539c829d0917be5d4d1";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ko/firefox-84.0b4.tar.bz2";
+ locale = "ko";
+ arch = "linux-x86_64";
+ sha256 = "2db9a494693091832e578959144d172d5135b82bbf44c041949da8ffec2de9dc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/lij/firefox-84.0b4.tar.bz2";
+ locale = "lij";
+ arch = "linux-x86_64";
+ sha256 = "2219d5235f0ed9d2015ead5782976727d2b7103afd987eb445f3f274856e6af6";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/lt/firefox-84.0b4.tar.bz2";
+ locale = "lt";
+ arch = "linux-x86_64";
+ sha256 = "a335e0d835bcc7ae9563bb3efe6b926ad71e08f3ccbd164aa2b9f257acd1341d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/lv/firefox-84.0b4.tar.bz2";
+ locale = "lv";
+ arch = "linux-x86_64";
+ sha256 = "1f89f8f2715254ef335af9b01ca1503caecb1c93b1a900ee1643c3f9e00c6821";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/mk/firefox-84.0b4.tar.bz2";
+ locale = "mk";
+ arch = "linux-x86_64";
+ sha256 = "86eb9f1e8189ce45c03925337a90f1b204dbdc902c1c4a817a924410a26b0048";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/mr/firefox-84.0b4.tar.bz2";
+ locale = "mr";
+ arch = "linux-x86_64";
+ sha256 = "d5214647403f85c5f7a95871e8d6fb4d4c448af92e6475841fd8474857f21067";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ms/firefox-84.0b4.tar.bz2";
+ locale = "ms";
+ arch = "linux-x86_64";
+ sha256 = "23af07562748448a35242a6cd77bce25a5576d2b71177fb682da58adb21671e3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/my/firefox-84.0b4.tar.bz2";
+ locale = "my";
+ arch = "linux-x86_64";
+ sha256 = "bfec2f3ad0853fb36ec4aac9ad97ba14d30a275eff2582c2e9df600b5940c004";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/nb-NO/firefox-84.0b4.tar.bz2";
+ locale = "nb-NO";
+ arch = "linux-x86_64";
+ sha256 = "32be6fe8aa661f6098b4600d824846738664f254ecd4ab0d0a1e705b28a94e74";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ne-NP/firefox-84.0b4.tar.bz2";
+ locale = "ne-NP";
+ arch = "linux-x86_64";
+ sha256 = "dfa3e6b9f31fa716a2c80fda07c24717a526ef96033b5b1861fcdad43c99b29e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/nl/firefox-84.0b4.tar.bz2";
+ locale = "nl";
+ arch = "linux-x86_64";
+ sha256 = "e253d963b66855c44f41c43baba1b5c952b37dd1b83aac8243c60581ca674a49";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/nn-NO/firefox-84.0b4.tar.bz2";
+ locale = "nn-NO";
+ arch = "linux-x86_64";
+ sha256 = "5d9b90cdee03a544a78f44d4f0566b5b59ae802af4fa60367a1a4836c01197f1";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/oc/firefox-84.0b4.tar.bz2";
+ locale = "oc";
+ arch = "linux-x86_64";
+ sha256 = "b37f9a283d9dd2ff9e8998d83e0c147bfbb75e4b64b3936cb344243e1277c370";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/pa-IN/firefox-84.0b4.tar.bz2";
+ locale = "pa-IN";
+ arch = "linux-x86_64";
+ sha256 = "68f6bae2e6f064e22503145b5fd57d027899f23fcf109010a98397dd8c0d7cf6";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/pl/firefox-84.0b4.tar.bz2";
+ locale = "pl";
+ arch = "linux-x86_64";
+ sha256 = "789d6925c3b17f96bb92eef54c05fc8787f32ce2c9846931e185dc5a1de9f303";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/pt-BR/firefox-84.0b4.tar.bz2";
+ locale = "pt-BR";
+ arch = "linux-x86_64";
+ sha256 = "329eecf74dc8d9d1d8f4578389553d92a368c972fcb2468e0b936f21508bd1bc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/pt-PT/firefox-84.0b4.tar.bz2";
+ locale = "pt-PT";
+ arch = "linux-x86_64";
+ sha256 = "b30ba75dbd5f5ff3ff709722acdf36acf4de9993d230eb27996e81406779dd0a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/rm/firefox-84.0b4.tar.bz2";
+ locale = "rm";
+ arch = "linux-x86_64";
+ sha256 = "ad90ce4fbcd094bebf77b36a63e38326c613bffb580743c9a4c19df845907dfb";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ro/firefox-84.0b4.tar.bz2";
+ locale = "ro";
+ arch = "linux-x86_64";
+ sha256 = "8f7864bc6577724f20829ad79901d92775200860dd8c43bb2443c7bf22d7a435";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ru/firefox-84.0b4.tar.bz2";
+ locale = "ru";
+ arch = "linux-x86_64";
+ sha256 = "8b52d5eaee53805422bb2fd6dd8b2e0c7a5b01feccbc6fb6c77e4fb8678d30a9";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/si/firefox-84.0b4.tar.bz2";
+ locale = "si";
+ arch = "linux-x86_64";
+ sha256 = "a71df756e97f58271715f3d79a86c0407487dd5820500127cbd9373361bd016f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/sk/firefox-84.0b4.tar.bz2";
+ locale = "sk";
+ arch = "linux-x86_64";
+ sha256 = "71eefff1538a2978d9e4e65fdd5a2322ad81ddfee33464c0d70b95eda1649fda";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/sl/firefox-84.0b4.tar.bz2";
+ locale = "sl";
+ arch = "linux-x86_64";
+ sha256 = "91b2938be8230b6301fe3d15c6d9ba3f031c1e5fca886da228f47a2e0a2cd144";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/son/firefox-84.0b4.tar.bz2";
+ locale = "son";
+ arch = "linux-x86_64";
+ sha256 = "57e456cd14418c41c2e5f8eb0ec6b0807459f41e15207f6997c7742fd3dc8a1a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/sq/firefox-84.0b4.tar.bz2";
+ locale = "sq";
+ arch = "linux-x86_64";
+ sha256 = "0f343e2442523f0e422309cc36518484a242db4116f0e6b7dcfe251cdfea76cf";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/sr/firefox-84.0b4.tar.bz2";
+ locale = "sr";
+ arch = "linux-x86_64";
+ sha256 = "cf8fb723611506fff356cabd91a0ca3fdd9cc5d806167df6dd385438d467eeff";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/sv-SE/firefox-84.0b4.tar.bz2";
+ locale = "sv-SE";
+ arch = "linux-x86_64";
+ sha256 = "258020bbc7a75139fee340e50d41676d234be19c931f0228485f06fcab2eef81";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ta/firefox-84.0b4.tar.bz2";
+ locale = "ta";
+ arch = "linux-x86_64";
+ sha256 = "7783166c0f9ceed0f7d037c1e92b988818a70522945af2c96db958966eed8b66";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/te/firefox-84.0b4.tar.bz2";
+ locale = "te";
+ arch = "linux-x86_64";
+ sha256 = "02662946b3506da6432c48eb1c7e0f522ffaed2abcfcc474332a799ef3be2b92";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/th/firefox-84.0b4.tar.bz2";
+ locale = "th";
+ arch = "linux-x86_64";
+ sha256 = "1592b372b8e767e5b7369f356fb733a2daf51b4f45c8c4c94041845d63b3c604";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/tl/firefox-84.0b4.tar.bz2";
+ locale = "tl";
+ arch = "linux-x86_64";
+ sha256 = "2b831feaae729c674e8a9ee207dea007df100bbbd8cf7553791aee3eede37224";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/tr/firefox-84.0b4.tar.bz2";
+ locale = "tr";
+ arch = "linux-x86_64";
+ sha256 = "aedf8b7684f204109e42a3797ba00bd7a8c5bd3f827c31ea3fd4eea1679d8af5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/trs/firefox-84.0b4.tar.bz2";
+ locale = "trs";
+ arch = "linux-x86_64";
+ sha256 = "232cae54f6120a47455fdd7e0d88dde1f64d5a1931bcd7d54f6bf8bd376583e8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/uk/firefox-84.0b4.tar.bz2";
+ locale = "uk";
+ arch = "linux-x86_64";
+ sha256 = "e00de7cbe1f00aa082f9a448857cc19f011bb1d5b579e79457bb0dfc72b7a12d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/ur/firefox-84.0b4.tar.bz2";
+ locale = "ur";
+ arch = "linux-x86_64";
+ sha256 = "7ece4d8af476eef174c0c175b65841da8d826702fb255587c2e1d259bb9ef3ba";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/uz/firefox-84.0b4.tar.bz2";
+ locale = "uz";
+ arch = "linux-x86_64";
+ sha256 = "09c7e7d641f703404aa7927860f2924e6be376b2e39b1f0fe012dc87469edb62";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/vi/firefox-84.0b4.tar.bz2";
+ locale = "vi";
+ arch = "linux-x86_64";
+ sha256 = "18121867e6b8c2a52c5324f653f82afbae97481b5ac3df811e881ec39bbb3b0e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/xh/firefox-84.0b4.tar.bz2";
+ locale = "xh";
+ arch = "linux-x86_64";
+ sha256 = "04f5bb96ef9002eeb0869236f70168e7cbd7842b8e12b66dd6d5d67db9acd28a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/zh-CN/firefox-84.0b4.tar.bz2";
+ locale = "zh-CN";
+ arch = "linux-x86_64";
+ sha256 = "142286cf9136bcb9b6af7ea1df3cf77821c0793ab7b9fe533a2963c453f45a7d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-x86_64/zh-TW/firefox-84.0b4.tar.bz2";
+ locale = "zh-TW";
+ arch = "linux-x86_64";
+ sha256 = "fef32e5817140bbcb6d1b614a72a29523235606192078eb04420ff7a2453cb9a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ach/firefox-84.0b4.tar.bz2";
+ locale = "ach";
+ arch = "linux-i686";
+ sha256 = "40e9b7a738e06cec731c69b659b14ca48b119ae20016e0214e1160edf03919b0";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/af/firefox-84.0b4.tar.bz2";
+ locale = "af";
+ arch = "linux-i686";
+ sha256 = "9bb05361a51f836b2de5614127f8df768e504f4d5bc136e3f169741098f0bcbd";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/an/firefox-84.0b4.tar.bz2";
+ locale = "an";
+ arch = "linux-i686";
+ sha256 = "ee62418444c76b709204962ed47af8ef3d61b80e628600201b5a12293651c70d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ar/firefox-84.0b4.tar.bz2";
+ locale = "ar";
+ arch = "linux-i686";
+ sha256 = "10b5d4f1616e078bf83ab5ff942dabe89a8eaca63f24e96b53726dfb2bc9e36b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ast/firefox-84.0b4.tar.bz2";
+ locale = "ast";
+ arch = "linux-i686";
+ sha256 = "a4e5ccae125edaa0696b696a5342320707f0c39c8985437b6aed60faede71de0";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/az/firefox-84.0b4.tar.bz2";
+ locale = "az";
+ arch = "linux-i686";
+ sha256 = "c13d9ed183c7b9256801708014f38405749cdfcead9f243e80eef78d06a9b78e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/be/firefox-84.0b4.tar.bz2";
+ locale = "be";
+ arch = "linux-i686";
+ sha256 = "57d8eafc3d45784dbad71eb49d5a4c0483d939719b43b0f16e4db1d5a96ff4a8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/bg/firefox-84.0b4.tar.bz2";
+ locale = "bg";
+ arch = "linux-i686";
+ sha256 = "0a65ad71cc9d97277535f07a8dbc7ca248508c24dea8520f92fecbb806f87a31";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/bn/firefox-84.0b4.tar.bz2";
+ locale = "bn";
+ arch = "linux-i686";
+ sha256 = "3cead08f4d746def6cfb909107f4739400498c970f10fbd542259c04b84b5852";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/br/firefox-84.0b4.tar.bz2";
+ locale = "br";
+ arch = "linux-i686";
+ sha256 = "40c6e963e8e52ef51cd4d4e63d501f2a6cecec1800541941458b896ad90e5b93";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/bs/firefox-84.0b4.tar.bz2";
+ locale = "bs";
+ arch = "linux-i686";
+ sha256 = "1e9df53642c442ead4318b0cc886653fdfcecf5275d6e7218acb390bb13e0021";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ca-valencia/firefox-84.0b4.tar.bz2";
+ locale = "ca-valencia";
+ arch = "linux-i686";
+ sha256 = "3b5699dad93291921979fc6da21d16f94ef471e9a8ef3d877001400ba4abe316";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ca/firefox-84.0b4.tar.bz2";
+ locale = "ca";
+ arch = "linux-i686";
+ sha256 = "c52b9cc25dc72eeb6ef3e7c3add4066c005399afdba2cd0964e695a891a1d314";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/cak/firefox-84.0b4.tar.bz2";
+ locale = "cak";
+ arch = "linux-i686";
+ sha256 = "355df19615fddd85c51b033a413a3de524f19fb2d97a2ba77f3b8001b231338f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/cs/firefox-84.0b4.tar.bz2";
+ locale = "cs";
+ arch = "linux-i686";
+ sha256 = "e10f35795f19ea10c4de34687eacad6f9bd863002e9d66b87cbace01b97c8628";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/cy/firefox-84.0b4.tar.bz2";
+ locale = "cy";
+ arch = "linux-i686";
+ sha256 = "f2fd90b19e8c4ac98bd6ee262084ef7842e52a304abe10cfcda2fc14ccb5ce30";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/da/firefox-84.0b4.tar.bz2";
+ locale = "da";
+ arch = "linux-i686";
+ sha256 = "01e468f3a445276aea85425b4b8a58e44a2e4cf8552a02aa3d4d31775bff9575";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/de/firefox-84.0b4.tar.bz2";
+ locale = "de";
+ arch = "linux-i686";
+ sha256 = "9dd3d806a4ff60c9cfd5b81cdf212f72c281f75ce554555cfd443f0696f700d5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/dsb/firefox-84.0b4.tar.bz2";
+ locale = "dsb";
+ arch = "linux-i686";
+ sha256 = "eb26cbad496bc1c4f97e6027a1f2cd9166d479a503a3f0ac566a766c86bdf8b5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/el/firefox-84.0b4.tar.bz2";
+ locale = "el";
+ arch = "linux-i686";
+ sha256 = "e173622f06f64156d749d0f56d98be72f067077c3e41090aa16a3b0c6d7a5e43";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/en-CA/firefox-84.0b4.tar.bz2";
+ locale = "en-CA";
+ arch = "linux-i686";
+ sha256 = "c1c6aa503e1565cb0c0239d562f11322265a7bce4005211b8007579f8f56c318";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/en-GB/firefox-84.0b4.tar.bz2";
+ locale = "en-GB";
+ arch = "linux-i686";
+ sha256 = "57b2670f515e2a17c10df602d93a6960e5c4710462098d89568efd446e4480e5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/en-US/firefox-84.0b4.tar.bz2";
+ locale = "en-US";
+ arch = "linux-i686";
+ sha256 = "81cf4a4fe610de3342bdea340d450ff67c594e7e4924a08b6b69de75510da698";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/eo/firefox-84.0b4.tar.bz2";
+ locale = "eo";
+ arch = "linux-i686";
+ sha256 = "dd61c4bacfe39f7887c6d21d139df6a2df17f263c4be5689f5f9dd6bb4ee6e63";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/es-AR/firefox-84.0b4.tar.bz2";
+ locale = "es-AR";
+ arch = "linux-i686";
+ sha256 = "3ae8695c57befa3552033bcb867b48f9ba491a08e31168ba22901fcb3276a3af";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/es-CL/firefox-84.0b4.tar.bz2";
+ locale = "es-CL";
+ arch = "linux-i686";
+ sha256 = "5ae14208cdbf0dd50edecb8a56bfe7dba0e7520f2ef135abb092761acc8630ae";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/es-ES/firefox-84.0b4.tar.bz2";
+ locale = "es-ES";
+ arch = "linux-i686";
+ sha256 = "d786cf3b623a05e5156b020a436897525e80117ab7fa9f25ca42fca9fb4c0eba";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/es-MX/firefox-84.0b4.tar.bz2";
+ locale = "es-MX";
+ arch = "linux-i686";
+ sha256 = "c2ec749bb5befffd81189503d87a57bda462897bba858904924ae999923a4e42";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/et/firefox-84.0b4.tar.bz2";
+ locale = "et";
+ arch = "linux-i686";
+ sha256 = "7a2e1078ff1a3bb975baa5488f89e8161e20354d7f55b98c964efa5bfce6f696";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/eu/firefox-84.0b4.tar.bz2";
+ locale = "eu";
+ arch = "linux-i686";
+ sha256 = "c635006a367f68bfabad7a3874f3333ac3f486f0001ca9641ac8ce12dd9bd01e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/fa/firefox-84.0b4.tar.bz2";
+ locale = "fa";
+ arch = "linux-i686";
+ sha256 = "f897a5d316c436fc20d8c2737902e29dfd0ece3c9ffdb90fda2fa454ad398257";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ff/firefox-84.0b4.tar.bz2";
+ locale = "ff";
+ arch = "linux-i686";
+ sha256 = "3a31d43cb5242a0aec516d8fe99dc916144e8b7250b81c7de0b1361b19f067fa";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/fi/firefox-84.0b4.tar.bz2";
+ locale = "fi";
+ arch = "linux-i686";
+ sha256 = "50261499bd4725f08684c9042056c9da2029f55b0dee4a856a9de661412c06e8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/fr/firefox-84.0b4.tar.bz2";
+ locale = "fr";
+ arch = "linux-i686";
+ sha256 = "7b793590a975a64b6fcfcccb4e6c07cd5346ec457af1ae31b5fb1032d4217c64";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/fy-NL/firefox-84.0b4.tar.bz2";
+ locale = "fy-NL";
+ arch = "linux-i686";
+ sha256 = "468c7463503a34de44a74ff6a751e8614abbe6bd23f39f50308f23000614331e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ga-IE/firefox-84.0b4.tar.bz2";
+ locale = "ga-IE";
+ arch = "linux-i686";
+ sha256 = "92b49316d122c8c91995766e28387d5587955e022f844c7a85fe491ca602e222";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/gd/firefox-84.0b4.tar.bz2";
+ locale = "gd";
+ arch = "linux-i686";
+ sha256 = "4bd2901b705f99bd1889b21f4af9ba7dd022f608960807f96f115a110c96a80a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/gl/firefox-84.0b4.tar.bz2";
+ locale = "gl";
+ arch = "linux-i686";
+ sha256 = "391d62de840d53d531130fef0018c71add0ef7134fbc758eb869da7c1cc3b5f3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/gn/firefox-84.0b4.tar.bz2";
+ locale = "gn";
+ arch = "linux-i686";
+ sha256 = "d51f75a7718e78bfb1e9d0974db0a404294e577e186794d3480778c7facce418";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/gu-IN/firefox-84.0b4.tar.bz2";
+ locale = "gu-IN";
+ arch = "linux-i686";
+ sha256 = "7cbbf4846153f79fc72e217872fd64b92ed8968aaf618eeededa375ac268a12e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/he/firefox-84.0b4.tar.bz2";
+ locale = "he";
+ arch = "linux-i686";
+ sha256 = "44c0bfad535a4e3c225d948d87935e08e5d77ea22638e971cc833877462edc32";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/hi-IN/firefox-84.0b4.tar.bz2";
+ locale = "hi-IN";
+ arch = "linux-i686";
+ sha256 = "fc64673429972967238b5bb101beb2117cfdb0360e405d4d3b53f013791c0b8c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/hr/firefox-84.0b4.tar.bz2";
+ locale = "hr";
+ arch = "linux-i686";
+ sha256 = "f256eb4e655a14b1a084af7f72ef4673d33b42d1c23ffc1ff3b4ede42d966246";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/hsb/firefox-84.0b4.tar.bz2";
+ locale = "hsb";
+ arch = "linux-i686";
+ sha256 = "9e1e478e501875ac259e22287aece77f1bbc1f898355ab1c29fa26543b38acbb";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/hu/firefox-84.0b4.tar.bz2";
+ locale = "hu";
+ arch = "linux-i686";
+ sha256 = "e8605e1b9d2c92c2eafa35cbe647bdda6af22eb030d8656262473b0b17650de9";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/hy-AM/firefox-84.0b4.tar.bz2";
+ locale = "hy-AM";
+ arch = "linux-i686";
+ sha256 = "be21fea69e27ce54498b6b003c1db20b42d7d52702ac56d1a1fc2c6fc24558f1";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ia/firefox-84.0b4.tar.bz2";
+ locale = "ia";
+ arch = "linux-i686";
+ sha256 = "039f50fc10d95bdef4468174a8486f45bbf9313e1b9b6cecb0d094bb3766ca9c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/id/firefox-84.0b4.tar.bz2";
+ locale = "id";
+ arch = "linux-i686";
+ sha256 = "ecd6f3e031529e1fed8fb7ae77bf6e0497c9ad0e4996e31a86c4b79489ba9811";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/is/firefox-84.0b4.tar.bz2";
+ locale = "is";
+ arch = "linux-i686";
+ sha256 = "1f6fbf55f1384141826a4b6a39ec617cc798b0c0a0e1ee02d6cd65a79d6784a9";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/it/firefox-84.0b4.tar.bz2";
+ locale = "it";
+ arch = "linux-i686";
+ sha256 = "73eebb1d351b5d746d3447c7a68d7a906c4db6df8cd257c6a048ea16cf908e64";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ja/firefox-84.0b4.tar.bz2";
+ locale = "ja";
+ arch = "linux-i686";
+ sha256 = "ff1c630c6c41cd31c8ecab5fc48e8879dbc4aa295492368cae93061de6558b64";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ka/firefox-84.0b4.tar.bz2";
+ locale = "ka";
+ arch = "linux-i686";
+ sha256 = "b6976def40cfd05543b70597347ea7c632c591660a2dd08332f81411a6ce6723";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/kab/firefox-84.0b4.tar.bz2";
+ locale = "kab";
+ arch = "linux-i686";
+ sha256 = "403bd985ff7ab44324d12c8c7f1386eec9fbae97ac9a0597d12d09d387686db4";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/kk/firefox-84.0b4.tar.bz2";
+ locale = "kk";
+ arch = "linux-i686";
+ sha256 = "3860b0e8d53655669afcb4bece7637e9a1c0daa66d453e9548b2336eb45d94ad";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/km/firefox-84.0b4.tar.bz2";
+ locale = "km";
+ arch = "linux-i686";
+ sha256 = "5753474371c7b8663d45f7f9591958afb9e9e2777df3e89840f6f34894ddf491";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/kn/firefox-84.0b4.tar.bz2";
+ locale = "kn";
+ arch = "linux-i686";
+ sha256 = "d0dbeceacf93c3a581cc581e09507e401636350b763c8c9f5342b33a0640bd8e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ko/firefox-84.0b4.tar.bz2";
+ locale = "ko";
+ arch = "linux-i686";
+ sha256 = "095930063eae8e3d6a78a6d9adb3d28cff0bb0c9ccdec977c8c80765a4c60560";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/lij/firefox-84.0b4.tar.bz2";
+ locale = "lij";
+ arch = "linux-i686";
+ sha256 = "587bced8e4480eba25e8597ab6b838a4f18553dd44b4f0ff48f245406f78e896";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/lt/firefox-84.0b4.tar.bz2";
+ locale = "lt";
+ arch = "linux-i686";
+ sha256 = "e214c23914e05152973428f5ed1df20054df054848d99ff23e5eb09e19b4557c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/lv/firefox-84.0b4.tar.bz2";
+ locale = "lv";
+ arch = "linux-i686";
+ sha256 = "67657d4abb394ef76d37c321625d99dcf228ee00cc109e6d1c80cb3659db9879";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/mk/firefox-84.0b4.tar.bz2";
+ locale = "mk";
+ arch = "linux-i686";
+ sha256 = "bac0e98b7a68dda441195cbebcdbea583f104188112449b14723c1086c3c4f19";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/mr/firefox-84.0b4.tar.bz2";
+ locale = "mr";
+ arch = "linux-i686";
+ sha256 = "125a63c875f4be6e246fa01289386295172d999e0e523c1171578adea24b022e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ms/firefox-84.0b4.tar.bz2";
+ locale = "ms";
+ arch = "linux-i686";
+ sha256 = "6dc44f34449c915e93bf9c012ce7286b16d6418ca8f576d8a008b7ceb90bcb13";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/my/firefox-84.0b4.tar.bz2";
+ locale = "my";
+ arch = "linux-i686";
+ sha256 = "af5e2f1f9dcca84f41d3701035a00fc6b581aee2bf00f9f926928b99ab42d06e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/nb-NO/firefox-84.0b4.tar.bz2";
+ locale = "nb-NO";
+ arch = "linux-i686";
+ sha256 = "d168631cc1518e17cc9cd85f481f1047f6ae7df593d9197de5710fca0d87965b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ne-NP/firefox-84.0b4.tar.bz2";
+ locale = "ne-NP";
+ arch = "linux-i686";
+ sha256 = "4b6065882ddd9e02441eff830808b31e6104d076cefed8386cff4ec7cb12330a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/nl/firefox-84.0b4.tar.bz2";
+ locale = "nl";
+ arch = "linux-i686";
+ sha256 = "96298283a2dbd9e3242c27551ee29829b21c8b9a32ca33b85da3142c47084dd5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/nn-NO/firefox-84.0b4.tar.bz2";
+ locale = "nn-NO";
+ arch = "linux-i686";
+ sha256 = "19475301d3d93a633a1555b4436d63546a71160a992daa760a8c76a808791b89";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/oc/firefox-84.0b4.tar.bz2";
+ locale = "oc";
+ arch = "linux-i686";
+ sha256 = "48af4af195173b541d76bb623acc357c3a2a8d03227406a21de89ab2d6c8c757";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/pa-IN/firefox-84.0b4.tar.bz2";
+ locale = "pa-IN";
+ arch = "linux-i686";
+ sha256 = "582ec12fbe2f8b07f8f4ae11ddf05c62db2d84508ee63ad6bfead9493a1424cc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/pl/firefox-84.0b4.tar.bz2";
+ locale = "pl";
+ arch = "linux-i686";
+ sha256 = "df8fcb5fe32325d45fbc1c9349065cd2d7f283e6a33d944282f3ed948c1174ee";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/pt-BR/firefox-84.0b4.tar.bz2";
+ locale = "pt-BR";
+ arch = "linux-i686";
+ sha256 = "fa48bc301c9b7dac4802b50980c573039648eb41bf0c0fb3ef75d0ba1dce9b67";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/pt-PT/firefox-84.0b4.tar.bz2";
+ locale = "pt-PT";
+ arch = "linux-i686";
+ sha256 = "b0075346738d9a5f61fe4c3265c3a50f639f017551d3bdb2479e622d9561bd33";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/rm/firefox-84.0b4.tar.bz2";
+ locale = "rm";
+ arch = "linux-i686";
+ sha256 = "c9ad20ff328c8c0693cab58fbfb1d6c1f85bb63fdd20eb8d371e82d4df5c2e50";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ro/firefox-84.0b4.tar.bz2";
+ locale = "ro";
+ arch = "linux-i686";
+ sha256 = "7816302b6f70c0e24b848d3d396876ee0d870d90561c37e440bb8b7722f54ff2";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ru/firefox-84.0b4.tar.bz2";
+ locale = "ru";
+ arch = "linux-i686";
+ sha256 = "8f4969a16f4e70b59dd2da78b73532ff39589c984512d16fcd7106d2cf503342";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/si/firefox-84.0b4.tar.bz2";
+ locale = "si";
+ arch = "linux-i686";
+ sha256 = "0dfc4c1c797366ac9e65489b07de756a1b03b5498c9e4a6a10ac0d3a60345471";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/sk/firefox-84.0b4.tar.bz2";
+ locale = "sk";
+ arch = "linux-i686";
+ sha256 = "5e16b451058d64ea0cb61fa92e17fd72e591009803170b0b220237cac7180167";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/sl/firefox-84.0b4.tar.bz2";
+ locale = "sl";
+ arch = "linux-i686";
+ sha256 = "36216a3b474d3fd1d27886495f92eca83d24a465690efe7356ca9e7e4c08163d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/son/firefox-84.0b4.tar.bz2";
+ locale = "son";
+ arch = "linux-i686";
+ sha256 = "1116bbb70b7ff8538d3ce4e7df190bd152c98889d1612fa8485cb0197a83868c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/sq/firefox-84.0b4.tar.bz2";
+ locale = "sq";
+ arch = "linux-i686";
+ sha256 = "006948f771f4964f5f4f078615cbb85aee23051e371ff7b871caee7c4659fe64";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/sr/firefox-84.0b4.tar.bz2";
+ locale = "sr";
+ arch = "linux-i686";
+ sha256 = "20b0b9d605603e525d046424d290e6b2a0c963c0eae2a9a6c6ccdb72a9803e9e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/sv-SE/firefox-84.0b4.tar.bz2";
+ locale = "sv-SE";
+ arch = "linux-i686";
+ sha256 = "a132b97019c75aa8929830f873974e1ab36b69ca7e3c9ab44dd2a5b11bbe4f7f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ta/firefox-84.0b4.tar.bz2";
+ locale = "ta";
+ arch = "linux-i686";
+ sha256 = "3f24d965ee5c89edd447e8a52a0241a5d1cedb0aae6ed1ad1c212ba4dbed210a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/te/firefox-84.0b4.tar.bz2";
+ locale = "te";
+ arch = "linux-i686";
+ sha256 = "2b65c7bb7df93b2bdffa687bd4309352f0d73ecdd66767db0db860f33f17c6a6";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/th/firefox-84.0b4.tar.bz2";
+ locale = "th";
+ arch = "linux-i686";
+ sha256 = "21e2dca4e194a38de97b9b717150441bdd32466ee43e721f41afde004bc8e3e2";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/tl/firefox-84.0b4.tar.bz2";
+ locale = "tl";
+ arch = "linux-i686";
+ sha256 = "9f4dc351f5244b0837a95d4afbfa0af373fe056e5eb106a2b177a57ba4c85ee7";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/tr/firefox-84.0b4.tar.bz2";
+ locale = "tr";
+ arch = "linux-i686";
+ sha256 = "50cabe6fea43e2212d0b0a9a5a382e085fdabc3ff6b6b0694b8f9d3d327c3ffc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/trs/firefox-84.0b4.tar.bz2";
+ locale = "trs";
+ arch = "linux-i686";
+ sha256 = "c4db90a9a0677430fa591cc387bf1255f260208a4907cb760649cd7a6db03808";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/uk/firefox-84.0b4.tar.bz2";
+ locale = "uk";
+ arch = "linux-i686";
+ sha256 = "7c92d619dd827a9f7ef9297f784cff582aba44684dca91c3b9873337b4318fb3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/ur/firefox-84.0b4.tar.bz2";
+ locale = "ur";
+ arch = "linux-i686";
+ sha256 = "ef46130577072c6fe6b14aa0710c75344dea46124093f483db47cbc8c9cb4ec6";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/uz/firefox-84.0b4.tar.bz2";
+ locale = "uz";
+ arch = "linux-i686";
+ sha256 = "34c28440a7772a7fcf7f920be760f92057d813648372fe7cb8ae9f2c3fb3a846";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/vi/firefox-84.0b4.tar.bz2";
+ locale = "vi";
+ arch = "linux-i686";
+ sha256 = "c02c1737b56e1ae4f20ffa9abd392fb69f19d68348341977d0f39bfefab465b6";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/xh/firefox-84.0b4.tar.bz2";
+ locale = "xh";
+ arch = "linux-i686";
+ sha256 = "6be6defb443480c536639d99d124d8c636d70f049f126a793d627c131035c9c2";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/zh-CN/firefox-84.0b4.tar.bz2";
+ locale = "zh-CN";
+ arch = "linux-i686";
+ sha256 = "454af78f3ea4aa00676c4b97dff278dd404116e1da7993b5a2593167d11db885";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/84.0b4/linux-i686/zh-TW/firefox-84.0b4.tar.bz2";
+ locale = "zh-TW";
+ arch = "linux-i686";
+ sha256 = "7e6b1b0ad56916759b01df06b23bb6a23b0c59815538cb1edb3e95edf7b772d7";
+ }
+ ];
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/default.nix
new file mode 100644
index 000000000000..d86b9d6f9870
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/default.nix
@@ -0,0 +1,206 @@
+{ lib, stdenv, fetchurl, config, wrapGAppsHook
+, alsaLib
+, atk
+, cairo
+, curl
+, cups
+, dbus-glib
+, dbus
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, glibc
+, gtk2
+, gtk3
+, kerberos
+, libX11
+, libXScrnSaver
+, libxcb
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXinerama
+, libXrender
+, libXt
+, libcanberra
+, libnotify
+, gnome3
+, libGLU, libGL
+, nspr
+, nss
+, pango
+, libheimdal
+, libpulseaudio
+, systemd
+, channel
+, generated
+, writeScript
+, writeText
+, xidel
+, coreutils
+, gnused
+, gnugrep
+, gnupg
+, ffmpeg
+, runtimeShell
+, mesa # firefox wants gbm for drm+dmabuf
+, systemLocale ? config.i18n.defaultLocale or "en-US"
+}:
+
+let
+
+ inherit (generated) version sources;
+
+ mozillaPlatforms = {
+ i686-linux = "linux-i686";
+ x86_64-linux = "linux-x86_64";
+ };
+
+ arch = mozillaPlatforms.${stdenv.hostPlatform.system};
+
+ isPrefixOf = prefix: string:
+ builtins.substring 0 (builtins.stringLength prefix) string == prefix;
+
+ sourceMatches = locale: source:
+ (isPrefixOf source.locale locale) && source.arch == arch;
+
+ policies = {
+ DisableAppUpdate = true;
+ };
+
+ policiesJson = writeText "no-update-firefox-policy.json" (builtins.toJSON { inherit policies; });
+
+ defaultSource = stdenv.lib.findFirst (sourceMatches "en-US") {} sources;
+
+ source = stdenv.lib.findFirst (sourceMatches systemLocale) defaultSource sources;
+
+ name = "firefox-${channel}-bin-unwrapped-${version}";
+
+in
+
+stdenv.mkDerivation {
+ inherit name;
+
+ src = fetchurl { inherit (source) url sha256; };
+
+ phases = [ "unpackPhase" "patchPhase" "installPhase" "fixupPhase" ];
+
+ libPath = stdenv.lib.makeLibraryPath
+ [ stdenv.cc.cc
+ alsaLib
+ (lib.getDev alsaLib)
+ atk
+ cairo
+ curl
+ cups
+ dbus-glib
+ dbus
+ fontconfig
+ freetype
+ gdk-pixbuf
+ glib
+ glibc
+ gtk2
+ gtk3
+ kerberos
+ mesa
+ libX11
+ libXScrnSaver
+ libXcomposite
+ libXcursor
+ libxcb
+ libXdamage
+ libXext
+ libXfixes
+ libXi
+ libXinerama
+ libXrender
+ libXt
+ libcanberra
+ libnotify
+ libGLU libGL
+ nspr
+ nss
+ pango
+ libheimdal
+ libpulseaudio
+ (lib.getDev libpulseaudio)
+ systemd
+ ffmpeg
+ ] + ":" + stdenv.lib.makeSearchPathOutput "lib" "lib64" [
+ stdenv.cc.cc
+ ];
+
+ inherit gtk3;
+
+ buildInputs = [ wrapGAppsHook gtk3 gnome3.adwaita-icon-theme ];
+
+ # "strip" after "patchelf" may break binaries.
+ # See: https://github.com/NixOS/patchelf/issues/10
+ dontStrip = true;
+ dontPatchELF = true;
+
+ patchPhase = ''
+ # Don't download updates from Mozilla directly
+ echo 'pref("app.update.auto", "false");' >> defaults/pref/channel-prefs.js
+ '';
+
+ installPhase =
+ ''
+ mkdir -p "$prefix/usr/lib/firefox-bin-${version}"
+ cp -r * "$prefix/usr/lib/firefox-bin-${version}"
+
+ mkdir -p "$out/bin"
+ ln -s "$prefix/usr/lib/firefox-bin-${version}/firefox" "$out/bin/"
+
+ for executable in \
+ firefox firefox-bin plugin-container \
+ updater crashreporter webapprt-stub
+ do
+ if [ -e "$out/usr/lib/firefox-bin-${version}/$executable" ]; then
+ patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+ "$out/usr/lib/firefox-bin-${version}/$executable"
+ fi
+ done
+
+ find . -executable -type f -exec \
+ patchelf --set-rpath "$libPath" \
+ "$out/usr/lib/firefox-bin-${version}/{}" \;
+
+ # wrapFirefox expects "$out/lib" instead of "$out/usr/lib"
+ ln -s "$out/usr/lib" "$out/lib"
+
+ gappsWrapperArgs+=(--argv0 "$out/bin/.firefox-wrapped")
+
+ # See: https://github.com/mozilla/policy-templates/blob/master/README.md
+ mkdir -p "$out/lib/firefox-bin-${version}/distribution";
+ ln -s ${policiesJson} "$out/lib/firefox-bin-${version}/distribution/policies.json";
+ '';
+
+ passthru.execdir = "/bin";
+ passthru.ffmpegSupport = true;
+ passthru.gssSupport = true;
+ # update with:
+ # $ nix-shell maintainers/scripts/update.nix --argstr package firefox-bin-unwrapped
+ passthru.updateScript = import ./update.nix {
+ inherit name channel writeScript xidel coreutils gnused gnugrep gnupg curl runtimeShell;
+ baseUrl =
+ if channel == "devedition"
+ then "http://archive.mozilla.org/pub/devedition/releases/"
+ else "http://archive.mozilla.org/pub/firefox/releases/";
+ };
+ meta = with stdenv.lib; {
+ description = "Mozilla Firefox, free web browser (binary package)";
+ homepage = "http://www.mozilla.org/firefox/";
+ license = {
+ free = false;
+ url = "http://www.mozilla.org/en-US/foundation/trademarks/policy/";
+ };
+ platforms = builtins.attrNames mozillaPlatforms;
+ maintainers = with maintainers; [ taku0 ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix
new file mode 100644
index 000000000000..5f16fb1914ab
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/devedition_sources.nix
@@ -0,0 +1,965 @@
+{
+ version = "84.0b4";
+ sources = [
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ach/firefox-84.0b4.tar.bz2";
+ locale = "ach";
+ arch = "linux-x86_64";
+ sha256 = "6b548e6e2753e4a0ad2ad5968c063b6f4c7866c297314ba9e807161f7c757275";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/af/firefox-84.0b4.tar.bz2";
+ locale = "af";
+ arch = "linux-x86_64";
+ sha256 = "f75bfba14ae1a248918c0e433c343328305eb6372dd80aa343506437f631f2b6";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/an/firefox-84.0b4.tar.bz2";
+ locale = "an";
+ arch = "linux-x86_64";
+ sha256 = "d2e972f7d345720a89081fce3b9257942c93bdeb2a5c7dcede3c30282407f159";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ar/firefox-84.0b4.tar.bz2";
+ locale = "ar";
+ arch = "linux-x86_64";
+ sha256 = "2731722dbd097875bb797a555e9a0ba3843deb159f7917626d8e97c1a3005e7a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ast/firefox-84.0b4.tar.bz2";
+ locale = "ast";
+ arch = "linux-x86_64";
+ sha256 = "4d626c7f293226e9e18e28d069b40f75914f9387553d54588c34e7dd70ce1ae9";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/az/firefox-84.0b4.tar.bz2";
+ locale = "az";
+ arch = "linux-x86_64";
+ sha256 = "01a647694a6aa2bbd8ad531197565593783946ad248d34f86550d28b8be5b52b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/be/firefox-84.0b4.tar.bz2";
+ locale = "be";
+ arch = "linux-x86_64";
+ sha256 = "49639180573943a4bd4d0672c5dec969850b4bfceca00c37575c6d0f2d589a7e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/bg/firefox-84.0b4.tar.bz2";
+ locale = "bg";
+ arch = "linux-x86_64";
+ sha256 = "c575261553cbc6afcc60650e21605e1298a122b975f6b6b2845a35725fe2ff25";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/bn/firefox-84.0b4.tar.bz2";
+ locale = "bn";
+ arch = "linux-x86_64";
+ sha256 = "5c5ebe2bfaaa7ea16ca4285d9806f3ecef1b29b61e5018920db27e050a4ef521";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/br/firefox-84.0b4.tar.bz2";
+ locale = "br";
+ arch = "linux-x86_64";
+ sha256 = "29c764eff10d3756f258f0ac5cc9bec14cc46bb66d804eaca5548cebbaa067d6";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/bs/firefox-84.0b4.tar.bz2";
+ locale = "bs";
+ arch = "linux-x86_64";
+ sha256 = "7730a4c1e7d4d791fe35f000bba72d3652fe7289eb95f5e77b426995a63ef412";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ca-valencia/firefox-84.0b4.tar.bz2";
+ locale = "ca-valencia";
+ arch = "linux-x86_64";
+ sha256 = "fe90ef596de4262d803fa282cce7b30c1c9bde896b31d7e47d8e862e38ca1037";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ca/firefox-84.0b4.tar.bz2";
+ locale = "ca";
+ arch = "linux-x86_64";
+ sha256 = "f435a47a36affd5b59c7a6543f1c1c7e0dfead407138967a0f295dcd6093bed6";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/cak/firefox-84.0b4.tar.bz2";
+ locale = "cak";
+ arch = "linux-x86_64";
+ sha256 = "ec4968ccfaea0a975a4f56aaae8290387707570cf899d078438ac2cb98244fe7";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/cs/firefox-84.0b4.tar.bz2";
+ locale = "cs";
+ arch = "linux-x86_64";
+ sha256 = "357c5372b6fade862671db66b90b3382749153c641bcd7c99f7b2a3c68c143fb";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/cy/firefox-84.0b4.tar.bz2";
+ locale = "cy";
+ arch = "linux-x86_64";
+ sha256 = "5ce8f5e451fb2271635a2cada6c7b54a53936a1b912b777d54ce640cecb3d37e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/da/firefox-84.0b4.tar.bz2";
+ locale = "da";
+ arch = "linux-x86_64";
+ sha256 = "ac790fdafd2875d180be2375937b38546dd77d6e9b8428f4d44a2b780b4db14f";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/de/firefox-84.0b4.tar.bz2";
+ locale = "de";
+ arch = "linux-x86_64";
+ sha256 = "6c5205a4d74da62927648f95a069ed6a68ab012f2cbe0c4cded3de8d40c3d325";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/dsb/firefox-84.0b4.tar.bz2";
+ locale = "dsb";
+ arch = "linux-x86_64";
+ sha256 = "516308e19f0373b3ff75e2e114fc7f1d2d370cd4a0f63f8bf74704eced2e0d56";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/el/firefox-84.0b4.tar.bz2";
+ locale = "el";
+ arch = "linux-x86_64";
+ sha256 = "d35a67fcfc8c5c334f55d12810bdcbaab6b9cb5fd3aaa75c79977accf7429445";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/en-CA/firefox-84.0b4.tar.bz2";
+ locale = "en-CA";
+ arch = "linux-x86_64";
+ sha256 = "e8d36d76d791108a6e514a649eebc9c4814aa8ccd4b21728e56a4e9839eef803";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/en-GB/firefox-84.0b4.tar.bz2";
+ locale = "en-GB";
+ arch = "linux-x86_64";
+ sha256 = "9bb695670d7ee7a3a35d9adeef579e33f076fc1eca717149a5078134f584bf70";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/en-US/firefox-84.0b4.tar.bz2";
+ locale = "en-US";
+ arch = "linux-x86_64";
+ sha256 = "595b1004380ac96663c2d8889f02a681ad7c5c56e0f12cde4a26a6453d0a0ec5";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/eo/firefox-84.0b4.tar.bz2";
+ locale = "eo";
+ arch = "linux-x86_64";
+ sha256 = "cb6ac56d074e91e2f5154c275c4c3a46e4392586451fdbba52fb419bbe085c64";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/es-AR/firefox-84.0b4.tar.bz2";
+ locale = "es-AR";
+ arch = "linux-x86_64";
+ sha256 = "920e2aa05414fb72be7f24240636e7ce7b431776cc919c5a07c1361da3f66289";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/es-CL/firefox-84.0b4.tar.bz2";
+ locale = "es-CL";
+ arch = "linux-x86_64";
+ sha256 = "9db297046da02c5c8e1f6d5ba0e4f6b35ec8b8d36335dd2f7933e49d86c207b3";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/es-ES/firefox-84.0b4.tar.bz2";
+ locale = "es-ES";
+ arch = "linux-x86_64";
+ sha256 = "ed94f3ded8f803f956290976cfa41a5c46b42da7f3158b4283445ded15fdd789";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/es-MX/firefox-84.0b4.tar.bz2";
+ locale = "es-MX";
+ arch = "linux-x86_64";
+ sha256 = "11e2a8b7084ea002c6efd92fc86529e2dd09afbe4fe52285a3165733af95e132";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/et/firefox-84.0b4.tar.bz2";
+ locale = "et";
+ arch = "linux-x86_64";
+ sha256 = "0baa470895983b2c85f9ecc79f36fa1b6c8578c5bc22be76ef10d6e7f9e11ee9";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/eu/firefox-84.0b4.tar.bz2";
+ locale = "eu";
+ arch = "linux-x86_64";
+ sha256 = "271141d85b5a0338445945208d515ab9ec6452253abddb1860c31cd61458de4b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/fa/firefox-84.0b4.tar.bz2";
+ locale = "fa";
+ arch = "linux-x86_64";
+ sha256 = "d467a6e1eff3b2edad56c6b8b58a7fe2d7fa5c07524fc0d567b660b29169ddf9";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ff/firefox-84.0b4.tar.bz2";
+ locale = "ff";
+ arch = "linux-x86_64";
+ sha256 = "4f117b8bd69c01cb6d38b927ab26cfe79fcd111fc9a4a2e53ae4ef936bc9806d";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/fi/firefox-84.0b4.tar.bz2";
+ locale = "fi";
+ arch = "linux-x86_64";
+ sha256 = "6eb9d0c0d1ef84abf0af2a873334dea463d728ef5aff398417e2ea3104a4503e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/fr/firefox-84.0b4.tar.bz2";
+ locale = "fr";
+ arch = "linux-x86_64";
+ sha256 = "85d4b90fabcc03d3ac396bdba0749794bc3fe447c9f2ce793962a2acfc35918f";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/fy-NL/firefox-84.0b4.tar.bz2";
+ locale = "fy-NL";
+ arch = "linux-x86_64";
+ sha256 = "462e14991e34122e2275bedcd6776d9f8a75242c2b06d84ef3dadab08428d48d";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ga-IE/firefox-84.0b4.tar.bz2";
+ locale = "ga-IE";
+ arch = "linux-x86_64";
+ sha256 = "b0b7def94a250ec52fda4e4fe0de931209fe71eb06ce03de13bd7309c7f78d79";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/gd/firefox-84.0b4.tar.bz2";
+ locale = "gd";
+ arch = "linux-x86_64";
+ sha256 = "e3bc980f579132b68cdf06b06abe2303430df239444971010ef420f5fe1599f0";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/gl/firefox-84.0b4.tar.bz2";
+ locale = "gl";
+ arch = "linux-x86_64";
+ sha256 = "66b9c65dedd1b57cfa2d960a40df72dca473f39f1cc585e1406abc64d68b1ce5";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/gn/firefox-84.0b4.tar.bz2";
+ locale = "gn";
+ arch = "linux-x86_64";
+ sha256 = "ad707ad91336de1c0d1f26fddebb95d25a8ff405bc3d576660ad9be0f5643939";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/gu-IN/firefox-84.0b4.tar.bz2";
+ locale = "gu-IN";
+ arch = "linux-x86_64";
+ sha256 = "585c76f373ef5c3f3b86a6cef4dfcdbffe3e314ba737a3f514bcd871140e5aaf";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/he/firefox-84.0b4.tar.bz2";
+ locale = "he";
+ arch = "linux-x86_64";
+ sha256 = "8f9ed5eb32fe9272f5adc22753997292cd2dab7b1368864b4f001eb0fffd7526";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/hi-IN/firefox-84.0b4.tar.bz2";
+ locale = "hi-IN";
+ arch = "linux-x86_64";
+ sha256 = "22d8b3d494f3b0dc5e347c0fedd5ab2ba32690c02993bd2a9066a987bb87aea8";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/hr/firefox-84.0b4.tar.bz2";
+ locale = "hr";
+ arch = "linux-x86_64";
+ sha256 = "c3a70593633985fcc8974364db75f2998e450359d4a8b621f23e95df24cf8e6b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/hsb/firefox-84.0b4.tar.bz2";
+ locale = "hsb";
+ arch = "linux-x86_64";
+ sha256 = "30701d1b25536a45a6a5613cbff8ac83bdec08d6421f1e37d9f0ae9c39ab6856";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/hu/firefox-84.0b4.tar.bz2";
+ locale = "hu";
+ arch = "linux-x86_64";
+ sha256 = "bcb63dc6211b5c24536062ed6f8a424edf0ad553187b298874d97f75d363b1ea";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/hy-AM/firefox-84.0b4.tar.bz2";
+ locale = "hy-AM";
+ arch = "linux-x86_64";
+ sha256 = "0278018d35f7be3e4c8da080bcd86e2bf08a544bfd452136483d2b21f91c582e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ia/firefox-84.0b4.tar.bz2";
+ locale = "ia";
+ arch = "linux-x86_64";
+ sha256 = "d5699f8b946bc551fea78389cc6e82a9ca58ca3a8a492cbe3b985ed655fd60d1";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/id/firefox-84.0b4.tar.bz2";
+ locale = "id";
+ arch = "linux-x86_64";
+ sha256 = "1e2c580382192e88094738a01bc99b7efda5a1010e1bb180e35b5701f03aef55";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/is/firefox-84.0b4.tar.bz2";
+ locale = "is";
+ arch = "linux-x86_64";
+ sha256 = "a541657165e18212f97261b2aba391434246688451cc9f2b643a57891dc0eb1a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/it/firefox-84.0b4.tar.bz2";
+ locale = "it";
+ arch = "linux-x86_64";
+ sha256 = "5ecf7a03bc8e8d6329db2bca4296cf0d07b943ec9c9e0cbb2ffdaa4ecffcdf3a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ja/firefox-84.0b4.tar.bz2";
+ locale = "ja";
+ arch = "linux-x86_64";
+ sha256 = "80d6148dbfa8e95e5292699b5326171f6a44eaa30dc4c84b233191a8505a248b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ka/firefox-84.0b4.tar.bz2";
+ locale = "ka";
+ arch = "linux-x86_64";
+ sha256 = "9f15ef55fab16e0086466e696f35dc3107451c2b9ccab9452901cf66723bf688";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/kab/firefox-84.0b4.tar.bz2";
+ locale = "kab";
+ arch = "linux-x86_64";
+ sha256 = "762be8a3bee38ea5b939611b4fbc9fd5bfe71e80b685cb0a8937373aa19f94d6";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/kk/firefox-84.0b4.tar.bz2";
+ locale = "kk";
+ arch = "linux-x86_64";
+ sha256 = "65196c278a5a70c76315546465915626ed0c5f395af4ed1aed0ab2f27846aac4";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/km/firefox-84.0b4.tar.bz2";
+ locale = "km";
+ arch = "linux-x86_64";
+ sha256 = "530010cb0d3393e47324c032d048a377ac5c9da16e73888db026f6cec61c3533";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/kn/firefox-84.0b4.tar.bz2";
+ locale = "kn";
+ arch = "linux-x86_64";
+ sha256 = "5233a8714e24a915404b3139aa3496812a4203b866cf4d870b013b940eba41ec";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ko/firefox-84.0b4.tar.bz2";
+ locale = "ko";
+ arch = "linux-x86_64";
+ sha256 = "5dfe6629926804ed0820d472e19e51223565b011dee3feb722a81faa58043744";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/lij/firefox-84.0b4.tar.bz2";
+ locale = "lij";
+ arch = "linux-x86_64";
+ sha256 = "4bb4bd94ac7aa845a062c366ea47871293f7b5281a460d3547fc321b6430a3ec";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/lt/firefox-84.0b4.tar.bz2";
+ locale = "lt";
+ arch = "linux-x86_64";
+ sha256 = "162d3705cbb8ef0b8036520d59e17eefd8e94bf27b9c1df027e9c0b26b3ebcca";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/lv/firefox-84.0b4.tar.bz2";
+ locale = "lv";
+ arch = "linux-x86_64";
+ sha256 = "7498cb5bad8ccde4a82e2acf49e899a652086de5c2e0a63f833d5342e83bfa48";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/mk/firefox-84.0b4.tar.bz2";
+ locale = "mk";
+ arch = "linux-x86_64";
+ sha256 = "88ffd9ffb56000b42d3878654b6be2413189b93881d29809c5cfcbcd740349db";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/mr/firefox-84.0b4.tar.bz2";
+ locale = "mr";
+ arch = "linux-x86_64";
+ sha256 = "cac6e4ea74b146d07afa79e85746d9678e6407c733a38367ed36e94821cc2f4a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ms/firefox-84.0b4.tar.bz2";
+ locale = "ms";
+ arch = "linux-x86_64";
+ sha256 = "7e5eaf47c232fd25fb5c1e2de9d81351cfcf33c88c696a193219b0ff86a3c29f";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/my/firefox-84.0b4.tar.bz2";
+ locale = "my";
+ arch = "linux-x86_64";
+ sha256 = "20b1756847b2cbfc98153ac0d9a646f129b83f5c1383067d7547e9c70409abfc";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/nb-NO/firefox-84.0b4.tar.bz2";
+ locale = "nb-NO";
+ arch = "linux-x86_64";
+ sha256 = "ac71d2e5520acaa352eba1f26576dc101b7b3a64971b36acbbfe7151b47e1344";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ne-NP/firefox-84.0b4.tar.bz2";
+ locale = "ne-NP";
+ arch = "linux-x86_64";
+ sha256 = "90ff28f5e3ed56f5472e524f37288bad57045dc5491bc84f5e76f33d1d2cb046";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/nl/firefox-84.0b4.tar.bz2";
+ locale = "nl";
+ arch = "linux-x86_64";
+ sha256 = "267c1d406006feae8bc350bcb58b4f73cc2403682c5786bb500bcafca4aa1ae9";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/nn-NO/firefox-84.0b4.tar.bz2";
+ locale = "nn-NO";
+ arch = "linux-x86_64";
+ sha256 = "815e84bf8acb3cec68dd7fc06d7849240f71e73cd710538b9f8a887df73f98da";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/oc/firefox-84.0b4.tar.bz2";
+ locale = "oc";
+ arch = "linux-x86_64";
+ sha256 = "14717ad07784d231333584150f04118d22a8616fec76aab800d3208c514904fb";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/pa-IN/firefox-84.0b4.tar.bz2";
+ locale = "pa-IN";
+ arch = "linux-x86_64";
+ sha256 = "1c1470816615bb292f51cfd1a52002b5f2ed4444be41a3521ef1a40b4e64b2b4";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/pl/firefox-84.0b4.tar.bz2";
+ locale = "pl";
+ arch = "linux-x86_64";
+ sha256 = "872a505769aff03597c71de66121fd007559c3f1cbb22c67661930de6e193634";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/pt-BR/firefox-84.0b4.tar.bz2";
+ locale = "pt-BR";
+ arch = "linux-x86_64";
+ sha256 = "d0ef34afb32b0f6d1c266b99ea0f4a9015934112524eee0cadc66faa6898ae27";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/pt-PT/firefox-84.0b4.tar.bz2";
+ locale = "pt-PT";
+ arch = "linux-x86_64";
+ sha256 = "e0b17a97217c799e4e0067e91374e63a6a99df827442d0193fcf47320af8a737";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/rm/firefox-84.0b4.tar.bz2";
+ locale = "rm";
+ arch = "linux-x86_64";
+ sha256 = "0c031b6ae10918e65274f5ce95fd03d68011e36ab626e03ad9484ff40b36bc7e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ro/firefox-84.0b4.tar.bz2";
+ locale = "ro";
+ arch = "linux-x86_64";
+ sha256 = "256b81200a5b92763d368b9c5d6f29e191aa4f11b097de1773bc5557d748c3ea";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ru/firefox-84.0b4.tar.bz2";
+ locale = "ru";
+ arch = "linux-x86_64";
+ sha256 = "734b7d94b896554d5fedfd94a84c827ad6737808cd1f7b5b13be20702d46315b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/si/firefox-84.0b4.tar.bz2";
+ locale = "si";
+ arch = "linux-x86_64";
+ sha256 = "d2c9fee5e64b8063c834610c2671f9c3fa49a5e02fc7e3482890b534aeb66a7a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/sk/firefox-84.0b4.tar.bz2";
+ locale = "sk";
+ arch = "linux-x86_64";
+ sha256 = "edcdf2a8a00e0402992862e28efb33614b9f1a4cdfed16316c5d4bbc229b298f";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/sl/firefox-84.0b4.tar.bz2";
+ locale = "sl";
+ arch = "linux-x86_64";
+ sha256 = "d097a61adf0908041cb3cce76758f6da274cd7b3a006163b004f70e869947021";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/son/firefox-84.0b4.tar.bz2";
+ locale = "son";
+ arch = "linux-x86_64";
+ sha256 = "d60731c5976825f0566502f6211d8e22388ec9d02bd122272f70a0830297e1fe";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/sq/firefox-84.0b4.tar.bz2";
+ locale = "sq";
+ arch = "linux-x86_64";
+ sha256 = "5dffa799eec3baf2e55d7b690cf73c2b190e369bff32dd1800020c0fdf912c9d";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/sr/firefox-84.0b4.tar.bz2";
+ locale = "sr";
+ arch = "linux-x86_64";
+ sha256 = "abb5779af704c926ca90bd9b9a01eb8de1b1b4feae658d5911bc523739eda0d3";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/sv-SE/firefox-84.0b4.tar.bz2";
+ locale = "sv-SE";
+ arch = "linux-x86_64";
+ sha256 = "2a228577a4d6c11a433b8c0340558aa638de175474491428b05509019920f8e1";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ta/firefox-84.0b4.tar.bz2";
+ locale = "ta";
+ arch = "linux-x86_64";
+ sha256 = "82f0bec91719e7b2a355c9b0398b924ce4cf429bb11e99d566af9836f5087acb";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/te/firefox-84.0b4.tar.bz2";
+ locale = "te";
+ arch = "linux-x86_64";
+ sha256 = "9e581d2dc107c385142c3bbb5476e3bd94e700cd8f9e36ead46d284d5708e9c2";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/th/firefox-84.0b4.tar.bz2";
+ locale = "th";
+ arch = "linux-x86_64";
+ sha256 = "096ce747a12c0b773d34517efce6aa4aaaf09385c5cf088046f7217639a7ce9e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/tl/firefox-84.0b4.tar.bz2";
+ locale = "tl";
+ arch = "linux-x86_64";
+ sha256 = "3fc48cd9839ba88f246fb04fe34cc5760aa9e40c8fb782ea57347e32d66030f0";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/tr/firefox-84.0b4.tar.bz2";
+ locale = "tr";
+ arch = "linux-x86_64";
+ sha256 = "087c629e5aea8fc698cbc5608c270a7099607b34c5852b3b3f4091af3b7c789f";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/trs/firefox-84.0b4.tar.bz2";
+ locale = "trs";
+ arch = "linux-x86_64";
+ sha256 = "4df467d46c5830a3d96f87294c3dfddcc397b73a372ba566900123f7ab86a6ee";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/uk/firefox-84.0b4.tar.bz2";
+ locale = "uk";
+ arch = "linux-x86_64";
+ sha256 = "11090c8aa00533c456ce96cbb09691c816fa2f98ac421cf581c86bd2bef5f296";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/ur/firefox-84.0b4.tar.bz2";
+ locale = "ur";
+ arch = "linux-x86_64";
+ sha256 = "8e7a5cc3606dc6cf71de328863a9107c36024001a381baf00daab11bebb857d7";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/uz/firefox-84.0b4.tar.bz2";
+ locale = "uz";
+ arch = "linux-x86_64";
+ sha256 = "bb1846dd3b7bcf3b657d64bbd215301565dafee00eae96cee15fc71b40f49877";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/vi/firefox-84.0b4.tar.bz2";
+ locale = "vi";
+ arch = "linux-x86_64";
+ sha256 = "375805742481f8f33adccbdc7e10f21ef0b1a0ab383c379e4dc13718c3f8fbf8";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/xh/firefox-84.0b4.tar.bz2";
+ locale = "xh";
+ arch = "linux-x86_64";
+ sha256 = "a8ce0836980441d1248f8bbd2e4bbc7a8269afe9bf8e3125bd9f4dd3acd06d7a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/zh-CN/firefox-84.0b4.tar.bz2";
+ locale = "zh-CN";
+ arch = "linux-x86_64";
+ sha256 = "8f491d8d1f61bf4a7f036efc047462bb04cf953e2a3a39cb5a326e49ed7a880e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-x86_64/zh-TW/firefox-84.0b4.tar.bz2";
+ locale = "zh-TW";
+ arch = "linux-x86_64";
+ sha256 = "dc5a8ca6f8a3f40060d0d2abaf694a066960cbfea355678ac583c3977b37cbed";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ach/firefox-84.0b4.tar.bz2";
+ locale = "ach";
+ arch = "linux-i686";
+ sha256 = "f5b5a500581e52dfe5192135cfa06bf283ff23ca0b1b569db1f1bdcd359ad0b4";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/af/firefox-84.0b4.tar.bz2";
+ locale = "af";
+ arch = "linux-i686";
+ sha256 = "f96a13006c272edf5f60d6c04011e48729b5078fbde2238a0e5c422eb1293372";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/an/firefox-84.0b4.tar.bz2";
+ locale = "an";
+ arch = "linux-i686";
+ sha256 = "0bdbd429a512499dcd920ae695b61347196527ab30c601e1645385f3cdaff4ac";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ar/firefox-84.0b4.tar.bz2";
+ locale = "ar";
+ arch = "linux-i686";
+ sha256 = "e0b6addd1b699c228aa353af879bbd263d1bd0e17aa033754abe864348adfc9a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ast/firefox-84.0b4.tar.bz2";
+ locale = "ast";
+ arch = "linux-i686";
+ sha256 = "3ffbc1b67d9cae58c2b21227e6456d9e6ca8a387cdbe8b5bbae9b1db553a34b4";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/az/firefox-84.0b4.tar.bz2";
+ locale = "az";
+ arch = "linux-i686";
+ sha256 = "36c9ad3b07b6e032b38486e1d2a7a6b85b85dc84d8d0b9218fbd4c4a71e59e70";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/be/firefox-84.0b4.tar.bz2";
+ locale = "be";
+ arch = "linux-i686";
+ sha256 = "2ac1811463e482205f7dd27e4f98564146f089fb423405a8c3df8d2a10e45147";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/bg/firefox-84.0b4.tar.bz2";
+ locale = "bg";
+ arch = "linux-i686";
+ sha256 = "174d0ab72bfb1a8ea811c1b77a9eb65871f68641b1703c3bbf02bad4d298460b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/bn/firefox-84.0b4.tar.bz2";
+ locale = "bn";
+ arch = "linux-i686";
+ sha256 = "e6d1b74e56690abd5c2f0d2d1dae0b9ac6d16b28daf1964ecd87138a5de9fadf";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/br/firefox-84.0b4.tar.bz2";
+ locale = "br";
+ arch = "linux-i686";
+ sha256 = "2ad97986bcdcdc2b988f1d50fef1a71d767119e03065ddc3e51ad38efc7dd351";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/bs/firefox-84.0b4.tar.bz2";
+ locale = "bs";
+ arch = "linux-i686";
+ sha256 = "71c472c8dce7174ee8139360fd5b8528cba89f73dc186bdd08ed368917b8c41d";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ca-valencia/firefox-84.0b4.tar.bz2";
+ locale = "ca-valencia";
+ arch = "linux-i686";
+ sha256 = "4e5245f658f5bf6f47d40e2437841213b03b9f6d12e83766621f5b59fb258eaa";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ca/firefox-84.0b4.tar.bz2";
+ locale = "ca";
+ arch = "linux-i686";
+ sha256 = "4de924505b98c029dbba0762723a3310b3d171f18072a1a51d4f9636aaca8831";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/cak/firefox-84.0b4.tar.bz2";
+ locale = "cak";
+ arch = "linux-i686";
+ sha256 = "11fa8468ca6b3c51ed615d0375e63d85443beab66c10cbdc95fca817ada02215";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/cs/firefox-84.0b4.tar.bz2";
+ locale = "cs";
+ arch = "linux-i686";
+ sha256 = "c1bc48d54d0ea32731d4400c2b2fd817c5ed222cbe5fea20b3ee26ddeebab9d3";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/cy/firefox-84.0b4.tar.bz2";
+ locale = "cy";
+ arch = "linux-i686";
+ sha256 = "02cf2dc5bb97e9497655c53ef45dda3495f280a333c94fcc51048852bc993a53";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/da/firefox-84.0b4.tar.bz2";
+ locale = "da";
+ arch = "linux-i686";
+ sha256 = "6d36d0aa1ce447770c9a149a1df2c27731a31f5784b9f20ef536836e6e42819a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/de/firefox-84.0b4.tar.bz2";
+ locale = "de";
+ arch = "linux-i686";
+ sha256 = "49eb555372658bf827adfc07b08c8ac46a6351f0ecd0fed0ad6d5c4975553c8e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/dsb/firefox-84.0b4.tar.bz2";
+ locale = "dsb";
+ arch = "linux-i686";
+ sha256 = "1c358edc0e6248773103ab92ef0bf6103dfcbfa2945602bbd2f49153ebc7c690";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/el/firefox-84.0b4.tar.bz2";
+ locale = "el";
+ arch = "linux-i686";
+ sha256 = "a445f9806285ef0b036364a618c8d7ca226da899dfa33adbda5b2e327fe63dcb";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/en-CA/firefox-84.0b4.tar.bz2";
+ locale = "en-CA";
+ arch = "linux-i686";
+ sha256 = "6d2590c0cc0aa28a1443185aec54f84973a31e79beccd5ca5700abfd8deebe2c";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/en-GB/firefox-84.0b4.tar.bz2";
+ locale = "en-GB";
+ arch = "linux-i686";
+ sha256 = "71c4040c1326133f18ec7a07ea021b061b0994cf92aa113b358c5c0c10ebc59b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/en-US/firefox-84.0b4.tar.bz2";
+ locale = "en-US";
+ arch = "linux-i686";
+ sha256 = "af3bcd19cd78dea23deaff0c2810282a68428eee4d45e2989c75cbce5ff97098";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/eo/firefox-84.0b4.tar.bz2";
+ locale = "eo";
+ arch = "linux-i686";
+ sha256 = "641def17e0d004f81cb176ccf70cbaa1df50fb204c3ff45a80800b76c21ed006";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/es-AR/firefox-84.0b4.tar.bz2";
+ locale = "es-AR";
+ arch = "linux-i686";
+ sha256 = "0475e9de47c64b11470edf16f2819bfc1b1013f75ff6dd83da96bff1174db788";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/es-CL/firefox-84.0b4.tar.bz2";
+ locale = "es-CL";
+ arch = "linux-i686";
+ sha256 = "0f3c14175da4f59b745473df5f0256b582800b3c3dfabaa21e124b9ef100fc72";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/es-ES/firefox-84.0b4.tar.bz2";
+ locale = "es-ES";
+ arch = "linux-i686";
+ sha256 = "9a33525bcb9d10a10630d4c470877c8698f6da32671cbc47450c7fa4d2cba7de";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/es-MX/firefox-84.0b4.tar.bz2";
+ locale = "es-MX";
+ arch = "linux-i686";
+ sha256 = "ba397ac159b77c9346b58e5c9e4bdffd21b5ac3fd3d4b67a2b67931916b2f830";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/et/firefox-84.0b4.tar.bz2";
+ locale = "et";
+ arch = "linux-i686";
+ sha256 = "664672b4f5f713bee16024845f16555da16f758d8db674dc5ec7f0022d2b7000";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/eu/firefox-84.0b4.tar.bz2";
+ locale = "eu";
+ arch = "linux-i686";
+ sha256 = "3230da6f19116ccf848855218df3fbace86af2d9085f4109a3006476807f464d";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/fa/firefox-84.0b4.tar.bz2";
+ locale = "fa";
+ arch = "linux-i686";
+ sha256 = "faf07d08ce391b1043d4081fc650e3ee78ca067a3a11a6e3ff87916f3ac7a557";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ff/firefox-84.0b4.tar.bz2";
+ locale = "ff";
+ arch = "linux-i686";
+ sha256 = "2c763d737cb112b77919594fe34061db5181a725cf518fc3cd9133be9bfd7cf6";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/fi/firefox-84.0b4.tar.bz2";
+ locale = "fi";
+ arch = "linux-i686";
+ sha256 = "5a631720534e03e211936255012270e04918461112411e787ea02f138087c6b1";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/fr/firefox-84.0b4.tar.bz2";
+ locale = "fr";
+ arch = "linux-i686";
+ sha256 = "2b86ce004a5c42fd6f5cdda28439263357ce5428b6469440046ce6fe4d6157c2";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/fy-NL/firefox-84.0b4.tar.bz2";
+ locale = "fy-NL";
+ arch = "linux-i686";
+ sha256 = "e0e81fb1494d86abdcab4cc9feb0f789ab304172c67da013f0a09ab2c2e3e676";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ga-IE/firefox-84.0b4.tar.bz2";
+ locale = "ga-IE";
+ arch = "linux-i686";
+ sha256 = "ffcf120a36f7268ab2ae03fb1eb6d458fb63b00d41198bf7997290c28997205b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/gd/firefox-84.0b4.tar.bz2";
+ locale = "gd";
+ arch = "linux-i686";
+ sha256 = "a99d3471da7fa2e985fc562a4abe086de9096d2461a50841ad5c8e5d2891bf8b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/gl/firefox-84.0b4.tar.bz2";
+ locale = "gl";
+ arch = "linux-i686";
+ sha256 = "01412502c872561564e1dac95b12d27295be5c411d2bb1ebbd53cfb4dbadee3a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/gn/firefox-84.0b4.tar.bz2";
+ locale = "gn";
+ arch = "linux-i686";
+ sha256 = "a73ee3448bb7888acec856e3e3369e28f5fbb9c5d203892e4992f73b319fa394";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/gu-IN/firefox-84.0b4.tar.bz2";
+ locale = "gu-IN";
+ arch = "linux-i686";
+ sha256 = "3b7904059b38eea27b7901de41be029ea8ec23c3d2a8bbe8941d8852c55cfb97";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/he/firefox-84.0b4.tar.bz2";
+ locale = "he";
+ arch = "linux-i686";
+ sha256 = "0bf4d3aa4f217e12b1f204bdb189625c6daae24cf5253bf4b1cd6288f2717873";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/hi-IN/firefox-84.0b4.tar.bz2";
+ locale = "hi-IN";
+ arch = "linux-i686";
+ sha256 = "4f95852212b0b08aa420c88e2ec7825913e3e82c1d2891fffdb11a8583bf46b8";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/hr/firefox-84.0b4.tar.bz2";
+ locale = "hr";
+ arch = "linux-i686";
+ sha256 = "e30d3274103e39241e233aee994b5b8c2b39dbd190ffa1a9da99f8494ae833b1";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/hsb/firefox-84.0b4.tar.bz2";
+ locale = "hsb";
+ arch = "linux-i686";
+ sha256 = "f401baba947e64ef4ef02cc5137c8623a99967ec8597e4e5c8987382dbc505a4";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/hu/firefox-84.0b4.tar.bz2";
+ locale = "hu";
+ arch = "linux-i686";
+ sha256 = "70ac5b24deabcaf0b250575a0454a35e127cf15023a3546ae41c01942c64c59b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/hy-AM/firefox-84.0b4.tar.bz2";
+ locale = "hy-AM";
+ arch = "linux-i686";
+ sha256 = "9dfa8b99f67ce66625e0c89c37f4ee36b23421ca89d4445deb5dc82eb0eb05a7";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ia/firefox-84.0b4.tar.bz2";
+ locale = "ia";
+ arch = "linux-i686";
+ sha256 = "4445dc874962b72f7d9096cb46ff98987b56d9c2d3e0acd814fc8c59261363b2";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/id/firefox-84.0b4.tar.bz2";
+ locale = "id";
+ arch = "linux-i686";
+ sha256 = "16c6550910555ddfc395b0c9626dd6e41a4bc9bd4a8ddbfb2867faa991cd4ae4";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/is/firefox-84.0b4.tar.bz2";
+ locale = "is";
+ arch = "linux-i686";
+ sha256 = "1c208c0b99cd008d67e8c9c1d118f7b2c8c354b4dcf740554fc2474ff93b8a7c";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/it/firefox-84.0b4.tar.bz2";
+ locale = "it";
+ arch = "linux-i686";
+ sha256 = "cac410ba1679d27565d63d3a70920d3ff262b6171dfe732c3ec7ee88d3386b14";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ja/firefox-84.0b4.tar.bz2";
+ locale = "ja";
+ arch = "linux-i686";
+ sha256 = "0b8c20ac0a4394c8c4a106e65d83718f639453e10c54906da04f4da536a218e4";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ka/firefox-84.0b4.tar.bz2";
+ locale = "ka";
+ arch = "linux-i686";
+ sha256 = "978aad2d0855ed8e364faf4a0522d7271bbd134c699da515db7e5c58dca79d49";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/kab/firefox-84.0b4.tar.bz2";
+ locale = "kab";
+ arch = "linux-i686";
+ sha256 = "f32b2f9cd504a6d4d5b5d2ce47368cad4317cb1249dbd7d925d0c48098fba8be";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/kk/firefox-84.0b4.tar.bz2";
+ locale = "kk";
+ arch = "linux-i686";
+ sha256 = "38e2fef40b71d50b85be7a2d2c44bc0b0bc569410782119fbe07aba00c8193f7";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/km/firefox-84.0b4.tar.bz2";
+ locale = "km";
+ arch = "linux-i686";
+ sha256 = "c8a617eeaba39e138676c8412594329b00d372c40a0401a77e5bf974a407a3b1";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/kn/firefox-84.0b4.tar.bz2";
+ locale = "kn";
+ arch = "linux-i686";
+ sha256 = "d1f19e2edfd1ee97b13b8e42c22f1409174c8fb4b024612d27cbb3ab9586ca1d";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ko/firefox-84.0b4.tar.bz2";
+ locale = "ko";
+ arch = "linux-i686";
+ sha256 = "8e1f68d6bf97644616e8d8a39443061fe99df088b42e5218beb823d8cd18b8e6";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/lij/firefox-84.0b4.tar.bz2";
+ locale = "lij";
+ arch = "linux-i686";
+ sha256 = "ba22770bc65b0033f424ce30df69a7d21a728245230696b412baf44aa9a111a9";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/lt/firefox-84.0b4.tar.bz2";
+ locale = "lt";
+ arch = "linux-i686";
+ sha256 = "27ab65ac4ee08e2714ca7c493a4575352df4a06532773197a2bb3da86e9a18c9";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/lv/firefox-84.0b4.tar.bz2";
+ locale = "lv";
+ arch = "linux-i686";
+ sha256 = "4a8f6944d9b6134d664e08eb404e130a218497b4957437b56e4487a8bc205ca5";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/mk/firefox-84.0b4.tar.bz2";
+ locale = "mk";
+ arch = "linux-i686";
+ sha256 = "885893b0a9ef75cd623f21c720aee07357ff3b4b21ccfbe456fc11928ef7037f";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/mr/firefox-84.0b4.tar.bz2";
+ locale = "mr";
+ arch = "linux-i686";
+ sha256 = "55aa8e1e4b61eb3b9a26fe9abafa804e7b6d34ac1f36efadf10ee13d2cd934a6";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ms/firefox-84.0b4.tar.bz2";
+ locale = "ms";
+ arch = "linux-i686";
+ sha256 = "61412fde864addb40fa2d0ab42f30cb9a7e1887cd130ab59880763d675b6f7fd";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/my/firefox-84.0b4.tar.bz2";
+ locale = "my";
+ arch = "linux-i686";
+ sha256 = "cd7190acda6e20c22edcb99c88c15e87b4676b2dba7de0578d2ab32a22b2bc1b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/nb-NO/firefox-84.0b4.tar.bz2";
+ locale = "nb-NO";
+ arch = "linux-i686";
+ sha256 = "97f16d919eb8321c71864daba7accfcd9bd86d4948bc86df44fa86a52649ad8e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ne-NP/firefox-84.0b4.tar.bz2";
+ locale = "ne-NP";
+ arch = "linux-i686";
+ sha256 = "4ebbdfb4c75621a24b52853c3d94e178decfe3bcaaa1f8f92f42bf91eedd874f";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/nl/firefox-84.0b4.tar.bz2";
+ locale = "nl";
+ arch = "linux-i686";
+ sha256 = "4b14585bb554bc346565a69b6a4c10580345923f8e4dbda8b202e6b9e8cf1452";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/nn-NO/firefox-84.0b4.tar.bz2";
+ locale = "nn-NO";
+ arch = "linux-i686";
+ sha256 = "408f34fb48fe1fa93850857118fc4ed972139e273ed2521cd9f7169f8d4148cc";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/oc/firefox-84.0b4.tar.bz2";
+ locale = "oc";
+ arch = "linux-i686";
+ sha256 = "0f7e1e4df86a931152206159a9f4e99b4241377c5545fb343eff86cd21869bec";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/pa-IN/firefox-84.0b4.tar.bz2";
+ locale = "pa-IN";
+ arch = "linux-i686";
+ sha256 = "c7f85ae2c46585cab0aed8c41117ffd686fe0dac6e0ba64eb41bc22d4b8f01c9";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/pl/firefox-84.0b4.tar.bz2";
+ locale = "pl";
+ arch = "linux-i686";
+ sha256 = "2669e61a0d7da09684230c67c6d43091b3b51e12f291259a62c72ce124fa4c3c";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/pt-BR/firefox-84.0b4.tar.bz2";
+ locale = "pt-BR";
+ arch = "linux-i686";
+ sha256 = "10ac3662c49611f73fb96a13ef464c27b4ce08c25f0f44e253e6e5ce2239a45c";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/pt-PT/firefox-84.0b4.tar.bz2";
+ locale = "pt-PT";
+ arch = "linux-i686";
+ sha256 = "a6e606c6d4ca032653b46966c0b90e001474907424f4fef46669e2363ffb89f1";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/rm/firefox-84.0b4.tar.bz2";
+ locale = "rm";
+ arch = "linux-i686";
+ sha256 = "a8a8ee42020f62b38c125002ff6b5ad975d1a24df4e64f354f58fd949517e3c0";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ro/firefox-84.0b4.tar.bz2";
+ locale = "ro";
+ arch = "linux-i686";
+ sha256 = "f405c06f8041e4c90caed14e7d6fac38467976fd71a214f06eab8c2113c386c0";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ru/firefox-84.0b4.tar.bz2";
+ locale = "ru";
+ arch = "linux-i686";
+ sha256 = "acd2c0812a24b301aafb1278246495b07e346fbd9cd699da406b988dc3d393ee";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/si/firefox-84.0b4.tar.bz2";
+ locale = "si";
+ arch = "linux-i686";
+ sha256 = "d444818f1e76a01a1170209497349331175ab9a761c27b31ddb89ff4d542ab9e";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/sk/firefox-84.0b4.tar.bz2";
+ locale = "sk";
+ arch = "linux-i686";
+ sha256 = "f2f3c9c4888f0055c10d1aae6cb1c40cc7f4d2bd1653e846768326e11b6ef2c6";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/sl/firefox-84.0b4.tar.bz2";
+ locale = "sl";
+ arch = "linux-i686";
+ sha256 = "aeff79d992488895e47d3682d6b3661cfd1a86d39aff8c91313f057838075068";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/son/firefox-84.0b4.tar.bz2";
+ locale = "son";
+ arch = "linux-i686";
+ sha256 = "860900ac8f3fde5511a294a4f41e553d4853c4592d4446441399fda78a91898a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/sq/firefox-84.0b4.tar.bz2";
+ locale = "sq";
+ arch = "linux-i686";
+ sha256 = "9122e1837c732b8cf242f211937b3fc445b6a48da3db01cbaa4a0d00117848a8";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/sr/firefox-84.0b4.tar.bz2";
+ locale = "sr";
+ arch = "linux-i686";
+ sha256 = "a3c15061deb11e870d83138bf65beb5a838cc3ba96d067d3e72f816f818da3c5";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/sv-SE/firefox-84.0b4.tar.bz2";
+ locale = "sv-SE";
+ arch = "linux-i686";
+ sha256 = "cb3d2dcf7d80501a8fa38c50d0301af9562050bc64250cc1c6208467990795d6";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ta/firefox-84.0b4.tar.bz2";
+ locale = "ta";
+ arch = "linux-i686";
+ sha256 = "4ece8a45e79aae6e535d56370f8890c5d3045d0ca78bec67fe848367e518339a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/te/firefox-84.0b4.tar.bz2";
+ locale = "te";
+ arch = "linux-i686";
+ sha256 = "70996e39e5b38f7def90f1eadbdbb294992e4ad27a49d4941b3982a0d3f8421b";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/th/firefox-84.0b4.tar.bz2";
+ locale = "th";
+ arch = "linux-i686";
+ sha256 = "36720f87e8b3ee23f15ff48514931747d05638194e9b13b30017e601b8a5c905";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/tl/firefox-84.0b4.tar.bz2";
+ locale = "tl";
+ arch = "linux-i686";
+ sha256 = "d433a22f97bcb69570933b1f371c248ebd2eb83a217bcc1989897c08175cbcd0";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/tr/firefox-84.0b4.tar.bz2";
+ locale = "tr";
+ arch = "linux-i686";
+ sha256 = "0787dd09f287aab492610d2ce23d0be7bc3a2158e84d7e94345358a750ddb752";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/trs/firefox-84.0b4.tar.bz2";
+ locale = "trs";
+ arch = "linux-i686";
+ sha256 = "4d3bd35ed7c43eb502f482bb60da0dbf14714b35e2996362c835a0a35008308a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/uk/firefox-84.0b4.tar.bz2";
+ locale = "uk";
+ arch = "linux-i686";
+ sha256 = "8e1c371acd0bd1762c715c8e36dbc8df104351cbb3c37fab64c72b55bc98f006";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/ur/firefox-84.0b4.tar.bz2";
+ locale = "ur";
+ arch = "linux-i686";
+ sha256 = "14b6149229f49406755a5ee308e0e120964595a1f9a7f2f7e9cc2979a5cf561a";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/uz/firefox-84.0b4.tar.bz2";
+ locale = "uz";
+ arch = "linux-i686";
+ sha256 = "a8adf840548ac5974654234956957b8e53f3e36c83cfad4fa5c840c16e9e4d5c";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/vi/firefox-84.0b4.tar.bz2";
+ locale = "vi";
+ arch = "linux-i686";
+ sha256 = "fc9b023caaabb3a5a18a21a2d65195a7dc7b2655a5d9a1f4c75434cb1f02e4da";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/xh/firefox-84.0b4.tar.bz2";
+ locale = "xh";
+ arch = "linux-i686";
+ sha256 = "940b4e34e92a0efa397d3944fb6b8c5afea57f29355c9f9621accb557efd9860";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/zh-CN/firefox-84.0b4.tar.bz2";
+ locale = "zh-CN";
+ arch = "linux-i686";
+ sha256 = "b1284ea7ec8e42c6139249b1958380e672dd19e7b8c21d95e256e0d3265bd095";
+ }
+ { url = "http://archive.mozilla.org/pub/devedition/releases/84.0b4/linux-i686/zh-TW/firefox-84.0b4.tar.bz2";
+ locale = "zh-TW";
+ arch = "linux-i686";
+ sha256 = "ac76d109c7817b9c06356918860216a3e2f4f776a31a8690064593ffc43139d9";
+ }
+ ];
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/mozilla.asc b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/mozilla.asc
new file mode 100644
index 000000000000..dc58eb8d56ab
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/mozilla.asc
Binary files differ
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
new file mode 100644
index 000000000000..431ed105f0dc
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/release_sources.nix
@@ -0,0 +1,965 @@
+{
+ version = "83.0";
+ sources = [
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ach/firefox-83.0.tar.bz2";
+ locale = "ach";
+ arch = "linux-x86_64";
+ sha256 = "cea6ad61bd402e6c84a81a3f504f1b9292079c9d48d2353b51db4f03a8837fb6";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/af/firefox-83.0.tar.bz2";
+ locale = "af";
+ arch = "linux-x86_64";
+ sha256 = "d4bd0a9579f38d53f559412cc3cc04f11871ba22c81eee54dd9ab16c56303513";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/an/firefox-83.0.tar.bz2";
+ locale = "an";
+ arch = "linux-x86_64";
+ sha256 = "10741a6921210643250013c45e9e21bc295da8e41f2bb5c5fadcd86c0e828c80";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ar/firefox-83.0.tar.bz2";
+ locale = "ar";
+ arch = "linux-x86_64";
+ sha256 = "3fd4aeef281e5aafdda572d4814e70295c018b7fae6d214c40dabcac367ace69";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ast/firefox-83.0.tar.bz2";
+ locale = "ast";
+ arch = "linux-x86_64";
+ sha256 = "237e8ff5b3fbc9d7c4095951ca014a5c26cc076305aee705ca943d81e72541dd";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/az/firefox-83.0.tar.bz2";
+ locale = "az";
+ arch = "linux-x86_64";
+ sha256 = "79ca0c798243841cc34281f917aad06c2f546a5e11b443a96e5030aefb8de9b3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/be/firefox-83.0.tar.bz2";
+ locale = "be";
+ arch = "linux-x86_64";
+ sha256 = "c15b0f929b3e3c6ad5618ccf6f9f6b143f893b6f77e176b52ecc608ca3157ab8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/bg/firefox-83.0.tar.bz2";
+ locale = "bg";
+ arch = "linux-x86_64";
+ sha256 = "fd2094c59a057e8c35054f7d09c31699aeef927cf9688a87559a8ba69a93f600";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/bn/firefox-83.0.tar.bz2";
+ locale = "bn";
+ arch = "linux-x86_64";
+ sha256 = "c9755c408ca1a4f426f1432339020ef3d7c675d426fae9d8697cded4c7d493f4";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/br/firefox-83.0.tar.bz2";
+ locale = "br";
+ arch = "linux-x86_64";
+ sha256 = "d47b889d31b945a5b768b3bbb336fdc43d62c9cc86f13916225cbfe68a560972";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/bs/firefox-83.0.tar.bz2";
+ locale = "bs";
+ arch = "linux-x86_64";
+ sha256 = "c36da445560b989ae9cf16a1ec72cd2cae82db670f90d27abe0499f8cc025eee";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ca-valencia/firefox-83.0.tar.bz2";
+ locale = "ca-valencia";
+ arch = "linux-x86_64";
+ sha256 = "ef5ee80cc0d6b1b299bc8bb6577b8e26f5de8b541530ddda231e2fafa863e6a1";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ca/firefox-83.0.tar.bz2";
+ locale = "ca";
+ arch = "linux-x86_64";
+ sha256 = "7c349aa7406899835bc9e70893f28c8109e17ee9ef018e7a723085117f8dd32f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/cak/firefox-83.0.tar.bz2";
+ locale = "cak";
+ arch = "linux-x86_64";
+ sha256 = "3e7aabe665ce423bd47e7d0474039d7bfeb9958849c18e98c37f28def5fae1aa";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/cs/firefox-83.0.tar.bz2";
+ locale = "cs";
+ arch = "linux-x86_64";
+ sha256 = "97d5e4c255fc87430751c81edc62186e1b4ec901ccf17bfdad7a8ef918077bc1";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/cy/firefox-83.0.tar.bz2";
+ locale = "cy";
+ arch = "linux-x86_64";
+ sha256 = "c1856b51dedc5788b40671faee8f8cb996108eb514d1263de998043377f2f7c2";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/da/firefox-83.0.tar.bz2";
+ locale = "da";
+ arch = "linux-x86_64";
+ sha256 = "990da1f47d04ec9200d41fa401b23d9607a8e4c11d7cc78989e81785b9633cb0";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/de/firefox-83.0.tar.bz2";
+ locale = "de";
+ arch = "linux-x86_64";
+ sha256 = "94ad875d88a18f24ae38f20b324d074a367969368e660ea2b4b0645e31300c94";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/dsb/firefox-83.0.tar.bz2";
+ locale = "dsb";
+ arch = "linux-x86_64";
+ sha256 = "c3edd46c44bae1b00803e587e6f52560b28ddc2fc935c1fe62714bf16fa72d80";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/el/firefox-83.0.tar.bz2";
+ locale = "el";
+ arch = "linux-x86_64";
+ sha256 = "3572a260ec17f76631ca627747ed53d1911ee1180d3e574051b3baf0afd9dcd1";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/en-CA/firefox-83.0.tar.bz2";
+ locale = "en-CA";
+ arch = "linux-x86_64";
+ sha256 = "e3c9363e8b93c625234624ac5c3ab0274055c5b8f4f854da955409b9bdf28d52";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/en-GB/firefox-83.0.tar.bz2";
+ locale = "en-GB";
+ arch = "linux-x86_64";
+ sha256 = "240a732c034bf2ac286cefc33b02b56df205c4e175457cd84adb7666418e0be4";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/en-US/firefox-83.0.tar.bz2";
+ locale = "en-US";
+ arch = "linux-x86_64";
+ sha256 = "93ff827fdcba92ddb71851c46ac8192a727ed61402e896c6262943e382f92412";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/eo/firefox-83.0.tar.bz2";
+ locale = "eo";
+ arch = "linux-x86_64";
+ sha256 = "456933a6c1fb1e6ad5b2217a7e3730bd54ff037d3d718414b2c92557fea3659d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/es-AR/firefox-83.0.tar.bz2";
+ locale = "es-AR";
+ arch = "linux-x86_64";
+ sha256 = "040e8a4a74b8bc77e1d485c3376690f4c5ba85015b360f679ceacd848b0ca574";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/es-CL/firefox-83.0.tar.bz2";
+ locale = "es-CL";
+ arch = "linux-x86_64";
+ sha256 = "80e8189ce09c736af1d9927d4943e08e30bc70e9aa7e116f150f14c0dab3fb15";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/es-ES/firefox-83.0.tar.bz2";
+ locale = "es-ES";
+ arch = "linux-x86_64";
+ sha256 = "f48489abac5358a10d8ed36b77398493b6a9189a8327bf61bec6ceaca51ab696";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/es-MX/firefox-83.0.tar.bz2";
+ locale = "es-MX";
+ arch = "linux-x86_64";
+ sha256 = "0d4805b30f05fb8a65b81a42337a8a3732c7664b322557e844929d2b049d0111";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/et/firefox-83.0.tar.bz2";
+ locale = "et";
+ arch = "linux-x86_64";
+ sha256 = "eb4a463b9271fdde45bddad28ce871953739b55126ae5613963a69a319908fb2";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/eu/firefox-83.0.tar.bz2";
+ locale = "eu";
+ arch = "linux-x86_64";
+ sha256 = "3a662c575554d3a542e65950352c527cc51e82ae7a8f9d7ca1b69e30a683731e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/fa/firefox-83.0.tar.bz2";
+ locale = "fa";
+ arch = "linux-x86_64";
+ sha256 = "b5ad3a5d39674d60b6e97cd656c77d7d2fb90943a66a590a29e4d42ec1e18c42";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ff/firefox-83.0.tar.bz2";
+ locale = "ff";
+ arch = "linux-x86_64";
+ sha256 = "2db83d638474186f52fde5fe1ee25201e84b198e44397074203d7ce50e23e74c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/fi/firefox-83.0.tar.bz2";
+ locale = "fi";
+ arch = "linux-x86_64";
+ sha256 = "98bd9c50b5db43bf5fcdc829aa295975d3ec106bbc598fda3d7f26679c0ba08c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/fr/firefox-83.0.tar.bz2";
+ locale = "fr";
+ arch = "linux-x86_64";
+ sha256 = "ab3427f5cf7cc88d5108b8be21806197420bd775f33d3f2dc983f0f4dec44d5b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/fy-NL/firefox-83.0.tar.bz2";
+ locale = "fy-NL";
+ arch = "linux-x86_64";
+ sha256 = "9f21d91d1529a05a2da7ba29cc8e875b23ffb4b453077b5e899133cf31813397";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ga-IE/firefox-83.0.tar.bz2";
+ locale = "ga-IE";
+ arch = "linux-x86_64";
+ sha256 = "4c22b166cccede0bcea4e75f826e100dfa4f2def01f904fbffcef789d2d61695";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/gd/firefox-83.0.tar.bz2";
+ locale = "gd";
+ arch = "linux-x86_64";
+ sha256 = "6ca04d381205121dc695dff78ff646499a21976ae64c110763845eda0598b414";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/gl/firefox-83.0.tar.bz2";
+ locale = "gl";
+ arch = "linux-x86_64";
+ sha256 = "d08f4ea821af5e38c21364037c17b8c97c775d60f0697eb0817dcfc7c6d4c7dd";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/gn/firefox-83.0.tar.bz2";
+ locale = "gn";
+ arch = "linux-x86_64";
+ sha256 = "90a8b2fdf1d3471311671761e81637d6771a61744eb480c0788cf03d295c30ee";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/gu-IN/firefox-83.0.tar.bz2";
+ locale = "gu-IN";
+ arch = "linux-x86_64";
+ sha256 = "bfe65e5c9795ecdff4dc947d2e2e84d01da894b0ae55c08d73f9397c5730ce17";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/he/firefox-83.0.tar.bz2";
+ locale = "he";
+ arch = "linux-x86_64";
+ sha256 = "2dc01c5a929aa79056a66feb522d50cbbb567bc85589f8106e553c9ddfc02a7c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/hi-IN/firefox-83.0.tar.bz2";
+ locale = "hi-IN";
+ arch = "linux-x86_64";
+ sha256 = "ef2a61dce3ee713a4be3cee5a9dda8498095a7db69304a7d6585ac674970958a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/hr/firefox-83.0.tar.bz2";
+ locale = "hr";
+ arch = "linux-x86_64";
+ sha256 = "ab8357cc1f36965ccbd6f4298ffdbb3d77b09cc4b789a3be708d2c51468402bd";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/hsb/firefox-83.0.tar.bz2";
+ locale = "hsb";
+ arch = "linux-x86_64";
+ sha256 = "6a34074a96be7911672b7e83151244f1f963a8cc8930c8d1d113afe8a49c9529";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/hu/firefox-83.0.tar.bz2";
+ locale = "hu";
+ arch = "linux-x86_64";
+ sha256 = "ffec1646df872a757b771a03c00e3e6df3397e7f4af46bd1d6c0fcab242b1721";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/hy-AM/firefox-83.0.tar.bz2";
+ locale = "hy-AM";
+ arch = "linux-x86_64";
+ sha256 = "1b9da538ced466302584fef4ecf415aeae5bee51a87d38bd0a6bb3ea155af66d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ia/firefox-83.0.tar.bz2";
+ locale = "ia";
+ arch = "linux-x86_64";
+ sha256 = "5f8582508155f858c7e52e623579daa7da1aa77bb4e41c2c46d3e6ae8ace6b1e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/id/firefox-83.0.tar.bz2";
+ locale = "id";
+ arch = "linux-x86_64";
+ sha256 = "e5690dcc6b933ddbd27fcfb22f8ab9fc4e4c999d935b6088da38c87af2c567d1";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/is/firefox-83.0.tar.bz2";
+ locale = "is";
+ arch = "linux-x86_64";
+ sha256 = "3776fe6aad623e9b74807a48e105d1619143e78e122906360c4efbc73c2891ee";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/it/firefox-83.0.tar.bz2";
+ locale = "it";
+ arch = "linux-x86_64";
+ sha256 = "eb54c4596602150c619db6d0d5572a59f7d9c4def68a34cb874cbc6535939e2a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ja/firefox-83.0.tar.bz2";
+ locale = "ja";
+ arch = "linux-x86_64";
+ sha256 = "54b70bef0507611ad1ea7560668b46385661b5275c7a0ecaad723db44fd8af88";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ka/firefox-83.0.tar.bz2";
+ locale = "ka";
+ arch = "linux-x86_64";
+ sha256 = "56e72349133297d61dfdec4933a01c2cd8fa3d0da3d784e0598506c2db05938c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/kab/firefox-83.0.tar.bz2";
+ locale = "kab";
+ arch = "linux-x86_64";
+ sha256 = "45f554342449405990c84e910dc6436489046acd00fdc4a0ddabb4b28d7c1284";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/kk/firefox-83.0.tar.bz2";
+ locale = "kk";
+ arch = "linux-x86_64";
+ sha256 = "3463c4ea5df4e072dfca22e8983fdc016adbe2326bf186a0168ea9ee2c36b3bd";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/km/firefox-83.0.tar.bz2";
+ locale = "km";
+ arch = "linux-x86_64";
+ sha256 = "3bb7d2c3e5278d9c51b87d8140096ae01532e99160b866164d1920fb012c085c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/kn/firefox-83.0.tar.bz2";
+ locale = "kn";
+ arch = "linux-x86_64";
+ sha256 = "c9086912382dbff66045c79130403385b9f075bf782220aeb84f03f62a563638";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ko/firefox-83.0.tar.bz2";
+ locale = "ko";
+ arch = "linux-x86_64";
+ sha256 = "6f70169cd58ee1559ab224c3ea6f5309bf75267d9f315e389b7971e8e1feed09";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/lij/firefox-83.0.tar.bz2";
+ locale = "lij";
+ arch = "linux-x86_64";
+ sha256 = "0b089e6f7954f4d99e9e59bd25148c4be620f9486f8d36c3db68fec5ea700d94";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/lt/firefox-83.0.tar.bz2";
+ locale = "lt";
+ arch = "linux-x86_64";
+ sha256 = "b76c545aad6e5b66bd8ab34bf02f7d4f69ecee348381b16c271f4de0243c660d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/lv/firefox-83.0.tar.bz2";
+ locale = "lv";
+ arch = "linux-x86_64";
+ sha256 = "8504d5c00c5569f008b2e308a9193cf62130e89a6e61b33fc842081e4d504322";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/mk/firefox-83.0.tar.bz2";
+ locale = "mk";
+ arch = "linux-x86_64";
+ sha256 = "636a421f6238de1fee37014c3af147220af6a1f3c04e2ce6ec9dd17898bc7c20";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/mr/firefox-83.0.tar.bz2";
+ locale = "mr";
+ arch = "linux-x86_64";
+ sha256 = "1e00d369be11ad8bfb2dda0ceeb3b7b516fd66427d9e85bff4cc1d699ff3659f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ms/firefox-83.0.tar.bz2";
+ locale = "ms";
+ arch = "linux-x86_64";
+ sha256 = "0590f2bff7e43b9f6c081d57276299f8327df73415a8e2a2243e3c4ec9154200";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/my/firefox-83.0.tar.bz2";
+ locale = "my";
+ arch = "linux-x86_64";
+ sha256 = "ae43f0e8d4ff32274b25a1b78e0af44446ea6989edc4eb3c0d9fae36fcf80908";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/nb-NO/firefox-83.0.tar.bz2";
+ locale = "nb-NO";
+ arch = "linux-x86_64";
+ sha256 = "9c3a74fc7670e2202be1f4f75208f0113c115169ef70614af631cf16879e081f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ne-NP/firefox-83.0.tar.bz2";
+ locale = "ne-NP";
+ arch = "linux-x86_64";
+ sha256 = "d830f802cccc7351a447fc59ed64562cac1521d281ddf218c84d1c9af8a65cb3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/nl/firefox-83.0.tar.bz2";
+ locale = "nl";
+ arch = "linux-x86_64";
+ sha256 = "ecfd03850a48ebf7c3ec9400838100514826b8f35744b0167f61c9086893ae66";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/nn-NO/firefox-83.0.tar.bz2";
+ locale = "nn-NO";
+ arch = "linux-x86_64";
+ sha256 = "ad0e4a89afabf1929d441129066dfcbf532d37da31c76bc79108d123cf5cc649";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/oc/firefox-83.0.tar.bz2";
+ locale = "oc";
+ arch = "linux-x86_64";
+ sha256 = "9b9bbba334c4d7d3907f55a6647cecdf0bb2cd6294569a0008d866cd6eb70a35";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/pa-IN/firefox-83.0.tar.bz2";
+ locale = "pa-IN";
+ arch = "linux-x86_64";
+ sha256 = "083266958874618042ee8f2a6162184cd71bc725a994aeb68158d59edb0cafaa";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/pl/firefox-83.0.tar.bz2";
+ locale = "pl";
+ arch = "linux-x86_64";
+ sha256 = "cb7c72fdc91cd9269a2e53725a26ee94db0e2e608a60ff1120fbe5c1627814bf";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/pt-BR/firefox-83.0.tar.bz2";
+ locale = "pt-BR";
+ arch = "linux-x86_64";
+ sha256 = "a2a188a222fc6054ca59d24370528e8c8d4d7dc8e4ab18f71510b415dde73d05";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/pt-PT/firefox-83.0.tar.bz2";
+ locale = "pt-PT";
+ arch = "linux-x86_64";
+ sha256 = "528e1893438ead94afd4013d3c4f4f51107a5d0c4b6d6e018a0687f0d25f9e53";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/rm/firefox-83.0.tar.bz2";
+ locale = "rm";
+ arch = "linux-x86_64";
+ sha256 = "e4d6e53b642da4de5c7f30297c6fec22b37921a55cb744962dc0d60e26812549";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ro/firefox-83.0.tar.bz2";
+ locale = "ro";
+ arch = "linux-x86_64";
+ sha256 = "04ffa3eda69ea0dfc6251564c4c6bc742d5f8e5dbaf6184b4ee9461226ce5c86";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ru/firefox-83.0.tar.bz2";
+ locale = "ru";
+ arch = "linux-x86_64";
+ sha256 = "697ddeb8ec024b5459492ebd652a612cfa1911267071b230f5ea6ac78a1e3075";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/si/firefox-83.0.tar.bz2";
+ locale = "si";
+ arch = "linux-x86_64";
+ sha256 = "a3256c648ea75ce36009306a3c039af228e645ea2e54361fe239ad0cf0869ead";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/sk/firefox-83.0.tar.bz2";
+ locale = "sk";
+ arch = "linux-x86_64";
+ sha256 = "1ae0f898d34c74ea427228d93646ae47990834d14bc4f5563427409dba066f8d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/sl/firefox-83.0.tar.bz2";
+ locale = "sl";
+ arch = "linux-x86_64";
+ sha256 = "9e14b4ad7bd9a8026074e0a3da3d3ba74dbb1be31a2e9cae787802d090c7a965";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/son/firefox-83.0.tar.bz2";
+ locale = "son";
+ arch = "linux-x86_64";
+ sha256 = "1b928ca974133a346950ffc663fbed9d1876a4c0bca53fd807d8077d031531d5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/sq/firefox-83.0.tar.bz2";
+ locale = "sq";
+ arch = "linux-x86_64";
+ sha256 = "7bb9bcfe490bf5d577e55e9b612c932c93ac58252cef592b2af39c17987e700b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/sr/firefox-83.0.tar.bz2";
+ locale = "sr";
+ arch = "linux-x86_64";
+ sha256 = "90e496a5fe9c5d8c38dfcf5a1a07ea04be983fe78c68cb13a2b99067b0f02e7a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/sv-SE/firefox-83.0.tar.bz2";
+ locale = "sv-SE";
+ arch = "linux-x86_64";
+ sha256 = "eab8a1e51a90d36b58901db6175e724f38afb91270b05c51a93c03f8c51fe432";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ta/firefox-83.0.tar.bz2";
+ locale = "ta";
+ arch = "linux-x86_64";
+ sha256 = "bb6d49500393d20134a6f749a77de1fc4cae2feba4e49261862f8a634b4b9276";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/te/firefox-83.0.tar.bz2";
+ locale = "te";
+ arch = "linux-x86_64";
+ sha256 = "a1104e292f949976e423b587fe9728fc741b7a11e276e7d747afd3a93abe3eb5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/th/firefox-83.0.tar.bz2";
+ locale = "th";
+ arch = "linux-x86_64";
+ sha256 = "403e4a86b5f95cb22cdb2100372c55d92fcb4708e3f719da72b643637c711458";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/tl/firefox-83.0.tar.bz2";
+ locale = "tl";
+ arch = "linux-x86_64";
+ sha256 = "993cf86a1b045a477fd4c683e503314fc2aea5a0a52f1faaacd18a0fdc5c7def";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/tr/firefox-83.0.tar.bz2";
+ locale = "tr";
+ arch = "linux-x86_64";
+ sha256 = "8e9e96d0b1a2014dc7374ea893fe72bc72f3840742d305a6e73417468dd6245b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/trs/firefox-83.0.tar.bz2";
+ locale = "trs";
+ arch = "linux-x86_64";
+ sha256 = "3590ebb4c888cf92ebd615df9eda2413fd0a3031293d68809fef74fc92fa759b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/uk/firefox-83.0.tar.bz2";
+ locale = "uk";
+ arch = "linux-x86_64";
+ sha256 = "7a3a2bae67ddd2afd2d6953f5f045a831595ea29e5cc6ad7083b8ac89e55917b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/ur/firefox-83.0.tar.bz2";
+ locale = "ur";
+ arch = "linux-x86_64";
+ sha256 = "445a599ba623d8673d71f6ebde70c64a93e28e57b6859e325b0151240f1d49e5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/uz/firefox-83.0.tar.bz2";
+ locale = "uz";
+ arch = "linux-x86_64";
+ sha256 = "b63e6c1c6afdc3694ee1d2b21175f4a5603c4454e43f0a08e87ccf800862b6bc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/vi/firefox-83.0.tar.bz2";
+ locale = "vi";
+ arch = "linux-x86_64";
+ sha256 = "7127340d189ff601f96ba6f5e6a6175d850e822599e10762908d406b2174a256";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/xh/firefox-83.0.tar.bz2";
+ locale = "xh";
+ arch = "linux-x86_64";
+ sha256 = "41772e457eaf385230086a461033854ad214b4160c6f99f7eb6c4df8dd137dc5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/zh-CN/firefox-83.0.tar.bz2";
+ locale = "zh-CN";
+ arch = "linux-x86_64";
+ sha256 = "013fe88aea216fbc4de9fdaaf559d65678ba389049bcff896540dae8d0a9564d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-x86_64/zh-TW/firefox-83.0.tar.bz2";
+ locale = "zh-TW";
+ arch = "linux-x86_64";
+ sha256 = "7e9eea2a326842f652aad4995f796af9550d03c034587d171e4b2a33da934645";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ach/firefox-83.0.tar.bz2";
+ locale = "ach";
+ arch = "linux-i686";
+ sha256 = "9974b19f4f15d9aa33b5432cceea05efe44f31c4123596aca9fb5cd3dd734152";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/af/firefox-83.0.tar.bz2";
+ locale = "af";
+ arch = "linux-i686";
+ sha256 = "5600ad5fad398648d2e7a2d7bdf7901769fa428f9ef9f79046917133e12a7eb6";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/an/firefox-83.0.tar.bz2";
+ locale = "an";
+ arch = "linux-i686";
+ sha256 = "d8e0843dafcaf1b010773b83a665fd593741858b60aaba61d4c308a86f765146";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ar/firefox-83.0.tar.bz2";
+ locale = "ar";
+ arch = "linux-i686";
+ sha256 = "952b2ad360662341b9281cfdd93a141fe2efd16f73baa4fc4be1de7b8f12c8c3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ast/firefox-83.0.tar.bz2";
+ locale = "ast";
+ arch = "linux-i686";
+ sha256 = "a7728b09f7e96983a031a32b1b938fa362e1a1e58722b37ec03a4048a152f0b1";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/az/firefox-83.0.tar.bz2";
+ locale = "az";
+ arch = "linux-i686";
+ sha256 = "c6019a3f7ef56583445acc5ab310770c937b44182a1bb3ed54ac452e6e19f8fc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/be/firefox-83.0.tar.bz2";
+ locale = "be";
+ arch = "linux-i686";
+ sha256 = "12ead04878e308682f04afb6ac9ce9ab134a5a542af328e029cd973c14fe7444";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/bg/firefox-83.0.tar.bz2";
+ locale = "bg";
+ arch = "linux-i686";
+ sha256 = "7134539d5c259cdf6dd316205b857acae87730ca01bd6ef2efcca75f9d06d027";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/bn/firefox-83.0.tar.bz2";
+ locale = "bn";
+ arch = "linux-i686";
+ sha256 = "a97524e0d6f6f61045b2573ac2fe98e31fa372429f5f53c25fb4cb4d32a31940";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/br/firefox-83.0.tar.bz2";
+ locale = "br";
+ arch = "linux-i686";
+ sha256 = "4619705703a6878fba4de4227d90143abb92237ba556a8c5f4a51c9701671821";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/bs/firefox-83.0.tar.bz2";
+ locale = "bs";
+ arch = "linux-i686";
+ sha256 = "2131babd061761fa1119a536ae354145315875c5d8cd300405a35924bbbfcc34";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ca-valencia/firefox-83.0.tar.bz2";
+ locale = "ca-valencia";
+ arch = "linux-i686";
+ sha256 = "73238eb95ac828f4bc2ac220e4b953b950a75b88600b457bf3bd528245574cd8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ca/firefox-83.0.tar.bz2";
+ locale = "ca";
+ arch = "linux-i686";
+ sha256 = "73e65093a587c89c9a392e3b65375ad2158c88e2905ab116eaf8da7cc5841cda";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/cak/firefox-83.0.tar.bz2";
+ locale = "cak";
+ arch = "linux-i686";
+ sha256 = "7f2dd3fdf1e0cae21a1517286b60bbbabd310dfc0dc18588fbe21ba671e97dd3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/cs/firefox-83.0.tar.bz2";
+ locale = "cs";
+ arch = "linux-i686";
+ sha256 = "5f639cc6d14b06ae62f73fc01b909182efea32710dfd817be60499f4da3eafd7";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/cy/firefox-83.0.tar.bz2";
+ locale = "cy";
+ arch = "linux-i686";
+ sha256 = "7a3e9921b2e6e407ebeeb22f1ac4b529222a1f5fbdc84c44fc902b8db6aeb1ef";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/da/firefox-83.0.tar.bz2";
+ locale = "da";
+ arch = "linux-i686";
+ sha256 = "05dc3274927f692ec3c60f8353a30e2bcb1a36b54f4ddff90407e2818a497a38";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/de/firefox-83.0.tar.bz2";
+ locale = "de";
+ arch = "linux-i686";
+ sha256 = "c95affb4655b7a0ad6959651cf10090970035c74601ea141366cbb5d44f8a526";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/dsb/firefox-83.0.tar.bz2";
+ locale = "dsb";
+ arch = "linux-i686";
+ sha256 = "c9baf7df51fdebbb2521dd10830f759110a9c92dcdb579fad99d0c4112126e66";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/el/firefox-83.0.tar.bz2";
+ locale = "el";
+ arch = "linux-i686";
+ sha256 = "52afcd2037b9cda2c66975dd184276bcccca27833cd7a6da989e32c591a06060";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/en-CA/firefox-83.0.tar.bz2";
+ locale = "en-CA";
+ arch = "linux-i686";
+ sha256 = "375d3a11f236560f06397f157209b1ce476197a0e7b327cf187dc2002d053c90";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/en-GB/firefox-83.0.tar.bz2";
+ locale = "en-GB";
+ arch = "linux-i686";
+ sha256 = "610657a623b5680c2ea350a5f3d1ec676e9dac8720e0e67b3e627e37a58b0ad6";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/en-US/firefox-83.0.tar.bz2";
+ locale = "en-US";
+ arch = "linux-i686";
+ sha256 = "ac4df9d78ac0321f6be266e7fbf6b79d80bee7cfdf1b00c433072d2283c5fdf8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/eo/firefox-83.0.tar.bz2";
+ locale = "eo";
+ arch = "linux-i686";
+ sha256 = "f23479cb30cf27fa368e9e04591aad2051eedde5e69d105bfc9ba6168792b44b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/es-AR/firefox-83.0.tar.bz2";
+ locale = "es-AR";
+ arch = "linux-i686";
+ sha256 = "5657636c105d301474cf5d2707733a35ac5f5687790002d5778dffb32a727adc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/es-CL/firefox-83.0.tar.bz2";
+ locale = "es-CL";
+ arch = "linux-i686";
+ sha256 = "896f2ac45b98eccd487de64b6c5aa98733d97bd4422dd1a16d02883e3a06c132";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/es-ES/firefox-83.0.tar.bz2";
+ locale = "es-ES";
+ arch = "linux-i686";
+ sha256 = "9d337fc821dae150c4f3ce26c427ad0efa22c53f3b311b4ce7693b33c9ea4d7d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/es-MX/firefox-83.0.tar.bz2";
+ locale = "es-MX";
+ arch = "linux-i686";
+ sha256 = "f9cbd03f9813157835ef7faf9fa2374e488144930ffdec765c370a95a9c72120";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/et/firefox-83.0.tar.bz2";
+ locale = "et";
+ arch = "linux-i686";
+ sha256 = "4f33cbb67003da1b4db4dc12ee2e7b9fe942bc6e6d770608361355ce7fcf8214";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/eu/firefox-83.0.tar.bz2";
+ locale = "eu";
+ arch = "linux-i686";
+ sha256 = "31970c98d028a83a6198dcee9c5f8191343cd84ec6a7fa032a31730db2cc7b00";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/fa/firefox-83.0.tar.bz2";
+ locale = "fa";
+ arch = "linux-i686";
+ sha256 = "1125c534f2067e57701fab7ae3df55c52dc10693b069817021072c74b8b9bdcf";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ff/firefox-83.0.tar.bz2";
+ locale = "ff";
+ arch = "linux-i686";
+ sha256 = "ef6c66b0d8a6edce0c982eaee55cd14a4ac4d365478976a0c4f1cd48a6c10c6d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/fi/firefox-83.0.tar.bz2";
+ locale = "fi";
+ arch = "linux-i686";
+ sha256 = "bcd529c0227bd64403dc023ef91459556fbb186e072c12075b705d50293d86c3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/fr/firefox-83.0.tar.bz2";
+ locale = "fr";
+ arch = "linux-i686";
+ sha256 = "47c56fe2b88054d97622e9c0ff2043323b7a916da1e11541e96cf7b05c3e7d52";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/fy-NL/firefox-83.0.tar.bz2";
+ locale = "fy-NL";
+ arch = "linux-i686";
+ sha256 = "b0ed17e5022b0817d6b4f58ef990ce22774bde875151c60be1f7251ec90cb189";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ga-IE/firefox-83.0.tar.bz2";
+ locale = "ga-IE";
+ arch = "linux-i686";
+ sha256 = "380aad276cadff8221e4f675751278ba994e08ddb46a0ebde12d87b741c23263";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/gd/firefox-83.0.tar.bz2";
+ locale = "gd";
+ arch = "linux-i686";
+ sha256 = "0489ed6e1e9150a0facb4e6fb59bea7673e89669d167806d5651224b939fada5";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/gl/firefox-83.0.tar.bz2";
+ locale = "gl";
+ arch = "linux-i686";
+ sha256 = "bc41c2b611ecb4ccdedbbf480138a3bc6326106d6c1641d6a06e40f502427af0";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/gn/firefox-83.0.tar.bz2";
+ locale = "gn";
+ arch = "linux-i686";
+ sha256 = "ade8fe9ab75b0a5f75ce80ba0f8065c4b4cbf54d7772f4c3be96886ca166b373";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/gu-IN/firefox-83.0.tar.bz2";
+ locale = "gu-IN";
+ arch = "linux-i686";
+ sha256 = "bc20ad60eee0e6a3d532e436d9b62175872fcb27dab4c9a5083ed6f4bda5f036";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/he/firefox-83.0.tar.bz2";
+ locale = "he";
+ arch = "linux-i686";
+ sha256 = "a08862d8ebdfa2d6c4f038b91f264c9abe873537d1a7cd2997a1eb4d73bf6f4c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/hi-IN/firefox-83.0.tar.bz2";
+ locale = "hi-IN";
+ arch = "linux-i686";
+ sha256 = "8ed5b454bdc38f07c79924a1dc08e76e65a48bd671991744a441693185683916";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/hr/firefox-83.0.tar.bz2";
+ locale = "hr";
+ arch = "linux-i686";
+ sha256 = "97356a661d56d51a9210109db8ad75d61e3e00e4c7570d4e824712b52337af27";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/hsb/firefox-83.0.tar.bz2";
+ locale = "hsb";
+ arch = "linux-i686";
+ sha256 = "5706aa76b23161baf24b79d2b45dd706006fb73aeedd06f41f3273f8078f371b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/hu/firefox-83.0.tar.bz2";
+ locale = "hu";
+ arch = "linux-i686";
+ sha256 = "3b894beaef35012df54ba4c7509a06ece1a0cdf741308b3510ddc702c4eb3656";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/hy-AM/firefox-83.0.tar.bz2";
+ locale = "hy-AM";
+ arch = "linux-i686";
+ sha256 = "b2894092de59b7d6bd6dcd2111fa4591b1a4ed054fd107e2093bd0962edb4405";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ia/firefox-83.0.tar.bz2";
+ locale = "ia";
+ arch = "linux-i686";
+ sha256 = "9d9ee7e05a02078b7d4041c3b63e79f91f0a888b919cf726e2e69090ff05f71d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/id/firefox-83.0.tar.bz2";
+ locale = "id";
+ arch = "linux-i686";
+ sha256 = "13e54589a23323e9043d4dac5586a31e5d43bdde0356b1a00a86f91ee5813eb2";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/is/firefox-83.0.tar.bz2";
+ locale = "is";
+ arch = "linux-i686";
+ sha256 = "955a8a4ff1c5ba7124593b3c8537201ffb1fe33ea5c3edd6ab30e80e6b28f60a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/it/firefox-83.0.tar.bz2";
+ locale = "it";
+ arch = "linux-i686";
+ sha256 = "23927419191d7aee8b29da29d213ee9c7ff39363f3fc9171c70d801158cb895b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ja/firefox-83.0.tar.bz2";
+ locale = "ja";
+ arch = "linux-i686";
+ sha256 = "4ffaf6df345922bcd82942956a0f344c4b52ac49ec64879fef7307a0c34eb8e9";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ka/firefox-83.0.tar.bz2";
+ locale = "ka";
+ arch = "linux-i686";
+ sha256 = "df1027754efd054bae379b35228067799e75820b08ca7e6aff5a527fdaf046a8";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/kab/firefox-83.0.tar.bz2";
+ locale = "kab";
+ arch = "linux-i686";
+ sha256 = "6fc1e5d662ce742a48c003145b1b4b58cb296b43a20f718bdcffdc05e386078f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/kk/firefox-83.0.tar.bz2";
+ locale = "kk";
+ arch = "linux-i686";
+ sha256 = "52cb3ac3a33da1227c3aa5e47e04620be2cc020bc520fcf013fe11ad74ad6378";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/km/firefox-83.0.tar.bz2";
+ locale = "km";
+ arch = "linux-i686";
+ sha256 = "c598fa97bb79f56d01afb30caeff29a2c7dd1f162d2fb49c0632ee259d0fe860";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/kn/firefox-83.0.tar.bz2";
+ locale = "kn";
+ arch = "linux-i686";
+ sha256 = "d6795f3f3c0978dbc399768fd824cceb6a3c1c883c153f65102ef476f74d6408";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ko/firefox-83.0.tar.bz2";
+ locale = "ko";
+ arch = "linux-i686";
+ sha256 = "b4d0b62cdfd332d8e9878b75918a0362a7b68db0b62e4e4508dfa176e79b8ed7";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/lij/firefox-83.0.tar.bz2";
+ locale = "lij";
+ arch = "linux-i686";
+ sha256 = "257eec8bead076119b0c3679feb4f3de34c9cf66bd05215e7d76936e6d3ce052";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/lt/firefox-83.0.tar.bz2";
+ locale = "lt";
+ arch = "linux-i686";
+ sha256 = "326925d68306ec6e5b7334eb413cff395ce6a27abf5b0981dee25a7888c64079";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/lv/firefox-83.0.tar.bz2";
+ locale = "lv";
+ arch = "linux-i686";
+ sha256 = "036264de51a7a81b3d636b8217db571db70631231d485f353e64e9f43f0192f4";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/mk/firefox-83.0.tar.bz2";
+ locale = "mk";
+ arch = "linux-i686";
+ sha256 = "6d4966ae49ba7746395b17b98c158c07d33293b68a6c648d0238107812ccfc03";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/mr/firefox-83.0.tar.bz2";
+ locale = "mr";
+ arch = "linux-i686";
+ sha256 = "88a90205bfd157fbcb0697efbd4884772a463f776f5110aae9903dbc1151fcbc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ms/firefox-83.0.tar.bz2";
+ locale = "ms";
+ arch = "linux-i686";
+ sha256 = "67d3651739404a73f263251896c129dc121808d4859169b3469b640345433e9e";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/my/firefox-83.0.tar.bz2";
+ locale = "my";
+ arch = "linux-i686";
+ sha256 = "d7e9a1fe6d2e0e32c2ab9a773d198de241ac2a7d330d9eddce4f3afb9a67671b";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/nb-NO/firefox-83.0.tar.bz2";
+ locale = "nb-NO";
+ arch = "linux-i686";
+ sha256 = "66c165884d4397db3e420151d2b6fa3d7bb7c6de790e6d284815cdcc323da3fe";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ne-NP/firefox-83.0.tar.bz2";
+ locale = "ne-NP";
+ arch = "linux-i686";
+ sha256 = "f75832bd74f5ce8db3765201eee058f0386f196f407223e186c0be3d2a665fcf";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/nl/firefox-83.0.tar.bz2";
+ locale = "nl";
+ arch = "linux-i686";
+ sha256 = "beb68fb193dfcccbe22369f9adcbebe701fd4c9ab5943ec685d5d20398a1ea5d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/nn-NO/firefox-83.0.tar.bz2";
+ locale = "nn-NO";
+ arch = "linux-i686";
+ sha256 = "de2716b8f4c13c6ef76537ef52f1d0529016302ce220a90d9b5062af9becb5b7";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/oc/firefox-83.0.tar.bz2";
+ locale = "oc";
+ arch = "linux-i686";
+ sha256 = "af2a788560a65cb9f3d2ce98acce4ecd3b3105b6c924c6a4de1a9deb6f2a4d42";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/pa-IN/firefox-83.0.tar.bz2";
+ locale = "pa-IN";
+ arch = "linux-i686";
+ sha256 = "a3575371b20bab63a8bccc110343e0cd0736cffbc5c72dd7aa371c646a057060";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/pl/firefox-83.0.tar.bz2";
+ locale = "pl";
+ arch = "linux-i686";
+ sha256 = "daa554b493ce1efa90a1b040e78d2f2e7ad8ca70c16ee19312c69ed4a12f00e3";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/pt-BR/firefox-83.0.tar.bz2";
+ locale = "pt-BR";
+ arch = "linux-i686";
+ sha256 = "4f3fe4a1ce0e12383b37832f44b59fbb40b8fb6e95786edc57ea67ea3d5530bd";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/pt-PT/firefox-83.0.tar.bz2";
+ locale = "pt-PT";
+ arch = "linux-i686";
+ sha256 = "c16bcb116b845a6b28b72096ae43d50f19c7b9868c8bbb833db60eaaa70b001d";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/rm/firefox-83.0.tar.bz2";
+ locale = "rm";
+ arch = "linux-i686";
+ sha256 = "334d3dcf333a66f4bd169536f7f3b56ba4b257793dfd0837badff2a77b3668f4";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ro/firefox-83.0.tar.bz2";
+ locale = "ro";
+ arch = "linux-i686";
+ sha256 = "1e6ad9735fe0046beaf80ac35d0a1831aade14f388d08991b9bc583135ebd94c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ru/firefox-83.0.tar.bz2";
+ locale = "ru";
+ arch = "linux-i686";
+ sha256 = "a252bcd66f01375fbc4ce040b89c853c34745e8dede116d200303c56d6307f15";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/si/firefox-83.0.tar.bz2";
+ locale = "si";
+ arch = "linux-i686";
+ sha256 = "ebc5ce83b456f75b671694ac954258ca480caee563e0cb395786692aedf24d88";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/sk/firefox-83.0.tar.bz2";
+ locale = "sk";
+ arch = "linux-i686";
+ sha256 = "28aac94a71298c459f14949c9c82b379762d3192a16d92e90605ab8925cb31ad";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/sl/firefox-83.0.tar.bz2";
+ locale = "sl";
+ arch = "linux-i686";
+ sha256 = "7fe0eb68a898488bcb697120542fbdcfd1d972c658b4c361bba351a8f5eb76e0";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/son/firefox-83.0.tar.bz2";
+ locale = "son";
+ arch = "linux-i686";
+ sha256 = "f9cb1327834b6a6e41d4abf531410391a40f33a8d168d562dc367faf31d9e042";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/sq/firefox-83.0.tar.bz2";
+ locale = "sq";
+ arch = "linux-i686";
+ sha256 = "15370cc0527797f451a5a1f47637c6663437c8f49fc5c056ccbc2e7510cd6c94";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/sr/firefox-83.0.tar.bz2";
+ locale = "sr";
+ arch = "linux-i686";
+ sha256 = "c44773c36eb39067e429fb4a4b57676abc7eb9fcf45bd6654d96761f64747c6a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/sv-SE/firefox-83.0.tar.bz2";
+ locale = "sv-SE";
+ arch = "linux-i686";
+ sha256 = "aa8d2dc50dce8a53a926c71a4a7a57023a017d5fbd54cd1e446ef74b5eef7dea";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ta/firefox-83.0.tar.bz2";
+ locale = "ta";
+ arch = "linux-i686";
+ sha256 = "5fc3e8a048ec24e49c4c4a0e36712b378687e927c30dc8ecb3ec63bcf983062a";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/te/firefox-83.0.tar.bz2";
+ locale = "te";
+ arch = "linux-i686";
+ sha256 = "ff123410cec64c47d239a432d32eaefa494e7cd7fb0157cc45917fe04b2916ef";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/th/firefox-83.0.tar.bz2";
+ locale = "th";
+ arch = "linux-i686";
+ sha256 = "cb7cbf97884a5b4f62c4e0932ead0e5de018c9623590ac3798a86986916258dc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/tl/firefox-83.0.tar.bz2";
+ locale = "tl";
+ arch = "linux-i686";
+ sha256 = "0d55a23e2c0b7da80a6c042e50fc3c9364c3f24309cf255bfbe55a320ec2cf00";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/tr/firefox-83.0.tar.bz2";
+ locale = "tr";
+ arch = "linux-i686";
+ sha256 = "bfc1adb570f79b4f095bc87ab5a54c6b5179579840ded61319a10ad5ff39d52f";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/trs/firefox-83.0.tar.bz2";
+ locale = "trs";
+ arch = "linux-i686";
+ sha256 = "05b5a2252380147ec47561e29514e3f994414b46aae3dd168909f03e7dec16ef";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/uk/firefox-83.0.tar.bz2";
+ locale = "uk";
+ arch = "linux-i686";
+ sha256 = "7e34b52f4d46a735e36f549295d0f9704113024058a7d8d69a8ee6a023d03755";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/ur/firefox-83.0.tar.bz2";
+ locale = "ur";
+ arch = "linux-i686";
+ sha256 = "1d48e536c09f862bc00fcaf9a175eaeffac1e0aaff66d71ca49123c00cc885bc";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/uz/firefox-83.0.tar.bz2";
+ locale = "uz";
+ arch = "linux-i686";
+ sha256 = "1f1cf131b3196886aa0f923c5dbaa279b86c3473dc048ce23d58fe811ca1266c";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/vi/firefox-83.0.tar.bz2";
+ locale = "vi";
+ arch = "linux-i686";
+ sha256 = "b98507cd809abd28c51514448bf995661dede7c727808ab8c2db46da8da0a164";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/xh/firefox-83.0.tar.bz2";
+ locale = "xh";
+ arch = "linux-i686";
+ sha256 = "73de4ec29cd09610359909ada39820a119a15c3ae0cc1658c2e9b874801a9015";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/zh-CN/firefox-83.0.tar.bz2";
+ locale = "zh-CN";
+ arch = "linux-i686";
+ sha256 = "fea085476f4456133c1f0973121319f1c3efadcc50134cbf5ccde351bbe2ff06";
+ }
+ { url = "http://archive.mozilla.org/pub/firefox/releases/83.0/linux-i686/zh-TW/firefox-83.0.tar.bz2";
+ locale = "zh-TW";
+ arch = "linux-i686";
+ sha256 = "5aebd374f2e73f83bec4c14239555d9f2771d3379280fc55f90f1ae0909be009";
+ }
+ ];
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/update.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/update.nix
new file mode 100644
index 000000000000..018bf04cb570
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox-bin/update.nix
@@ -0,0 +1,93 @@
+{ name
+, channel
+, writeScript
+, xidel
+, coreutils
+, gnused
+, gnugrep
+, curl
+, gnupg
+, runtimeShell
+, baseName ? "firefox"
+, basePath ? "pkgs/applications/networking/browsers/firefox-bin"
+, baseUrl
+}:
+
+let
+ isBeta =
+ channel != "release";
+
+in writeScript "update-${name}" ''
+ #!${runtimeShell}
+ PATH=${coreutils}/bin:${gnused}/bin:${gnugrep}/bin:${xidel}/bin:${curl}/bin:${gnupg}/bin
+ set -eux
+ pushd ${basePath}
+
+ HOME=`mktemp -d`
+ export GNUPGHOME=`mktemp -d`
+
+ gpg --import ${./mozilla.asc}
+
+ tmpfile=`mktemp`
+ url=${baseUrl}
+
+ # retriving latest released version
+ # - extracts all links from the $url
+ # - removes . and ..
+ # - this line remove everything not starting with a number
+ # - this line sorts everything with semver in mind
+ # - we remove lines that are mentioning funnelcake
+ # - this line removes beta version if we are looking for final release
+ # versions or removes release versions if we are looking for beta
+ # versions
+ # - this line pick up latest release
+ version=`xidel -s $url --extract "//a" | \
+ sed s"/.$//" | \
+ grep "^[0-9]" | \
+ sort --version-sort | \
+ grep -v "funnelcake" | \
+ grep -e "${if isBeta then "b" else ""}\([[:digit:]]\|[[:digit:]][[:digit:]]\)$" | ${if isBeta then "" else "grep -v \"b\" |"} \
+ tail -1`
+
+ curl --silent -o $HOME/shasums "$url$version/SHA256SUMS"
+ curl --silent -o $HOME/shasums.asc "$url$version/SHA256SUMS.asc"
+ gpgv --keyring=$GNUPGHOME/pubring.kbx $HOME/shasums.asc $HOME/shasums
+
+ # this is a list of sha256 and tarballs for both arches
+ # Upstream files contains python repr strings like b'somehash', hence the sed dance
+ shasums=`cat $HOME/shasums | sed -E s/"b'([a-f0-9]{64})'?(.*)"/'\1\2'/ | grep tar.bz2`
+
+ cat > $tmpfile <<EOF
+ {
+ version = "$version";
+ sources = [
+ EOF
+ for arch in linux-x86_64 linux-i686; do
+ # retriving a list of all tarballs for each arch
+ # - only select tarballs for current arch
+ # - only select tarballs for current version
+ # - rename space with colon so that for loop doesnt
+ # - inteprets sha and path as 2 lines
+ for line in `echo "$shasums" | \
+ grep $arch | \
+ grep "${baseName}-$version.tar.bz2$" | \
+ tr " " ":"`; do
+ # create an entry for every locale
+ cat >> $tmpfile <<EOF
+ { url = "$url$version/`echo $line | cut -d":" -f3`";
+ locale = "`echo $line | cut -d":" -f3 | sed "s/$arch\///" | sed "s/\/.*//"`";
+ arch = "$arch";
+ sha256 = "`echo $line | cut -d":" -f1`";
+ }
+ EOF
+ done
+ done
+ cat >> $tmpfile <<EOF
+ ];
+ }
+ EOF
+
+ mv $tmpfile ${channel}_sources.nix
+
+ popd
+''
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/common.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/common.nix
new file mode 100644
index 000000000000..1fbfdc2a7da6
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/common.nix
@@ -0,0 +1,392 @@
+{ pname, ffversion, meta, updateScript ? null
+, src, unpackPhase ? null, patches ? []
+, extraNativeBuildInputs ? [], extraConfigureFlags ? [], extraMakeFlags ? [] }:
+
+{ lib, stdenv, pkgconfig, pango, perl, python2, python3, zip
+, libjpeg, zlib, dbus, dbus-glib, bzip2, xorg
+, freetype, fontconfig, file, nspr, nss, nss_3_53, libnotify
+, yasm, libGLU, libGL, sqlite, unzip, makeWrapper
+, hunspell, libXdamage, libevent, libstartup_notification
+, libvpx_1_8
+, icu67, libpng, jemalloc, glib
+, autoconf213, which, gnused, rustPackages, rustPackages_1_45
+, rust-cbindgen, nodejs, nasm, fetchpatch
+, gnum4
+, debugBuild ? false
+
+### optionals
+
+## optional libraries
+
+, alsaSupport ? stdenv.isLinux, alsaLib
+, pulseaudioSupport ? stdenv.isLinux, libpulseaudio
+, ffmpegSupport ? true
+, gtk3Support ? true, gtk2, gtk3, wrapGAppsHook
+, waylandSupport ? true, libxkbcommon
+# LTO is disabled since it caused segfaults on wayland see https://github.com/NixOS/nixpkgs/issues/101429
+, ltoSupport ? false, overrideCC, buildPackages
+, gssSupport ? true, kerberos
+, pipewireSupport ? waylandSupport && webrtcSupport, pipewire
+
+## privacy-related options
+
+, privacySupport ? false
+
+# WARNING: NEVER set any of the options below to `true` by default.
+# Set to `!privacySupport` or `false`.
+
+# webrtcSupport breaks the aarch64 build on version >= 60, fixed in 63.
+# https://bugzilla.mozilla.org/show_bug.cgi?id=1434589
+, webrtcSupport ? !privacySupport
+, geolocationSupport ? !privacySupport
+, googleAPISupport ? geolocationSupport
+, crashreporterSupport ? false
+
+, safeBrowsingSupport ? false
+, drmSupport ? false
+
+# macOS dependencies
+, xcbuild, CoreMedia, ExceptionHandling, Kerberos, AVFoundation, MediaToolbox
+, CoreLocation, Foundation, AddressBook, libobjc, cups, rsync
+
+## other
+
+# As stated by Sylvestre Ledru (@sylvestre) on Nov 22, 2017 at
+# https://github.com/NixOS/nixpkgs/issues/31843#issuecomment-346372756 we
+# have permission to use the official firefox branding.
+#
+# For purposes of documentation the statement of @sylvestre:
+# > As the person who did part of the work described in the LWN article
+# > and release manager working for Mozilla, I can confirm the statement
+# > that I made in
+# > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=815006
+# >
+# > @garbas shared with me the list of patches applied for the Nix package.
+# > As they are just for portability and tiny modifications, they don't
+# > alter the experience of the product. In parallel, Rok also shared the
+# > build options. They seem good (even if I cannot judge the quality of the
+# > packaging of the underlying dependencies like sqlite, png, etc).
+# > Therefor, as long as you keep the patch queue sane and you don't alter
+# > the experience of Firefox users, you won't have any issues using the
+# > official branding.
+, enableOfficialBranding ? true
+}:
+
+assert stdenv.cc.libc or null != null;
+assert pipewireSupport -> !waylandSupport || !webrtcSupport -> throw "pipewireSupport requires both wayland and webrtc support.";
+assert ltoSupport -> stdenv.isDarwin -> throw "LTO is broken on Darwin (see PR#19312).";
+
+let
+ flag = tf: x: [(if tf then "--enable-${x}" else "--disable-${x}")];
+
+ default-toolkit = if stdenv.isDarwin then "cairo-cocoa"
+ else "cairo-gtk${if gtk3Support then "3${lib.optionalString waylandSupport "-wayland"}" else "2"}";
+
+ binaryName = "firefox";
+ binaryNameCapitalized = lib.toUpper (lib.substring 0 1 binaryName) + lib.substring 1 (-1) binaryName;
+
+ browserName = if stdenv.isDarwin then binaryNameCapitalized else binaryName;
+
+ execdir = if stdenv.isDarwin
+ then "/Applications/${binaryNameCapitalized}.app/Contents/MacOS"
+ else "/bin";
+
+ # Darwin's stdenv provides the default llvmPackages version, match that since
+ # clang LTO on Darwin is broken so the stdenv is not being changed.
+ llvmPackages = if stdenv.isDarwin
+ then buildPackages.llvmPackages
+ else buildPackages.llvmPackages_10;
+
+ # When LTO for Darwin is fixed, the following will need updating as lld
+ # doesn't work on it. For now it is fine since ltoSupport implies no Darwin.
+ buildStdenv = if ltoSupport
+ then overrideCC stdenv llvmPackages.lldClang
+ else stdenv;
+
+ # 78 ESR won't build with rustc 1.47
+ inherit (if lib.versionAtLeast ffversion "82" then rustPackages else rustPackages_1_45)
+ rustc cargo;
+
+ nss_pkg = if lib.versionOlder ffversion "83" then nss_3_53 else nss;
+in
+
+buildStdenv.mkDerivation ({
+ name = "${pname}-unwrapped-${ffversion}";
+ version = ffversion;
+
+ inherit src unpackPhase meta;
+
+ patches = [
+ ./env_var_for_system_dir.patch
+ ./no-buildconfig-ffx76.patch
+ ] ++
+
+ # there are two flavors of pipewire support
+ # The patches for the ESR release and the patches for the current stable
+ # release.
+ # Until firefox upstream stabilizes pipewire support we will have to continue
+ # tracking multiple versions here.
+ lib.optional (pipewireSupport && lib.versionOlder ffversion "83")
+ (fetchpatch {
+ # https://src.fedoraproject.org/rpms/firefox/blob/master/f/firefox-pipewire-0-3.patch
+ url = "https://src.fedoraproject.org/rpms/firefox/raw/e99b683a352cf5b2c9ff198756859bae408b5d9d/f/firefox-pipewire-0-3.patch";
+ sha256 = "0qc62di5823r7ly2lxkclzj9rhg2z7ms81igz44nv0fzv3dszdab";
+ })
+ ++
+ # This picks pipewire patches from fedora that are part of https://bugzilla.mozilla.org/show_bug.cgi?id=1672944
+ lib.optionals (pipewireSupport && lib.versionAtLeast ffversion "83") (let
+ fedora_revision = "d6756537dd8cf4d9816dc63ada66ea026e0fd128";
+ mkPWPatch = spec: fetchpatch {
+ inherit (spec) name sha256;
+ url = "https://src.fedoraproject.org/rpms/firefox/raw/${fedora_revision}/f/${spec.name}";
+ };
+ in map mkPWPatch [
+ { name = "pw1.patch"; sha256 = "1a7zvngn3k7dg886zmi38kmrsdzh2rrr46aw59bhr1gfmq8wlwn0"; }
+ { name = "pw2.patch"; sha256 = "17irg3yb2mchcy0z0nr4k65mwvkps467cvvczr10fnm06lhkhw1l"; }
+ { name = "pw3.patch"; sha256 = "12p6ql5ff2lfzlni6xkpz63h2xr6n2a9zf8hhjl99fj56rif6706"; }
+ { name = "pw4.patch"; sha256 = "0rvysc92rdm98s47w5lvbnrklrf7d299k3918qnldniyb4b9p4mg"; }
+ { name = "pw5.patch"; sha256 = "0kk2yxq4qkfwc4px6m08jrn18a7a7dhrngfiaw84r9ga6sgn0z00"; }
+ { name = "pw6.patch"; sha256 = "12lhx9wjpw0ahbfmw07wsx76bb223mr453q9cg8cq951vyskch3s"; }
+ { name = "pw7.patch"; sha256 = "0afw7cfd48vn62zb9y5kd2l26fg44s3aq1kyg3gm4q3rj34xidf6"; }
+ ])
+
+ ++ patches;
+
+
+ # Ignore trivial whitespace changes in patches, this fixes compatibility of
+ # ./env_var_for_system_dir.patch with Firefox >=65 without having to track
+ # two patches.
+ patchFlags = [ "-p1" "-l" ];
+
+ buildInputs = [
+ gtk2 perl zip libjpeg zlib bzip2
+ dbus dbus-glib pango freetype fontconfig xorg.libXi xorg.libXcursor
+ xorg.libX11 xorg.libXrender xorg.libXft xorg.libXt file
+ libnotify xorg.pixman yasm libGLU libGL
+ xorg.xorgproto
+ xorg.libXext unzip makeWrapper
+ libevent libstartup_notification /* cairo */
+ libpng jemalloc glib
+ nasm icu67 libvpx_1_8
+ # >= 66 requires nasm for the AV1 lib dav1d
+ # yasm can potentially be removed in future versions
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1501796
+ # https://groups.google.com/forum/#!msg/mozilla.dev.platform/o-8levmLU80/SM_zQvfzCQAJ
+ nspr nss_pkg
+ ]
+ ++ lib.optional alsaSupport alsaLib
+ ++ lib.optional pulseaudioSupport libpulseaudio # only headers are needed
+ ++ lib.optional gtk3Support gtk3
+ ++ lib.optional gssSupport kerberos
+ ++ lib.optional ltoSupport llvmPackages.libunwind
+ ++ lib.optionals waylandSupport [ libxkbcommon ]
+ ++ lib.optionals pipewireSupport [ pipewire ]
+ ++ lib.optionals (lib.versionAtLeast ffversion "82") [ gnum4 ]
+ ++ lib.optionals buildStdenv.isDarwin [ CoreMedia ExceptionHandling Kerberos
+ AVFoundation MediaToolbox CoreLocation
+ Foundation libobjc AddressBook cups ];
+
+ NIX_LDFLAGS = lib.optionalString ltoSupport ''
+ -rpath ${placeholder "out"}/lib/${binaryName}
+ -rpath ${llvmPackages.libunwind.out}/lib
+ '';
+
+ NIX_CFLAGS_COMPILE = toString [
+ "-I${glib.dev}/include/gio-unix-2.0"
+ "-I${nss_pkg.dev}/include/nss"
+ ];
+
+ MACH_USE_SYSTEM_PYTHON = "1";
+
+ postPatch = ''
+ rm -rf obj-x86_64-pc-linux-gnu
+ '' + lib.optionalString (pipewireSupport && lib.versionOlder ffversion "83") ''
+ # substitute the /usr/include/ lines for the libraries that pipewire provides.
+ # The patch we pick from fedora only contains the generated moz.build files
+ # which hardcode the dependency paths instead of running pkg_config.
+ substituteInPlace \
+ media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture_generic_gn/moz.build \
+ --replace /usr/include ${pipewire.dev}/include
+ '' + lib.optionalString (lib.versionAtLeast ffversion "80") ''
+ substituteInPlace dom/system/IOUtils.h \
+ --replace '#include "nspr/prio.h"' '#include "prio.h"'
+
+ substituteInPlace dom/system/IOUtils.cpp \
+ --replace '#include "nspr/prio.h"' '#include "prio.h"' \
+ --replace '#include "nspr/private/pprio.h"' '#include "private/pprio.h"' \
+ --replace '#include "nspr/prtypes.h"' '#include "prtypes.h"'
+ '';
+
+ nativeBuildInputs =
+ [
+ autoconf213
+ cargo
+ gnused
+ llvmPackages.llvm # llvm-objdump
+ nodejs
+ perl
+ pkgconfig
+ python2
+ python3
+ rust-cbindgen
+ rustc
+ which
+ ]
+ ++ lib.optional gtk3Support wrapGAppsHook
+ ++ lib.optionals buildStdenv.isDarwin [ xcbuild rsync ]
+ ++ extraNativeBuildInputs;
+
+ preConfigure = ''
+ # remove distributed configuration files
+ rm -f configure
+ rm -f js/src/configure
+ rm -f .mozconfig*
+ # this will run autoconf213
+ configureScript="$(realpath ./mach) configure"
+ export MOZCONFIG=$(pwd)/mozconfig
+
+ # Set C flags for Rust's bindgen program. Unlike ordinary C
+ # compilation, bindgen does not invoke $CC directly. Instead it
+ # uses LLVM's libclang. To make sure all necessary flags are
+ # included we need to look in a few places.
+ # TODO: generalize this process for other use-cases.
+
+ BINDGEN_CFLAGS="$(< ${buildStdenv.cc}/nix-support/libc-crt1-cflags) \
+ $(< ${buildStdenv.cc}/nix-support/libc-cflags) \
+ $(< ${buildStdenv.cc}/nix-support/cc-cflags) \
+ $(< ${buildStdenv.cc}/nix-support/libcxx-cxxflags) \
+ ${lib.optionalString buildStdenv.cc.isClang "-idirafter ${buildStdenv.cc.cc}/lib/clang/${lib.getVersion buildStdenv.cc.cc}/include"} \
+ ${lib.optionalString buildStdenv.cc.isGNU "-isystem ${buildStdenv.cc.cc}/include/c++/${lib.getVersion buildStdenv.cc.cc} -isystem ${buildStdenv.cc.cc}/include/c++/${lib.getVersion buildStdenv.cc.cc}/${buildStdenv.hostPlatform.config}"} \
+ $NIX_CFLAGS_COMPILE"
+
+ echo "ac_add_options BINDGEN_CFLAGS='$BINDGEN_CFLAGS'" >> $MOZCONFIG
+ '' + (lib.optionalString googleAPISupport ''
+ # Google API key used by Chromium and Firefox.
+ # Note: These are for NixOS/nixpkgs use ONLY. For your own distribution,
+ # please get your own set of keys.
+ echo "AIzaSyDGi15Zwl11UNe6Y-5XW_upsfyw31qwZPI" > $TMPDIR/ga
+ # 60.5+ & 66+ did split the google API key arguments: https://bugzilla.mozilla.org/show_bug.cgi?id=1531176
+ configureFlagsArray+=("--with-google-location-service-api-keyfile=$TMPDIR/ga")
+ configureFlagsArray+=("--with-google-safebrowsing-api-keyfile=$TMPDIR/ga")
+ '') + ''
+ # AS=as in the environment causes build failure https://bugzilla.mozilla.org/show_bug.cgi?id=1497286
+ unset AS
+ '';
+
+ configureFlags = [
+ "--enable-application=browser"
+ "--with-system-jpeg"
+ "--with-system-zlib"
+ "--with-system-libevent"
+ "--with-system-libvpx"
+ "--with-system-png" # needs APNG support
+ "--with-system-icu"
+ "--enable-system-ffi"
+ "--enable-system-pixman"
+ #"--enable-system-cairo"
+ "--disable-tests"
+ "--disable-necko-wifi" # maybe we want to enable this at some point
+ "--disable-updater"
+ "--enable-jemalloc"
+ "--enable-default-toolkit=${default-toolkit}"
+ "--with-libclang-path=${llvmPackages.libclang}/lib"
+ "--with-system-nspr"
+ "--with-system-nss"
+ ]
+ ++ lib.optional (buildStdenv.isDarwin) "--disable-xcode-checks"
+ ++ lib.optional (!ltoSupport) "--with-clang-path=${llvmPackages.clang}/bin/clang"
+ # LTO is done using clang and lld on Linux.
+ # Darwin needs to use the default linker as lld is not supported (yet?):
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1538724
+ # elf-hack is broken when using clang+lld:
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1482204
+ ++ lib.optionals ltoSupport [
+ "--enable-lto"
+ "--disable-elf-hack"
+ ] ++ lib.optional (ltoSupport && !buildStdenv.isDarwin) "--enable-linker=lld"
+
+ ++ flag alsaSupport "alsa"
+ ++ flag pulseaudioSupport "pulseaudio"
+ ++ flag ffmpegSupport "ffmpeg"
+ ++ flag gssSupport "negotiateauth"
+ ++ flag webrtcSupport "webrtc"
+ ++ flag crashreporterSupport "crashreporter"
+ ++ lib.optional drmSupport "--enable-eme=widevine"
+
+ ++ (if debugBuild then [ "--enable-debug" "--enable-profiling" ]
+ else [ "--disable-debug" "--enable-release"
+ "--enable-optimize"
+ "--enable-strip" ])
+ ++ lib.optional enableOfficialBranding "--enable-official-branding"
+ ++ extraConfigureFlags;
+
+ postConfigure = ''
+ cd obj-*
+ '';
+
+ makeFlags = lib.optionals enableOfficialBranding [
+ "MOZILLA_OFFICIAL=1"
+ "BUILD_OFFICIAL=1"
+ ]
+ ++ extraMakeFlags;
+
+ enableParallelBuilding = true;
+ doCheck = false; # "--disable-tests" above
+
+ installPhase = if buildStdenv.isDarwin then ''
+ mkdir -p $out/Applications
+ cp -LR dist/${binaryNameCapitalized}.app $out/Applications
+ '' else null;
+
+ postInstall = lib.optionalString buildStdenv.isLinux ''
+ # Remove SDK cruft. FIXME: move to a separate output?
+ rm -rf $out/share/idl $out/include $out/lib/${binaryName}-devel-*
+
+ # Needed to find Mozilla runtime
+ gappsWrapperArgs+=(--argv0 "$out/bin/.${binaryName}-wrapped")
+ '';
+
+ postFixup = lib.optionalString buildStdenv.isLinux ''
+ # Fix notifications. LibXUL uses dlopen for this, unfortunately; see #18712.
+ patchelf --set-rpath "${lib.getLib libnotify
+ }/lib:$(patchelf --print-rpath "$out"/lib/${binaryName}*/libxul.so)" \
+ "$out"/lib/${binaryName}*/libxul.so
+ patchelf --add-needed ${xorg.libXScrnSaver.out}/lib/libXss.so $out/lib/${binaryName}/${binaryName}
+ '';
+
+ doInstallCheck = true;
+ installCheckPhase = ''
+ # Some basic testing
+ "$out${execdir}/${browserName}" --version
+ '';
+
+ passthru = {
+ inherit updateScript;
+ version = ffversion;
+ isFirefox3Like = true;
+ gtk = gtk2;
+ inherit alsaSupport;
+ inherit nspr;
+ inherit ffmpegSupport;
+ inherit gssSupport;
+ inherit execdir;
+ inherit browserName;
+ } // lib.optionalAttrs gtk3Support { inherit gtk3; };
+
+ hardeningDisable = [ "format" ]; # -Werror=format-security
+
+ # the build system verifies checksums of the bundled rust sources
+ # ./third_party/rust is be patched by our libtool fixup code in stdenv
+ # unfortunately we can't just set this to `false` when we do not want it.
+ # See https://github.com/NixOS/nixpkgs/issues/77289 for more details
+ # Ideally we would figure out how to tell the build system to not
+ # care about changed hashes as we are already doing that when we
+ # fetch the sources. Any further modifications of the source tree
+ # is on purpose by some of our tool (or by accident and a bug?).
+ dontFixLibtool = true;
+
+ # on aarch64 this is also required
+ dontUpdateAutotoolsGnuConfigScripts = true;
+
+ requiredSystemFeatures = [ "big-parallel" ];
+})
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir.patch b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir.patch
new file mode 100644
index 000000000000..18d31356989a
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/env_var_for_system_dir.patch
@@ -0,0 +1,6 @@
+--- a/toolkit/xre/nsXREDirProvider.cpp 2019-02-28 21:00:14.157543388 +0100
++++ b/toolkit/xre/nsXREDirProvider.cpp 2019-02-28 21:01:28.731128320 +0100
+@@ -302 +302,2 @@
+- rv = NS_NewNativeLocalFile(dirname, false, getter_AddRefs(localDir));
++ const char* pathVar = PR_GetEnv("MOZ_SYSTEM_DIR");
++ rv = NS_NewNativeLocalFile((pathVar && *pathVar) ? nsDependentCString(pathVar) : reinterpret_cast<const nsCString&>(dirname), false, getter_AddRefs(localDir));
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/no-buildconfig-ffx76.patch b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/no-buildconfig-ffx76.patch
new file mode 100644
index 000000000000..3530954ea5c5
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/no-buildconfig-ffx76.patch
@@ -0,0 +1,24 @@
+Remove about:buildconfig. If used as-is, it would add unnecessary runtime dependencies.
+diff -ur firefox-65.0-orig/docshell/base/nsAboutRedirector.cpp firefox-65.0/docshell/base/nsAboutRedirector.cpp
+--- firefox-76.0.orig/docshell/base/nsAboutRedirector.cpp 2020-05-03 19:01:29.926544735 +0200
++++ firefox-76.0/docshell/base/nsAboutRedirector.cpp 2020-05-03 19:12:00.845035570 +0200
+@@ -62,8 +62,6 @@
+ {"about", "chrome://global/content/aboutAbout.html", 0},
+ {"addons", "chrome://mozapps/content/extensions/extensions.xhtml",
+ nsIAboutModule::ALLOW_SCRIPT},
+- {"buildconfig", "chrome://global/content/buildconfig.html",
+- nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT},
+ {"checkerboard", "chrome://global/content/aboutCheckerboard.html",
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+ nsIAboutModule::ALLOW_SCRIPT},
+diff -ur firefox-65.0-orig/toolkit/content/jar.mn firefox-65.0/toolkit/content/jar.mn
+--- firefox-65.0-orig/toolkit/content/jar.mn 2019-01-23 00:48:35.033372506 +0100
++++ firefox-65.0/toolkit/content/jar.mn 2019-01-23 00:50:45.126565924 +0100
+@@ -36,7 +36,6 @@
+ content/global/plugins.css
+ content/global/browser-child.js
+ content/global/browser-content.js
+-* content/global/buildconfig.html
+ content/global/buildconfig.css
+ content/global/contentAreaUtils.js
+ content/global/datepicker.xhtml
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix
new file mode 100644
index 000000000000..7f1d9763e424
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix
@@ -0,0 +1,66 @@
+{ stdenv, lib, callPackage, fetchurl, fetchpatch }:
+
+let
+ common = opts: callPackage (import ./common.nix opts) {};
+in
+
+rec {
+ firefox = common rec {
+ pname = "firefox";
+ ffversion = "83.0";
+ src = fetchurl {
+ url = "mirror://mozilla/firefox/releases/${ffversion}/source/firefox-${ffversion}.source.tar.xz";
+ sha512 = "3va5a9471677jfzkhqp8xkba45n0bcpphbabhqbcbnps6p85m3y98pl5jy9q7cpq3a6gxc4ax7bp90yz2nfvfq7i64iz397xpprri2a";
+ };
+
+ patches = [
+ # Fix compilation on aarch64 with newer rust version
+ # See https://bugzilla.mozilla.org/show_bug.cgi?id=1677690
+ # and https://bugzilla.redhat.com/show_bug.cgi?id=1897675
+ (fetchpatch {
+ name = "aarch64-simd-bgz-1677690.patch";
+ url = "https://github.com/mozilla/gecko-dev/commit/71597faac0fde4f608a60dd610d0cefac4972cc3.patch";
+ sha256 = "1f61nsgbv2c2ylgjs7wdahxrrlgc19gjy5nzs870zr1g832ybwin";
+ })
+ ];
+
+ meta = {
+ description = "A web browser built from Firefox source tree";
+ homepage = "http://www.mozilla.com/en-US/firefox/";
+ maintainers = with lib.maintainers; [ eelco ];
+ platforms = lib.platforms.unix;
+ badPlatforms = lib.platforms.darwin;
+ broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+ # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+ license = lib.licenses.mpl20;
+ };
+ updateScript = callPackage ./update.nix {
+ attrPath = "firefox-unwrapped";
+ versionKey = "ffversion";
+ };
+ };
+
+ firefox-esr-78 = common rec {
+ pname = "firefox-esr";
+ ffversion = "78.5.0esr";
+ src = fetchurl {
+ url = "mirror://mozilla/firefox/releases/${ffversion}/source/firefox-${ffversion}.source.tar.xz";
+ sha512 = "20h53cn7p4dds1yfm166iwbjdmw4fkv5pfk4z0pni6x8ddjvg19imzs6ggmpnfhaji8mnlknm7xp5j7x9vi24awvdxdds5n88rh25hd";
+ };
+
+ meta = {
+ description = "A web browser built from Firefox Extended Support Release source tree";
+ homepage = "http://www.mozilla.com/en-US/firefox/";
+ maintainers = with lib.maintainers; [ eelco ];
+ platforms = lib.platforms.unix;
+ badPlatforms = lib.platforms.darwin;
+ broken = stdenv.buildPlatform.is32bit; # since Firefox 60, build on 32-bit platforms fails with "out of memory".
+ # not in `badPlatforms` because cross-compilation on 64-bit machine might work.
+ license = lib.licenses.mpl20;
+ };
+ updateScript = callPackage ./update.nix {
+ attrPath = "firefox-esr-78-unwrapped";
+ versionKey = "ffversion";
+ };
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/update.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/update.nix
new file mode 100644
index 000000000000..e12b552535d2
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/update.nix
@@ -0,0 +1,35 @@
+{ writeScript
+, lib
+, xidel
+, common-updater-scripts
+, coreutils
+, gnused
+, gnugrep
+, curl
+, attrPath
+, runtimeShell
+, baseUrl ? "http://archive.mozilla.org/pub/firefox/releases/"
+, versionSuffix ? ""
+, versionKey ? "version"
+}:
+
+writeScript "update-${attrPath}" ''
+ #!${runtimeShell}
+ PATH=${lib.makeBinPath [ common-updater-scripts coreutils curl gnugrep gnused xidel ]}
+
+ url=${baseUrl}
+
+ # retriving latest released version
+ # - extracts all links from the $url
+ # - extracts lines only with number and dots followed by a slash
+ # - removes trailing slash
+ # - sorts everything with semver in mind
+ # - picks up latest release
+ version=`xidel -s $url --extract "//a" | \
+ grep "^[0-9.]*${versionSuffix}/$" | \
+ sed s/[/]$// | \
+ sort --version-sort | \
+ tail -n 1`
+
+ update-source-version ${attrPath} "$version" "" "" --version-key=${versionKey}
+''
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/wrapper.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/wrapper.nix
new file mode 100644
index 000000000000..7f0b826f905e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/firefox/wrapper.nix
@@ -0,0 +1,364 @@
+{ stdenv, lib, makeDesktopItem, makeWrapper, lndir, config
+, replace, fetchurl, zip, unzip, jq
+
+## various stuff that can be plugged in
+, flashplayer, hal-flash
+, ffmpeg, xorg, alsaLib, libpulseaudio, libcanberra-gtk2, libglvnd
+, gnome3/*.gnome-shell*/
+, browserpass, chrome-gnome-shell, uget-integrator, plasma5, bukubrow
+, tridactyl-native
+, fx_cast_bridge
+, udev
+, kerberos
+, libva
+, mesa # firefox wants gbm for drm+dmabuf
+}:
+
+## configurability of the wrapper itself
+
+browser:
+
+let
+ wrapper =
+ { browserName ? browser.browserName or (lib.getName browser)
+ , pname ? browserName
+ , version ? lib.getVersion browser
+ , desktopName ? # browserName with first letter capitalized
+ (lib.toUpper (lib.substring 0 1 browserName) + lib.substring 1 (-1) browserName)
+ , nameSuffix ? ""
+ , icon ? browserName
+ , extraNativeMessagingHosts ? []
+ , pkcs11Modules ? []
+ , forceWayland ? false
+ , useGlvnd ? true
+ , cfg ? config.${browserName} or {}
+
+ ## Following options are needed for extra prefs & policies
+ # For more information about anti tracking (german website)
+ # visit https://wiki.kairaven.de/open/app/firefox
+ , extraPrefs ? ""
+ # For more information about policies visit
+ # https://github.com/mozilla/policy-templates#enterprisepoliciesenabled
+ , extraPolicies ? {}
+ , firefoxLibName ? "firefox" # Important for tor package or the like
+ , nixExtensions ? null
+ }:
+
+ assert forceWayland -> (browser ? gtk3); # Can only use the wayland backend if gtk3 is being used
+
+ let
+ enableAdobeFlash = cfg.enableAdobeFlash or false;
+ ffmpegSupport = browser.ffmpegSupport or false;
+ gssSupport = browser.gssSupport or false;
+ alsaSupport = browser.alsaSupport or false;
+
+ plugins =
+ let
+ removed = lib.filter (a: builtins.hasAttr a cfg) [
+ "enableVLC"
+ "enableDjvu"
+ "enableMPlayer"
+ "jre"
+ "icedtea"
+ "enableGoogleTalkPlugin"
+ "enableFriBIDPlugin"
+ "enableBluejeans"
+ "enableAdobeReader"
+ ];
+ in if removed != []
+ then throw "Your configuration mentions ${lib.concatMapStringsSep ", " (p: browserName + "." + p) removed}. All plugin related options, except for the adobe flash player, have been removed, since Firefox from version 52 onwards no longer supports npapi plugins (see https://support.mozilla.org/en-US/kb/npapi-plugins)."
+ else lib.optional enableAdobeFlash flashplayer;
+
+ nativeMessagingHosts =
+ ([ ]
+ ++ lib.optional (cfg.enableBrowserpass or false) (lib.getBin browserpass)
+ ++ lib.optional (cfg.enableBukubrow or false) bukubrow
+ ++ lib.optional (cfg.enableTridactylNative or false) tridactyl-native
+ ++ lib.optional (cfg.enableGnomeExtensions or false) chrome-gnome-shell
+ ++ lib.optional (cfg.enableUgetIntegrator or false) uget-integrator
+ ++ lib.optional (cfg.enablePlasmaBrowserIntegration or false) plasma5.plasma-browser-integration
+ ++ lib.optional (cfg.enableFXCastBridge or false) fx_cast_bridge
+ ++ extraNativeMessagingHosts
+ );
+ libs = lib.optionals stdenv.isLinux [ udev libva mesa ]
+ ++ lib.optional ffmpegSupport ffmpeg
+ ++ lib.optional gssSupport kerberos
+ ++ lib.optional useGlvnd libglvnd
+ ++ lib.optionals (cfg.enableQuakeLive or false)
+ (with xorg; [ stdenv.cc libX11 libXxf86dga libXxf86vm libXext libXt alsaLib zlib ])
+ ++ lib.optional (enableAdobeFlash && (cfg.enableAdobeFlashDRM or false)) hal-flash
+ ++ lib.optional (config.pulseaudio or true) libpulseaudio
+ ++ lib.optional alsaSupport alsaLib
+ ++ pkcs11Modules;
+ gtk_modules = [ libcanberra-gtk2 ];
+
+ #########################
+ # #
+ # EXTRA PREF CHANGES #
+ # #
+ #########################
+ policiesJson = builtins.toFile "policies.json"
+ (builtins.toJSON enterprisePolicies);
+
+ usesNixExtensions = nixExtensions != null;
+
+ extensions = builtins.map (a:
+ if ! (builtins.hasAttr "extid" a) then
+ throw "nixExtensions has an invalid entry. Missing extid attribute. Please use fetchfirefoxaddon"
+ else
+ a
+ ) (if usesNixExtensions then nixExtensions else []);
+
+ enterprisePolicies =
+ {
+ policies = lib.optionalAttrs usesNixExtensions {
+ DisableAppUpdate = true;
+ } //
+ lib.optionalAttrs usesNixExtensions {
+ ExtensionSettings = {
+ "*" = {
+ blocked_install_message = "You can't have manual extension mixed with nix extensions";
+ installation_mode = "blocked";
+ };
+
+ } // lib.foldr (e: ret:
+ ret // {
+ "${e.extid}" = {
+ installation_mode = "allowed";
+ };
+ }
+ ) {} extensions;
+ }
+ // extraPolicies;
+ };
+
+ mozillaCfg = builtins.toFile "mozilla.cfg" ''
+// First line must be a comment
+
+ // Disables addon signature checking
+ // to be able to install addons that do not have an extid
+ // Security is maintained because only user whitelisted addons
+ // with a checksum can be installed
+ ${ lib.optionalString usesNixExtensions ''lockPref("xpinstall.signatures.required", false)'' };
+ ${extraPrefs}
+ '';
+
+ #############################
+ # #
+ # END EXTRA PREF CHANGES #
+ # #
+ #############################
+
+ in stdenv.mkDerivation {
+ inherit pname version;
+
+ desktopItem = makeDesktopItem {
+ name = browserName;
+ exec = "${browserName}${nameSuffix} %U";
+ inherit icon;
+ comment = "";
+ desktopName = "${desktopName}${nameSuffix}${lib.optionalString forceWayland " (Wayland)"}";
+ genericName = "Web Browser";
+ categories = "Network;WebBrowser;";
+ mimeType = stdenv.lib.concatStringsSep ";" [
+ "text/html"
+ "text/xml"
+ "application/xhtml+xml"
+ "application/vnd.mozilla.xul+xml"
+ "x-scheme-handler/http"
+ "x-scheme-handler/https"
+ "x-scheme-handler/ftp"
+ ];
+ };
+
+ nativeBuildInputs = [ makeWrapper lndir ];
+ buildInputs = lib.optional (browser ? gtk3) browser.gtk3;
+
+
+ buildCommand = lib.optionalString stdenv.isDarwin ''
+ mkdir -p $out/Applications
+ cp -R --no-preserve=mode,ownership ${browser}/Applications/${browserName}.app $out/Applications
+ rm -f $out${browser.execdir or "/bin"}/${browserName}
+ '' + ''
+ if [ ! -x "${browser}${browser.execdir or "/bin"}/${browserName}" ]
+ then
+ echo "cannot find executable file \`${browser}${browser.execdir or "/bin"}/${browserName}'"
+ exit 1
+ fi
+
+ #########################
+ # #
+ # EXTRA PREF CHANGES #
+ # #
+ #########################
+ # Link the runtime. The executable itself has to be copied,
+ # because it will resolve paths relative to its true location.
+ # Any symbolic links have to be replicated as well.
+ cd "${browser}"
+ find . -type d -exec mkdir -p "$out"/{} \;
+
+ find . -type f \( -not -name "${browserName}" \) -exec ln -sT "${browser}"/{} "$out"/{} \;
+
+ find . -type f -name "${browserName}" -print0 | while read -d $'\0' f; do
+ cp -P --no-preserve=mode,ownership "${browser}/$f" "$out/$f"
+ chmod a+rwx "$out/$f"
+ done
+
+ # fix links and absolute references
+ cd "${browser}"
+
+ find . -type l -print0 | while read -d $'\0' l; do
+ target="$(readlink "$l" | ${replace}/bin/replace-literal -es -- "${browser}" "$out")"
+ ln -sfT "$target" "$out/$l"
+ done
+
+ # This will not patch binaries, only "text" files.
+ # Its there for the wrapper mostly.
+ cd "$out"
+ ${replace}/bin/replace-literal -esfR -- "${browser}" "$out"
+
+ # create the wrapper
+
+ executablePrefix="$out${browser.execdir or "/bin"}"
+ executablePath="$executablePrefix/${browserName}"
+
+ if [ ! -x "$executablePath" ]
+ then
+ echo "cannot find executable file \`${browser}${browser.execdir or "/bin"}/${browserName}'"
+ exit 1
+ fi
+
+ if [ ! -L "$executablePath" ]
+ then
+ # Careful here, the file at executablePath may already be
+ # a wrapper. That is why we postfix it with -old instead
+ # of -wrapped.
+ oldExe="$executablePrefix"/".${browserName}"-old
+ mv "$executablePath" "$oldExe"
+ else
+ oldExe="$(readlink -v --canonicalize-existing "$executablePath")"
+ fi
+
+ if [ ! -x "${browser}${browser.execdir or "/bin"}/${browserName}" ]
+ then
+ echo "cannot find executable file \`${browser}${browser.execdir or "/bin"}/${browserName}'"
+ exit 1
+ fi
+
+ makeWrapper "$oldExe" \
+ "$out${browser.execdir or "/bin"}/${browserName}${nameSuffix}" \
+ --suffix-each MOZ_PLUGIN_PATH ':' "$plugins" \
+ --suffix LD_LIBRARY_PATH ':' "$libs" \
+ --suffix-each GTK_PATH ':' "$gtk_modules" \
+ --suffix-each LD_PRELOAD ':' "$(cat $(filterExisting $(addSuffix /extra-ld-preload $plugins)))" \
+ --prefix-contents PATH ':' "$(filterExisting $(addSuffix /extra-bin-path $plugins))" \
+ --suffix PATH ':' "$out${browser.execdir or "/bin"}" \
+ --set MOZ_APP_LAUNCHER "${browserName}${nameSuffix}" \
+ --set MOZ_SYSTEM_DIR "$out/lib/mozilla" \
+ --set SNAP_NAME "firefox" \
+ --set MOZ_LEGACY_PROFILES 1 \
+ --set MOZ_ALLOW_DOWNGRADE 1 \
+ ${lib.optionalString forceWayland ''
+ --set MOZ_ENABLE_WAYLAND "1" \
+ ''}${lib.optionalString (browser ? gtk3)
+ ''--prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" \
+ --suffix XDG_DATA_DIRS : '${gnome3.adwaita-icon-theme}/share'
+ ''
+ }
+ #############################
+ # #
+ # END EXTRA PREF CHANGES #
+ # #
+ #############################
+
+ if [ -e "${browser}/share/icons" ]; then
+ mkdir -p "$out/share"
+ ln -s "${browser}/share/icons" "$out/share/icons"
+ else
+ for res in 16 32 48 64 128; do
+ mkdir -p "$out/share/icons/hicolor/''${res}x''${res}/apps"
+ icon=( "${browser}/lib/"*"/browser/chrome/icons/default/default''${res}.png" )
+ if [ -e "$icon" ]; then ln -s "$icon" \
+ "$out/share/icons/hicolor/''${res}x''${res}/apps/${browserName}.png"
+ fi
+ done
+ fi
+
+ install -D -t $out/share/applications $desktopItem/share/applications/*
+
+ mkdir -p $out/lib/mozilla/native-messaging-hosts
+ for ext in ${toString nativeMessagingHosts}; do
+ ln -sLt $out/lib/mozilla/native-messaging-hosts $ext/lib/mozilla/native-messaging-hosts/*
+ done
+
+ mkdir -p $out/lib/mozilla/pkcs11-modules
+ for ext in ${toString pkcs11Modules}; do
+ ln -sLt $out/lib/mozilla/pkcs11-modules $ext/lib/mozilla/pkcs11-modules/*
+ done
+
+ # For manpages, in case the program supplies them
+ mkdir -p $out/nix-support
+ echo ${browser} > $out/nix-support/propagated-user-env-packages
+
+
+ #########################
+ # #
+ # EXTRA PREF CHANGES #
+ # #
+ #########################
+ # user customization
+ mkdir -p $out/lib/${firefoxLibName}
+
+ # creating policies.json
+ mkdir -p "$out/lib/${firefoxLibName}/distribution"
+
+ POL_PATH="$out/lib/${firefoxLibName}/distribution/policies.json"
+ rm -f "$POL_PATH"
+ cat ${policiesJson} >> "$POL_PATH"
+
+ # preparing for autoconfig
+ mkdir -p "$out/lib/${firefoxLibName}/defaults/pref"
+
+ cat > "$out/lib/${firefoxLibName}/defaults/pref/autoconfig.js" <<EOF
+ pref("general.config.filename", "mozilla.cfg");
+ pref("general.config.obscure_value", 0);
+ EOF
+
+ cat > "$out/lib/${firefoxLibName}/mozilla.cfg" < ${mozillaCfg}
+
+ mkdir -p $out/lib/${firefoxLibName}/distribution/extensions
+
+ for i in ${toString extensions}; do
+ ln -s -t $out/lib/${firefoxLibName}/distribution/extensions $i/*
+ done
+ #############################
+ # #
+ # END EXTRA PREF CHANGES #
+ # #
+ #############################
+ '';
+
+ preferLocalBuild = true;
+
+ # Let each plugin tell us (through its `mozillaPlugin') attribute
+ # where to find the plugin in its tree.
+ plugins = map (x: x + x.mozillaPlugin) plugins;
+ libs = lib.makeLibraryPath libs + ":" + lib.makeSearchPathOutput "lib" "lib64" libs;
+ gtk_modules = map (x: x + x.gtkModule) gtk_modules;
+
+ passthru = { unwrapped = browser; };
+
+ disallowedRequisites = [ stdenv.cc ];
+
+ meta = browser.meta // {
+ description =
+ browser.meta.description
+ + " (with plugins: "
+ + lib.concatStrings (lib.intersperse ", " (map (x: x.name) plugins))
+ + ")";
+ hydraPlatforms = [];
+ priority = (browser.meta.priority or 0) - 1; # prefer wrapper over the package
+ };
+ };
+in
+ lib.makeOverridable wrapper
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/google-chrome/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/google-chrome/default.nix
new file mode 100644
index 000000000000..73a095b0827f
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/google-chrome/default.nix
@@ -0,0 +1,157 @@
+{ stdenv, patchelf, makeWrapper
+
+# Linked dynamic libraries.
+, glib, fontconfig, freetype, pango, cairo, libX11, libXi, atk, gconf, nss, nspr
+, libXcursor, libXext, libXfixes, libXrender, libXScrnSaver, libXcomposite, libxcb
+, alsaLib, libXdamage, libXtst, libXrandr, expat, cups
+, dbus, gtk3, gdk-pixbuf, gcc-unwrapped, at-spi2-atk, at-spi2-core
+, kerberos, libdrm, mesa
+, libxkbcommon, wayland # ozone/wayland
+
+# Command line programs
+, coreutils
+
+# command line arguments which are always set e.g "--disable-gpu"
+, commandLineArgs ? ""
+
+# Will crash without.
+, systemd
+
+# Loaded at runtime.
+, libexif
+
+# Additional dependencies according to other distros.
+## Ubuntu
+, liberation_ttf, curl, util-linux, xdg_utils, wget
+## Arch Linux.
+, flac, harfbuzz, icu, libpng, libopus, snappy, speechd
+## Gentoo
+, bzip2, libcap
+
+# Which distribution channel to use.
+, channel ? "stable"
+
+# Necessary for USB audio devices.
+, pulseSupport ? true, libpulseaudio ? null
+
+# Only needed for getting information about upstream binaries
+, chromium
+
+, gsettings-desktop-schemas
+, gnome3
+}:
+
+with stdenv.lib;
+
+let
+ opusWithCustomModes = libopus.override {
+ withCustomModes = true;
+ };
+
+ version = chromium.upstream-info.version;
+
+ deps = [
+ glib fontconfig freetype pango cairo libX11 libXi atk gconf nss nspr
+ libXcursor libXext libXfixes libXrender libXScrnSaver libXcomposite libxcb
+ alsaLib libXdamage libXtst libXrandr expat cups
+ dbus gdk-pixbuf gcc-unwrapped.lib
+ systemd
+ libexif
+ liberation_ttf curl util-linux xdg_utils wget
+ flac harfbuzz icu libpng opusWithCustomModes snappy speechd
+ bzip2 libcap at-spi2-atk at-spi2-core
+ kerberos libdrm mesa coreutils
+ libxkbcommon wayland
+ ] ++ optional pulseSupport libpulseaudio
+ ++ [ gtk3 ];
+
+ suffix = if channel != "stable" then "-" + channel else "";
+
+in stdenv.mkDerivation {
+ inherit version;
+
+ name = "google-chrome${suffix}-${version}";
+
+ src = chromium.chromeSrc;
+
+ nativeBuildInputs = [ patchelf makeWrapper ];
+ buildInputs = [
+ # needed for GSETTINGS_SCHEMAS_PATH
+ gsettings-desktop-schemas glib gtk3
+
+ # needed for XDG_ICON_DIRS
+ gnome3.adwaita-icon-theme
+ ];
+
+ unpackPhase = ''
+ ar x $src
+ tar xf data.tar.xz
+ '';
+
+ rpath = makeLibraryPath deps + ":" + makeSearchPathOutput "lib" "lib64" deps;
+ binpath = makeBinPath deps;
+
+ installPhase = ''
+ case ${channel} in
+ beta) appname=chrome-beta dist=beta ;;
+ dev) appname=chrome-unstable dist=unstable ;;
+ *) appname=chrome dist=stable ;;
+ esac
+
+ exe=$out/bin/google-chrome-$dist
+
+ mkdir -p $out/bin $out/share
+
+ cp -a opt/* $out/share
+ cp -a usr/share/* $out/share
+
+ # To fix --use-gl=egl:
+ test -e $out/share/google/$appname/libEGL.so
+ ln -s libEGL.so $out/share/google/$appname/libEGL.so.1
+ test -e $out/share/google/$appname/libGLESv2.so
+ ln -s libGLESv2.so $out/share/google/$appname/libGLESv2.so.2
+
+ substituteInPlace $out/share/applications/google-$appname.desktop \
+ --replace /usr/bin/google-chrome-$dist $exe
+ substituteInPlace $out/share/gnome-control-center/default-apps/google-$appname.xml \
+ --replace /opt/google/$appname/google-$appname $exe
+ substituteInPlace $out/share/menu/google-$appname.menu \
+ --replace /opt $out/share \
+ --replace $out/share/google/$appname/google-$appname $exe
+
+ for icon_file in $out/share/google/chrome*/product_logo_[0-9]*.png; do
+ num_and_suffix="''${icon_file##*logo_}"
+ if [ $dist = "stable" ]; then
+ icon_size="''${num_and_suffix%.*}"
+ else
+ icon_size="''${num_and_suffix%_*}"
+ fi
+ logo_output_prefix="$out/share/icons/hicolor"
+ logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps"
+ mkdir -p "$logo_output_path"
+ mv "$icon_file" "$logo_output_path/google-$appname.png"
+ done
+
+ makeWrapper "$out/share/google/$appname/google-$appname" "$exe" \
+ --prefix LD_LIBRARY_PATH : "$rpath" \
+ --prefix PATH : "$binpath" \
+ --prefix XDG_DATA_DIRS : "$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH" \
+ --add-flags ${escapeShellArg commandLineArgs}
+
+ for elf in $out/share/google/$appname/{chrome,chrome-sandbox,nacl_helper}; do
+ patchelf --set-rpath $rpath $elf
+ patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $elf
+ done
+ '';
+
+ meta = {
+ description = "A freeware web browser developed by Google";
+ homepage = "https://www.google.com/chrome/browser/";
+ license = licenses.unfree;
+ maintainers = with maintainers; [ primeos ];
+ # Note from primeos: By updating Chromium I also update Google Chrome and
+ # will try to merge PRs and respond to issues but I'm not actually using
+ # Google Chrome.
+ platforms = [ "x86_64-linux" ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/kristall/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/kristall/default.nix
new file mode 100644
index 000000000000..4028f8622c3c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/kristall/default.nix
@@ -0,0 +1,31 @@
+{ lib, mkDerivation, fetchFromGitHub, qtbase, qtmultimedia }:
+
+mkDerivation rec {
+ pname = "kristall";
+ version = "0.3";
+ src = fetchFromGitHub {
+ owner = "MasterQ32";
+ repo = "kristall";
+ rev = "V" + version;
+ sha256 = "07nf7w6ilzs5g6isnvsmhh4qa1zsprgjyf0zy7rhpx4ikkj8c8zq";
+ };
+
+ buildInputs = [ qtbase qtmultimedia ];
+
+ qmakeFlags = [ "src/kristall.pro" ];
+
+ installPhase = ''
+ install -Dt $out/bin kristall
+ install -D Kristall.desktop $out/share/applications/net.random-projects.kristall.desktop
+ '';
+
+ meta = with lib;
+ src.meta // {
+ description =
+ "Graphical small-internet client, supports gemini, http, https, gopher, finger";
+ homepage = "https://random-projects.net/projects/kristall.gemini";
+ maintainers = with maintainers; [ ehmry ];
+ license = licenses.gpl3;
+ inherit (qtmultimedia.meta) platforms;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/links2/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/links2/default.nix
new file mode 100644
index 000000000000..0db521f8ef59
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/links2/default.nix
@@ -0,0 +1,40 @@
+{ stdenv, fetchurl
+, gpm, openssl, pkgconfig, libev # Misc.
+, libpng, libjpeg, libtiff, librsvg # graphic formats
+, bzip2, zlib, xz # Transfer encodings
+, enableFB ? true
+, enableDirectFB ? false, directfb
+, enableX11 ? true, libX11, libXt, libXau # GUI support
+}:
+
+stdenv.mkDerivation rec {
+ version = "2.21";
+ pname = "links2";
+
+ src = fetchurl {
+ url = "${meta.homepage}/download/links-${version}.tar.bz2";
+ sha256 = "0qqdcghsdqm7l6kyi0k752ws3ak5crw85pqkcb11wy67j62yspi8";
+ };
+
+ buildInputs = with stdenv.lib;
+ [ libev librsvg libpng libjpeg libtiff openssl xz bzip2 zlib ]
+ ++ optionals stdenv.isLinux [ gpm ]
+ ++ optionals enableX11 [ libX11 libXau libXt ]
+ ++ optional enableDirectFB [ directfb ];
+
+ nativeBuildInputs = [ pkgconfig bzip2 ];
+
+ configureFlags = [ "--with-ssl" ]
+ ++ stdenv.lib.optional (enableX11 || enableFB || enableDirectFB) "--enable-graphics"
+ ++ stdenv.lib.optional enableX11 "--with-x"
+ ++ stdenv.lib.optional enableFB "--with-fb"
+ ++ stdenv.lib.optional enableDirectFB "--with-directfb";
+
+ meta = with stdenv.lib; {
+ homepage = "http://links.twibright.com/";
+ description = "A small browser with some graphics support";
+ maintainers = with maintainers; [ raskin ];
+ license = licenses.gpl2Plus;
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/luakit/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/luakit/default.nix
new file mode 100644
index 000000000000..42eb8bcb63a8
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/luakit/default.nix
@@ -0,0 +1,68 @@
+{ stdenv, fetchFromGitHub, pkgconfig, wrapGAppsHook
+, help2man, luafilesystem, luajit, sqlite
+, webkitgtk, gtk3, gst_all_1, glib-networking
+}:
+
+stdenv.mkDerivation rec {
+ pname = "luakit";
+ version = "2.2.1";
+
+ src = fetchFromGitHub {
+ owner = "luakit";
+ repo = pname;
+ rev = version;
+ sha256 = "sha256-78B8vXkWsFMJIHA72Qrk2SWubrY6YuArqcM0UAPjpzc=";
+ };
+
+ nativeBuildInputs = [
+ pkgconfig help2man wrapGAppsHook
+ ];
+
+ buildInputs = [
+ webkitgtk luafilesystem luajit sqlite gtk3
+ glib-networking # TLS support
+ ] ++ ( with gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good
+ gst-plugins-bad gst-plugins-ugly gst-libav ]);
+
+ preBuild = ''
+ # build-utils/docgen/gen.lua:2: module 'lib.lousy.util' not found
+ # TODO: why is not this the default? The test runner adds
+ # ';./lib/?.lua;./lib/?/init.lua' to package.path, but the build-utils
+ # scripts don't add an equivalent
+ export LUA_PATH="$LUA_PATH;./?.lua;./?/init.lua"
+ '';
+
+ makeFlags = [
+ "DEVELOPMENT_PATHS=0"
+ "USE_LUAJIT=1"
+ "INSTALLDIR=${placeholder "out"}"
+ "PREFIX=${placeholder "out"}"
+ "USE_GTK3=1"
+ "XDGPREFIX=${placeholder "out"}/etc/xdg"
+ ];
+
+ preFixup = let
+ luaKitPath = "$out/share/luakit/lib/?/init.lua;$out/share/luakit/lib/?.lua";
+ in ''
+ gappsWrapperArgs+=(
+ --prefix XDG_CONFIG_DIRS : "$out/etc/xdg"
+ --prefix LUA_PATH ';' "${luaKitPath};$LUA_PATH"
+ --prefix LUA_CPATH ';' "$LUA_CPATH"
+ )
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Fast, small, webkit-based browser framework extensible in Lua";
+ longDescription = ''
+ Luakit is a highly configurable browser framework based on the WebKit web
+ content engine and the GTK+ toolkit. It is very fast, extensible with Lua,
+ and licensed under the GNU GPLv3 license. It is primarily targeted at
+ power users, developers and anyone who wants to have fine-grained control
+ over their web browser’s behaviour and interface.
+ '';
+ homepage = "https://luakit.github.io/";
+ license = licenses.gpl3Only;
+ platforms = platforms.unix;
+ maintainers = [ maintainers.AndersonTorres ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/lynx/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/lynx/default.nix
new file mode 100644
index 000000000000..8aeee45b9e54
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/lynx/default.nix
@@ -0,0 +1,50 @@
+{ stdenv, buildPackages
+, fetchurl, pkgconfig, ncurses, gzip
+, sslSupport ? true, openssl ? null
+, nukeReferences
+}:
+
+assert sslSupport -> openssl != null;
+
+stdenv.mkDerivation rec {
+ pname = "lynx";
+ version = "2.8.9rel.1";
+
+ src = fetchurl {
+ urls = [
+ "ftp://ftp.invisible-island.net/lynx/tarballs/lynx${version}.tar.bz2"
+ "https://invisible-mirror.net/archives/lynx/tarballs/lynx${version}.tar.bz2"
+ ];
+ sha256 = "15cmyyma2kz1hfaa6mwjgli8zwdzq3jv0q2cl6nwzycjfwyijzrq";
+ };
+
+ enableParallelBuilding = true;
+
+ hardeningEnable = [ "pie" ];
+
+ configureFlags = [
+ "--enable-default-colors"
+ "--enable-widec"
+ "--enable-ipv6"
+ ] ++ stdenv.lib.optional sslSupport "--with-ssl";
+
+ depsBuildBuild = [ buildPackages.stdenv.cc ];
+ nativeBuildInputs = [ nukeReferences ]
+ ++ stdenv.lib.optional sslSupport pkgconfig;
+
+ buildInputs = [ ncurses gzip ] ++ stdenv.lib.optional sslSupport openssl.dev;
+
+ # cfg_defs.h captures lots of references to build-only dependencies, derived
+ # from config.cache.
+ postConfigure = ''
+ make cfg_defs.h
+ nuke-refs cfg_defs.h
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A text-mode web browser";
+ homepage = "https://lynx.invisible-island.net/";
+ license = licenses.gpl2Plus;
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/midori/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/midori/default.nix
new file mode 100644
index 000000000000..66f6384643ad
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/midori/default.nix
@@ -0,0 +1,59 @@
+{ stdenv
+, fetchurl
+, cmake
+, ninja
+, pkgconfig
+, intltool
+, vala
+, wrapGAppsHook
+, gcr
+, libpeas
+, gtk3
+, webkitgtk
+, sqlite
+, gsettings-desktop-schemas
+, libsoup
+, glib-networking
+, json-glib
+, libarchive
+}:
+
+stdenv.mkDerivation rec {
+ pname = "midori";
+ version = "9.0";
+
+ src = fetchurl {
+ url = "https://github.com/midori-browser/core/releases/download/v${version}/midori-v${version}.tar.gz";
+ sha256 = "05i04qa83dnarmgkx4xsk6fga5lw1lmslh4rb3vhyyy4ala562jy";
+ };
+
+ nativeBuildInputs = [
+ cmake
+ intltool
+ ninja
+ pkgconfig
+ vala
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ (libsoup.override { gnomeSupport = true; })
+ gcr
+ glib-networking
+ gsettings-desktop-schemas
+ gtk3
+ libpeas
+ sqlite
+ webkitgtk
+ json-glib
+ libarchive
+ ];
+
+ meta = with stdenv.lib; {
+ description = "Lightweight WebKitGTK web browser";
+ homepage = "https://www.midori-browser.org/";
+ license = with licenses; [ lgpl21Plus ];
+ platforms = with platforms; linux;
+ maintainers = with maintainers; [ raskin ramkromberg ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer/default.nix
new file mode 100644
index 000000000000..3affcba863c8
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer/default.nix
@@ -0,0 +1,147 @@
+{ stdenv
+, lib
+, fetchurl
+, alsaLib
+, atk
+, bzip2
+, cairo
+, curl
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, glibc
+, graphite2
+, gtk2
+, harfbuzz
+, libICE
+, libSM
+, libX11
+, libXau
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXdmcp
+, libXext
+, libXfixes
+, libXi
+, libXinerama
+, libXrandr
+, libXrender
+, libXt
+, libXxf86vm
+, libdrm
+, libffi
+, libglvnd
+, libpng
+, libvdpau
+, libxcb
+, libxshmfence
+, nspr
+, nss
+, pango
+, pcre
+, pixman
+, zlib
+, unzip
+, debug ? false
+
+/* you have to add ~/mm.cfg :
+
+ TraceOutputFileEnable=1
+ ErrorReportingEnable=1
+ MaxWarnings=1
+
+ in order to read the flash trace at ~/.macromedia/Flash_Player/Logs/flashlog.txt
+ Then FlashBug (a FireFox plugin) shows the log as well
+*/
+
+}:
+
+let
+ arch =
+ if stdenv.hostPlatform.system == "x86_64-linux" then
+ "x86_64"
+ else if stdenv.hostPlatform.system == "i686-linux" then
+ "i386"
+ else throw "Flash Player is not supported on this platform";
+ lib_suffix =
+ if stdenv.hostPlatform.system == "x86_64-linux" then
+ "64"
+ else
+ "";
+in
+stdenv.mkDerivation rec {
+ pname = "flashplayer";
+ version = "32.0.0.445";
+
+ src = fetchurl {
+ url =
+ if debug then
+ "https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_npapi_linux_debug.${arch}.tar.gz"
+ else
+ "https://fpdownload.adobe.com/get/flashplayer/pdc/${version}/flash_player_npapi_linux.${arch}.tar.gz";
+ sha256 =
+ if debug then
+ if arch == "x86_64" then
+ "0jn1g8k8fkikhi0xlcsx5a43lxrj6ynwbxn55b17wacsqw20b9ii"
+ else
+ "104af8sy0qq45agg3lpjwn1cp8lhpcjiim6gqn4cymcfp8d7ngg0"
+ else
+ if arch == "x86_64" then
+ "1dd52nhnl3f1d7r82gq28scna5qr39gpfqkgrhzd6cxd2vnhnhjn"
+ else
+ "09ayb637cyf5x06xmhvad2znss7ak7r4n8z3wq7qmn0pmjdsa5a3";
+ };
+
+ nativeBuildInputs = [ unzip ];
+
+ sourceRoot = ".";
+
+ dontStrip = true;
+ dontPatchELF = true;
+
+ preferLocalBuild = true;
+
+ installPhase = ''
+ mkdir -p $out/lib/mozilla/plugins
+ cp -pv libflashplayer.so $out/lib/mozilla/plugins
+
+ mkdir -p $out/bin
+ cp -pv usr/bin/flash-player-properties $out/bin
+
+ mkdir -p $out/lib${lib_suffix}/kde4
+ cp -pv usr/lib${lib_suffix}/kde4/kcm_adobe_flash_player.so $out/lib${lib_suffix}/kde4
+
+ patchelf --set-rpath "$rpath" \
+ $out/lib/mozilla/plugins/libflashplayer.so \
+ $out/lib${lib_suffix}/kde4/kcm_adobe_flash_player.so
+
+ patchelf \
+ --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+ --set-rpath "$rpath" \
+ $out/bin/flash-player-properties
+ '';
+
+ passthru = {
+ mozillaPlugin = "/lib/mozilla/plugins";
+ };
+
+ rpath = lib.makeLibraryPath
+ [ stdenv.cc.cc
+ alsaLib atk bzip2 cairo curl expat fontconfig freetype gdk-pixbuf glib
+ glibc graphite2 gtk2 harfbuzz libICE libSM libX11 libXau libXcomposite
+ libXcursor libXdamage libXdmcp libXext libXfixes libXi libXinerama
+ libXrandr libXrender libXt libXxf86vm libdrm libffi libglvnd libpng
+ libvdpau libxcb libxshmfence nspr nss pango pcre pixman zlib
+ ];
+
+ meta = {
+ description = "Adobe Flash Player browser plugin";
+ homepage = "http://www.adobe.com/products/flashplayer/";
+ license = stdenv.lib.licenses.unfree;
+ maintainers = with stdenv.lib.maintainers; [ taku0 ];
+ platforms = [ "x86_64-linux" "i686-linux" ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer/standalone.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer/standalone.nix
new file mode 100644
index 000000000000..75c97cdd3412
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/mozilla-plugins/flashplayer/standalone.nix
@@ -0,0 +1,106 @@
+{ stdenv
+, lib
+, fetchurl
+, alsaLib
+, atk
+, bzip2
+, cairo
+, curl
+, expat
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, glibc
+, graphite2
+, gtk2
+, harfbuzz
+, libICE
+, libSM
+, libX11
+, libXau
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXdmcp
+, libXext
+, libXfixes
+, libXi
+, libXinerama
+, libXrandr
+, libXrender
+, libXt
+, libXxf86vm
+, libdrm
+, libffi
+, libglvnd
+, libpng
+, libvdpau
+, libxcb
+, libxshmfence
+, nspr
+, nss
+, pango
+, pcre
+, pixman
+, zlib
+, unzip
+, debug ? false
+}:
+
+stdenv.mkDerivation {
+ pname = "flashplayer-standalone";
+ version = "32.0.0.445";
+
+ src = fetchurl {
+ url =
+ if debug then
+ "https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_sa_linux_debug.x86_64.tar.gz"
+ else
+ "https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_sa_linux.x86_64.tar.gz";
+ sha256 =
+ if debug then
+ "0iqmdd222mjsf3rdbcm4z974i5q9y4i5agnhn039k0hpydi4zdcr"
+ else
+ "07vz17zhwh31phccpbmwgfa3fdb2f7bnc3sf66ipsw1xcqgncpsx";
+ };
+
+ nativeBuildInputs = [ unzip ];
+
+ sourceRoot = ".";
+
+ dontStrip = true;
+ dontPatchELF = true;
+
+ preferLocalBuild = true;
+
+ installPhase = ''
+ mkdir -p $out/bin
+ cp -pv flashplayer${lib.optionalString debug "debugger"} $out/bin
+
+ patchelf \
+ --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
+ --set-rpath "$rpath" \
+ $out/bin/flashplayer${lib.optionalString debug "debugger"}
+ '';
+
+ rpath = lib.makeLibraryPath
+ [ stdenv.cc.cc
+ alsaLib atk bzip2 cairo curl expat fontconfig freetype gdk-pixbuf glib
+ glibc graphite2 gtk2 harfbuzz libICE libSM libX11 libXau libXcomposite
+ libXcursor libXdamage libXdmcp libXext libXfixes libXi libXinerama
+ libXrandr libXrender libXt libXxf86vm libdrm libffi libglvnd libpng
+ libvdpau libxcb libxshmfence nspr nss pango pcre pixman zlib
+ ];
+
+ meta = {
+ description = "Adobe Flash Player standalone executable";
+ homepage = "https://www.adobe.com/support/flashplayer/debug_downloads.html";
+ license = stdenv.lib.licenses.unfree;
+ maintainers = with stdenv.lib.maintainers; [ taku0 ];
+ platforms = [ "x86_64-linux" ];
+ # Application crashed with an unhandled SIGSEGV
+ # Not on all systems, though. Video driver problem?
+ broken = false;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/browser.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/browser.nix
new file mode 100644
index 000000000000..407d94a4dc45
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/browser.nix
@@ -0,0 +1,83 @@
+{ stdenv, fetchurl, fetchpatch, makeWrapper, wrapGAppsHook
+
+# Buildtime dependencies.
+, check, pkgconfig, xxd
+
+# Runtime dependencies.
+, curl, expat, libXcursor, libXrandr, libidn, libjpeg, libpng, libwebp, libxml2
+, openssl, perl, perlPackages
+
+# uilib-specific dependencies
+, gtk2 # GTK 2
+, gtk3 # GTK 3
+, SDL # Framebuffer
+
+# Configuration
+, uilib
+
+# Netsurf-specific dependencies
+, libcss, libdom, libhubbub, libnsbmp, libnsfb, libnsgif
+, libnslog, libnspsl, libnsutils, libparserutils, libsvgtiny, libutf8proc
+, libwapcaplet, nsgenbind
+}:
+
+let
+ inherit (stdenv.lib) optional optionals;
+in
+stdenv.mkDerivation rec {
+ pname = "netsurf";
+ version = "3.10";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/netsurf/releases/source/${pname}-${version}-src.tar.gz";
+ sha256 = "sha256-NkhEKeGTYUaFwv8kb1W9Cm3d8xoBi+5F4NH3wohRmV4=";
+ };
+
+ nativeBuildInputs = [
+ makeWrapper
+ perl
+ perlPackages.HTMLParser
+ pkgconfig
+ xxd
+ ]
+ ++ optional (uilib == "gtk2" || uilib == "gtk3") wrapGAppsHook
+ ;
+
+ buildInputs = [
+ check curl libXcursor libXrandr libidn libjpeg libpng libwebp libxml2 openssl
+ # Netsurf-specific libraries
+ nsgenbind libnsfb libwapcaplet libparserutils libnslog libcss
+ libhubbub libdom libnsbmp libnsgif libsvgtiny libnsutils libnspsl
+ libutf8proc
+ ]
+ ++ optionals (uilib == "framebuffer") [ expat SDL ]
+ ++ optional (uilib == "gtk2") gtk2
+ ++ optional (uilib == "gtk3") gtk3
+ ;
+
+ preConfigure = ''
+ cat <<EOF > Makefile.conf
+ override NETSURF_GTK_RES_PATH := $out/share/
+ override NETSURF_USE_GRESOURCE := YES
+ EOF
+ '';
+
+ makeFlags = [
+ "PREFIX=${placeholder "out"}"
+ "TARGET=${uilib}"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/";
+ description = "A free, open source, small web browser";
+ longDescription = ''
+ NetSurf is a free, open source web browser. It is written in C and
+ released under the GNU Public Licence version 2. NetSurf has its own
+ layout and rendering engine entirely written from scratch. It is small and
+ capable of handling many of the web standards in use today.
+ '';
+ license = licenses.gpl2Only;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/buildsystem.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/buildsystem.nix
new file mode 100644
index 000000000000..2d625b725446
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/buildsystem.nix
@@ -0,0 +1,24 @@
+{ stdenv, fetchurl }:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "buildsystem";
+ version = "1.9";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}.tar.gz";
+ sha256 = "sha256-k4QeMUpoggmiC4dF8GU5PzqQ8Bvmj0Xpa8jS9KKqmio=";
+ };
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/";
+ description = "NetSurf browser shared build system";
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/default.nix
new file mode 100644
index 000000000000..409ab80ce3ac
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/default.nix
@@ -0,0 +1,36 @@
+{ lib, pkgs }:
+
+lib.makeScope pkgs.newScope (self: with self; {
+ # ui can be: gtk2, gtk3, sixel, framebuffer. Note that console display (sixel)
+ # requires a terminal that supports `sixel` capabilities, such as mlterm
+ # or xterm -ti 340
+ ui = "gtk3";
+ uilib =
+ if ui == "gtk2" ||
+ ui == "gtk3" ||
+ ui == "framebuffer" then ui
+ else if ui == "sixel" then "framebuffer"
+ else null; # Never will happen
+ SDL =
+ if ui == "sixel" then pkgs.SDL_sixel
+ else if ui == "framebuffer" then pkgs.SDL
+ else null;
+
+ browser = callPackage ./browser.nix { };
+
+ buildsystem = callPackage ./buildsystem.nix { };
+ libcss = callPackage ./libcss.nix { };
+ libdom = callPackage ./libdom.nix { };
+ libhubbub = callPackage ./libhubbub.nix { };
+ libnsbmp = callPackage ./libnsbmp.nix { };
+ libnsfb = callPackage ./libnsfb.nix { };
+ libnsgif = callPackage ./libnsgif.nix { };
+ libnslog = callPackage ./libnslog.nix { };
+ libnspsl = callPackage ./libnspsl.nix { };
+ libnsutils = callPackage ./libnsutils.nix { };
+ libparserutils = callPackage ./libparserutils.nix { };
+ libsvgtiny = callPackage ./libsvgtiny.nix { };
+ libutf8proc = callPackage ./libutf8proc.nix { };
+ libwapcaplet = callPackage ./libwapcaplet.nix { };
+ nsgenbind = callPackage ./nsgenbind.nix { };
+})
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libcss.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libcss.nix
new file mode 100644
index 000000000000..db907edd8799
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libcss.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, pkgconfig, perl
+, buildsystem
+, libparserutils
+, libwapcaplet
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libcss";
+ version = "0.9.1";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-0tzhbpM5Lo1qcglCDUfC1Wo4EXAaDoGnJPxUHGPTxtw=";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [
+ perl
+ libparserutils
+ libwapcaplet
+ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ NIX_CFLAGS_COMPILE= "-Wno-error=implicit-fallthrough";
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/${libname}/";
+ description = "Cascading Style Sheets library for netsurf browser";
+ longDescription = ''
+ LibCSS is a CSS parser and selection engine. It aims to parse the forward
+ compatible CSS grammar. It was developed as part of the NetSurf project
+ and is available for use by other software, under a more permissive
+ license.
+ '';
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libdom.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libdom.nix
new file mode 100644
index 000000000000..3aa9e3a1878e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libdom.nix
@@ -0,0 +1,43 @@
+{ stdenv, fetchurl, pkgconfig, expat
+, buildsystem
+, libparserutils
+, libwapcaplet
+, libhubbub
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libdom";
+ version = "0.4.1";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-mO4HJHHlXiCMmHjlFcQQrUYso2+HtK/L7K0CPzos70o=";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [
+ expat
+ libhubbub
+ libparserutils
+ libwapcaplet
+ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/${libname}/";
+ description = "Document Object Model library for netsurf browser";
+ longDescription = ''
+ LibDOM is an implementation of the W3C DOM, written in C. It is currently
+ in development for use with NetSurf and is intended to be suitable for use
+ in other projects under a more permissive license.
+ '';
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libhubbub.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libhubbub.nix
new file mode 100644
index 000000000000..53b8d270d4f6
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libhubbub.nix
@@ -0,0 +1,44 @@
+{ stdenv, fetchurl, pkgconfig, perl
+, buildsystem
+, libparserutils
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libhubbub";
+ version = "0.3.7";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-nnriU+bJBp51frmtTkhG84tNtSwMoBUURqn6Spd3NbY=";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [
+ perl
+ libparserutils
+ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/hubbub/";
+ description = "HTML5 parser library for netsurf browser";
+ longDescription = ''
+ Hubbub is an HTML5 compliant parsing library, written in C. It was
+ developed as part of the NetSurf project and is available for use by other
+ software under the MIT licence.
+
+ The HTML5 specification defines a parsing algorithm, based on the
+ behaviour of mainstream browsers, which provides instructions for how to
+ parse all markup, both valid and invalid. As a result, Hubbub parses web
+ content well.
+ '';
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsbmp.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsbmp.nix
new file mode 100644
index 000000000000..95487eed00fc
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsbmp.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libnsbmp";
+ version = "0.1.6";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-ecSTZfhg7UUb/EEJ7d7I3j6bfOWjvgaVlr0qoZJ5Mk8=";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/";
+ description = "BMP Decoder for netsurf browser";
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsfb.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsfb.nix
new file mode 100644
index 000000000000..d37766f5330f
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsfb.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl, pkgconfig
+, uilib, SDL
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libnsfb";
+ version = "0.2.2";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-vkRso+tU35A/LamDEdEH11dM0R9awHE+YZFW1NGeo5o=";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ SDL buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ "TARGET=${uilib}"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/${libname}/";
+ description = "Netsurf framebuffer abstraction library";
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsgif.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsgif.nix
new file mode 100644
index 000000000000..d8683280c4e1
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsgif.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libnsgif";
+ version = "0.2.1";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-nq6lNM1wtTxar0UxeulXcBaFprSojb407Sb0+q6Hmks=";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/${libname}/";
+ description = "GIF Decoder for netsurf browser";
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnslog.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnslog.nix
new file mode 100644
index 000000000000..12fdcff50bd3
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnslog.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig, bison, flex
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libnslog";
+ version = "0.1.3";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-/JjcqdfvpnCWRwpdlsAjFG4lv97AjA23RmHHtNsEU9A=";
+ };
+
+ nativeBuildInputs = [ pkgconfig bison flex ];
+ buildInputs = [ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/";
+ description = "NetSurf Parametric Logging Library";
+ license = licenses.isc;
+ maintainers = [ maintainers.samueldr maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnspsl.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnspsl.nix
new file mode 100644
index 000000000000..4338f78247c7
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnspsl.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libnspsl";
+ version = "0.1.6";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-08WCBct40xC/gcpVNHotCYcZzsrHBGvDZ5g7E4tFAgs=";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/";
+ description = "NetSurf Public Suffix List - Handling library";
+ license = licenses.mit;
+ maintainers = [ maintainers.samueldr maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsutils.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsutils.nix
new file mode 100644
index 000000000000..42c8b8b06214
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libnsutils.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libnsutils";
+ version = "0.1.0";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-eQxlFjRKvoL2KJ1lY5LpzOvkdbIMx+Hi2EMBE4X3rvA=";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/${libname}/";
+ description = "Generalised utility library for netsurf browser";
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libparserutils.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libparserutils.nix
new file mode 100644
index 000000000000..b96018d92eb8
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libparserutils.nix
@@ -0,0 +1,29 @@
+{ stdenv, fetchurl, perl
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libparserutils";
+ version = "0.2.4";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-MiuuYbMMzt4+MFv26uJBSSBkl3W8X/HRtogBKjxJR9g=";
+ };
+
+ buildInputs = [ perl buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/${libname}/";
+ description = "Parser building library for netsurf browser";
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libsvgtiny.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libsvgtiny.nix
new file mode 100644
index 000000000000..aef154bbc17c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libsvgtiny.nix
@@ -0,0 +1,39 @@
+{ stdenv, fetchurl, pkgconfig, gperf
+, buildsystem
+, libdom
+, libhubbub
+, libparserutils
+, libwapcaplet
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libsvgtiny";
+ version = "0.1.7";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-LA3PlS8c2ILD6VQB75RZ8W27U8XT5FEjObL563add4E=";
+ };
+
+ nativeBuildInputs = [ pkgconfig gperf ];
+ buildInputs = [
+ libdom
+ libhubbub
+ libparserutils
+ libwapcaplet
+ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/${libname}/";
+ description = "NetSurf SVG decoder";
+ license = licenses.mit;
+ maintainers = [ maintainers.samueldr maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libutf8proc.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libutf8proc.nix
new file mode 100644
index 000000000000..59bae9e941eb
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libutf8proc.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl, pkgconfig
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libutf8proc";
+ version = "2.4.0-1";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-AasdaYnBx3VQkNskw/ZOSflcVgrknCa+xRQrrGgCxHI=";
+ };
+
+ nativeBuildInputs = [ pkgconfig ];
+ buildInputs = [ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/${libname}/";
+ description = "UTF8 Processing library for netsurf browser";
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libwapcaplet.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libwapcaplet.nix
new file mode 100644
index 000000000000..8c5af461fd06
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/libwapcaplet.nix
@@ -0,0 +1,31 @@
+{ stdenv, fetchurl
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "libwapcaplet";
+ version = "0.4.3";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-myqh3W1mRfjpkrNpf9vYfwwOHaVyH6VO0ptITRMWDFw=";
+ };
+
+ buildInputs = [ buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ NIX_CFLAGS_COMPILE = "-Wno-error=cast-function-type";
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/projects/${libname}/";
+ description = "String internment library for netsurf browser";
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/nsgenbind.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/nsgenbind.nix
new file mode 100644
index 000000000000..0be7adc4a595
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/netsurf/nsgenbind.nix
@@ -0,0 +1,30 @@
+{ stdenv, fetchurl
+, flex, bison
+, buildsystem
+}:
+
+stdenv.mkDerivation rec {
+ pname = "netsurf-${libname}";
+ libname = "nsgenbind";
+ version = "0.8";
+
+ src = fetchurl {
+ url = "http://download.netsurf-browser.org/libs/releases/${libname}-${version}-src.tar.gz";
+ sha256 = "sha256-TY1TrQAK2nEncjZeanPrj8XOl1hK+chlrFsmohh/HLM=";
+ };
+
+ buildInputs = [ flex bison buildsystem ];
+
+ makeFlags = [
+ "PREFIX=$(out)"
+ "NSSHARED=${buildsystem}/share/netsurf-buildsystem"
+ ];
+
+ meta = with stdenv.lib; {
+ homepage = "https://www.netsurf-browser.org/";
+ description = "Generator for JavaScript bindings for netsurf browser";
+ license = licenses.mit;
+ maintainers = [ maintainers.vrthra maintainers.AndersonTorres ];
+ platforms = platforms.linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/nyxt/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/nyxt/default.nix
new file mode 100644
index 000000000000..ff99b1c21ddd
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/nyxt/default.nix
@@ -0,0 +1,57 @@
+{ stdenv, lib, lispPackages, sbcl
+, makeWrapper, wrapGAppsHook, gst_all_1
+, glib, gdk-pixbuf, cairo
+, mime-types, pango, gtk3
+, glib-networking, gsettings-desktop-schemas
+, xclip, notify-osd, enchant
+}:
+
+stdenv.mkDerivation rec {
+ pname = "nyxt";
+ inherit (lispPackages.nyxt.meta) version;
+
+ src = lispPackages.nyxt;
+
+ nativeBuildInputs = [ makeWrapper wrapGAppsHook ];
+ gstBuildInputs = with gst_all_1; [
+ gstreamer gst-libav
+ gst-plugins-base
+ gst-plugins-good
+ gst-plugins-bad
+ gst-plugins-ugly
+ ];
+ buildInputs = [
+ glib gdk-pixbuf cairo
+ mime-types pango gtk3
+ glib-networking gsettings-desktop-schemas
+ xclip notify-osd enchant
+ ] ++ gstBuildInputs;
+
+ GST_PLUGIN_SYSTEM_PATH_1_0 = lib.concatMapStringsSep ":" (p: "${p}/lib/gstreamer-1.0") gstBuildInputs;
+
+ dontWrapGApps = true;
+ installPhase = ''
+ mkdir -p $out/share/applications/
+ sed "s/VERSION/$version/" $src/lib/common-lisp/nyxt/assets/nyxt.desktop > $out/share/applications/nyxt.desktop
+ for i in 16 32 128 256 512; do
+ mkdir -p "$out/share/icons/hicolor/''${i}x''${i}/apps/"
+ cp -f $src/lib/common-lisp/nyxt/assets/nyxt_''${i}x''${i}.png "$out/share/icons/hicolor/''${i}x''${i}/apps/nyxt.png"
+ done
+
+ mkdir -p $out/bin && makeWrapper $src/bin/nyxt $out/bin/nyxt \
+ --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "${GST_PLUGIN_SYSTEM_PATH_1_0}" \
+ --argv0 nyxt "''${gappsWrapperArgs[@]}"
+ '';
+
+ checkPhase = ''
+ $out/bin/nyxt -h
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Infinitely extensible web-browser (with Lisp development files using WebKitGTK platform port)";
+ homepage = "https://nyxt.atlas.engineer";
+ license = licenses.bsd3;
+ maintainers = with maintainers; [ lewo ];
+ platforms = [ "x86_64-linux" ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/opera/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/opera/default.nix
new file mode 100644
index 000000000000..eefe7af26a1b
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/opera/default.nix
@@ -0,0 +1,122 @@
+{ alsaLib
+, atk
+, cairo
+, cups
+, curl
+, dbus
+, dpkg
+, expat
+, fetchurl
+, fontconfig
+, freetype
+, gdk-pixbuf
+, glib
+, gnome2
+, gtk3
+, lib
+, libX11
+, libxcb
+, libXScrnSaver
+, libXcomposite
+, libXcursor
+, libXdamage
+, libXext
+, libXfixes
+, libXi
+, libXrandr
+, libXrender
+, libXtst
+, libnotify
+, libpulseaudio
+, libuuid
+, nspr
+, nss
+, pango
+, stdenv
+, systemd
+, at-spi2-atk
+, at-spi2-core
+, autoPatchelfHook
+, wrapGAppsHook
+}:
+
+let
+
+ mirror = "https://get.geo.opera.com/pub/opera/desktop";
+
+in stdenv.mkDerivation rec {
+
+ pname = "opera";
+ version = "68.0.3618.63";
+
+ src = fetchurl {
+ url = "${mirror}/${version}/linux/${pname}-stable_${version}_amd64.deb";
+ sha256 = "1643043ywz94x2yr7xyw7krfq53iwkr8qxlbydzq6zb2zina7jxd";
+ };
+
+ unpackCmd = "${dpkg}/bin/dpkg-deb -x $curSrc .";
+
+ nativeBuildInputs = [
+ autoPatchelfHook
+ wrapGAppsHook
+ ];
+
+ buildInputs = [
+ alsaLib
+ at-spi2-atk
+ at-spi2-core
+ atk
+ cairo
+ cups
+ curl
+ dbus
+ expat
+ fontconfig.lib
+ freetype
+ gdk-pixbuf
+ glib
+ gnome2.GConf
+ gtk3
+ libX11
+ libXScrnSaver
+ libXcomposite
+ libXcursor
+ libXdamage
+ libXext
+ libXfixes
+ libXi
+ libXrandr
+ libXrender
+ libXtst
+ libnotify
+ libuuid
+ libxcb
+ nspr
+ nss
+ pango
+ stdenv.cc.cc.lib
+ ];
+
+ runtimeDependencies = [
+ # Works fine without this except there is no sound.
+ libpulseaudio.out
+
+ # This is a little tricky. Without it the app starts then crashes. Then it
+ # brings up the crash report, which also crashes. `strace -f` hints at a
+ # missing libudev.so.0.
+ (lib.getLib systemd)
+ ];
+
+ installPhase = ''
+ mkdir -p $out
+ cp -r . $out/
+ mv $out/lib/*/opera/*.so $out/lib/
+ '';
+
+ meta = with lib; {
+ homepage = "https://www.opera.com";
+ description = "Web browser";
+ platforms = [ "x86_64-linux" ];
+ license = licenses.unfree;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/palemoon/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/palemoon/default.nix
new file mode 100644
index 000000000000..5d299f3349ed
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/palemoon/default.nix
@@ -0,0 +1,159 @@
+{ stdenv, lib, fetchFromGitHub, writeScript, desktop-file-utils
+, pkgconfig, autoconf213, alsaLib, bzip2, cairo
+, dbus, dbus-glib, ffmpeg_3, file, fontconfig, freetype
+, gnome2, gnum4, gtk2, hunspell, libevent, libjpeg
+, libnotify, libstartup_notification, wrapGAppsHook
+, libGLU, libGL, perl, python2, libpulseaudio
+, unzip, xorg, wget, which, yasm, zip, zlib
+
+, withGTK3 ? false, gtk3
+}:
+
+let
+
+ libPath = lib.makeLibraryPath [ ffmpeg_3 libpulseaudio ];
+ gtkVersion = if withGTK3 then "3" else "2";
+
+in stdenv.mkDerivation rec {
+ pname = "palemoon";
+ version = "28.16.0";
+
+ src = fetchFromGitHub {
+ githubBase = "repo.palemoon.org";
+ owner = "MoonchildProductions";
+ repo = "Pale-Moon";
+ rev = "${version}_Release";
+ sha256 = "1svwbiar7c38c8xfw249mwnvayqq5868nkks7cbv9nyf2m9yap56";
+ fetchSubmodules = true;
+ };
+
+ passthru.updateScript = writeScript "update-${pname}" ''
+ #!/usr/bin/env nix-shell
+ #!nix-shell -i bash -p common-updater-scripts curl libxml2
+
+ set -eu -o pipefail
+
+ # Only release note announcement == finalized release
+ version="$(
+ curl -s 'http://www.palemoon.org/releasenotes.shtml' |
+ xmllint --html --xpath 'html/body/table/tbody/tr/td/h3/text()' - 2>/dev/null | head -n1 |
+ sed 's/v\(\S*\).*/\1/'
+ )"
+ update-source-version ${pname} "$version"
+ '';
+
+ nativeBuildInputs = [
+ desktop-file-utils file gnum4 perl pkgconfig python2 wget which wrapGAppsHook
+ ];
+
+ buildInputs = [
+ alsaLib bzip2 cairo dbus dbus-glib ffmpeg_3 fontconfig freetype
+ gnome2.GConf gtk2 hunspell libevent libjpeg libnotify
+ libstartup_notification libGLU libGL
+ libpulseaudio unzip yasm zip zlib
+ ]
+ ++ (with xorg; [
+ libX11 libXext libXft libXi libXrender libXScrnSaver
+ libXt pixman xorgproto
+ ])
+ ++ lib.optional withGTK3 gtk3;
+
+ enableParallelBuilding = true;
+
+ configurePhase = ''
+ export MOZCONFIG=$(pwd)/mozconfig
+ export MOZ_NOSPAM=1
+
+ # Keep this similar to the official .mozconfig file,
+ # only minor changes for portability are permitted with branding.
+ # https://developer.palemoon.org/build/linux/
+ echo > $MOZCONFIG '
+ # Clear this if not a 64bit build
+ _BUILD_64=${lib.optionalString stdenv.hostPlatform.is64bit "1"}
+
+ # Set GTK Version to 2 or 3
+ _GTK_VERSION=${gtkVersion}
+
+ # Standard build options for Pale Moon
+ ac_add_options --enable-application=palemoon
+ ac_add_options --enable-optimize="-O2 -w"
+ ac_add_options --enable-default-toolkit=cairo-gtk$_GTK_VERSION
+ ac_add_options --enable-jemalloc
+ ac_add_options --enable-strip
+ ac_add_options --enable-devtools
+
+ ac_add_options --disable-eme
+ ac_add_options --disable-webrtc
+ ac_add_options --disable-gamepad
+ ac_add_options --disable-tests
+ ac_add_options --disable-debug
+ ac_add_options --disable-necko-wifi
+ ac_add_options --disable-updater
+
+ ac_add_options --with-pthreads
+
+ # Please see https://www.palemoon.org/redist.shtml for restrictions when using the official branding.
+ ac_add_options --enable-official-branding
+ export MOZILLA_OFFICIAL=1
+
+ # For versions after 28.12.0
+ ac_add_options --enable-phoenix-extensions
+
+ ac_add_options --x-libraries=${lib.makeLibraryPath [ xorg.libX11 ]}
+
+ export MOZ_PKG_SPECIAL=gtk$_GTK_VERSION
+
+ #
+ # NixOS-specific adjustments
+ #
+
+ ac_add_options --prefix=$out
+
+ mk_add_options MOZ_MAKE_FLAGS="-j${if enableParallelBuilding then "$NIX_BUILD_CORES" else "1"}"
+ mk_add_options AUTOCONF=${autoconf213}/bin/autoconf
+ '
+ '';
+
+ buildPhase = "$src/mach build";
+
+ installPhase = ''
+ $src/mach install
+
+ desktop-file-install --dir=$out/share/applications \
+ $src/palemoon/branding/official/palemoon.desktop
+
+ for iconname in default{16,22,24,32,48,256} mozicon128; do
+ n=''${iconname//[^0-9]/}
+ size=$n"x"$n
+ install -Dm644 $src/palemoon/branding/official/$iconname.png $out/share/icons/hicolor/$size/apps/palemoon.png
+ done
+ '';
+
+ dontWrapGApps = true;
+
+ preFixup = ''
+ gappsWrapperArgs+=(
+ --prefix LD_LIBRARY_PATH : "${libPath}"
+ )
+ wrapGApp $out/lib/palemoon-${version}/palemoon
+ '';
+
+ meta = with lib; {
+ description = "An Open Source, Goanna-based web browser focusing on efficiency and customization";
+ longDescription = ''
+ Pale Moon is an Open Source, Goanna-based web browser focusing on
+ efficiency and customization.
+
+ Pale Moon offers you a browsing experience in a browser completely built
+ from its own, independently developed source that has been forked off from
+ Firefox/Mozilla code a number of years ago, with carefully selected
+ features and optimizations to improve the browser's stability and user
+ experience, while offering full customization and a growing collection of
+ extensions and themes to make the browser truly your own.
+ '';
+ homepage = "https://www.palemoon.org/";
+ license = licenses.mpl20;
+ maintainers = with maintainers; [ AndersonTorres OPNA2608 ];
+ platforms = [ "i686-linux" "x86_64-linux" ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qtchan/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qtchan/default.nix
new file mode 100644
index 000000000000..9a4d61a50aee
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qtchan/default.nix
@@ -0,0 +1,31 @@
+{ mkDerivation, lib, fetchFromGitHub, qmake, qtbase }:
+
+mkDerivation rec {
+ pname = "qtchan";
+ version = "1.0.1";
+
+ src = fetchFromGitHub {
+ owner = "siavash119";
+ repo = "qtchan";
+ rev = "v${version}";
+ sha256 = "1x11m1kwqindzc0dkpfifcglsb362impaxs85kgzx50p898sz9ll";
+ };
+
+ enableParallelBuilding = true;
+ nativeBuildInputs = [ qmake ];
+ buildInputs = [ qtbase ];
+ qmakeFlags = [ "CONFIG-=app_bundle" ];
+
+ installPhase = ''
+ mkdir -p $out/bin
+ cp qtchan $out/bin
+ '';
+
+ meta = with lib; {
+ description = "4chan browser in qt5";
+ homepage = "https://github.com/siavash119/qtchan";
+ license = licenses.mit;
+ maintainers = with maintainers; [ chiiruno ];
+ platforms = platforms.unix;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/default.nix
new file mode 100644
index 000000000000..4b1efe9dba2f
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/default.nix
@@ -0,0 +1,122 @@
+{ stdenv, lib, fetchurl, fetchzip, python3
+, mkDerivationWith, wrapQtAppsHook, wrapGAppsHook, qtbase, glib-networking
+, asciidoc, docbook_xml_dtd_45, docbook_xsl, libxml2
+, libxslt, gst_all_1 ? null
+, withPdfReader ? true
+, withMediaPlayback ? true
+, backend ? "webengine"
+}:
+
+assert withMediaPlayback -> gst_all_1 != null;
+
+let
+ python3Packages = python3.pkgs;
+ pdfjs = let
+ version = "2.6.347";
+ in
+ fetchzip rec {
+ name = "pdfjs-${version}";
+ url = "https://github.com/mozilla/pdf.js/releases/download/v${version}/${name}-dist.zip";
+ sha256 = "0d016fyg81cq464li01xlkf9rxrb3rpsvmk5gh9m4d5yzmcakkfm";
+ stripRoot = false;
+ };
+
+ backendPackage =
+ if backend == "webengine" then python3Packages.pyqtwebengine else
+ if backend == "webkit" then python3Packages.pyqt5_with_qtwebkit else
+ throw ''
+ Unknown qutebrowser backend "${backend}".
+ Valid choices are qtwebengine (recommended) or qtwebkit.
+ '';
+
+in mkDerivationWith python3Packages.buildPythonApplication rec {
+ pname = "qutebrowser";
+ version = "1.14.1";
+
+ # the release tarballs are different from the git checkout!
+ src = fetchurl {
+ url = "https://github.com/qutebrowser/qutebrowser/releases/download/v${version}/${pname}-${version}.tar.gz";
+ sha256 = "15l7jphy1qjsh6y6kd5mgkxsl6ymm9564g1yypa946jbyrgi8k2m";
+ };
+
+ # Needs tox
+ doCheck = false;
+
+ buildInputs = [
+ qtbase
+ glib-networking
+ ] ++ lib.optionals withMediaPlayback (with gst_all_1; [
+ gst-plugins-base gst-plugins-good
+ gst-plugins-bad gst-plugins-ugly gst-libav
+ ]);
+
+ nativeBuildInputs = [
+ wrapQtAppsHook wrapGAppsHook asciidoc
+ docbook_xml_dtd_45 docbook_xsl libxml2 libxslt
+ ];
+
+ propagatedBuildInputs = with python3Packages; [
+ pyyaml backendPackage jinja2 pygments
+ pypeg2 cssutils pyopengl attrs setuptools
+ # scripts and userscripts libs
+ tldextract beautifulsoup4
+ pyreadability pykeepass stem
+ ];
+
+ patches = [ ./fix-restart.patch ];
+
+ dontWrapGApps = true;
+ dontWrapQtApps = true;
+
+ postPatch = ''
+ substituteInPlace qutebrowser/misc/quitter.py --subst-var-by qutebrowser "$out/bin/qutebrowser"
+
+ sed -i "s,/usr/share/,$out/share/,g" qutebrowser/utils/standarddir.py
+ '' + lib.optionalString withPdfReader ''
+ sed -i "s,/usr/share/pdf.js,${pdfjs},g" qutebrowser/browser/pdfjs.py
+ '';
+
+ postBuild = ''
+ a2x -f manpage doc/qutebrowser.1.asciidoc
+ '';
+
+ postInstall = ''
+ install -Dm644 doc/qutebrowser.1 "$out/share/man/man1/qutebrowser.1"
+ install -Dm644 misc/org.qutebrowser.qutebrowser.desktop \
+ "$out/share/applications/org.qutebrowser.qutebrowser.desktop"
+
+ # Install icons
+ for i in 16 24 32 48 64 128 256 512; do
+ install -Dm644 "icons/qutebrowser-''${i}x''${i}.png" \
+ "$out/share/icons/hicolor/''${i}x''${i}/apps/qutebrowser.png"
+ done
+ install -Dm644 icons/qutebrowser.svg \
+ "$out/share/icons/hicolor/scalable/apps/qutebrowser.svg"
+
+ # Install scripts
+ sed -i "s,/usr/bin/,$out/bin/,g" scripts/open_url_in_instance.sh
+ install -Dm755 -t "$out/share/qutebrowser/scripts/" $(find scripts -type f)
+ install -Dm755 -t "$out/share/qutebrowser/userscripts/" misc/userscripts/*
+
+ # Patch python scripts
+ buildPythonPath "$out $propagatedBuildInputs"
+ scripts=$(grep -rl python "$out"/share/qutebrowser/{user,}scripts/)
+ for i in $scripts; do
+ patchPythonScript "$i"
+ done
+ '';
+
+ postFixup = ''
+ wrapProgram $out/bin/qutebrowser \
+ "''${gappsWrapperArgs[@]}" \
+ "''${qtWrapperArgs[@]}" \
+ --add-flags '--backend ${backend}'
+ '';
+
+ meta = with stdenv.lib; {
+ homepage = "https://github.com/The-Compiler/qutebrowser";
+ description = "Keyboard-focused browser with a minimal GUI";
+ license = licenses.gpl3Plus;
+ maintainers = with maintainers; [ jagajaga rnhmjoj ebzzry ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch
new file mode 100644
index 000000000000..828fa5e107c9
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/qutebrowser/fix-restart.patch
@@ -0,0 +1,19 @@
+diff --git a/quitter.py b/quitter.py
+index a42b9d0..f544ccb 100644
+--- a/qutebrowser/misc/quitter.py
++++ b/qutebrowser/misc/quitter.py
+@@ -112,13 +112,7 @@ class Quitter(QObject):
+ Return:
+ The commandline as a list of strings.
+ """
+- if os.path.basename(sys.argv[0]) == 'qutebrowser':
+- # Launched via launcher script
+- args = [sys.argv[0]]
+- elif hasattr(sys, 'frozen'):
+- args = [sys.executable]
+- else:
+- args = [sys.executable, '-m', 'qutebrowser']
++ args = ['@qutebrowser@']
+
+ # Add all open pages so they get reopened.
+ page_args = [] # type: typing.MutableSequence[str]
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/surf/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/surf/default.nix
new file mode 100644
index 000000000000..57eb4fad76b0
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/surf/default.nix
@@ -0,0 +1,48 @@
+{ lib, stdenv, fetchgit
+, pkgconfig, wrapGAppsHook
+, glib, gcr, glib-networking, gsettings-desktop-schemas, gtk, libsoup, webkitgtk
+, xorg, dmenu, findutils, gnused, coreutils
+, patches ? null
+}:
+
+stdenv.mkDerivation rec {
+ pname = "surf";
+ version = "unstable-2019-02-08";
+
+ src = fetchgit {
+ url = "git://git.suckless.org/surf";
+ rev = "d068a3878b6b9f2841a49cd7948cdf9d62b55585";
+ sha256 = "0pjsv2q8c74sdmqsalym8wa2lv55lj4pd36miam5wd12769xw68m";
+ };
+
+ nativeBuildInputs = [ pkgconfig wrapGAppsHook ];
+ buildInputs = [ glib gcr glib-networking gsettings-desktop-schemas gtk libsoup webkitgtk ];
+
+ inherit patches;
+
+ installFlags = [ "PREFIX=$(out)" ];
+
+ # Add run-time dependencies to PATH. Append them to PATH so the user can
+ # override the dependencies with their own PATH.
+ preFixup = let
+ depsPath = lib.makeBinPath [ xorg.xprop dmenu findutils gnused coreutils ];
+ in ''
+ gappsWrapperArgs+=(
+ --suffix PATH : ${depsPath}
+ )
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A simple web browser based on WebKitGTK";
+ longDescription = ''
+ surf is a simple web browser based on WebKitGTK. It is able to display
+ websites and follow links. It supports the XEmbed protocol which makes it
+ possible to embed it in another application. Furthermore, one can point
+ surf to another URI by setting its XProperties.
+ '';
+ homepage = "https://surf.suckless.org";
+ license = licenses.mit;
+ platforms = webkitgtk.meta.platforms;
+ maintainers = with maintainers; [ joachifm ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix
new file mode 100644
index 000000000000..222b1b5b767c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle-bin/default.nix
@@ -0,0 +1,414 @@
+{ stdenv
+, fetchurl
+, makeDesktopItem
+
+# 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
+, pango
+
+, audioSupport ? mediaSupport
+, pulseaudioSupport ? false
+, libpulseaudio
+, apulse
+
+# Media support (implies audio support)
+, mediaSupport ? true
+, ffmpeg_3
+
+, gmp
+
+# Pluggable transport dependencies
+, python27
+
+# Wrapper runtime
+, coreutils
+, glibcLocales
+, gnome3
+, runtimeShell
+, shared-mime-info
+, gsettings-desktop-schemas
+
+# Hardening
+, graphene-hardened-malloc
+# crashes with intel driver
+, useHardenedMalloc ? false
+
+# Whether to disable multiprocess support to work around crashing tabs
+# TODO: fix the underlying problem instead of this terrible work-around
+, disableContentSandbox ? true
+
+# Extra preferences
+, extraPrefs ? ""
+}:
+
+with stdenv.lib;
+
+let
+ libPath = makeLibraryPath libPkgs;
+
+ libPkgs = [
+ atk
+ cairo
+ dbus
+ dbus-glib
+ fontconfig
+ freetype
+ gdk-pixbuf
+ glib
+ gtk3
+ libxcb
+ libX11
+ libXext
+ libXrender
+ libXt
+ pango
+ stdenv.cc.cc
+ stdenv.cc.libc
+ zlib
+ ]
+ ++ optionals pulseaudioSupport [ libpulseaudio ]
+ ++ optionals mediaSupport [
+ ffmpeg_3
+ ];
+
+ # Library search path for the fte transport
+ fteLibPath = makeLibraryPath [ stdenv.cc.cc gmp ];
+
+ # Upstream source
+ version = "10.0.5";
+
+ lang = "en-US";
+
+ srcs = {
+ x86_64-linux = fetchurl {
+ url = "https://dist.torproject.org/torbrowser/${version}/tor-browser-linux64-${version}_${lang}.tar.xz";
+ sha256 = "1cxh39x69m4lgqin5k5p67gs9g26w7cnlbdpjqi8dw47y0bpr9xw";
+ };
+
+ i686-linux = fetchurl {
+ url = "https://dist.torproject.org/torbrowser/${version}/tor-browser-linux32-${version}_${lang}.tar.xz";
+ sha256 = "1cyg5ic7mrj6x1gxw5w609933d9ripa5b5gxyqnvnxfa23dkh608";
+ };
+ };
+in
+stdenv.mkDerivation rec {
+ pname = "tor-browser-bundle-bin";
+ inherit version;
+
+ src = srcs.${stdenv.hostPlatform.system} or (throw "unsupported system: ${stdenv.hostPlatform.system}");
+
+ preferLocalBuild = true;
+ allowSubstitutes = false;
+
+ desktopItem = makeDesktopItem {
+ name = "torbrowser";
+ exec = "tor-browser";
+ icon = "torbrowser";
+ desktopName = "Tor Browser";
+ genericName = "Web Browser";
+ comment = meta.description;
+ categories = "Network;WebBrowser;Security;";
+ };
+
+ buildCommand = ''
+ # For convenience ...
+ TBB_IN_STORE=$out/share/tor-browser
+ interp=$(< $NIX_CC/nix-support/dynamic-linker)
+
+ # Unpack & enter
+ mkdir -p "$TBB_IN_STORE"
+ tar xf "${src}" -C "$TBB_IN_STORE" --strip-components=2
+ pushd "$TBB_IN_STORE"
+
+ # Set ELF interpreter
+ for exe in firefox.real TorBrowser/Tor/tor ; do
+ echo "Setting ELF interpreter on $exe ..." >&2
+ patchelf --set-interpreter "$interp" "$exe"
+ done
+
+ # firefox is a wrapper that checks for a more recent libstdc++ & appends it to the ld path
+ mv firefox.real firefox
+
+ # The final libPath. Note, we could split this into firefoxLibPath
+ # and torLibPath for accuracy, but this is more convenient ...
+ libPath=${libPath}:$TBB_IN_STORE:$TBB_IN_STORE/TorBrowser/Tor
+
+ # apulse uses a non-standard library path. For now special-case it.
+ ${optionalString (audioSupport && !pulseaudioSupport) ''
+ libPath=${apulse}/lib/apulse:$libPath
+ ''}
+
+ # Fixup paths to pluggable transports.
+ sed -i TorBrowser/Data/Tor/torrc-defaults \
+ -e "s,./TorBrowser,$TBB_IN_STORE/TorBrowser,g"
+
+ # Fixup obfs transport. Work around patchelf failing to set
+ # interpreter for pre-compiled Go binaries by invoking the interpreter
+ # directly.
+ sed -i TorBrowser/Data/Tor/torrc-defaults \
+ -e "s|\(ClientTransportPlugin meek_lite,obfs2,obfs3,obfs4,scramblesuit\) exec|\1 exec $interp|"
+
+ # Similarly fixup snowflake
+ sed -i TorBrowser/Data/Tor/torrc-defaults \
+ -e "s|\(ClientTransportPlugin snowflake\) exec|\1 exec $interp|"
+
+
+ # 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
+
+ // Always update via Nixpkgs
+ lockPref("app.update.auto", false);
+ lockPref("app.update.enabled", false);
+ lockPref("extensions.update.autoUpdateDefault", false);
+ lockPref("extensions.update.enabled", false);
+ lockPref("extensions.torbutton.versioncheck_enabled", false);
+
+ // User should never change these. Locking prevents these
+ // values from being written to prefs.js, avoiding Store
+ // path capture.
+ lockPref("extensions.torlauncher.torrc-defaults_path", "$TBB_IN_STORE/TorBrowser/Data/Tor/torrc-defaults");
+ lockPref("extensions.torlauncher.tor_path", "$TBB_IN_STORE/TorBrowser/Tor/tor");
+
+ // Reset pref that captures store paths.
+ clearPref("extensions.xpiState");
+
+ // Stop obnoxious first-run redirection.
+ lockPref("noscript.firstRunRedirection", false);
+
+ // Insist on using IPC for communicating with Tor
+ //
+ // Defaults to creating \$TBB_HOME/TorBrowser/Data/Tor/{socks,control}.socket
+ lockPref("extensions.torlauncher.control_port_use_ipc", true);
+ lockPref("extensions.torlauncher.socks_port_use_ipc", true);
+
+ // Optionally disable multiprocess support. We always set this to ensure that
+ // toggling the pref takes effect.
+ lockPref("browser.tabs.remote.autostart.2", ${if disableContentSandbox then "false" else "true"});
+
+ // 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");
+ ''}
+
+ ${optionalString (extraPrefs != "") ''
+ ${extraPrefs}
+ ''}
+ EOF
+
+ # Hard-code path to TBB fonts; see also FONTCONFIG_FILE in
+ # the wrapper below.
+ FONTCONFIG_FILE=$TBB_IN_STORE/TorBrowser/Data/fontconfig/fonts.conf
+ sed -i "$FONTCONFIG_FILE" \
+ -e "s,<dir>fonts</dir>,<dir>$TBB_IN_STORE/fonts</dir>,"
+
+ # Preload extensions by moving into the runtime instead of storing under the
+ # user's profile directory.
+ # See https://support.mozilla.org/en-US/kb/deploying-firefox-with-extensions
+ mkdir -p "$TBB_IN_STORE/distribution/extensions"
+ mv "$TBB_IN_STORE/TorBrowser/Data/Browser/profile.default/extensions/"* \
+ "$TBB_IN_STORE/distribution/extensions"
+
+ # Hard-code paths to geoip data files. TBB resolves the geoip files
+ # relative to torrc-defaults_path but if we do not hard-code them
+ # here, these paths end up being written to the torrc in the user's
+ # state dir.
+ cat >>TorBrowser/Data/Tor/torrc-defaults <<EOF
+ GeoIPFile $TBB_IN_STORE/TorBrowser/Data/Tor/geoip
+ GeoIPv6File $TBB_IN_STORE/TorBrowser/Data/Tor/geoip6
+ EOF
+
+ WRAPPER_LD_PRELOAD=${optionalString useHardenedMalloc
+ "${graphene-hardened-malloc}/lib/libhardened_malloc.so"}
+
+ WRAPPER_XDG_DATA_DIRS=${concatMapStringsSep ":" (x: "${x}/share") [
+ gnome3.adwaita-icon-theme
+ shared-mime-info
+ ]}
+ WRAPPER_XDG_DATA_DIRS+=":"${concatMapStringsSep ":" (x: "${x}/share/gsettings-schemas/${x.name}") [
+ glib
+ gsettings-desktop-schemas
+ gtk3
+ ]};
+
+ # Generate wrapper
+ mkdir -p $out/bin
+ cat > "$out/bin/tor-browser" << EOF
+ #! ${runtimeShell}
+ set -o errexit -o nounset
+
+ PATH=${makeBinPath [ coreutils ]}
+ export LC_ALL=C
+ export LOCALE_ARCHIVE=${glibcLocales}/lib/locale/locale-archive
+
+ # Enter local state directory.
+ REAL_HOME=\$HOME
+ TBB_HOME=\''${TBB_HOME:-''${XDG_DATA_HOME:-\$REAL_HOME/.local/share}/tor-browser}
+ HOME=\$TBB_HOME
+
+ mkdir -p "\$HOME"
+ cd "\$HOME"
+
+ # Initialize empty TBB local state directory hierarchy. We
+ # intentionally mirror the layout that TBB would see if executed from
+ # the unpacked bundle dir.
+ mkdir -p "\$HOME/TorBrowser" "\$HOME/TorBrowser/Data"
+
+ # Initialize the Tor data directory.
+ mkdir -p "\$HOME/TorBrowser/Data/Tor"
+
+ # TBB will fail if ownership is too permissive
+ chmod 0700 "\$HOME/TorBrowser/Data/Tor"
+
+ # Initialize the browser profile state. Note that the only data
+ # copied from the Store payload is the initial bookmark file, which is
+ # never updated once created. All other files under user's profile
+ # dir are generated by TBB.
+ mkdir -p "\$HOME/TorBrowser/Data/Browser/profile.default"
+ cp -u --no-preserve=mode,owner "$TBB_IN_STORE/TorBrowser/Data/Browser/profile.default/bookmarks.html" \
+ "\$HOME/TorBrowser/Data/Browser/profile.default/bookmarks.html"
+
+ # Clear out some files that tend to capture store references but are
+ # easily generated by firefox at startup.
+ rm -f "\$HOME/TorBrowser/Data/Browser/profile.default"/{addonStartup.json.lz4,compatibility.ini,extensions.ini,extensions.json}
+ rm -f "\$HOME/TorBrowser/Data/Browser/profile.default"/startupCache/*
+
+ # XDG
+ : "\''${XDG_RUNTIME_DIR:=/run/user/\$(id -u)}"
+ : "\''${XDG_CONFIG_HOME:=\$REAL_HOME/.config}"
+
+ ${optionalString pulseaudioSupport ''
+ # Figure out some envvars for pulseaudio
+ : "\''${PULSE_SERVER:=\$XDG_RUNTIME_DIR/pulse/native}"
+ : "\''${PULSE_COOKIE:=\$XDG_CONFIG_HOME/pulse/cookie}"
+ ''}
+
+ # Font cache files capture store paths; clear them out on the off
+ # chance that TBB would continue using old font files.
+ rm -rf "\$HOME/.cache/fontconfig"
+
+ # Lift-off
+ #
+ # XAUTHORITY and DISPLAY are required for TBB to work at all.
+ #
+ # DBUS_SESSION_BUS_ADDRESS is inherited to avoid auto-launch; to
+ # prevent that, set it to an empty/invalid value prior to running
+ # tor-browser.
+ #
+ # PULSE_SERVER is necessary for audio playback.
+ #
+ # Setting FONTCONFIG_FILE is required to make fontconfig read the TBB
+ # fonts.conf; upstream uses FONTCONFIG_PATH, but FC_DEBUG=1024
+ # indicates the system fonts.conf being used instead.
+ #
+ # XDG_DATA_DIRS is set to prevent searching system dirs (looking for .desktop & icons)
+ exec env -i \
+ LD_PRELOAD=$WRAPPER_LD_PRELOAD \
+ \
+ TZ=":" \
+ TZDIR="\''${TZDIR:-}" \
+ LOCALE_ARCHIVE="\$LOCALE_ARCHIVE" \
+ \
+ TMPDIR="\''${TMPDIR:-/tmp}" \
+ HOME="\$HOME" \
+ XAUTHORITY="\''${XAUTHORITY:-\$HOME/.Xauthority}" \
+ DISPLAY="\$DISPLAY" \
+ DBUS_SESSION_BUS_ADDRESS="\''${DBUS_SESSION_BUS_ADDRESS:-unix:path=\$XDG_RUNTIME_DIR/bus}" \\
+ \
+ XDG_DATA_HOME="\$HOME/.local/share" \
+ XDG_DATA_DIRS="$WRAPPER_XDG_DATA_DIRS" \
+ \
+ PULSE_SERVER="\''${PULSE_SERVER:-}" \
+ PULSE_COOKIE="\''${PULSE_COOKIE:-}" \
+ \
+ APULSE_PLAYBACK_DEVICE="\''${APULSE_PLAYBACK_DEVICE:-plug:dmix}" \
+ \
+ TOR_SKIP_LAUNCH="\''${TOR_SKIP_LAUNCH:-}" \
+ TOR_CONTROL_PORT="\''${TOR_CONTROL_PORT:-}" \
+ TOR_SOCKS_PORT="\''${TOR_SOCKS_PORT:-}" \
+ \
+ FONTCONFIG_FILE="$FONTCONFIG_FILE" \
+ \
+ LD_LIBRARY_PATH="$libPath" \
+ \
+ "$TBB_IN_STORE/firefox" \
+ --class "Tor Browser" \
+ -no-remote \
+ -profile "\$HOME/TorBrowser/Data/Browser/profile.default" \
+ "\''${@}"
+ EOF
+ chmod +x $out/bin/tor-browser
+
+ # Easier access to docs
+ mkdir -p $out/share/doc
+ ln -s $TBB_IN_STORE/TorBrowser/Docs $out/share/doc/tor-browser
+
+ # Install .desktop item
+ mkdir -p $out/share/applications
+ cp $desktopItem/share/applications"/"* $out/share/applications
+ sed -i $out/share/applications/torbrowser.desktop \
+ -e "s,Exec=.*,Exec=$out/bin/tor-browser," \
+ -e "s,Icon=.*,Icon=tor-browser,"
+ for i in 16 32 48 64 128; do
+ mkdir -p $out/share/icons/hicolor/''${i}x''${i}/apps/
+ ln -s $out/share/tor-browser/browser/chrome/icons/default/default$i.png $out/share/icons/hicolor/''${i}x''${i}/apps/tor-browser.png
+ done
+
+ # Check installed apps
+ echo "Checking bundled Tor ..."
+ LD_LIBRARY_PATH=$libPath $TBB_IN_STORE/TorBrowser/Tor/tor --version >/dev/null
+
+ echo "Checking tor-browser wrapper ..."
+ DISPLAY="" XAUTHORITY="" DBUS_SESSION_BUS_ADDRESS="" TBB_HOME=$(mktemp -d) \
+ $out/bin/tor-browser --version >/dev/null
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Tor Browser Bundle built by torproject.org";
+ longDescription = ''
+ Tor Browser Bundle is a bundle of the Tor daemon, Tor Browser (heavily patched version of
+ Firefox), several essential extensions for Tor Browser, and some tools that glue those
+ together with a convenient UI.
+
+ `tor-browser-bundle-bin` package is the official version built by torproject.org patched with
+ `patchelf` to work under nix and with bundled scripts adapted to the read-only nature of
+ the `/nix/store`.
+ '';
+ homepage = "https://www.torproject.org/";
+ changelog = "https://gitweb.torproject.org/builders/tor-browser-build.git/plain/projects/tor-browser/Bundle-Data/Docs/ChangeLog.txt?h=maint-${version}";
+ platforms = attrNames srcs;
+ maintainers = with maintainers; [ offline matejc thoughtpolice joachifm hax404 cap KarlJoad ];
+ hydraPlatforms = [];
+ # 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 = licenses.free;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle/extensions.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle/extensions.nix
new file mode 100644
index 000000000000..7356768f3973
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/tor-browser-bundle/extensions.nix
@@ -0,0 +1,111 @@
+{ stdenv
+, fetchgit
+, fetchurl
+
+# common
+, zip
+
+# HTTPS Everywhere
+, git
+, libxml2 # xmllint
+, python27
+, python27Packages
+, rsync
+}:
+
+{
+ https-everywhere = stdenv.mkDerivation rec {
+ pname = "https-everywhere";
+ version = "2017.10.4";
+
+ extid = "https-everywhere-eff@eff.org";
+
+ src = fetchgit {
+ url = "https://git.torproject.org/https-everywhere.git";
+ rev = "refs/tags/${version}";
+ sha256 = "1g7971xygnhagnb25xjdf6mli6091ai9igx42d0ww88g8i0cqfzj";
+ fetchSubmodules = true; # for translations, TODO: remove
+ };
+
+ nativeBuildInputs = [
+ git
+ libxml2 # xmllint
+ python27
+ python27Packages.lxml
+ rsync
+ zip
+ ];
+
+ buildPhase = ''
+ $shell ./makexpi.sh ${version} --no-recurse
+ '';
+
+ installPhase = ''
+ install -m 444 -D pkg/https-everywhere-$version-eff.xpi "$out/$extid.xpi"
+ '';
+ };
+
+ noscript = stdenv.mkDerivation rec {
+ pname = "noscript";
+ version = "5.1.2";
+
+ extid = "{73a6fe31-595d-460b-a920-fcc0f8843232}";
+
+ src = fetchurl {
+ url = "https://secure.informaction.com/download/releases/noscript-${version}.xpi";
+ sha256 = "1fzspdiwhjabwz1yxb3gzj7giz9jbc1xxm65i93rvhzcp537cs42";
+ };
+
+ dontUnpack = true;
+
+ installPhase = ''
+ install -m 444 -D $src "$out/$extid.xpi"
+ '';
+ };
+
+ torbutton = stdenv.mkDerivation rec {
+ pname = "torbutton";
+ version = "1.9.8.1";
+
+ extid = "torbutton@torproject.org";
+
+ src = fetchgit {
+ url = "https://git.torproject.org/torbutton.git";
+ rev = "refs/tags/${version}";
+ sha256 = "1amp0c9ky0a7fsa0bcbi6n6ginw7s2g3an4rj7kvc1lxmrcsm65l";
+ };
+
+ nativeBuildInputs = [ zip ];
+
+ buildPhase = ''
+ $shell ./makexpi.sh
+ '';
+
+ installPhase = ''
+ install -m 444 -D pkg/torbutton-$version.xpi "$out/$extid.xpi"
+ '';
+ };
+
+ tor-launcher = stdenv.mkDerivation rec {
+ pname = "tor-launcher";
+ version = "0.2.13";
+
+ extid = "tor-launcher@torproject.org";
+
+ src = fetchgit {
+ url = "https://git.torproject.org/tor-launcher.git";
+ rev = "refs/tags/${version}";
+ sha256 = "1f98v88y2clwvjiw77kxqc9cacp5h0489a540nc2wmsx7vnskrq0";
+ };
+
+ nativeBuildInputs = [ zip ];
+
+ buildPhase = ''
+ make package
+ '';
+
+ installPhase = ''
+ install -m 444 -D pkg/tor-launcher-$version.xpi "$out/$extid.xpi"
+ '';
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/browser.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/browser.nix
new file mode 100644
index 000000000000..c5cbee196521
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/browser.nix
@@ -0,0 +1,87 @@
+{ stdenv, mkChromiumDerivation, channel, enableWideVine }:
+
+with stdenv.lib;
+
+mkChromiumDerivation (base: rec {
+ name = "chromium-browser";
+ packageName = "chromium";
+ buildTargets = [ "mksnapshot" "chrome_sandbox" "chrome" ];
+
+ outputs = ["out" "sandbox"];
+
+ sandboxExecutableName = "__chromium-suid-sandbox";
+
+ installPhase = ''
+ mkdir -p "$libExecPath"
+ cp -v "$buildPath/"*.so "$buildPath/"*.pak "$buildPath/"*.bin "$libExecPath/"
+ cp -v "$buildPath/icudtl.dat" "$libExecPath/"
+ cp -vLR "$buildPath/locales" "$buildPath/resources" "$libExecPath/"
+ cp -v "$buildPath/chrome" "$libExecPath/$packageName"
+
+ # Swiftshader
+ # See https://stackoverflow.com/a/4264351/263061 for the find invocation.
+ if [ -n "$(find "$buildPath/swiftshader/" -maxdepth 1 -name '*.so' -print -quit)" ]; then
+ echo "Swiftshader files found; installing"
+ mkdir -p "$libExecPath/swiftshader"
+ cp -v "$buildPath/swiftshader/"*.so "$libExecPath/swiftshader/"
+ else
+ echo "Swiftshader files not found"
+ fi
+
+ mkdir -p "$sandbox/bin"
+ cp -v "$buildPath/chrome_sandbox" "$sandbox/bin/${sandboxExecutableName}"
+
+ mkdir -vp "$out/share/man/man1"
+ cp -v "$buildPath/chrome.1" "$out/share/man/man1/$packageName.1"
+
+ for icon_file in chrome/app/theme/chromium/product_logo_*[0-9].png; do
+ num_and_suffix="''${icon_file##*logo_}"
+ icon_size="''${num_and_suffix%.*}"
+ expr "$icon_size" : "^[0-9][0-9]*$" || continue
+ logo_output_prefix="$out/share/icons/hicolor"
+ logo_output_path="$logo_output_prefix/''${icon_size}x''${icon_size}/apps"
+ mkdir -vp "$logo_output_path"
+ cp -v "$icon_file" "$logo_output_path/$packageName.png"
+ done
+
+ # Install Desktop Entry
+ install -D chrome/installer/linux/common/desktop.template \
+ $out/share/applications/chromium-browser.desktop
+
+ substituteInPlace $out/share/applications/chromium-browser.desktop \
+ --replace "@@MENUNAME@@" "Chromium" \
+ --replace "@@PACKAGE@@" "chromium" \
+ --replace "Exec=/usr/bin/@@USR_BIN_SYMLINK_NAME@@" "Exec=chromium"
+
+ # Append more mime types to the end
+ sed -i '/^MimeType=/ s,$,x-scheme-handler/webcal;x-scheme-handler/mailto;x-scheme-handler/about;x-scheme-handler/unknown,' \
+ $out/share/applications/chromium-browser.desktop
+
+ # See https://github.com/NixOS/nixpkgs/issues/12433
+ sed -i \
+ -e '/\[Desktop Entry\]/a\' \
+ -e 'StartupWMClass=chromium-browser' \
+ $out/share/applications/chromium-browser.desktop
+ '';
+
+ passthru = { inherit sandboxExecutableName; };
+
+ requiredSystemFeatures = [ "big-parallel" ];
+
+ meta = {
+ description = "An open source web browser from Google, with dependencies on Google web services removed";
+ longDescription = ''
+ Chromium is an open source web browser from Google that aims to build a
+ safer, faster, and more stable way for all Internet users to experience
+ the web. It has a minimalist user interface and provides the vast majority
+ of source code for Google Chrome (which has some additional features).
+ '';
+ homepage = "https://github.com/Eloston/ungoogled-chromium";
+ maintainers = with maintainers; [ squalus ];
+ license = if enableWideVine then licenses.unfree else licenses.bsd3;
+ platforms = platforms.linux;
+ hydraPlatforms = if channel == "stable" then ["aarch64-linux" "x86_64-linux"] else [];
+ timeout = 172800; # 48 hours (increased from the Hydra default of 10h)
+ broken = channel == "dev"; # Blocked on https://bugs.chromium.org/p/chromium/issues/detail?id=1141896
+ };
+})
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/common.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/common.nix
new file mode 100644
index 000000000000..2accb1a7ab21
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/common.nix
@@ -0,0 +1,358 @@
+{ stdenv, lib, llvmPackages, gnChromium, ninja, which, nodejs, fetchpatch, fetchurl
+
+# default dependencies
+, gnutar, bzip2, flac, speex, libopus
+, libevent, expat, libjpeg, snappy
+, libpng, libcap
+, xdg_utils, yasm, nasm, minizip, libwebp
+, libusb1, pciutils, nss, re2
+
+, python2Packages, perl, pkgconfig
+, nspr, systemd, kerberos
+, util-linux, alsaLib
+, bison, gperf
+, glib, gtk3, dbus-glib
+, glibc
+, libXScrnSaver, libXcursor, libXtst, libGLU, libGL
+, protobuf, speechd, libXdamage, cups
+, ffmpeg, libxslt, libxml2, at-spi2-core
+, jre8
+, pipewire_0_2
+
+# optional dependencies
+, libgcrypt ? null # gnomeSupport || cupsSupport
+, libva ? null # useVaapi
+, libdrm ? null, wayland ? null, mesa ? null, libxkbcommon ? null # useOzone
+
+# package customization
+, useOzone ? false
+, useVaapi ? !(useOzone || stdenv.isAarch64) # Built if supported, but disabled in the wrapper
+# VA-API TODOs:
+# - Ozone: M81 fails to build due to "ozone_platform_gbm = false"
+# - Possible solutions: Write a patch to fix the build (wrong gn dependencies)
+# or build with minigbm
+# - AArch64: Causes serious regressions (https://github.com/NixOS/nixpkgs/pull/85253#issuecomment-614405879)
+, gnomeSupport ? false, gnome ? null
+, gnomeKeyringSupport ? false, libgnome-keyring3 ? null
+, proprietaryCodecs ? true
+, cupsSupport ? true
+, pulseSupport ? false, libpulseaudio ? null
+, ungoogled-chromium
+, ungoogled ? false
+
+, channel
+, upstream-info
+}:
+
+buildFun:
+
+with stdenv.lib;
+
+let
+ jre = jre8; # TODO: remove override https://github.com/NixOS/nixpkgs/pull/89731
+
+ # The additional attributes for creating derivations based on the chromium
+ # source tree.
+ extraAttrs = buildFun base;
+
+ githubPatch = commit: sha256: fetchpatch {
+ url = "https://github.com/chromium/chromium/commit/${commit}.patch";
+ inherit sha256;
+ };
+
+ mkGnFlags =
+ let
+ # Serialize Nix types into GN types according to this document:
+ # https://source.chromium.org/gn/gn/+/master:docs/language.md
+ mkGnString = value: "\"${escape ["\"" "$" "\\"] value}\"";
+ sanitize = value:
+ if value == true then "true"
+ else if value == false then "false"
+ else if isList value then "[${concatMapStringsSep ", " sanitize value}]"
+ else if isInt value then toString value
+ else if isString value then mkGnString value
+ else throw "Unsupported type for GN value `${value}'.";
+ toFlag = key: value: "${key}=${sanitize value}";
+ in attrs: concatStringsSep " " (attrValues (mapAttrs toFlag attrs));
+
+ # https://source.chromium.org/chromium/chromium/src/+/master:build/linux/unbundle/replace_gn_files.py
+ gnSystemLibraries = [
+ "ffmpeg"
+ "flac"
+ "libjpeg"
+ "libpng"
+ "libwebp"
+ "libxslt"
+ "opus"
+ "snappy"
+ "zlib"
+ ];
+
+ opusWithCustomModes = libopus.override {
+ withCustomModes = true;
+ };
+
+ defaultDependencies = [
+ bzip2 flac speex opusWithCustomModes
+ libevent expat libjpeg snappy
+ libpng libcap
+ xdg_utils minizip libwebp
+ libusb1 re2
+ ffmpeg libxslt libxml2
+ nasm
+ ];
+
+ # build paths and release info
+ packageName = extraAttrs.packageName or extraAttrs.name;
+ buildType = "Release";
+ buildPath = "out/${buildType}";
+ libExecPath = "$out/libexec/${packageName}";
+
+ versionRange = min-version: upto-version:
+ let inherit (upstream-info) version;
+ result = versionAtLeast version min-version && versionOlder version upto-version;
+ stable-version = (importJSON ./upstream-info.json).stable.version;
+ in if versionAtLeast stable-version upto-version
+ then warn "chromium: stable version ${stable-version} is newer than a patchset bounded at ${upto-version}. You can safely delete it."
+ result
+ else result;
+
+ ungoogler =
+ let versionEntry = (import ./ungoogled-src.nix)."${upstream-info.version}";
+ in ungoogled-chromium {
+ inherit (versionEntry) rev sha256;
+ };
+ base = rec {
+ name = "${packageName}-unwrapped-${version}";
+ inherit (upstream-info) version;
+ inherit channel packageName buildType buildPath;
+
+ src = fetchurl {
+ url = "https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${version}.tar.xz";
+ inherit (upstream-info) sha256;
+ };
+
+ nativeBuildInputs = [
+ llvmPackages.lldClang.bintools
+ ninja which python2Packages.python perl pkgconfig
+ python2Packages.ply python2Packages.jinja2 nodejs
+ gnutar python2Packages.setuptools
+ ];
+
+ buildInputs = defaultDependencies ++ [
+ nspr nss systemd
+ util-linux alsaLib
+ bison gperf kerberos
+ glib gtk3 dbus-glib
+ libXScrnSaver libXcursor libXtst libGLU libGL
+ pciutils protobuf speechd libXdamage at-spi2-core
+ jre
+ pipewire_0_2
+ ] ++ optional useVaapi libva
+ ++ optional gnomeKeyringSupport libgnome-keyring3
+ ++ optionals gnomeSupport [ gnome.GConf libgcrypt ]
+ ++ optionals cupsSupport [ libgcrypt cups ]
+ ++ optional pulseSupport libpulseaudio
+ ++ optionals useOzone [ libdrm wayland mesa.drivers libxkbcommon ];
+
+ patches = [
+ ./patches/no-build-timestamps.patch # Optional patch to use SOURCE_DATE_EPOCH in compute_build_timestamp.py (should be upstreamed)
+ ./patches/widevine-79.patch # For bundling Widevine (DRM), might be replaceable via bundle_widevine_cdm=true in gnFlags
+ # ++ optional (versionRange "68" "72") ( githubPatch "<patch>" "0000000000000000000000000000000000000000000000000000000000000000" )
+ ] ++ optionals (useVaapi && versionRange "86" "87") [
+ # Check for enable-accelerated-video-decode on Linux:
+ (githubPatch "54deb9811ca9bd2327def5c05ba6987b8c7a0897" "11jvxjlkzz1hm0pvfyr88j7z3zbwzplyl5idkx92l2lzv4459c8d")
+ ];
+
+ postPatch = ''
+ # remove unused third-party
+ for lib in ${toString gnSystemLibraries}; do
+ if [ -d "third_party/$lib" ]; then
+ find "third_party/$lib" -type f \
+ \! -path "third_party/$lib/chromium/*" \
+ \! -path "third_party/$lib/google/*" \
+ \! -path "third_party/harfbuzz-ng/utils/hb_scoped.h" \
+ \! -regex '.*\.\(gn\|gni\|isolate\)' \
+ -delete
+ fi
+ done
+
+ # Required for patchShebangs (unsupported interpreter directive, basename: invalid option -- '*', etc.):
+ substituteInPlace native_client/SConstruct --replace "#! -*- python -*-" ""
+ if [ -e third_party/harfbuzz-ng/src/src/update-unicode-tables.make ]; then
+ substituteInPlace third_party/harfbuzz-ng/src/src/update-unicode-tables.make \
+ --replace "/usr/bin/env -S make -f" "/usr/bin/make -f"
+ fi
+
+ # We want to be able to specify where the sandbox is via CHROME_DEVEL_SANDBOX
+ substituteInPlace sandbox/linux/suid/client/setuid_sandbox_host.cc \
+ --replace \
+ 'return sandbox_binary;' \
+ 'return base::FilePath(GetDevelSandboxPath());'
+
+ substituteInPlace services/audio/audio_sandbox_hook_linux.cc \
+ --replace \
+ '/usr/share/alsa/' \
+ '${alsaLib}/share/alsa/' \
+ --replace \
+ '/usr/lib/x86_64-linux-gnu/gconv/' \
+ '${glibc}/lib/gconv/' \
+ --replace \
+ '/usr/share/locale/' \
+ '${glibc}/share/locale/'
+
+ sed -i -e 's@"\(#!\)\?.*xdg-@"\1${xdg_utils}/bin/xdg-@' \
+ chrome/browser/shell_integration_linux.cc
+
+ sed -i -e '/lib_loader.*Load/s!"\(libudev\.so\)!"${lib.getLib systemd}/lib/\1!' \
+ device/udev_linux/udev?_loader.cc
+
+ sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \
+ gpu/config/gpu_info_collector_linux.cc
+
+ # Allow to put extensions into the system-path.
+ sed -i -e 's,/usr,/run/current-system/sw,' chrome/common/chrome_paths.cc
+
+ patchShebangs .
+ # use our own nodejs
+ mkdir -p third_party/node/linux/node-linux-x64/bin
+ ln -s "$(command -v node)" third_party/node/linux/node-linux-x64/bin/node
+
+ # Allow building against system libraries in official builds
+ sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' tools/generate_shim_headers/generate_shim_headers.py
+
+ '' + optionalString stdenv.isAarch64 ''
+ substituteInPlace build/toolchain/linux/BUILD.gn \
+ --replace 'toolprefix = "aarch64-linux-gnu-"' 'toolprefix = ""'
+ '' + optionalString ungoogled ''
+ ${ungoogler}/utils/prune_binaries.py . ${ungoogler}/pruning.list || echo "some errors"
+ ${ungoogler}/utils/patches.py . ${ungoogler}/patches
+ ${ungoogler}/utils/domain_substitution.py apply -r ${ungoogler}/domain_regex.list -f ${ungoogler}/domain_substitution.list -c ./ungoogled-domsubcache.tar.gz .
+ '';
+
+ gnFlags = mkGnFlags ({
+ custom_toolchain = "//build/toolchain/linux/unbundle:default";
+ host_toolchain = "//build/toolchain/linux/unbundle:default";
+ is_official_build = true;
+ is_debug = false;
+
+ proprietary_codecs = false;
+ use_sysroot = false;
+ use_gnome_keyring = gnomeKeyringSupport;
+ use_gio = gnomeSupport;
+ # ninja: error: '../../native_client/toolchain/linux_x86/pnacl_newlib/bin/x86_64-nacl-objcopy',
+ # needed by 'nacl_irt_x86_64.nexe', missing and no known rule to make it
+ enable_nacl = false;
+ # Enabling the Widevine component here doesn't affect whether we can
+ # redistribute the chromium package; the Widevine component is either
+ # added later in the wrapped -wv build or downloaded from Google.
+ enable_widevine = true;
+ use_cups = cupsSupport;
+ # Provides the enable-webrtc-pipewire-capturer flag to support Wayland screen capture.
+ rtc_use_pipewire = true;
+
+ treat_warnings_as_errors = false;
+ is_clang = stdenv.cc.isClang;
+ clang_use_chrome_plugins = false;
+ blink_symbol_level = 0;
+ symbol_level = 0;
+ fieldtrial_testing_like_official_build = true;
+
+ # Google API keys, see:
+ # http://www.chromium.org/developers/how-tos/api-keys
+ # Note: These are for NixOS/nixpkgs use ONLY. For your own distribution,
+ # please get your own set of keys.
+ google_api_key = "AIzaSyDGi15Zwl11UNe6Y-5XW_upsfyw31qwZPI";
+ google_default_client_id = "404761575300.apps.googleusercontent.com";
+ google_default_client_secret = "9rIFQjfnkykEmqb6FfjJQD1D";
+ } // optionalAttrs proprietaryCodecs {
+ # enable support for the H.264 codec
+ proprietary_codecs = true;
+ enable_hangout_services_extension = true;
+ ffmpeg_branding = "Chrome";
+ } // optionalAttrs useVaapi {
+ use_vaapi = true;
+ } // optionalAttrs pulseSupport {
+ use_pulseaudio = true;
+ link_pulseaudio = true;
+ } // optionalAttrs useOzone {
+ use_ozone = true;
+ ozone_platform_gbm = false;
+ use_xkbcommon = true;
+ use_glib = true;
+ use_gtk = true;
+ use_system_libwayland = true;
+ use_system_minigbm = true;
+ use_system_libdrm = true;
+ system_wayland_scanner_path = "${wayland}/bin/wayland-scanner";
+ } // optionalAttrs ungoogled {
+ enable_hangout_services_extension = false;
+ enable_js_type_check = false;
+ enable_mdns = false;
+ enable_nacl_nonsfi = false;
+ enable_one_click_signin = false;
+ enable_reading_list = false;
+ enable_remoting = false;
+ enable_reporting = false;
+ enable_service_discovery = false;
+ exclude_unwind_tables = true;
+ google_api_key = "";
+ google_default_client_id = "";
+ google_default_client_secret = "";
+ safe_browsing_mode = 0;
+ use_official_google_api_keys = false;
+ use_unofficial_version_number = false;
+ } // (extraAttrs.gnFlags or {}));
+
+ configurePhase = ''
+ runHook preConfigure
+
+ # This is to ensure expansion of $out.
+ libExecPath="${libExecPath}"
+ python build/linux/unbundle/replace_gn_files.py --system-libraries ${toString gnSystemLibraries}
+ ${gnChromium}/bin/gn gen --args=${escapeShellArg gnFlags} out/Release | tee gn-gen-outputs.txt
+
+ # Fail if `gn gen` contains a WARNING.
+ grep -o WARNING gn-gen-outputs.txt && echo "Found gn WARNING, exiting nix build" && exit 1
+
+ runHook postConfigure
+ '';
+
+ # Don't spam warnings about unknown warning options. This is useful because
+ # our Clang is always older than Chromium's and the build logs have a size
+ # of approx. 25 MB without this option (and this saves e.g. 66 %).
+ NIX_CFLAGS_COMPILE = "-Wno-unknown-warning-option";
+
+ buildPhase = let
+ buildCommand = target: ''
+ ninja -C "${buildPath}" -j$NIX_BUILD_CORES -l$NIX_BUILD_CORES "${target}"
+ (
+ source chrome/installer/linux/common/installer.include
+ PACKAGE=$packageName
+ MENUNAME="Chromium"
+ process_template chrome/app/resources/manpage.1.in "${buildPath}/chrome.1"
+ )
+ '';
+ targets = extraAttrs.buildTargets or [];
+ commands = map buildCommand targets;
+ in concatStringsSep "\n" commands;
+
+ postFixup = ''
+ # Make sure that libGLESv2 is found by dlopen (if using EGL).
+ chromiumBinary="$libExecPath/$packageName"
+ origRpath="$(patchelf --print-rpath "$chromiumBinary")"
+ patchelf --set-rpath "${libGL}/lib:$origRpath" "$chromiumBinary"
+ '';
+
+ passthru = {
+ updateScript = ./update.py;
+ chromiumDeps = {
+ gn = gnChromium;
+ };
+ };
+ };
+
+# Remove some extraAttrs we supplied to the base attributes already.
+in stdenv.mkDerivation (base // removeAttrs extraAttrs [
+ "name" "gnFlags" "buildTargets"
+] // { passthru = base.passthru // (extraAttrs.passthru or {}); })
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/default.nix
new file mode 100644
index 000000000000..b02c91c6e230
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/default.nix
@@ -0,0 +1,218 @@
+{ newScope, config, stdenv, fetchurl, makeWrapper
+, llvmPackages_11, ed, gnugrep, coreutils, xdg_utils
+, glib, gtk3, gnome3, gsettings-desktop-schemas, gn, fetchgit
+, libva ? null
+, pipewire_0_2
+, gcc, nspr, nss, runCommand
+, lib
+
+# package customization
+# Note: enable* flags should not require full rebuilds (i.e. only affect the wrapper)
+, channel ? "stable"
+, gnomeSupport ? false, gnome ? null
+, gnomeKeyringSupport ? false
+, proprietaryCodecs ? true
+, enablePepperFlash ? false
+, enableWideVine ? false
+, enableVaapi ? false # Disabled by default due to unofficial support
+, ungoogled ? true
+, useOzone ? false
+, cupsSupport ? true
+, pulseSupport ? config.pulseaudio or stdenv.isLinux
+, commandLineArgs ? ""
+}:
+
+let
+ llvmPackages = llvmPackages_11;
+ stdenv = llvmPackages.stdenv;
+
+ callPackage = newScope chromium;
+
+ chromium = rec {
+ inherit stdenv llvmPackages;
+
+ upstream-info = (lib.importJSON ./upstream-info.json).${channel};
+
+ mkChromiumDerivation = callPackage ./common.nix ({
+ inherit channel gnome gnomeSupport gnomeKeyringSupport proprietaryCodecs
+ cupsSupport pulseSupport useOzone;
+ inherit ungoogled;
+ gnChromium = gn.overrideAttrs (oldAttrs: {
+ inherit (upstream-info.deps.gn) version;
+ src = fetchgit {
+ inherit (upstream-info.deps.gn) url rev sha256;
+ };
+ });
+ } // lib.optionalAttrs (lib.versionAtLeast upstream-info.version "87") {
+ useOzone = true; # YAY: https://chromium-review.googlesource.com/c/chromium/src/+/2382834 \o/
+ useVaapi = !stdenv.isAarch64; # TODO: Might be best to not set use_vaapi anymore (default is fine)
+ });
+
+ browser = callPackage ./browser.nix { inherit channel enableWideVine; };
+
+ plugins = callPackage ./plugins.nix {
+ inherit enablePepperFlash;
+ };
+
+ ungoogled-chromium = callPackage ./ungoogled.nix {};
+ };
+
+ pkgSuffix = if channel == "dev" then "unstable" else channel;
+ pkgName = "google-chrome-${pkgSuffix}";
+ chromeSrc = fetchurl {
+ urls = map (repo: "${repo}/${pkgName}/${pkgName}_${version}-1_amd64.deb") [
+ "https://dl.google.com/linux/chrome/deb/pool/main/g"
+ "http://95.31.35.30/chrome/pool/main/g"
+ "http://mirror.pcbeta.com/google/chrome/deb/pool/main/g"
+ "http://repo.fdzh.org/chrome/deb/pool/main/g"
+ ];
+ sha256 = chromium.upstream-info.sha256bin64;
+ };
+
+ mkrpath = p: "${lib.makeSearchPathOutput "lib" "lib64" p}:${lib.makeLibraryPath p}";
+ widevineCdm = stdenv.mkDerivation {
+ name = "chrome-widevine-cdm";
+
+ src = chromeSrc;
+
+ phases = [ "unpackPhase" "patchPhase" "installPhase" "checkPhase" ];
+
+ unpackCmd = let
+ widevineCdmPath =
+ if channel == "stable" then
+ "./opt/google/chrome/WidevineCdm"
+ else if channel == "beta" then
+ "./opt/google/chrome-beta/WidevineCdm"
+ else if channel == "dev" then
+ "./opt/google/chrome-unstable/WidevineCdm"
+ else
+ throw "Unknown chromium channel.";
+ in ''
+ # Extract just WidevineCdm from upstream's .deb file
+ ar p "$src" data.tar.xz | tar xJ "${widevineCdmPath}"
+
+ # Move things around so that we don't have to reference a particular
+ # chrome-* directory later.
+ mv "${widevineCdmPath}" ./
+
+ # unpackCmd wants a single output directory; let it take WidevineCdm/
+ rm -rf opt
+ '';
+
+ doCheck = true;
+ checkPhase = ''
+ ! find -iname '*.so' -exec ldd {} + | grep 'not found'
+ '';
+
+ PATCH_RPATH = mkrpath [ gcc.cc glib nspr nss ];
+
+ patchPhase = ''
+ patchelf --set-rpath "$PATCH_RPATH" _platform_specific/linux_x64/libwidevinecdm.so
+ '';
+
+ installPhase = ''
+ mkdir -p $out/WidevineCdm
+ cp -a * $out/WidevineCdm/
+ '';
+
+ meta = {
+ platforms = [ "x86_64-linux" ];
+ license = lib.licenses.unfree;
+ };
+ };
+
+ suffix = if channel != "stable" then "-" + channel else "";
+
+ sandboxExecutableName = chromium.browser.passthru.sandboxExecutableName;
+
+ version = chromium.browser.version;
+
+ # We want users to be able to enableWideVine without rebuilding all of
+ # chromium, so we have a separate derivation here that copies chromium
+ # and adds the unfree WidevineCdm.
+ chromiumWV = let browser = chromium.browser; in if enableWideVine then
+ runCommand (browser.name + "-wv") { version = browser.version; }
+ ''
+ mkdir -p $out
+ cp -a ${browser}/* $out/
+ chmod u+w $out/libexec/chromium
+ cp -a ${widevineCdm}/WidevineCdm $out/libexec/chromium/
+ ''
+ else browser;
+
+in stdenv.mkDerivation {
+ name = "ungoogled-chromium${suffix}-${version}";
+ inherit version;
+
+ buildInputs = [
+ makeWrapper ed
+
+ # needed for GSETTINGS_SCHEMAS_PATH
+ gsettings-desktop-schemas glib gtk3
+
+ # needed for XDG_ICON_DIRS
+ gnome3.adwaita-icon-theme
+ ];
+
+ outputs = ["out" "sandbox"];
+
+ buildCommand = let
+ browserBinary = "${chromiumWV}/libexec/chromium/chromium";
+ getWrapperFlags = plugin: "$(< \"${plugin}/nix-support/wrapper-flags\")";
+ libPath = stdenv.lib.makeLibraryPath [ libva pipewire_0_2 ];
+
+ in with stdenv.lib; ''
+ mkdir -p "$out/bin"
+
+ eval makeWrapper "${browserBinary}" "$out/bin/chromium" \
+ --add-flags ${escapeShellArg (escapeShellArg commandLineArgs)} \
+ ${lib.optionalString enableVaapi "--add-flags --enable-accelerated-video-decode"} \
+ ${concatMapStringsSep " " getWrapperFlags chromium.plugins.enabled}
+
+ ed -v -s "$out/bin/chromium" << EOF
+ 2i
+
+ if [ -x "/run/wrappers/bin/${sandboxExecutableName}" ]
+ then
+ export CHROME_DEVEL_SANDBOX="/run/wrappers/bin/${sandboxExecutableName}"
+ else
+ export CHROME_DEVEL_SANDBOX="$sandbox/bin/${sandboxExecutableName}"
+ fi
+
+ '' + lib.optionalString (libPath != "") ''
+ # To avoid loading .so files from cwd, LD_LIBRARY_PATH here must not
+ # contain an empty section before or after a colon.
+ export LD_LIBRARY_PATH="\$LD_LIBRARY_PATH\''${LD_LIBRARY_PATH:+:}${libPath}"
+ '' + ''
+
+ # libredirect causes chromium to deadlock on startup
+ export LD_PRELOAD="\$(echo -n "\$LD_PRELOAD" | ${coreutils}/bin/tr ':' '\n' | ${gnugrep}/bin/grep -v /lib/libredirect\\\\.so$ | ${coreutils}/bin/tr '\n' ':')"
+
+ export XDG_DATA_DIRS=$XDG_ICON_DIRS:$GSETTINGS_SCHEMAS_PATH\''${XDG_DATA_DIRS:+:}\$XDG_DATA_DIRS
+
+ # Mainly for xdg-open but also other xdg-* tools:
+ export PATH="${xdg_utils}/bin\''${PATH:+:}\$PATH"
+
+ .
+ w
+ EOF
+
+ ln -sv "${chromium.browser.sandbox}" "$sandbox"
+
+ ln -s "$out/bin/chromium" "$out/bin/chromium-browser"
+
+ mkdir -p "$out/share"
+ for f in '${chromium.browser}'/share/*; do # hello emacs */
+ ln -s -t "$out/share/" "$f"
+ done
+ '';
+
+ inherit (chromium.browser) packageName;
+ meta = chromium.browser.meta;
+ passthru = {
+ inherit (chromium) upstream-info browser;
+ mkDerivation = chromium.mkChromiumDerivation;
+ inherit chromeSrc sandboxExecutableName;
+ updateScript = ./update.py;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/patches/no-build-timestamps.patch b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/patches/no-build-timestamps.patch
new file mode 100644
index 000000000000..6b788f43d29c
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/patches/no-build-timestamps.patch
@@ -0,0 +1,17 @@
+--- chromium-70.0.3538.67/build/compute_build_timestamp.py.orig 2018-11-02 16:00:34.368933077 +0200
++++ chromium-70.0.3538.67/build/compute_build_timestamp.py 2018-11-08 04:06:21.658105129 +0200
+@@ -94,6 +94,14 @@
+ 'build_type', help='The type of build', choices=('official', 'default'))
+ args = argument_parser.parse_args()
+
++ # I don't trust LASTCHANGE magic, and I definelly want something deterministic here
++ SOURCE_DATE_EPOCH = os.getenv("SOURCE_DATE_EPOCH", None)
++ if SOURCE_DATE_EPOCH is not None:
++ print(SOURCE_DATE_EPOCH)
++ return 0
++ else:
++ raise RuntimeError("SOURCE_DATE_EPOCH not set")
++
+ # The mtime of the revision in build/util/LASTCHANGE is stored in a file
+ # next to it. Read it, to get a deterministic time close to "now".
+ # That date is then modified as described at the top of the file so that
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/patches/widevine-79.patch b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/patches/widevine-79.patch
new file mode 100644
index 000000000000..32f0ae2fb5e6
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/patches/widevine-79.patch
@@ -0,0 +1,13 @@
+diff --git a/third_party/widevine/cdm/BUILD.gn b/third_party/widevine/cdm/BUILD.gn
+index ed0e2f5208b..5b431a030d5 100644
+--- a/third_party/widevine/cdm/BUILD.gn
++++ b/third_party/widevine/cdm/BUILD.gn
+@@ -14,7 +14,7 @@ buildflag_header("buildflags") {
+
+ flags = [
+ "ENABLE_WIDEVINE=$enable_widevine",
+- "BUNDLE_WIDEVINE_CDM=$bundle_widevine_cdm",
++ "BUNDLE_WIDEVINE_CDM=true",
+ "ENABLE_WIDEVINE_CDM_COMPONENT=$enable_widevine_cdm_component",
+ ]
+ }
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/plugins.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/plugins.nix
new file mode 100644
index 000000000000..c725f87d3a27
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/plugins.nix
@@ -0,0 +1,92 @@
+{ stdenv, gcc
+, jshon
+, glib
+, nspr
+, nss
+, fetchzip
+, enablePepperFlash ? false
+
+, upstream-info
+}:
+
+with stdenv.lib;
+
+let
+ mkrpath = p: "${makeSearchPathOutput "lib" "lib64" p}:${makeLibraryPath p}";
+
+ # Generate a shell fragment that emits flags appended to the
+ # final makeWrapper call for wrapping the browser's main binary.
+ #
+ # Note that this is shell-escaped so that only the variable specified
+ # by the "output" attribute is substituted.
+ mkPluginInfo = { output ? "out", allowedVars ? [ output ]
+ , flags ? [], envVars ? {}
+ }: let
+ shSearch = ["'"] ++ map (var: "@${var}@") allowedVars;
+ shReplace = ["'\\''"] ++ map (var: "'\"\${${var}}\"'") allowedVars;
+ # We need to triple-escape "val":
+ # * First because makeWrapper doesn't do any quoting of its arguments by
+ # itself.
+ # * Second because it's passed to the makeWrapper call separated by IFS but
+ # not by the _real_ arguments, for example the Widevine plugin flags
+ # contain spaces, so they would end up as separate arguments.
+ # * Third in order to be correctly quoted for the "echo" call below.
+ shEsc = val: "'${replaceStrings ["'"] ["'\\''"] val}'";
+ mkSh = val: "'${replaceStrings shSearch shReplace (shEsc val)}'";
+ mkFlag = flag: ["--add-flags" (shEsc flag)];
+ mkEnvVar = key: val: ["--set" (shEsc key) (shEsc val)];
+ envList = mapAttrsToList mkEnvVar envVars;
+ quoted = map mkSh (flatten ((map mkFlag flags) ++ envList));
+ in ''
+ mkdir -p "''$${output}/nix-support"
+ echo ${toString quoted} > "''$${output}/nix-support/wrapper-flags"
+ '';
+
+ flash = stdenv.mkDerivation rec {
+ pname = "flashplayer-ppapi";
+ version = "32.0.0.445";
+
+ src = fetchzip {
+ url = "https://fpdownload.adobe.com/pub/flashplayer/pdc/${version}/flash_player_ppapi_linux.x86_64.tar.gz";
+ sha256 = "1r9vd210d2qp501q40pjx60mzah08rg0f8jk5rpp52ddajwggalv";
+ stripRoot = false;
+ };
+
+ patchPhase = ''
+ chmod +x libpepflashplayer.so
+ patchelf --set-rpath "${mkrpath [ gcc.cc ]}" libpepflashplayer.so
+ '';
+
+ doCheck = true;
+ checkPhase = ''
+ ! find -iname '*.so' -exec ldd {} + | grep 'not found'
+ '';
+
+ installPhase = ''
+ flashVersion="$(
+ "${jshon}/bin/jshon" -F manifest.json -e version -u
+ )"
+
+ install -vD libpepflashplayer.so "$out/lib/libpepflashplayer.so"
+
+ ${mkPluginInfo {
+ allowedVars = [ "out" "flashVersion" ];
+ flags = [
+ "--ppapi-flash-path=@out@/lib/libpepflashplayer.so"
+ "--ppapi-flash-version=@flashVersion@"
+ ];
+ }}
+ '';
+
+ dontStrip = true;
+
+ meta = {
+ license = stdenv.lib.licenses.unfree;
+ maintainers = with stdenv.lib.maintainers; [ taku0 ];
+ platforms = platforms.x86_64;
+ };
+ };
+
+in {
+ enabled = optional enablePepperFlash flash;
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/ungoogled-src.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/ungoogled-src.nix
new file mode 100644
index 000000000000..73c9796aaa96
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/ungoogled-src.nix
@@ -0,0 +1,6 @@
+{
+ "86.0.4240.183" = {
+ rev = "86.0.4240.183-1";
+ sha256 = "0528l2wr5bpl1cwsxzl5zxz1gw91kffkh5j1kzmc5n7m4mscqxyc";
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/ungoogled.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/ungoogled.nix
new file mode 100644
index 000000000000..17418c90af49
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/ungoogled.nix
@@ -0,0 +1,42 @@
+{ stdenv
+, fetchFromGitHub
+, python3Packages
+, makeWrapper
+, patch
+}:
+{ rev
+, sha256
+}:
+
+stdenv.mkDerivation rec {
+ name = "ungoogled-chromium-${version}";
+
+ version = rev;
+
+ src = fetchFromGitHub {
+ owner = "Eloston";
+ repo = "ungoogled-chromium";
+ inherit rev sha256;
+ };
+
+ dontBuild = true;
+
+ buildInputs = [
+ python3Packages.python
+ patch
+ ];
+
+ nativeBuildInputs = [
+ makeWrapper
+ ];
+
+ patchPhase = ''
+ sed -i '/chromium-widevine/d' patches/series
+ '';
+
+ installPhase = ''
+ mkdir $out
+ cp -R * $out/
+ wrapProgram $out/utils/patches.py --add-flags "apply" --prefix PATH : "${patch}/bin"
+ '';
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/update.py b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/update.py
new file mode 100755
index 000000000000..b404ca555bff
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/update.py
@@ -0,0 +1,105 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i python -p python3 nix nix-prefetch-git
+
+import csv
+import json
+import re
+import subprocess
+import sys
+
+from codecs import iterdecode
+from collections import OrderedDict
+from datetime import datetime
+from os.path import abspath, dirname
+from urllib.request import urlopen
+
+HISTORY_URL = 'https://omahaproxy.appspot.com/history?os=linux'
+DEB_URL = 'https://dl.google.com/linux/chrome/deb/pool/main/g'
+BUCKET_URL = 'https://commondatastorage.googleapis.com/chromium-browser-official'
+
+JSON_PATH = dirname(abspath(__file__)) + '/upstream-info.json'
+
+def load_json(path):
+ with open(path, 'r') as f:
+ return json.load(f)
+
+def nix_prefetch_url(url, algo='sha256'):
+ print(f'nix-prefetch-url {url}')
+ out = subprocess.check_output(['nix-prefetch-url', '--type', algo, url])
+ return out.decode('utf-8').rstrip()
+
+def nix_prefetch_git(url, rev):
+ print(f'nix-prefetch-git {url} {rev}')
+ out = subprocess.check_output(['nix-prefetch-git', '--quiet', '--url', url, '--rev', rev])
+ return json.loads(out)
+
+def get_file_revision(revision, file_path):
+ url = f'https://raw.githubusercontent.com/chromium/chromium/{revision}/{file_path}'
+ with urlopen(url) as http_response:
+ return http_response.read()
+
+def get_channel_dependencies(channel):
+ deps = get_file_revision(channel['version'], 'DEPS')
+ gn_pattern = b"'gn_version': 'git_revision:([0-9a-f]{40})'"
+ gn_commit = re.search(gn_pattern, deps).group(1).decode()
+ gn = nix_prefetch_git('https://gn.googlesource.com/gn', gn_commit)
+ return {
+ 'gn': {
+ 'version': datetime.fromisoformat(gn['date']).date().isoformat(),
+ 'url': gn['url'],
+ 'rev': gn['rev'],
+ 'sha256': gn['sha256']
+ }
+ }
+
+channels = {}
+last_channels = load_json(JSON_PATH)
+
+print(f'GET {HISTORY_URL}', file=sys.stderr)
+with urlopen(HISTORY_URL) as resp:
+ builds = csv.DictReader(iterdecode(resp, 'utf-8'))
+ for build in builds:
+ channel_name = build['channel']
+
+ # If we've already found a newer build for this channel, we're
+ # no longer interested in it.
+ if channel_name in channels:
+ continue
+
+ # If we're back at the last build we used, we don't need to
+ # keep going -- there's no new version available, and we can
+ # just reuse the info from last time.
+ if build['version'] == last_channels[channel_name]['version']:
+ channels[channel_name] = last_channels[channel_name]
+ continue
+
+ channel = {'version': build['version']}
+ suffix = 'unstable' if channel_name == 'dev' else channel_name
+
+ try:
+ channel['sha256'] = nix_prefetch_url(f'{BUCKET_URL}/chromium-{build["version"]}.tar.xz')
+ channel['sha256bin64'] = nix_prefetch_url(f'{DEB_URL}/google-chrome-{suffix}/google-chrome-{suffix}_{build["version"]}-1_amd64.deb')
+ except subprocess.CalledProcessError:
+ # This build isn't actually available yet. Continue to
+ # the next one.
+ continue
+
+ channel['deps'] = get_channel_dependencies(channel)
+
+ channels[channel_name] = channel
+
+with open(JSON_PATH, 'w') as out:
+ def get_channel_key(item):
+ channel_name = item[0]
+ if channel_name == 'stable':
+ return 0
+ elif channel_name == 'beta':
+ return 1
+ elif channel_name == 'dev':
+ return 2
+ else:
+ print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr)
+ sys.exit(1)
+ sorted_channels = OrderedDict(sorted(channels.items(), key=get_channel_key))
+ json.dump(sorted_channels, out, indent=2)
+ out.write('\n')
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/upstream-info.json b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/upstream-info.json
new file mode 100644
index 000000000000..565f884c5102
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/ungoogled-chromium/upstream-info.json
@@ -0,0 +1,41 @@
+{
+ "stable": {
+ "version": "86.0.4240.183",
+ "sha256": "1g39i82js7fm4fqb8i66d6xs0kzqjxzi4vzvvwz5y9rkbikcc4ma",
+ "sha256bin64": "1r0dxqsx6j19hgwr3v2sdlb2vd7gb961c4wba4ymd8wy8j8pzly9",
+ "deps": {
+ "gn": {
+ "version": "2020-08-07",
+ "url": "https://gn.googlesource.com/gn",
+ "rev": "e327ffdc503815916db2543ec000226a8df45163",
+ "sha256": "0kvlfj3www84zp1vmxh76x8fdjm9hyk8lkh2vdsidafpmm75fphr"
+ }
+ }
+ },
+ "beta": {
+ "version": "87.0.4280.40",
+ "sha256": "07xh76fl257np68way6i5rf64qbvirkfddy7m5gvqb0fzcqd7dp3",
+ "sha256bin64": "1b2z0aqlh28pqrk6dmabxp1d4mvp9iyfmi4kqmns4cdpg0qgaf41",
+ "deps": {
+ "gn": {
+ "version": "2020-09-09",
+ "url": "https://gn.googlesource.com/gn",
+ "rev": "e002e68a48d1c82648eadde2f6aafa20d08c36f2",
+ "sha256": "0x4c7amxwzxs39grqs3dnnz0531mpf1p75niq7zhinyfqm86i4dk"
+ }
+ }
+ },
+ "dev": {
+ "version": "88.0.4300.0",
+ "sha256": "00cfs2rp4h8ybn2snr1d8ygg635hx7q5gv2aqriy1j6f8a1pgh1b",
+ "sha256bin64": "110r1m14h91212nx6pfhn8wkics7wlwx1608l5cqsxxcpvpzl3pv",
+ "deps": {
+ "gn": {
+ "version": "2020-09-09",
+ "url": "https://gn.googlesource.com/gn",
+ "rev": "e002e68a48d1c82648eadde2f6aafa20d08c36f2",
+ "sha256": "0x4c7amxwzxs39grqs3dnnz0531mpf1p75niq7zhinyfqm86i4dk"
+ }
+ }
+ }
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vimb/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vimb/default.nix
new file mode 100644
index 000000000000..099d81c99f80
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vimb/default.nix
@@ -0,0 +1,34 @@
+{ stdenv, fetchFromGitHub, pkgconfig, libsoup, webkitgtk, gtk3, glib-networking
+, gsettings-desktop-schemas, wrapGAppsHook
+}:
+
+stdenv.mkDerivation rec {
+ pname = "vimb";
+ version = "3.3.0";
+
+ src = fetchFromGitHub {
+ owner = "fanglingsu";
+ repo = "vimb";
+ rev = version;
+ sha256 = "1qg18z2gnsli9qgrqfhqfrsi6g9mcgr90w8yab28nxrq4aha6brf";
+ };
+
+ nativeBuildInputs = [ wrapGAppsHook pkgconfig ];
+ buildInputs = [ gtk3 libsoup webkitgtk glib-networking gsettings-desktop-schemas ];
+
+ makeFlags = [ "PREFIX=${placeholder "out"}" ];
+
+ meta = {
+ description = "A Vim-like browser";
+ longDescription = ''
+ A fast and lightweight vim like web browser based on the webkit web
+ browser engine and the GTK toolkit. Vimb is modal like the great vim
+ editor and also easily configurable during runtime. Vimb is mostly
+ keyboard driven and does not detract you from your daily work.
+ '';
+ homepage = "https://fanglingsu.github.io/vimb/";
+ license = stdenv.lib.licenses.gpl3;
+ maintainers = [];
+ platforms = with stdenv.lib.platforms; linux;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix
new file mode 100644
index 000000000000..aa4dd7f8e443
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix
@@ -0,0 +1,96 @@
+{ stdenv, fetchurl, zlib, libX11, libXext, libSM, libICE
+, libXfixes, libXt, libXi, libXcursor, libXScrnSaver, libXcomposite, libXdamage, libXtst, libXrandr
+, alsaLib, dbus, cups, libexif, ffmpeg_3, systemd
+, freetype, fontconfig, libXft, libXrender, libxcb, expat
+, libuuid
+, libxml2
+, glib, gtk3, pango, gdk-pixbuf, cairo, atk, at-spi2-atk, at-spi2-core, gnome2
+, libdrm, mesa
+, nss, nspr
+, patchelf, makeWrapper
+, isSnapshot ? false
+, proprietaryCodecs ? false, vivaldi-ffmpeg-codecs ? null
+, enableWidevine ? false, vivaldi-widevine ? null
+}:
+
+let
+ branch = if isSnapshot then "snapshot" else "stable";
+ vivaldiName = if isSnapshot then "vivaldi-snapshot" else "vivaldi";
+in stdenv.mkDerivation rec {
+ pname = "vivaldi";
+ version = "3.4.2066.90-1";
+
+ src = fetchurl {
+ url = "https://downloads.vivaldi.com/${branch}/vivaldi-${branch}_${version}_amd64.deb";
+ sha256 = "059vcr2j0vr8szqcxfqnzxwy5i8z53g71fwhm22nc0477jbrsxz1";
+ };
+
+ unpackPhase = ''
+ ar vx $src
+ tar -xvf data.tar.xz
+ '';
+
+ nativeBuildInputs = [ patchelf makeWrapper ];
+
+ buildInputs = [
+ stdenv.cc.cc stdenv.cc.libc zlib libX11 libXt libXext libSM libICE libxcb
+ libXi libXft libXcursor libXfixes libXScrnSaver libXcomposite libXdamage libXtst libXrandr
+ atk at-spi2-atk at-spi2-core alsaLib dbus cups gtk3 gdk-pixbuf libexif ffmpeg_3 systemd
+ freetype fontconfig libXrender libuuid expat glib nss nspr
+ libxml2 pango cairo gnome2.GConf
+ libdrm mesa
+ ] ++ stdenv.lib.optional proprietaryCodecs vivaldi-ffmpeg-codecs;
+
+ libPath = stdenv.lib.makeLibraryPath buildInputs
+ + stdenv.lib.optionalString (stdenv.is64bit)
+ (":" + stdenv.lib.makeSearchPathOutput "lib" "lib64" buildInputs)
+ + ":$out/opt/${vivaldiName}/lib";
+
+ buildPhase = ''
+ echo "Patching Vivaldi binaries"
+ patchelf \
+ --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
+ --set-rpath "${libPath}" \
+ opt/${vivaldiName}/vivaldi-bin
+ '' + stdenv.lib.optionalString proprietaryCodecs ''
+ ln -s ${vivaldi-ffmpeg-codecs}/lib/libffmpeg.so opt/${vivaldiName}/libffmpeg.so.''${version%\.*\.*}
+ '' + ''
+ echo "Finished patching Vivaldi binaries"
+ '';
+
+ dontPatchELF = true;
+ dontStrip = true;
+
+ installPhase = ''
+ mkdir -p "$out"
+ cp -r opt "$out"
+ mkdir "$out/bin"
+ ln -s "$out/opt/${vivaldiName}/${vivaldiName}" "$out/bin/vivaldi"
+ mkdir -p "$out/share"
+ cp -r usr/share/{applications,xfce4} "$out"/share
+ substituteInPlace "$out"/share/applications/*.desktop \
+ --replace /usr/bin/${vivaldiName} "$out"/bin/vivaldi
+ substituteInPlace "$out"/share/applications/*.desktop \
+ --replace vivaldi-stable vivaldi
+ local d
+ for d in 16 22 24 32 48 64 128 256; do
+ mkdir -p "$out"/share/icons/hicolor/''${d}x''${d}/apps
+ ln -s \
+ "$out"/opt/${vivaldiName}/product_logo_''${d}.png \
+ "$out"/share/icons/hicolor/''${d}x''${d}/apps/vivaldi.png
+ done
+ wrapProgram "$out/bin/vivaldi" \
+ --suffix XDG_DATA_DIRS : ${gtk3}/share/gsettings-schemas/${gtk3.name}/ \
+ ${stdenv.lib.optionalString enableWidevine "--suffix LD_LIBRARY_PATH : ${libPath}"}
+ '' + stdenv.lib.optionalString enableWidevine ''
+ ln -sf ${vivaldi-widevine}/share/google/chrome/WidevineCdm $out/opt/${vivaldiName}/WidevineCdm
+ '';
+
+ meta = with stdenv.lib; {
+ description = "A Browser for our Friends, powerful and personal";
+ homepage = "https://vivaldi.com";
+ license = licenses.unfree;
+ maintainers = with maintainers; [ otwieracz badmutex ];
+ platforms = [ "x86_64-linux" ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix
new file mode 100644
index 000000000000..2643bd3e58d9
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix
@@ -0,0 +1,32 @@
+{ stdenv, fetchurl
+, dpkg
+}:
+
+stdenv.mkDerivation rec {
+ name = "chromium-codecs-ffmpeg";
+ version = "78.0.3904.70";
+
+ src = fetchurl {
+ url = "https://launchpadlibrarian.net/449403909/${name}-extra_${version}-0ubuntu0.16.04.2_amd64.deb";
+ sha256 = "00j604nm49z6hbyw7xsxcvmdjf7117kb478plkpizzvmm3w72b9v";
+ };
+
+ buildInputs = [ dpkg ];
+
+ unpackPhase = ''
+ dpkg-deb -x $src .
+ find .
+ '';
+
+ installPhase = ''
+ install -vD usr/lib/chromium-browser/libffmpeg.so $out/lib/libffmpeg.so
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Additional support for proprietary codecs for Vivaldi";
+ homepage = "https://ffmpeg.org/";
+ license = licenses.lgpl21;
+ maintainers = with maintainers; [ betaboon lluchs ];
+ platforms = [ "x86_64-linux" ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update.sh b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update.sh
new file mode 100755
index 000000000000..2e6c2853eb14
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/update.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p libarchive curl common-updater-scripts
+
+set -eu -o pipefail
+
+cd "$(dirname "${BASH_SOURCE[0]}")"
+root=../../../../..
+export NIXPKGS_ALLOW_UNFREE=1
+
+version() {
+ (cd "$root" && nix-instantiate --eval --strict -A "$1.version" | tr -d '"')
+}
+
+vivaldi_version_old=$(version vivaldi)
+vivaldi_version=$(curl -sS https://vivaldi.com/download/ | sed -rne 's/.*vivaldi-stable_([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-[0-9]+)_amd64\.deb.*/\1/p')
+
+if [[ "$vivaldi_version" = "$vivaldi_version_old" ]]; then
+ echo "vivaldi is already up-to-date"
+ exit
+fi
+
+# Download vivaldi and save hash and file path.
+url="https://downloads.vivaldi.com/stable/vivaldi-stable_${vivaldi_version}_amd64.deb"
+mapfile -t prefetch < <(nix-prefetch-url --print-path "$url")
+hash=${prefetch[0]}
+path=${prefetch[1]}
+
+nixpkgs="$(git rev-parse --show-toplevel)"
+default_nix="$nixpkgs/pkgs/applications/networking/browsers/vivaldi/default.nix"
+ffmpeg_nix="$nixpkgs/pkgs/applications/networking/browsers/vivaldi/ffmpeg-codecs.nix"
+
+(cd "$root" && update-source-version vivaldi "$vivaldi_version" "$hash")
+
+git add "${default_nix}"
+git commit -m "vivaldi: ${vivaldi_version_old} -> ${vivaldi_version}"
+
+# Check vivaldi-ffmpeg-codecs version.
+chromium_version_old=$(version vivaldi-ffmpeg-codecs)
+chromium_version=$(bsdtar xOf "$path" data.tar.xz | bsdtar xOf - ./opt/vivaldi/vivaldi-bin | strings | grep '^[0-9]\{2,\}\.[0-9]\+\.[0-9]\{4,\}\+\.[0-9]\+$')
+
+if [[ "$chromium_version" != "$chromium_version_old" ]]; then
+ (cd "$root" && update-source-version vivaldi-ffmpeg-codecs "$chromium_version")
+
+ git add "${ffmpeg_nix}"
+ git commit -m "vivaldi-ffmepg-codecs: $chromium_version_old -> $chromium_version"
+fi
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/widevine.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/widevine.nix
new file mode 100644
index 000000000000..6e807aac5df6
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/vivaldi/widevine.nix
@@ -0,0 +1,33 @@
+{ stdenv, fetchurl
+, unzip
+}:
+
+stdenv.mkDerivation rec {
+ name = "widevine";
+ version = "4.10.1582.1";
+
+ src = fetchurl {
+ url = "https://dl.google.com/widevine-cdm/${version}-linux-x64.zip";
+ sha256 = "0l743f2yyaq1vvc3iicajgnfpjxjsfvjcqvanndbxs23skgjcv6r";
+ };
+
+ buildInputs = [ unzip ];
+
+ unpackPhase = ''
+ unzip $src
+ '';
+
+ installPhase = ''
+ install -vD manifest.json $out/share/google/chrome/WidevineCdm/manifest.json
+ install -vD LICENSE.txt $out/share/google/chrome/WidevineCdm/LICENSE.txt
+ install -vD libwidevinecdm.so $out/share/google/chrome/WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Widevine support for Vivaldi";
+ homepage = "https://www.widevine.com";
+ license = licenses.unfree;
+ maintainers = with maintainers; [ betaboon ];
+ platforms = [ "x86_64-linux" ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/RAND_egd.libressl.patch b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/RAND_egd.libressl.patch
new file mode 100644
index 000000000000..49dd417d1c39
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/RAND_egd.libressl.patch
@@ -0,0 +1,11 @@
+--- a/url.c 2014-07-14 12:31:30.476563116 +0200
++++ b/url.c 2014-07-14 12:32:16.364918248 +0200
+@@ -268,7 +268,7 @@ init_PRNG()
+ if (RAND_status())
+ return;
+ if ((file = RAND_file_name(buffer, sizeof(buffer)))) {
+-#ifdef USE_EGD
++#if defined(USE_EGD) && defined(HAVE_SSL_RAND_EGD)
+ if (RAND_egd(file) > 0)
+ return;
+ #endif
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/default.nix
new file mode 100644
index 000000000000..a15d6844f56d
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/default.nix
@@ -0,0 +1,100 @@
+{ stdenv, fetchFromGitHub, fetchpatch
+, ncurses, boehmgc, gettext, zlib
+, sslSupport ? true, openssl ? null
+, graphicsSupport ? !stdenv.isDarwin, imlib2 ? null
+, x11Support ? graphicsSupport, libX11 ? null
+, mouseSupport ? !stdenv.isDarwin, gpm-ncurses ? null
+, perl, man, pkgconfig, buildPackages, w3m
+}:
+
+assert sslSupport -> openssl != null;
+assert graphicsSupport -> imlib2 != null;
+assert x11Support -> graphicsSupport && libX11 != null;
+assert mouseSupport -> gpm-ncurses != null;
+
+with stdenv.lib;
+
+let
+ mktable = buildPackages.stdenv.mkDerivation {
+ name = "w3m-mktable";
+ inherit (w3m) src;
+ nativeBuildInputs = [ pkgconfig boehmgc ];
+ makeFlags = [ "mktable" ];
+ installPhase = ''
+ install -D mktable $out/bin/mktable
+ '';
+ };
+in stdenv.mkDerivation rec {
+ pname = "w3m";
+ version = "0.5.3+git20190105";
+
+ src = fetchFromGitHub {
+ owner = "tats";
+ repo = pname;
+ rev = "v${version}";
+ sha256 = "1fbg2p8qh2gvi3g4iz4q6vc0k70pf248r4yndi5lcn2m3mzvjx0i";
+ };
+
+ NIX_LDFLAGS = optionalString stdenv.isSunOS "-lsocket -lnsl";
+
+ # we must set these so that the generated files (e.g. w3mhelp.cgi) contain
+ # the correct paths.
+ PERL = "${perl}/bin/perl";
+ MAN = "${man}/bin/man";
+
+ makeFlags = [ "AR=${stdenv.cc.bintools.targetPrefix}ar" ];
+
+ patches = [
+ ./RAND_egd.libressl.patch
+ (fetchpatch {
+ name = "https.patch";
+ url = "https://aur.archlinux.org/cgit/aur.git/plain/https.patch?h=w3m-mouse&id=5b5f0fbb59f674575e87dd368fed834641c35f03";
+ sha256 = "08skvaha1hjyapsh8zw5dgfy433mw2hk7qy9yy9avn8rjqj7kjxk";
+ })
+ ] ++ optional (graphicsSupport && !x11Support) [ ./no-x11.patch ];
+
+ postPatch = optionalString (stdenv.hostPlatform != stdenv.buildPlatform) ''
+ ln -s ${mktable}/bin/mktable mktable
+ # stop make from recompiling mktable
+ sed -ie 's!mktable.*:.*!mktable:!' Makefile.in
+ '';
+
+ nativeBuildInputs = [ pkgconfig gettext ];
+ buildInputs = [ ncurses boehmgc zlib ]
+ ++ optional sslSupport openssl
+ ++ optional mouseSupport gpm-ncurses
+ ++ optional graphicsSupport imlib2
+ ++ optional x11Support libX11;
+
+ postInstall = optionalString graphicsSupport ''
+ ln -s $out/libexec/w3m/w3mimgdisplay $out/bin
+ '';
+
+ hardeningDisable = [ "format" ];
+
+ configureFlags =
+ [ "--with-ssl=${openssl.dev}" "--with-gc=${boehmgc.dev}" ]
+ ++ optionals (stdenv.buildPlatform != stdenv.hostPlatform) [
+ "ac_cv_func_setpgrp_void=yes"
+ ]
+ ++ optional graphicsSupport "--enable-image=${optionalString x11Support "x11,"}fb";
+
+ preConfigure = ''
+ substituteInPlace ./configure --replace "/lib /usr/lib /usr/local/lib /usr/ucblib /usr/ccslib /usr/ccs/lib /lib64 /usr/lib64" /no-such-path
+ substituteInPlace ./configure --replace /usr /no-such-path
+ '';
+
+ enableParallelBuilding = false;
+
+ # for w3mimgdisplay
+ # see: https://bbs.archlinux.org/viewtopic.php?id=196093
+ LIBS = optionalString x11Support "-lX11";
+
+ meta = {
+ homepage = "http://w3m.sourceforge.net/";
+ description = "A text-mode web browser";
+ maintainers = [ maintainers.cstrahan ];
+ platforms = stdenv.lib.platforms.unix;
+ license = stdenv.lib.licenses.mit;
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/no-x11.patch b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/no-x11.patch
new file mode 100644
index 000000000000..0816c022926d
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/w3m/no-x11.patch
@@ -0,0 +1,14 @@
+Forget about X11 in fb module.
+This breaks w3mimgdisplay under X11, but removes X11 dependency it in pure fb.
+diff --git a/w3mimg/fb/fb_imlib2.c b/w3mimg/fb/fb_imlib2.c
+index 1a5151c..d3d7bc3 100644
+--- a/w3mimg/fb/fb_imlib2.c
++++ b/w3mimg/fb/fb_imlib2.c
+@@ -3,6 +3,7 @@
+ fb_imlib2.c 0.3 Copyright (C) 2002, hito
+ **************************************************************************/
+
++#define X_DISPLAY_MISSING
+ #include <Imlib2.h>
+ #include "fb.h"
+ #include "fb_img.h"
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/webbrowser/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/webbrowser/default.nix
new file mode 100644
index 000000000000..5190f1a7b534
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/webbrowser/default.nix
@@ -0,0 +1,108 @@
+{ stdenv, lib, fetchgit, makeDesktopItem, pkgconfig, makeWrapper
+# Build
+, python2, autoconf213, yasm, perl
+, unzip, gnome2, gnum4
+
+# Runtime
+, xorg, zip, freetype, fontconfig, glibc, libffi
+, dbus, dbus-glib, gtk2, alsaLib, jack2, ffmpeg
+}:
+
+let
+
+ libPath = lib.makeLibraryPath [ ffmpeg ];
+
+in stdenv.mkDerivation rec {
+ pname = "webbrowser";
+ version = "29.0.0rc1";
+
+ src = fetchgit {
+ url = "https://git.nuegia.net/webbrowser.git";
+ rev = version;
+ sha256 = "1d82943mla6q3257081d946kgms91dg0n93va3zlzm9hbbqilzm6";
+ fetchSubmodules = true;
+ };
+
+ desktopItem = makeDesktopItem {
+ name = "webbrowser";
+ exec = "webbrowser %U";
+ icon = "webbrowser";
+ desktopName = "Web Browser";
+ genericName = "Web Browser";
+ categories = "Network;WebBrowser;";
+ mimeType = lib.concatStringsSep ";" [
+ "text/html"
+ "text/xml"
+ "application/xhtml+xml"
+ "application/vnd.mozilla.xul+xml"
+ "x-scheme-handler/http"
+ "x-scheme-handler/https"
+ ];
+ };
+
+ nativeBuildInputs = [
+ gnum4 makeWrapper perl pkgconfig python2
+ ];
+
+ buildInputs = [
+ alsaLib dbus dbus-glib ffmpeg fontconfig freetype yasm zip jack2 gtk2
+ unzip gnome2.GConf xorg.libXt
+ ];
+
+ enableParallelBuilding = true;
+
+ configurePhase = ''
+ export MOZCONFIG=$PWD/.mozconfig
+ export MOZ_NOSPAM=1
+
+ cp $src/doc/mozconfig.example $MOZCONFIG
+ # Need to modify it
+ chmod 644 $MOZCONFIG
+
+ substituteInPlace $MOZCONFIG \
+ --replace "mk_add_options PYTHON=/usr/bin/python2" "mk_add_options PYTHON=${python2}/bin/python2" \
+ --replace "mk_add_options AUTOCONF=/usr/bin/autoconf-2.13" "mk_add_options AUTOCONF=${autoconf213}/bin/autoconf" \
+ --replace 'mk_add_options MOZ_OBJDIR=$HOME/build/wbobjects/' "" \
+ --replace "ac_add_options --x-libraries=/usr/lib64" "ac_add_options --x-libraries=${lib.makeLibraryPath [ xorg.libX11 ]}" \
+ --replace "_BUILD_64=1" "_BUILD_64=${lib.optionalString stdenv.hostPlatform.is64bit "1"}" \
+ --replace "--enable-ccache" "--disable-ccache"
+
+ echo >> $MOZCONFIG '
+ #
+ # NixOS-specific adjustments
+ #
+
+ ac_add_options --prefix=$out
+
+ mk_add_options MOZ_MAKE_FLAGS="-j$NIX_BUILD_CORES"
+ '
+ '';
+
+ buildPhase = "$src/mach build";
+
+ installPhase = ''
+ $src/mach install
+
+ mkdir -p $out/share/applications
+ cp ${desktopItem}/share/applications/* $out/share/applications
+
+ for n in 16 32 48; do
+ size=$n"x"$n
+ mkdir -p $out/share/icons/hicolor/$size/apps
+ cp $src/webbrowser/branding/unofficial/default$n.png \
+ $out/share/icons/hicolor/$size/apps/webbrowser.png
+ done
+
+ # Needed to make videos work
+ wrapProgram $out/lib/webbrowser-${version}/webbrowser \
+ --prefix LD_LIBRARY_PATH : "${libPath}"
+ '';
+
+ meta = with lib; {
+ description = "Generic web browser without trackers compatible with XUL plugins using UXP rendering engine";
+ homepage = "https://git.nuegia.net/webbrowser.git/";
+ license = [ licenses.mpl20 licenses.gpl3 ];
+ maintainers = with maintainers; [ TheBrainScrambler ];
+ platforms = [ "i686-linux" "x86_64-linux" ];
+ };
+}
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/webmacs/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/webmacs/default.nix
new file mode 100644
index 000000000000..7dbb6a3c5388
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/networking/browsers/webmacs/default.nix
@@ -0,0 +1,75 @@
+{ lib
+, mkDerivationWith
+, fetchFromGitHub
+, python3Packages
+, herbstluftwm
+}:
+
+mkDerivationWith python3Packages.buildPythonApplication rec {
+ pname = "webmacs";
+ version = "0.8";
+
+ disabled = python3Packages.isPy27;
+
+ src = fetchFromGitHub {
+ owner = "parkouss";
+ repo = "webmacs";
+ rev = version;
+ fetchSubmodules = true;
+ sha256 = "1hzb9341hybgrqcy1w20hshm6xaiby4wbjpjkigf4zq389407368";
+ };
+
+ propagatedBuildInputs = with python3Packages; [
+ pyqtwebengine
+ setuptools
+ dateparser
+ jinja2
+ pygments
+ ];
+
+ checkInputs = [
+ python3Packages.pytest
+ #python3Packages.pytest-xvfb
+ #python3Packages.pytest-qt
+ python3Packages.pytestCheckHook
+ herbstluftwm
+
+ # The following are listed in test-requirements.txt but appear not
+ # to be needed at present:
+
+ # python3Packages.pytest-mock
+ # python3Packages.flake8
+ ];
+
+ # See https://github.com/parkouss/webmacs/blob/1a04fb7bd3f33d39cb4d71621b48c2458712ed39/setup.py#L32
+ # Don't know why they're using CC for g++.
+ preConfigure = ''
+ export CC=$CXX
+ '';
+
+ doCheck = false; # test dependencies not packaged up yet
+
+ dontWrapQtApps = true;
+
+ preFixup = ''
+ makeWrapperArgs+=("''${qtWrapperArgs[@]}")
+ '';
+
+ meta = with lib; {
+ description = "Keyboard-based web browser with Emacs/conkeror heritage";
+ longDescription = ''
+ webmacs is yet another browser for keyboard-based web navigation.
+
+ It mainly targets emacs-like navigation, and started as a clone (in terms of
+ features) of conkeror.
+
+ Based on QtWebEngine and Python 3. Fully customizable in Python.
+ '';
+ homepage = "https://webmacs.readthedocs.io/en/latest/";
+ changelog = "https://github.com/parkouss/webmacs/blob/master/CHANGELOG.md";
+ license = licenses.gpl3;
+ maintainers = with maintainers; [ jacg ];
+ platforms = platforms.all;
+ };
+
+}