aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorohfp <1813007-ohfp@users.noreply.gitlab.com>2020-03-06 21:45:34 +0000
committerohfp <1813007-ohfp@users.noreply.gitlab.com>2020-03-06 21:45:34 +0000
commitebd593571b8962af5c6025ba666ca5a474087bb1 (patch)
tree5f0c63d360a1e932756f050baed942c4a36ee39f
parentfix appimage build (diff)
parenttemporarily disable custom config/patches during build (diff)
downloadlibrewolf-linux-ebd593571b8962af5c6025ba666ca5a474087bb1.tar.gz
librewolf-linux-ebd593571b8962af5c6025ba666ca5a474087bb1.tar.bz2
librewolf-linux-ebd593571b8962af5c6025ba666ca5a474087bb1.zip
Merge branch 'arch_based_ci' into 'master'
CI/build script rewrite See merge request librewolf-community/browser/linux!7
-rw-r--r--.gitlab-ci.yml129
-rw-r--r--PKGBUILD276
-rwxr-xr-xappimage/build_appimage.sh17
-rw-r--r--arm.patch12
-rwxr-xr-xbinary_tarball/scripts/1_Install_Dependencies.sh2
-rwxr-xr-xbinary_tarball/scripts/2_Download_Source_Code.sh14
-rwxr-xr-xbinary_tarball/scripts/5_Configure_Binary_Tarball.sh4
-rwxr-xr-xcontent/launch_librewolf.sh (renamed from binary_tarball/content/launch_librewolf.sh)0
-rw-r--r--content/toggle-settings.sh (renamed from binary_tarball/content/toggle-settings.sh)0
-rwxr-xr-xflatpak/build_flatpak.sh15
-rw-r--r--flatpak/content/io.gitlab.LibreWolf.json37
-rw-r--r--librewolf.cfg.patch168
-rw-r--r--librewolf.desktop340
-rw-r--r--librewolf.install13
-rwxr-xr-xscripts/01_arch_build.sh12
-rwxr-xr-xscripts/02_configure_tarball.sh35
16 files changed, 995 insertions, 79 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index f230b82..6777c9c 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,54 +1,93 @@
-image: ubuntu:18.04
+stages:
+ - build
+ - paks
+ - deploy
-variables:
- BINARY_TARBALL: "$CI_PROJECT_DIR/LibreWolf.tar.bz2"
- APPIMAGE_FILE: "$CI_PROJECT_DIR/LibreWolf.AppImage"
- FLATPAK_REPO: "$CI_PROJECT_DIR/librewolf-flatpak-repo"
- FLATPAK_BUNDLE: "$CI_PROJECT_DIR/LibreWolf.flatpak"
+.carch_aarch64: &carch_aarch64
+ variables:
+ CARCH: 'aarch64'
-stages:
- - Build
- - Package
- - Deploy
-
-Build Tarball:
- stage: Build
- tags: [librewolf]
- script:
- - $CI_PROJECT_DIR/binary_tarball/build_tarball.sh $BINARY_TARBALL
- artifacts:
- name: "Librewolf-$CI_COMMIT_REF_NAME-Linux-Tarball"
- paths:
- - "$BINARY_TARBALL"
-
-Build AppImage:
- stage: Package
- tags: [gitlab-org]
- script:
- - $CI_PROJECT_DIR/appimage/build_appimage.sh $BINARY_TARBALL $APPIMAGE_FILE
- artifacts:
- name: "Librewolf-$CI_COMMIT_REF_NAME-Linux-Appimage"
- paths:
- - "$APPIMAGE_FILE"
-
-Build Flatpak:
- image: black0/flatpak
- stage: Package
- tags:
- - gitlab-org
- script:
- - $CI_PROJECT_DIR/flatpak/build_flatpak.sh $BINARY_TARBALL $FLATPAK_REPO $FLATPAK_BUNDLE
- artifacts:
- name: "Librewolf-$CI_COMMIT_REF_NAME-Linux-Flatpak"
- paths:
- - "$FLATPAK_REPO"
- - "$FLATPAK_BUNDLE"
+.carch_x86_64: &carch_x86_64
+ variables:
+ CARCH: 'x86_64'
+
+.main_build_config: &main_build_config
+ stage: build
+ script:
+ - ./scripts/01_arch_build.sh
+ - ./scripts/02_configure_tarball.sh
+ artifacts:
+ name: "Librewolf-${CI_COMMIT_TAG}-${CARCH}"
+ paths:
+ - "librewolf*pkg.tar*"
+ - "LibreWolf.${CARCH}.tar.bz2"
+ only:
+ - tags
+
+.flatpak_config: &flatpak_config
+ stage: paks
+ artifacts:
+ name: "Librewolf-${CI_COMMIT_TAG}-Flatpak-${CARCH}"
+ paths:
+ - "LibreWolf.${CARCH}.flatpak"
+ - "${CI_PROJECT_DIR}/librewolf-flatpak-repo"
+ only:
+ - tags
+ script:
+ - ./flatpak/build_flatpak.sh "${CI_PROJECT_DIR}/LibreWolf.${CARCH}.tar.bz2" "${CI_PROJECT_DIR}/librewolf-${CARCH}-flatpak-repo" "${CI_PROJECT_DIR}/LibreWolf.${CARCH}.flatpak"
+
+.appimage_config: &appimage_config
+ stage: paks
+ artifacts:
+ name: "Librewolf-${CI_COMMIT_TAG}-AppImage-${CARCH}"
+ paths:
+ - "LibreWolf.${CARCH}.AppImage"
+ only:
+ - tags
+ script:
+ - ./appimage/build_appimage.sh "${CI_PROJECT_DIR}/LibreWolf.${CARCH}.tar.bz2" "${CI_PROJECT_DIR}/LibreWolf.${CARCH}.AppImage"
+
+build_x86_64:
+ image: archlinux/base
+ tags: [x86_64b]
+ <<: *carch_x86_64
+ <<: *main_build_config
+
+build_aarch64:
+ image: registry.gitlab.com/ohfp/manjaro-arm-docker
+ tags: [aarch64b]
+ <<: *carch_aarch64
+ <<: *main_build_config
+
+flatpak_x86_64:
+ image: ubuntu:18.04
+ tags: [flat_runner]
+ <<: *carch_x86_64
+ <<: *flatpak_config
+
+flatpak_aarch64:
+ image: arm64v8/ubuntu:18.04
+ tags: [flat_runner_aarch64]
+ <<: *carch_aarch64
+ <<: *flatpak_config
+
+appimage_x86_64:
+ image: ubuntu:18.04
+ tags: [x86_64b]
+ <<: *carch_x86_64
+ <<: *appimage_config
+
+appimage_aarch64:
+ image: arm64v8/ubuntu:18.04
+ tags: [aarch64b]
+ <<: *carch_aarch64
+ <<: *appimage_config
Release to Gitlab:
- stage: Deploy
+ stage: deploy
image: python3
script:
- pip3 install gitlab-release
- - gitlab-release LibreWolf.tar.bz2 LibreWolf.AppImage librewolf-flatpak-repo LibreWolf.flatpak
+ - gitlab-release "LibreWolf.{x86_64,aarch64}.tar.bz2" "librewolf*.pkg.tar.*" "LibreWolf.{x86_64,aarch64}.AppImage" "librewolf-{x86_64,aarch64}-flatpak-repo" "LibreWolf.{x86_64,aarch64}.flatpak"
only:
- tags
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 0000000..1ceeb28
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,276 @@
+# Maintainer: lsf
+# Contributor: Jan Alexander Steffens (heftig) <jan.steffens@gmail.com>
+# Contributor: Ionut Biru <ibiru@archlinux.org>
+# Contributor: Jakub Schmidtke <sjakub@gmail.com>
+
+pkgname=librewolf
+_pkgname=LibreWolf
+pkgver=73.0.1
+pkgrel=1
+pkgdesc="Community-maintained fork of Librefox: a privacy and security-focused browser"
+arch=(x86_64 aarch64)
+license=(MPL GPL LGPL)
+url="https://LibreWolf.gitlab.io"
+depends=(gtk3 libxt startup-notification mime-types dbus-glib ffmpeg nss
+ ttf-font libpulse)
+makedepends=(unzip zip diffutils python2-setuptools yasm mesa imake inetutils
+ xorg-server-xvfb autoconf2.13 rust clang llvm jack gtk2
+ python nodejs python2-psutil cbindgen nasm git binutils)
+optdepends=('networkmanager: Location detection via available WiFi networks'
+ 'libnotify: Notification integration'
+ 'pulseaudio: Audio support'
+ 'speech-dispatcher: Text-to-Speech'
+ 'hunspell-en_US: Spell checking, American English')
+options=(!emptydirs !makeflags !strip)
+# install='librewolf.install'
+source=(https://archive.mozilla.org/pub/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.xz
+ $pkgname.desktop
+ $pkgname.cfg.patch
+ "git+https://gitlab.com/${pkgname}-community/browser/common.git"
+ "git+https://gitlab.com/${pkgname}-community/settings.git")
+sha256sums=('53415180e74da60fc91700ce1ff33bf5b6f51e65353017a98270899a08e0c3d2'
+ '0471d32366c6f415f7608b438ddeb10e2f998498c389217cdd6cc52e8249996b'
+ 'e03332f0e865949df5af9c231a364e9e1068fca0439621b98c2d4160d93e674f'
+ 'SKIP'
+ 'SKIP')
+
+if [[ $CARCH == 'aarch64' ]]; then
+ source+=(arm.patch
+ https://raw.githubusercontent.com/archlinuxarm/PKGBUILDs/master/extra/firefox/build-arm-libopus.patch)
+ sha256sums+=('6ca87d2ac7dc48e6f595ca49ac8151936afced30d268a831c6a064b52037f6b7'
+ '2d4d91f7e35d0860225084e37ec320ca6cae669f6c9c8fe7735cdbd542e3a7c9')
+fi
+
+prepare() {
+ _POCKET_SED_STRING="s/'pocket'/#'pocket'/g"
+ # this one only to remove an annoying error message:
+ _POCKET_SED_STRING_2='s#SaveToPocket.init();#// SaveToPocket.init();#g'
+ _POCKET_FILE=./browser/components/moz.build
+ _POCKET_FILE_2=./browser/components/BrowserGlue.jsm
+
+ mkdir mozbuild
+ cd firefox-$pkgver
+
+ # NOTE:
+ # unlock some prefs I deem worthy of keeping unlocked or slightly less restricted
+ # (with librewolf installed systemwide, you'd otherwise always have to sudo around in /usr/lib)
+ # it mainly keeps addon update / install settings / urls unlocked
+ # as well as form fill settings
+ # uncomment it if you are OK with a slight potential decrease in privacy,
+ # or even better: check what I'm doing there.
+
+ # cd ${srcdir}/settings
+ # patch -Np1 -i ${srcdir}/${pkgname}.cfg.patch
+ # rm -f librewolf.cfg.orig
+ # cd ${srcdir}/firefox-$pkgver
+
+ cat >../mozconfig <<END
+ac_add_options --enable-application=browser
+
+# This supposedly speeds up compilation (We test through dogfooding anyway)
+ac_add_options --disable-tests
+ac_add_options --disable-debug
+
+ac_add_options --prefix=/usr
+ac_add_options --enable-release
+ac_add_options --enable-hardening
+ac_add_options --enable-rust-simd
+export CC='clang'
+export CXX='clang++'
+export AR=llvm-ar
+export NM=llvm-nm
+export RANLIB=llvm-ranlib
+
+# Branding
+ac_add_options --enable-update-channel=release
+ac_add_options --with-app-name=${pkgname}
+ac_add_options --with-app-basename=${_pkgname}
+ac_add_options --with-branding=browser/branding/${pkgname}
+ac_add_options --with-distribution-id=io.gitlab.${pkgname}
+ac_add_options --with-unsigned-addon-scopes=app,system
+export MOZ_REQUIRE_SIGNING=0
+
+# System libraries
+ac_add_options --with-system-nspr
+ac_add_options --with-system-nss
+
+# Features
+ac_add_options --enable-alsa
+ac_add_options --enable-jack
+ac_add_options --enable-startup-notification
+ac_add_options --disable-crashreporter
+ac_add_options --disable-gconf
+ac_add_options --disable-updater
+ac_add_options --disable-tests
+
+# Disables crash reporting, telemetry and other data gathering tools
+mk_add_options MOZ_CRASHREPORTER=0
+mk_add_options MOZ_DATA_REPORTING=0
+mk_add_options MOZ_SERVICES_HEALTHREPORT=0
+mk_add_options MOZ_TELEMETRY_REPORTING=0
+
+# options for ci / weaker build systems
+# mk_add_options MOZ_MAKE_FLAGS="-j4"
+# ac_add_options --enable-linker=gold
+END
+
+if [[ $CARCH == 'aarch64' ]]; then
+cat >>../mozconfig <<END
+# taken from manjaro build:
+ac_add_options --enable-lto
+ac_add_options --enable-optimize="-g0 -O2"
+export MOZ_DEBUG_FLAGS=" "
+export CFLAGS+=" -g0"
+export CXXFLAGS+=" -g0"
+export RUSTFLAGS="-Cdebuginfo=0"
+
+# from ALARM
+ac_add_options --disable-webrtc
+
+END
+
+# ac_add_options --enable-optimize <- ?
+
+ LDFLAGS+=" -Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
+ patch -p1 -i ../arm.patch
+ patch -p1 -i ../build-arm-libopus.patch
+
+fi
+
+ rm -f ${srcdir}/common/source_files/mozconfig
+ cp -r ${srcdir}/common/source_files/* ./
+
+ # Disabling Pocket
+ sed -i ${_POCKET_SED_STRING} $_POCKET_FILE
+ # sed -i ${_POCKET_SED_STRING_2} $_POCKET_FILE_2
+}
+
+
+build() {
+ cd firefox-$pkgver
+
+ export MOZ_SOURCE_REPO="$_repo"
+ export MOZ_NOSPAM=1
+ export MOZBUILD_STATE_PATH="$srcdir/mozbuild"
+
+ # LTO needs more open files
+ ulimit -n 4096
+
+if [[ $CARCH != 'aarch64' ]]; then
+ # -fno-plt with cross-LTO causes obscure LLVM errors
+ # LLVM ERROR: Function Import: link error
+ CFLAGS="${CFLAGS/-fno-plt/}"
+ CXXFLAGS="${CXXFLAGS/-fno-plt/}"
+
+ # Do 3-tier PGO
+ echo "Building instrumented browser..."
+ cat >.mozconfig ../mozconfig - <<END
+ac_add_options --enable-profile-generate=cross
+END
+ ./mach build
+
+ echo "Profiling instrumented browser..."
+ ./mach package
+ LLVM_PROFDATA=llvm-profdata \
+ JARLOG_FILE="$PWD/jarlog" \
+ xvfb-run -s "-screen 0 1920x1080x24 -nolisten local" \
+ ./mach python build/pgo/profileserver.py
+
+ if [[ ! -s merged.profdata ]]; then
+ echo "No profile data produced."
+ return 1
+ fi
+
+ if [[ ! -s jarlog ]]; then
+ echo "No jar log produced."
+ return 1
+ fi
+
+ echo "Removing instrumented browser..."
+ ./mach clobber
+
+ echo "Building optimized browser..."
+ cat >.mozconfig ../mozconfig - <<END
+ac_add_options --enable-lto=cross
+ac_add_options --enable-profile-use=cross
+ac_add_options --with-pgo-profile-path=${PWD@Q}/merged.profdata
+ac_add_options --with-pgo-jarlog=${PWD@Q}/jarlog
+# seems to break on arm
+ac_add_options --enable-linker=gold
+END
+else
+ cat >.mozconfig ../mozconfig
+fi
+
+ ./mach build
+
+ echo "Building symbol archive..."
+ ./mach buildsymbols
+}
+
+package() {
+ cd firefox-$pkgver
+ DESTDIR="$pkgdir" ./mach install
+
+ # also create regular tarball for non-distro-specific packaging
+ ./mach package
+
+ local vendorjs="$pkgdir/usr/lib/$pkgname/browser/defaults/preferences/vendor.js"
+ install -Dvm644 /dev/stdin "$vendorjs" <<END
+// Use LANG environment variable to choose locale
+pref("intl.locale.requested", "");
+
+// Use system-provided dictionaries
+pref("spellchecker.dictionary_path", "/usr/share/hunspell");
+
+// Disable default browser checking.
+pref("browser.shell.checkDefaultBrowser", false);
+
+// Don't disable extensions in the application directory
+pref("extensions.autoDisableScopes", 11);
+END
+
+ cp -r ${srcdir}/settings/* ${pkgdir}/usr/lib/${pkgname}/
+
+ local distini="$pkgdir/usr/lib/$pkgname/distribution/distribution.ini"
+ install -Dvm644 /dev/stdin "$distini" <<END
+[Global]
+id=io.gitlab.${pkgname}
+version=1.0
+about=LibreWolf Arch Linux
+
+[Preferences]
+app.distributor=archlinux
+app.distributor.channel=$pkgname
+app.partner.archlinux=archlinux
+END
+
+ for i in 16 32 48 64 128; do
+ install -Dvm644 browser/branding/${pkgname}/default$i.png \
+ "$pkgdir/usr/share/icons/hicolor/${i}x${i}/apps/$pkgname.png"
+ done
+ install -Dvm644 browser/branding/librewolf/content/about-logo.png \
+ "$pkgdir/usr/share/icons/hicolor/192x192/apps/$pkgname.png"
+
+ # arch upstream provides a separate svg for this. we don't have that, so let's re-use 16.png
+ install -Dvm644 browser/branding/${pkgname}/default16.png \
+ "$pkgdir/usr/share/icons/hicolor/symbolic/apps/$pkgname-symbolic.png"
+
+ install -Dvm644 ../$pkgname.desktop \
+ "$pkgdir/usr/share/applications/$pkgname.desktop"
+
+ # Install a wrapper to avoid confusion about binary path
+ install -Dvm755 /dev/stdin "$pkgdir/usr/bin/$pkgname" <<END
+#!/bin/sh
+exec /usr/lib/$pkgname/librewolf "\$@"
+END
+
+ # Replace duplicate binary with wrapper
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=658850
+ ln -srfv "$pkgdir/usr/bin/$pkgname" "$pkgdir/usr/lib/$pkgname/librewolf-bin"
+ # Use system certificates
+ local nssckbi="$pkgdir/usr/lib/$pkgname/libnssckbi.so"
+ if [[ -e $nssckbi ]]; then
+ ln -srfv "$pkgdir/usr/lib/libnssckbi.so" "$nssckbi"
+ fi
+}
diff --git a/appimage/build_appimage.sh b/appimage/build_appimage.sh
index b74e98c..1317bab 100755
--- a/appimage/build_appimage.sh
+++ b/appimage/build_appimage.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
"""
@@ -14,8 +14,8 @@ BINARY_TARBALL=$1
APPIMAGE_FILE=$2
_SCRIPT_FOLDER=$(realpath $(dirname $0));
_BINARY_TARBALL_EXTRACTED_FOLDER=$_SCRIPT_FOLDER/librewolf;
-_BUILD_APPIMAGE_FILE=$_SCRIPT_FOLDER/LibreWolf*.AppImage;
-_APPIMAGETOOL_DOWNLOAD_URL=https://github.com/AppImage/AppImageKit/releases/latest/download/appimagetool-x86_64.AppImage;
+_BUILD_APPIMAGE_FILE=$_SCRIPT_FOLDER/LibreWolf.AppImage;
+_APPIMAGETOOL_DOWNLOAD_URL=https://github.com/AppImage/AppImageKit/releases/latest/download/appimagetool-${CARCH}.AppImage;
_APPIMAGETOOL_EXTRACTED_FOLDER=$_SCRIPT_FOLDER/squashfs-root;
_APPIMAGETOOL_FILE=$_SCRIPT_FOLDER/appimagetool;
_APPIMAGE_CONTENT_FOLDER=$_SCRIPT_FOLDER/content
@@ -23,6 +23,10 @@ _APPIMAGE_CONTENT_FOLDER=$_SCRIPT_FOLDER/content
# Installs needed dependencies
apt-get update && apt-get -y install file;
+if [[ $CARCH == 'aarch64' ]]; then
+ apt install -y zlib1g-dev
+fi
+
# Extracts the binary tarball
printf "\nExtracting librewolf binary tarball\n";
mkdir $_BINARY_TARBALL_EXTRACTED_FOLDER;
@@ -34,14 +38,15 @@ cp -vrT $_APPIMAGE_CONTENT_FOLDER $_BINARY_TARBALL_EXTRACTED_FOLDER;
# Downloads appimage tool
printf "\nDownloading AppImage Tool\n";
-apt -qq update && apt -qqy install wget;
+apt -qq update && apt -qqy install wget;
wget $_APPIMAGETOOL_DOWNLOAD_URL -O $_APPIMAGETOOL_FILE;
chmod +x $_APPIMAGETOOL_FILE;
# Generate AppImage
printf "\nGenerating AppImage\n";
-ARCH=x86_64 $_APPIMAGETOOL_FILE --appimage-extract-and-run $_BINARY_TARBALL_EXTRACTED_FOLDER;
-chmod +x $_BUILD_APPIMAGE_FILE;
+ARCH=${CARCH} $_APPIMAGETOOL_FILE --appimage-extract-and-run\
+ $_BINARY_TARBALL_EXTRACTED_FOLDER $_BUILD_APPIMAGE_FILE;
+chmod +x $_BUILD_APPIMAGE_FILE;
# Move AppImage to specified location
printf "\nMoving AppImage to specified location\n";
diff --git a/arm.patch b/arm.patch
new file mode 100644
index 0000000..0e0d648
--- /dev/null
+++ b/arm.patch
@@ -0,0 +1,12 @@
+diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp
+index f8977a6..34f52fc 100644
+--- a/js/src/wasm/WasmSignalHandlers.cpp
++++ b/js/src/wasm/WasmSignalHandlers.cpp
+@@ -243,7 +243,7 @@ using mozilla::DebugOnly;
+ // If you run into compile problems on a tier-3 platform, you can disable the
+ // emulation here.
+
+-#if defined(__linux__) && defined(__arm__)
++#if 0 && defined(__linux__) && defined(__arm__)
+ # define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS
+ #endif
diff --git a/binary_tarball/scripts/1_Install_Dependencies.sh b/binary_tarball/scripts/1_Install_Dependencies.sh
index 49f0613..58cde9b 100755
--- a/binary_tarball/scripts/1_Install_Dependencies.sh
+++ b/binary_tarball/scripts/1_Install_Dependencies.sh
@@ -2,7 +2,7 @@
printf "\n\n-------------------------------------- DEPENDENCY INSTALLATION ---------------------------------------------\n";
# Setup Script Variables
-_DEPENDENCIES="mercurial wget git";
+_DEPENDENCIES="mercurial wget git flatpak flatpak-builder";
# Installs Dependencies
printf "\nInstalling dependencies: $_DEPENDENCIES\n";
diff --git a/binary_tarball/scripts/2_Download_Source_Code.sh b/binary_tarball/scripts/2_Download_Source_Code.sh
index ac022a1..27ab37c 100755
--- a/binary_tarball/scripts/2_Download_Source_Code.sh
+++ b/binary_tarball/scripts/2_Download_Source_Code.sh
@@ -3,9 +3,13 @@ printf "\n\n--------------------------------- SOURCE CODE DOWNLOAD -------------
# Setup Script Variables
SOURCE_FOLDER=$1;
-_SOURCE_CODE_URL="https://hg.mozilla.org/releases/mozilla-release";
-
-# Clone Firefox Source Code
-printf "\nCloning Firefox Source Code\n";
-hg clone $_SOURCE_CODE_URL $SOURCE_FOLDER;
+# hardcoded vor now, we'll parse the _pkgver later on, probably from tags
+pkgver="73.0.1"
+_SOURCE_CODE_URL="https://archive.mozilla.org/pub/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.xz";
+_SOURCE_TAR="firefox-${pkgver}.tar.xz"
+# Downloading and Extracting Firefox Source Code
+printf "\nDownloading Firefox Source Code\n";
+wget -O $_SOURCE_TAR $_SOURCE_CODE_URL
+mkdir -p $SOURCE_FOLDER
+tar -x --strip-components=1 -C $SOURCE_FOLDER -f $_SOURCE_TAR
diff --git a/binary_tarball/scripts/5_Configure_Binary_Tarball.sh b/binary_tarball/scripts/5_Configure_Binary_Tarball.sh
index 0e6551e..fe4a4a6 100755
--- a/binary_tarball/scripts/5_Configure_Binary_Tarball.sh
+++ b/binary_tarball/scripts/5_Configure_Binary_Tarball.sh
@@ -11,7 +11,7 @@ _SETTINGS_REPO='https://gitlab.com/librewolf-community/settings.git';
# Extracts the binary tarball
printf "\nExtracting librewolf binary tarball\n";
-tar -xf $BINARY_TARBALL;
+tar -xf $BINARY_TARBALL -C $_EXTRACTED_TARBALL_FOLDER/..;
# Adds the librefox config files to the packaged tarball
printf "\nCopying librewolf settings to extracted binary tarball\n";
@@ -22,6 +22,6 @@ cp $LAUNCHER_SCRIPT $_EXTRACTED_TARBALL_FOLDER/launch_librewolf.sh;
# Repacks the binary tarball
printf "\nRecompressing binary tarball\n";
-tar -jvcf $BINARY_TARBALL $_EXTRACTED_TARBALL_FOLDER;
+tar -jvcf $BINARY_TARBALL -C $_EXTRACTED_TARBALL_FOLDER .;
diff --git a/binary_tarball/content/launch_librewolf.sh b/content/launch_librewolf.sh
index 26c1bd5..26c1bd5 100755
--- a/binary_tarball/content/launch_librewolf.sh
+++ b/content/launch_librewolf.sh
diff --git a/binary_tarball/content/toggle-settings.sh b/content/toggle-settings.sh
index ff46bde..ff46bde 100644
--- a/binary_tarball/content/toggle-settings.sh
+++ b/content/toggle-settings.sh
diff --git a/flatpak/build_flatpak.sh b/flatpak/build_flatpak.sh
index 999c710..36eff24 100755
--- a/flatpak/build_flatpak.sh
+++ b/flatpak/build_flatpak.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
printf "\n\n---------------------------------------- FLATPAK BUILD --------------------------------------------\n";
# Aborts the script upon any faliure
@@ -10,7 +10,7 @@ FLATPAK_REPO=$2;
FLATPAK_BUNDLE=$3;
_SCRIPT_FOLDER=$(realpath $(dirname $0));
_FLATHUB_REPO="flathub https://flathub.org/repo/flathub.flatpakrepo";
-_FLATHUB_PACKAGES_TO_INSTALL="org.gnome.Platform/x86_64/3.32 org.gnome.Sdk/x86_64/3.32";
+_FLATHUB_PACKAGES_TO_INSTALL="org.gnome.Platform/${CARCH}/3.32 org.gnome.Sdk/${CARCH}/3.32";
_EXTRACTED_BINARY_TARBALL_FOLDER=$_SCRIPT_FOLDER/librewolf
_FLATPAK_JSON_FILE=$_SCRIPT_FOLDER/content/io.gitlab.LibreWolf.json;
_FLATPAK_BUILD_SOURCE_FOLDER=$_SCRIPT_FOLDER/source;
@@ -18,21 +18,28 @@ _FLATPAK_BUILD_FOLDER=build-dir;
# Install build dependencies
printf "\nInstalling flatpak build dependencies\n";
+
+# we're using a pre-prepared flatpak-image witch aarch64
+apt update && apt install -y software-properties-common
+add-apt-repository -y ppa:alexlarsson/flatpak
+apt update && apt install -y flatpak-builder
flatpak remote-add --if-not-exists $_FLATHUB_REPO;
flatpak install -y flathub $_FLATHUB_PACKAGES_TO_INSTALL;
# Extracts the binary tarball
printf "\nExtracting librewolf binary tarball\n";
+mkdir -p $_EXTRACTED_BINARY_TARBALL_FOLDER;
tar -xvf $BINARY_TARBALL -C $_EXTRACTED_BINARY_TARBALL_FOLDER;
# Prepare for flatpak build
printf "\nPreparing files for flatpak build\n";
-mkdir $_FLATPAK_BUILD_SOURCE_FOLDER && mv $_EXTRACTED_BINARY_TARBALL_FOLDER $_FLATPAK_BUILD_SOURCE_FOLDER/librewolf;
+mkdir -p $_FLATPAK_BUILD_SOURCE_FOLDER;
+mv $_EXTRACTED_BINARY_TARBALL_FOLDER $_FLATPAK_BUILD_SOURCE_FOLDER;
# Build Repo
printf "\nBuilding flatpak repository\n";
cp "$_FLATPAK_JSON_FILE" ./;
-flatpak-builder --repo="$FLATPAK_REPO" "$_FLATPAK_BUILD_FOLDER" io.gitlab.LibreWolf.json;
+flatpak-builder --disable-rofiles-fuse --repo="$FLATPAK_REPO" "$_FLATPAK_BUILD_FOLDER" io.gitlab.LibreWolf.json;
# Build bundle
printf "\nBuilding flatpak bundle\n";
diff --git a/flatpak/content/io.gitlab.LibreWolf.json b/flatpak/content/io.gitlab.LibreWolf.json
index 0e2b549..8feb9d6 100644
--- a/flatpak/content/io.gitlab.LibreWolf.json
+++ b/flatpak/content/io.gitlab.LibreWolf.json
@@ -4,22 +4,27 @@
"runtime-version": "3.32",
"sdk": "org.gnome.Sdk",
"command": "librewolf",
- "modules": [{
- "name": "librewolf",
- "buildsystem": "simple",
- "build-commands": [
- "mkdir -p /app/share && mv librewolf -t /app/share",
- "mkdir -p /app/bin && ln -s /app/share/librewolf/librewolf /app/bin/"
- ],
- "sources": [{
- "type": "dir",
- "path": "source"
- }]
- }],
+ "modules": [
+ {
+ "name": "librewolf",
+ "buildsystem": "simple",
+ "build-commands": [
+ "mkdir -p /app/share && mv librewolf -t /app/share",
+ "mkdir -p /app/bin && ln -s /app/share/librewolf/librewolf /app/bin/"
+ ],
+ "sources": [
+ {
+ "type": "dir",
+ "path": "flatpak/source"
+ }
+ ]
+ }
+ ],
"finish-args": [
- "--share=ipc", "--socket=x11", /* X11 + XShm access */
- "--socket=wayland", /* Wayland access */
- "--filesystem=home:rw", /* We want full fs access so we can read the files */
- "--share=network" /* Needs to talk to the network: */
+ "--share=ipc",
+ "--socket=x11",
+ "--socket=wayland",
+ "--filesystem=home:rw",
+ "--share=network"
]
}
diff --git a/librewolf.cfg.patch b/librewolf.cfg.patch
new file mode 100644
index 0000000..8dcafe7
--- /dev/null
+++ b/librewolf.cfg.patch
@@ -0,0 +1,168 @@
+diff --git a/librewolf.cfg b/librewolf.cfg
+index d7a6ff6..ee15dca 100644
+--- a/librewolf.cfg
++++ b/librewolf.cfg
+@@ -93,11 +93,11 @@ defaultPref("extensions.enabledAddons", "librefox.http.watcher.tor%40intika.be:2
+ // User Settings : Cookies settings
+ // --------------------------------
+
+-lockPref("network.cookie.cookieBehavior", 1);
+-lockPref("network.cookie.lifetimePolicy", 2);
++defaultPref("network.cookie.cookieBehavior", 1);
++defaultPref("network.cookie.lifetimePolicy", 0);
+ lockPref("network.cookie.same-site.enabled", true);
+ lockPref("network.cookie.leave-secure-alone", true);
+-lockPref("network.cookie.thirdparty.sessionOnly", true);
++defaultPref("network.cookie.thirdparty.sessionOnly", true);
+ lockPref("network.cookie.thirdparty.nonsecureSessionOnly", true);
+
+ // -----------------------------------
+@@ -161,6 +161,8 @@ defaultPref("privacy.sanitize.timeSpan", 0);
+ defaultPref("browser.formfill.enable", false);
+ defaultPref("privacy.sanitize.sanitizeOnShutdown", true);
+ defaultPref("places.history.enabled", false);
++// w.r. to issue #54
++defaultPref("places.history.expiration.max_pages", 2147483647)
+ defaultPref("privacy.history.custom", true);
+ //defaultPref("privacy.cpd.openWindows", true); // Clear session data
+ //defaultPref("privacy.clearOnShutdown.openWindows", true);
+@@ -179,10 +181,10 @@ lockPref("browser.sessionstore.interval", 60000);
+ // User Settings : Autofill settings
+ // ---------------------------------
+
+-lockPref("extensions.formautofill.addresses.enabled", false);
+-lockPref("extensions.formautofill.available", "off");
+-lockPref("extensions.formautofill.creditCards.enabled", false);
+-lockPref("extensions.formautofill.heuristics.enabled", false);
++defaultPref("extensions.formautofill.addresses.enabled", false);
++defaultPref("extensions.formautofill.available", "off");
++defaultPref("extensions.formautofill.creditCards.enabled", false);
++defaultPref("extensions.formautofill.heuristics.enabled", false);
+
+ lockPref("signon.autofillForms", false);
+ lockPref("signon.autofillForms.http", false);
+@@ -349,8 +351,8 @@ lockPref("dom.w3c_pointer_events.enabled", false);
+ // Bench Diff : +0/5000
+ // >>>>>>>>>>>>>>>>>>>>
+
+-lockPref("privacy.resistFingerprinting", true);
+-lockPref("privacy.resistFingerprinting.block_mozAddonManager", true);
++defaultPref("privacy.resistFingerprinting", true);
++defaultPref("privacy.resistFingerprinting.block_mozAddonManager", true);
+
+ // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ // Section : Locale/Time/UserAgent
+@@ -360,12 +362,12 @@ lockPref("privacy.resistFingerprinting.block_mozAddonManager", true);
+ lockPref("dom.forms.datetime", false);
+ lockPref("javascript.use_us_english_locale", true);
+ lockPref("intl.regional_prefs.use_os_locales", false);
+-lockPref("intl.locale.requested", "en-US");
+-lockPref("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0, 45");
+-lockPref("general.appname.override", "Netscape");
+-lockPref("general.appversion.override", "5.0 (Windows)");
+-lockPref("general.platform.override", "Win32");
+-lockPref("general.oscpu.override", "Windows NT 6.1");
++defaultPref("intl.locale.requested", "en-US");
++defaultPref("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; rv:45.0) Gecko/20100101 Firefox/45.0, 45");
++defaultPref("general.appname.override", "Netscape");
++defaultPref("general.appversion.override", "5.0 (Windows)");
++defaultPref("general.platform.override", "Win32");
++defaultPref("general.oscpu.override", "Windows NT 6.1");
+
+ // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+ // Section : Ghacks-user Selection
+@@ -469,7 +471,8 @@ lockPref("extensions.webextensions.identity.redirectDomain", "");
+ // Pref : CSP Settings For Extensions I/II : Extension Firewall Feature
+ // Uncomment to disable network for the extensions
+ // Enable-Firewall-Feature-In-The-Next-Line extensions-firewall >>>>>>
+-lockPref("extensions.webextensions.base-content-security-policy", "default-src 'self' moz-extension: blob: filesystem: 'unsafe-eval' 'unsafe-inline'; script-src 'self' moz-extension: blob: filesystem: 'unsafe-eval' 'unsafe-inline'; object-src 'self' moz-extension: blob: filesystem:;");
++defaultPref("extensions.webextensions.base-content-security-policy", "script-src 'self' https://* moz-extension: blob: filesystem: 'unsafe-eval' 'unsafe-inline'; object-src 'self' https://* moz-extension: blob: filesystem:;");
++// lockPref("extensions.webextensions.base-content-security-policy", "default-src 'self' moz-extension: blob: filesystem: 'unsafe-eval' 'unsafe-inline'; script-src 'self' moz-extension: blob: filesystem: 'unsafe-eval' 'unsafe-inline'; object-src 'self' moz-extension: blob: filesystem:;");
+
+ // Pref : CSP Settings For Extensions II/II : Extension Firewall Feature
+ // This value is applied after the first one (just ignore this)
+@@ -811,22 +814,22 @@ lockPref("extensions.getAddons.compatOverides.url", "");
+ // https://services.addons.mozilla.org/api/v3/addons/compat-override/?guid=%IDS%&lang=%LOCALE%
+
+ // Pref :
+-lockPref("extensions.getAddons.get.url", "");
++defaultPref("extensions.getAddons.get.url", "https://services.addons.mozilla.org/api/v3/addons/search/?guid=%IDS%&lang=%LOCALE%");
+ // Default Value
+ // https://services.addons.mozilla.org/api/v3/addons/search/?guid=%IDS%&lang=%LOCALE%
+
+ // Pref :
+-lockPref("extensions.getAddons.langpacks.url", "");
++defaultPref("extensions.getAddons.langpacks.url", "https://services.addons.mozilla.org/api/v3/addons/language-tools/?app=firefox&type=language&appversion=%VERSION%");
+ // Default Value
+ // https://services.addons.mozilla.org/api/v3/addons/language-tools/?app=firefox&type=language&appversion=%VERSION%
+
+ // Pref :
+-lockPref("extensions.getAddons.link.url", "");
++defaultPref("extensions.getAddons.link.url", "https://addons.mozilla.org/%LOCALE%/firefox/");
+ // Default Value
+ // https://addons.mozilla.org/%LOCALE%/firefox/
+
+ // Pref :
+-lockPref("extensions.getAddons.search.browseURL", "");
++defaultPref("extensions.getAddons.search.browseURL", "https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%&platform=%OS%&appver=%VERSION%");
+ // Default Value
+ // https://addons.mozilla.org/%LOCALE%/firefox/search?q=%TERMS%&platform=%OS%&appver=%VERSION%
+
+@@ -861,7 +864,7 @@ lockPref("browser.newtabpage.activity-stream.fxaccounts.endpoint", "");
+ // https://accounts.firefox.com/
+
+ // Pref :
+-lockPref("extensions.update.url", "");
++defaultPref("extensions.update.url", "https://versioncheck.addons.mozilla.org/update/VersionCheck.php?reqVersion=REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
+ // Default Value
+ // https://versioncheck.addons.mozilla.org/update/VersionCheck.php?reqVersion=
+ // %REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=
+@@ -1457,7 +1460,7 @@ lockPref("app.releaseNotesURL", "");
+
+ // Pref :
+ lockPref("app.update.auto", false);
+-lockPref("extensions.update.autoUpdateDefault", false);
++defaultPref("extensions.update.autoUpdateDefault", false);
+ lockPref("app.update.staging.enabled", false);
+ lockPref("app.update.silent", false);
+ lockPref("app.update.lastUpdateTime.telemetry_modules_ping", 0);
+@@ -1570,10 +1573,10 @@ lockPref("extensions.blocklist.itemURL", "");
+ lockPref("extensions.blocklist.url", "");
+
+ // Pref :
+-lockPref("extensions.update.background.url", "");
++defaultPref("extensions.update.background.url", "https://versioncheck-bg.addons.mozilla.org/update/VersionCheck.php?reqVersion=%REQ_VERSION%&id=%ITEM_ID%&version=%ITEM_VERSION%&maxAppVersion=%ITEM_MAXAPPVERSION%&status=%ITEM_STATUS%&appID=%APP_ID%&appVersion=%APP_VERSION%&appOS=%APP_OS%&appABI=%APP_ABI%&locale=%APP_LOCALE%&currentAppVersion=%CURRENT_APP_VERSION%&updateType=%UPDATE_TYPE%&compatMode=%COMPATIBILITY_MODE%");
+
+ // Pref :
+-lockPref("extensions.getAddons.showPane", false);
++defaultPref("extensions.getAddons.showPane", false);
+
+ // Pref :
+ lockPref("extensions.webservice.discoverURL", "");
+@@ -1865,7 +1868,7 @@ lockPref("security.dialog_enable_delay", 700);
+
+ // Pref : Opt-out of add-on metadata updates
+ // https://blog.mozilla.org/addons/how-to-opt-out-of-add-on-metadata-updates/
+-lockPref("extensions.getAddons.cache.enabled", false);
++defaultPref("extensions.getAddons.cache.enabled", false);
+
+ // Pref : Opt-out of theme (Persona) updates
+ // https://support.mozilla.org/t5/Firefox/how-do-I-prevent-autoamtic-updates-in-a-50-user-environment/td-p/144287
+@@ -1898,7 +1901,7 @@ lockPref("plugin.sessionPermissionNow.intervalInMinutes", 0);
+
+ // Pref : Update addons automatically
+ // https://blog.mozilla.org/addons/how-to-turn-off-add-on-updates/
+-lockPref("extensions.update.enabled", false);
++defaultPref("extensions.update.enabled", false);
+
+ // Pref : Enable add-on and certificate blocklists (OneCRL) from Mozilla
+ // Updated at interval defined in extensions.blocklist.interval (default: 86400)
+@@ -2622,4 +2625,7 @@ lockPref("security.tls.unrestricted_rc4_fallback", false);
+ //lockPref("toolkit.telemetry.unifiedIsOptIn", true);
+ //lockPref("ui.key.menuAccessKey", 0);
+ //lockPref("view_source.tab", false);
+-lockPref("xpinstall.signatures.required", false);
++defaultPref("xpinstall.signatures.required", true);
++
++// #11/#68, sounds reasonable
++defaultPref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
diff --git a/librewolf.desktop b/librewolf.desktop
new file mode 100644
index 0000000..221db66
--- /dev/null
+++ b/librewolf.desktop
@@ -0,0 +1,340 @@
+[Desktop Entry]
+Version=1.0
+Name=LibreWolf
+GenericName=Web Browser
+GenericName[ar]=متصفح ويب
+GenericName[ast]=Restolador Web
+GenericName[bn]=ওয়েব ব্রাউজার
+GenericName[ca]=Navegador web
+GenericName[cs]=Webový prohlížeč
+GenericName[da]=Webbrowser
+GenericName[de]=Webbrowser
+GenericName[el]=Περιηγητής διαδικτύου
+GenericName[es]=Navegador web
+GenericName[et]=Veebibrauser
+GenericName[fa]=مرورگر اینترنتی
+GenericName[fi]=WWW-selain
+GenericName[fr]=Navigateur Web
+GenericName[gl]=Navegador Web
+GenericName[he]=דפדפן אינטרנט
+GenericName[hr]=Web preglednik
+GenericName[hu]=Webböngésző
+GenericName[it]=Browser web
+GenericName[ja]=ウェブ・ブラウザ
+GenericName[ko]=웹 브라우저
+GenericName[ku]=Geroka torê
+GenericName[lt]=Interneto naršyklė
+GenericName[nb]=Nettleser
+GenericName[nl]=Webbrowser
+GenericName[nn]=Nettlesar
+GenericName[no]=Nettleser
+GenericName[pl]=Przeglądarka WWW
+GenericName[pt]=Navegador Web
+GenericName[pt_BR]=Navegador Web
+GenericName[ro]=Navigator Internet
+GenericName[ru]=Веб-браузер
+GenericName[sk]=Internetový prehliadač
+GenericName[sl]=Spletni brskalnik
+GenericName[sv]=Webbläsare
+GenericName[tr]=Web Tarayıcı
+GenericName[ug]=توركۆرگۈ
+GenericName[uk]=Веб-браузер
+GenericName[vi]=Trình duyệt Web
+GenericName[zh_CN]=网络浏览器
+GenericName[zh_TW]=網路瀏覽器
+Comment=Browse the World Wide Web
+Comment[ar]=تصفح الشبكة العنكبوتية العالمية
+Comment[ast]=Restola pela Rede
+Comment[bn]=ইন্টারনেট ব্রাউজ করুন
+Comment[ca]=Navegueu per el web
+Comment[cs]=Prohlížení stránek World Wide Webu
+Comment[da]=Surf på internettet
+Comment[de]=Im Internet surfen
+Comment[el]=Μπορείτε να περιηγηθείτε στο διαδίκτυο (Web)
+Comment[es]=Navegue por la web
+Comment[et]=Lehitse veebi
+Comment[fa]=صفحات شبکه جهانی اینترنت را مرور نمایید
+Comment[fi]=Selaa Internetin WWW-sivuja
+Comment[fr]=Naviguer sur le Web
+Comment[gl]=Navegar pola rede
+Comment[he]=גלישה ברחבי האינטרנט
+Comment[hr]=Pretražite web
+Comment[hu]=A világháló böngészése
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧します
+Comment[ko]=웹을 돌아 다닙니다
+Comment[ku]=Li torê bigere
+Comment[lt]=Naršykite internete
+Comment[nb]=Surf på nettet
+Comment[nl]=Verken het internet
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pl]=Przeglądanie stron WWW
+Comment[pt]=Navegue na Internet
+Comment[pt_BR]=Navegue na Internet
+Comment[ro]=Navigați pe Internet
+Comment[ru]=Доступ в Интернет
+Comment[sk]=Prehliadanie internetu
+Comment[sl]=Brskajte po spletu
+Comment[sv]=Surfa på webben
+Comment[tr]=İnternet'te Gezinin
+Comment[ug]=دۇنيادىكى توربەتلەرنى كۆرگىلى بولىدۇ
+Comment[uk]=Перегляд сторінок Інтернету
+Comment[vi]=Để duyệt các trang web
+Comment[zh_CN]=浏览互联网
+Comment[zh_TW]=瀏覽網際網路
+Keywords=Internet;WWW;Browser;Web;Explorer
+Keywords[ar]=انترنت;إنترنت;متصفح;ويب;وب
+Keywords[ast]=Internet;WWW;Restolador;Web;Esplorador
+Keywords[ca]=Internet;WWW;Navegador;Web;Explorador;Explorer
+Keywords[cs]=Internet;WWW;Prohlížeč;Web;Explorer
+Keywords[da]=Internet;Internettet;WWW;Browser;Browse;Web;Surf;Nettet
+Keywords[de]=Internet;WWW;Browser;Web;Explorer;Webseite;Site;surfen;online;browsen
+Keywords[el]=Internet;WWW;Browser;Web;Explorer;Διαδίκτυο;Περιηγητής;LibreWolf;Φιρεφοχ;Ιντερνετ
+Keywords[es]=Explorador;Internet;WWW
+Keywords[fi]=Internet;WWW;Browser;Web;Explorer;selain;Internet-selain;internetselain;verkkoselain;netti;surffaa
+Keywords[fr]=Internet;WWW;Browser;Web;Explorer;Fureteur;Surfer;Navigateur
+Keywords[he]=דפדפן;אינטרנט;רשת;אתרים;אתר;פיירפוקס;מוזילה;
+Keywords[hr]=Internet;WWW;preglednik;Web
+Keywords[hu]=Internet;WWW;Böngésző;Web;Háló;Net;Explorer
+Keywords[it]=Internet;WWW;Browser;Web;Navigatore
+Keywords[is]=Internet;WWW;Vafri;Vefur;Netvafri;Flakk
+Keywords[ja]=Internet;WWW;Web;インターネット;ブラウザ;ウェブ;エクスプローラ
+Keywords[nb]=Internett;WWW;Nettleser;Explorer;Web;Browser;Nettside
+Keywords[nl]=Internet;WWW;Browser;Web;Explorer;Verkenner;Website;Surfen;Online
+Keywords[pt]=Internet;WWW;Browser;Web;Explorador;Navegador
+Keywords[pt_BR]=Internet;WWW;Browser;Web;Explorador;Navegador
+Keywords[ru]=Internet;WWW;Browser;Web;Explorer;интернет;браузер;веб;файрфокс;огнелис
+Keywords[sk]=Internet;WWW;Prehliadač;Web;Explorer
+Keywords[sl]=Internet;WWW;Browser;Web;Explorer;Brskalnik;Splet
+Keywords[tr]=İnternet;WWW;Tarayıcı;Web;Gezgin;Web sitesi;Site;sörf;çevrimiçi;tara
+Keywords[uk]=Internet;WWW;Browser;Web;Explorer;Інтернет;мережа;переглядач;оглядач;браузер;веб;файрфокс;вогнелис;перегляд
+Keywords[vi]=Internet;WWW;Browser;Web;Explorer;Trình duyệt;Trang web
+Keywords[zh_CN]=Internet;WWW;Browser;Web;Explorer;网页;浏览;上网;火狐;LibreWolf;ff;互联网;网站;
+Keywords[zh_TW]=Internet;WWW;Browser;Web;Explorer;網際網路;網路;瀏覽器;上網;網頁;火狐
+Exec=/usr/lib/librewolf/librewolf %u
+Icon=librewolf
+Terminal=false
+X-MultipleArgs=false
+Type=Application
+MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;
+StartupNotify=true
+StartupWMClass=LibreWolf
+Categories=Network;WebBrowser;
+Actions=new-window;new-private-window;
+
+[Desktop Action new-window]
+Name=New Window
+Name[ach]=Dirica manyen
+Name[af]=Nuwe venster
+Name[an]=Nueva finestra
+Name[ar]=نافذة جديدة
+Name[as]=নতুন উইন্ডো
+Name[ast]=Ventana nueva
+Name[az]=Yeni Pəncərə
+Name[be]=Новае акно
+Name[bg]=Нов прозорец
+Name[bn_BD]=নতুন উইন্ডো (N)
+Name[bn_IN]=নতুন উইন্ডো
+Name[br]=Prenestr nevez
+Name[brx]=गोदान उइन्ड'(N)
+Name[bs]=Novi prozor
+Name[ca]=Finestra nova
+Name[cak]=K'ak'a' tzuwäch
+Name[cs]=Nové okno
+Name[cy]=Ffenestr Newydd
+Name[da]=Nyt vindue
+Name[de]=Neues Fenster
+Name[dsb]=Nowe wokno
+Name[el]=Νέο παράθυρο
+Name[en_GB]=New Window
+Name[en_US]=New Window
+Name[en_ZA]=New Window
+Name[eo]=Nova fenestro
+Name[es_AR]=Nueva ventana
+Name[es_CL]=Nueva ventana
+Name[es_ES]=Nueva ventana
+Name[es_MX]=Nueva ventana
+Name[et]=Uus aken
+Name[eu]=Leiho berria
+Name[fa]=پنجره جدید
+Name[ff]=Henorde Hesere
+Name[fi]=Uusi ikkuna
+Name[fr]=Nouvelle fenêtre
+Name[fy_NL]=Nij finster
+Name[ga_IE]=Fuinneog Nua
+Name[gd]=Uinneag ùr
+Name[gl]=Nova xanela
+Name[gn]=Ovetã pyahu
+Name[gu_IN]=નવી વિન્ડો
+Name[he]=חלון חדש
+Name[hi_IN]=नया विंडो
+Name[hr]=Novi prozor
+Name[hsb]=Nowe wokno
+Name[hu]=Új ablak
+Name[hy_AM]=Նոր Պատուհան
+Name[id]=Jendela Baru
+Name[is]=Nýr gluggi
+Name[it]=Nuova finestra
+Name[ja]=新しいウィンドウ
+Name[ja_JP-mac]=新規ウインドウ
+Name[ka]=ახალი ფანჯარა
+Name[kk]=Жаңа терезе
+Name[km]=បង្អួចថ្មី
+Name[kn]=ಹೊಸ ಕಿಟಕಿ
+Name[ko]=새 창
+Name[kok]=नवें जनेल
+Name[ks]=نئئ وِنڈو
+Name[lij]=Neuvo barcon
+Name[lo]=ຫນ້າຕ່າງໃຫມ່
+Name[lt]=Naujas langas
+Name[ltg]=Jauns lūgs
+Name[lv]=Jauns logs
+Name[mai]=नव विंडो
+Name[mk]=Нов прозорец
+Name[ml]=പുതിയ ജാലകം
+Name[mr]=नवीन पटल
+Name[ms]=Tetingkap Baru
+Name[my]=ဝင်းဒိုးအသစ်
+Name[nb_NO]=Nytt vindu
+Name[ne_NP]=नयाँ सञ्झ्याल
+Name[nl]=Nieuw venster
+Name[nn_NO]=Nytt vindauge
+Name[or]=ନୂତନ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਵਿੰਡੋ
+Name[pl]=Nowe okno
+Name[pt_BR]=Nova janela
+Name[pt_PT]=Nova janela
+Name[rm]=Nova fanestra
+Name[ro]=Fereastră nouă
+Name[ru]=Новое окно
+Name[sat]=नावा विंडो (N)
+Name[si]=නව කවුළුවක්
+Name[sk]=Nové okno
+Name[sl]=Novo okno
+Name[son]=Zanfun taaga
+Name[sq]=Dritare e Re
+Name[sr]=Нови прозор
+Name[sv_SE]=Nytt fönster
+Name[ta]=புதிய சாளரம்
+Name[te]=కొత్త విండో
+Name[th]=หน้าต่างใหม่
+Name[tr]=Yeni pencere
+Name[tsz]=Eraatarakua jimpani
+Name[uk]=Нове вікно
+Name[ur]=نیا دریچہ
+Name[uz]=Yangi oyna
+Name[vi]=Cửa sổ mới
+Name[wo]=Palanteer bu bees
+Name[xh]=Ifestile entsha
+Name[zh_CN]=新建窗口
+Name[zh_TW]=開新視窗
+Exec=/usr/lib/librewolf/librewolf --new-window %u
+
+[Desktop Action new-private-window]
+Name=New Private Window
+Name[ach]=Dirica manyen me mung
+Name[af]=Nuwe privaatvenster
+Name[an]=Nueva finestra privada
+Name[ar]=نافذة خاصة جديدة
+Name[as]=নতুন ব্যক্তিগত উইন্ডো
+Name[ast]=Ventana privada nueva
+Name[az]=Yeni Məxfi Pəncərə
+Name[be]=Новае акно адасаблення
+Name[bg]=Нов прозорец за поверително сърфиране
+Name[bn_BD]=নতুন ব্যক্তিগত উইন্ডো
+Name[bn_IN]=নতুন ব্যক্তিগত উইন্ডো
+Name[br]=Prenestr merdeiñ prevez nevez
+Name[brx]=गोदान प्राइभेट उइन्ड'
+Name[bs]=Novi privatni prozor
+Name[ca]=Finestra privada nova
+Name[cak]=K'ak'a' ichinan tzuwäch
+Name[cs]=Nové anonymní okno
+Name[cy]=Ffenestr Breifat Newydd
+Name[da]=Nyt privat vindue
+Name[de]=Neues privates Fenster
+Name[dsb]=Nowe priwatne wokno
+Name[el]=Νέο παράθυρο ιδιωτικής περιήγησης
+Name[en_GB]=New Private Window
+Name[en_US]=New Private Window
+Name[en_ZA]=New Private Window
+Name[eo]=Nova privata fenestro
+Name[es_AR]=Nueva ventana privada
+Name[es_CL]=Nueva ventana privada
+Name[es_ES]=Nueva ventana privada
+Name[es_MX]=Nueva ventana privada
+Name[et]=Uus privaatne aken
+Name[eu]=Leiho pribatu berria
+Name[fa]=پنجره ناشناس جدید
+Name[ff]=Henorde Suturo Hesere
+Name[fi]=Uusi yksityinen ikkuna
+Name[fr]=Nouvelle fenêtre de navigation privée
+Name[fy_NL]=Nij priveefinster
+Name[ga_IE]=Fuinneog Nua Phríobháideach
+Name[gd]=Uinneag phrìobhaideach ùr
+Name[gl]=Nova xanela privada
+Name[gn]=Ovetã ñemi pyahu
+Name[gu_IN]=નવી ખાનગી વિન્ડો
+Name[he]=חלון פרטי חדש
+Name[hi_IN]=नयी निजी विंडो
+Name[hr]=Novi privatni prozor
+Name[hsb]=Nowe priwatne wokno
+Name[hu]=Új privát ablak
+Name[hy_AM]=Սկսել Գաղտնի դիտարկում
+Name[id]=Jendela Mode Pribadi Baru
+Name[is]=Nýr huliðsgluggi
+Name[it]=Nuova finestra anonima
+Name[ja]=新しいプライベートウィンドウ
+Name[ja_JP-mac]=新規プライベートウインドウ
+Name[ka]=ახალი პირადი ფანჯარა
+Name[kk]=Жаңа жекелік терезе
+Name[km]=បង្អួចឯកជនថ្មី
+Name[kn]=ಹೊಸ ಖಾಸಗಿ ಕಿಟಕಿ
+Name[ko]=새 사생활 보호 모드
+Name[kok]=नवो खाजगी विंडो
+Name[ks]=نْو پرایوٹ وینڈو
+Name[lij]=Nêuvo barcón privòu
+Name[lo]=ເປີດຫນ້າຕ່າງສວນຕົວຂື້ນມາໃຫມ່
+Name[lt]=Naujas privataus naršymo langas
+Name[ltg]=Jauns privatais lūgs
+Name[lv]=Jauns privātais logs
+Name[mai]=नया निज विंडो (W)
+Name[mk]=Нов приватен прозорец
+Name[ml]=പുതിയ സ്വകാര്യ ജാലകം
+Name[mr]=नवीन वैयक्तिक पटल
+Name[ms]=Tetingkap Persendirian Baharu
+Name[my]=New Private Window
+Name[nb_NO]=Nytt privat vindu
+Name[ne_NP]=नयाँ निजी सञ्झ्याल
+Name[nl]=Nieuw privévenster
+Name[nn_NO]=Nytt privat vindauge
+Name[or]=ନୂତନ ବ୍ୟକ୍ତିଗତ ୱିଣ୍ଡୋ
+Name[pa_IN]=ਨਵੀਂ ਪ੍ਰਾਈਵੇਟ ਵਿੰਡੋ
+Name[pl]=Nowe okno prywatne
+Name[pt_BR]=Nova janela privativa
+Name[pt_PT]=Nova janela privada
+Name[rm]=Nova fanestra privata
+Name[ro]=Fereastră privată nouă
+Name[ru]=Новое приватное окно
+Name[sat]=नावा निजेराक् विंडो (W )
+Name[si]=නව පුද්ගලික කවුළුව (W)
+Name[sk]=Nové okno v režime Súkromné prehliadanie
+Name[sl]=Novo zasebno okno
+Name[son]=Sutura zanfun taaga
+Name[sq]=Dritare e Re Private
+Name[sr]=Нови приватан прозор
+Name[sv_SE]=Nytt privat fönster
+Name[ta]=புதிய தனிப்பட்ட சாளரம்
+Name[te]=కొత్త ఆంతరంగిక విండో
+Name[th]=หน้าต่างส่วนตัวใหม่
+Name[tr]=Yeni gizli pencere
+Name[tsz]=Juchiiti eraatarakua jimpani
+Name[uk]=Приватне вікно
+Name[ur]=نیا نجی دریچہ
+Name[uz]=Yangi maxfiy oyna
+Name[vi]=Cửa sổ riêng tư mới
+Name[wo]=Panlanteeru biir bu bees
+Name[xh]=Ifestile yangasese entsha
+Name[zh_CN]=新建隐私浏览窗口
+Name[zh_TW]=新增隱私視窗
+Exec=/usr/lib/librewolf/librewolf --private-window %u
diff --git a/librewolf.install b/librewolf.install
new file mode 100644
index 0000000..9acf7a4
--- /dev/null
+++ b/librewolf.install
@@ -0,0 +1,13 @@
+post_install() {
+ echo ">> If you want to reduce potential privacy leaks even further, you should consider"
+ echo ">> clearing a few settings required for updating/searching extensions:"
+ echo ">> extensions.getAddons.get.url"
+ echo ">> extensions.getAddons.langpacks.url"
+ echo ">> extensions.getAddons.link.url"
+ echo ">> extensions.getAddons.search.browseURL"
+ echo ">> extensions.update.url"
+ echo ">> extensions.update.background.url"
+ echo ">> If you do wish to install extensions the 'regular way',"
+ echo ">> a few more tweaks might be needed."
+ echo ">> I've kept the relevant settings unlocked for that specific reason."
+}
diff --git a/scripts/01_arch_build.sh b/scripts/01_arch_build.sh
new file mode 100755
index 0000000..e8d428b
--- /dev/null
+++ b/scripts/01_arch_build.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+pacman --noconfirm -Syu --needed base-devel
+# this is a very ugly fix for recent makepkg-5.1-chmod-shenanigans, which mess up the build process in docker
+sed -E -i 's/^chmod a-s \"\$BUILDDIR\"$/# chmod a-s \"\$BUILDDIR\"/' `which makepkg`
+echo 'nobody ALL=(ALL) NOPASSWD: /usr/bin/pacman' >> /etc/sudoers
+mkdir -p /home/nobody && chown -R nobody /home/nobody
+usermod -d /home/nobody nobody
+# we need to un-expire the account, otherwise PAM will complain
+usermod -e '' nobody
+chown -R nobody .
+# makepkg will not run as root
+sudo -u nobody -E -H makepkg --noconfirm --nosign --syncdeps --cleanbuild --skippgpcheck
diff --git a/scripts/02_configure_tarball.sh b/scripts/02_configure_tarball.sh
new file mode 100755
index 0000000..8657375
--- /dev/null
+++ b/scripts/02_configure_tarball.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+set -e
+
+printf "\n\n---------------- prepare package for other distros ----------------\n"
+
+# Setup Script Variables
+
+# use $CI_PROJECT_DIR unless not in CI, then assign script path
+CI_PROJECT_DIR=${CI_PROJECT_DIR:-$(realpath $(dirname $0)/../)}
+OUTPUT_TARBALL=$CI_PROJECT_DIR/LibreWolf.${CARCH}.tar.bz2
+SOURCE_CODE_BINARY_TARBALL_LOCATION="$CI_PROJECT_DIR/src/firefox-*/obj*/dist/librewolf*.tar.bz2"
+EXTRACTED_TARBALL_FOLDER=$CI_PROJECT_DIR/librewolf_unpacked/librewolf
+
+# Prevents build from breaking in CI/CD environments
+export SHELL=/bin/bash
+
+# Moves the packaged tarball to the specified location
+printf "\nMoving Binary Tarball to output location\n"
+mv $SOURCE_CODE_BINARY_TARBALL_LOCATION $OUTPUT_TARBALL
+
+# Extracts the binary tarball
+printf "\nExtracting librewolf binary tarball\n"
+mkdir librewolf_unpacked
+tar -xf $OUTPUT_TARBALL -C librewolf_unpacked
+
+# Adds the librefox config files to the packaged tarball
+printf "\nCopying librewolf settings to extracted binary tarball\n"
+
+cp -r $CI_PROJECT_DIR/src/settings $EXTRACTED_TARBALL_FOLDER/settings
+cp $CI_PROJECT_DIR/content/toggle-settings.sh $EXTRACTED_TARBALL_FOLDER/settings
+cp $CI_PROJECT_DIR/content/launch_librewolf.sh $EXTRACTED_TARBALL_FOLDER/launch_librewolf.sh
+
+# Repacks the binary tarball
+printf "\nRecompressing binary tarball\n"
+tar -jvcf $OUTPUT_TARBALL -C $EXTRACTED_TARBALL_FOLDER .
bgstack15