From 005c84e12a79f8f81e66e46ad8e081afef8ac411 Mon Sep 17 00:00:00 2001 From: Herwig Hochleitner Date: Tue, 27 Jun 2023 04:18:05 +0200 Subject: [PATCH] firefox-mobile: init (#206054) --- .../browsers/firefox/mobile-config.nix | 113 ++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 115 insertions(+) create mode 100644 pkgs/applications/networking/browsers/firefox/mobile-config.nix diff --git a/pkgs/applications/networking/browsers/firefox/mobile-config.nix b/pkgs/applications/networking/browsers/firefox/mobile-config.nix new file mode 100644 index 000000000000..6e43295697ea --- /dev/null +++ b/pkgs/applications/networking/browsers/firefox/mobile-config.nix @@ -0,0 +1,113 @@ +{ stdenv, lib, runCommand, fetchFromGitLab, wrapFirefox, firefox-unwrapped }: + +let + pkg = fetchFromGitLab { + owner = "postmarketOS"; + repo = "mobile-config-firefox"; + rev = "ff2f07873f4ebc6e220da0e9b9f04c69f451edda"; + sha256 = "sha256-8wRz8corz00+0qROMiOmZAddM4tjfmE91bx0+P8JNx4="; + }; + userChrome = runCommand "userChrome.css" {} '' + cat ${pkg}/src/userChrome/*.css > $out + ''; + userContent = runCommand "userContent.css" {} '' + cat ${pkg}/src/userContent/*.css > $out + ''; +in wrapFirefox firefox-unwrapped { + # extraPolicies = (lib.importJSON "${pkg}/src/policies.json").policies; + extraPoliciesFiles = [ "${pkg}/src/policies.json" ]; + extraPrefs = '' + // Copyright 2022 Arnaud Ferraris, Oliver Smith + // SPDX-License-Identifier: MPL-2.0 + + // This is a Firefox autoconfig file: + // https://support.mozilla.org/en-US/kb/customizing-firefox-using-autoconfig + + // Import custom userChrome.css on startup or new profile creation + const {classes: Cc, interfaces: Ci, utils: Cu} = Components; + Cu.import("resource://gre/modules/Services.jsm"); + Cu.import("resource://gre/modules/FileUtils.jsm"); + + var updated = false; + + // Create /chrome/ directory if not already present + var chromeDir = Services.dirsvc.get("ProfD", Ci.nsIFile); + chromeDir.append("chrome"); + if (!chromeDir.exists()) { + chromeDir.create(Ci.nsIFile.DIRECTORY_TYPE, FileUtils.PERMS_DIRECTORY); + } + + // Create nsIFile objects for userChrome.css in /chrome/ and in /etc/ + var chromeFile = chromeDir.clone(); + chromeFile.append("userChrome.css"); + var defaultChrome = new FileUtils.File("${userChrome}"); + + // No auto-upgrade. Should this be replaced with symlinking? + // // Remove the existing userChrome.css if older than the installed one + // if (chromeFile.exists() && defaultChrome.exists() && + // chromeFile.lastModifiedTime < defaultChrome.lastModifiedTime) { + // chromeFile.remove(false); + // } + + // Copy userChrome.css to /chrome/ + if (!chromeFile.exists()) { + defaultChrome.copyTo(chromeDir, "userChrome.css"); + updated = true; + } + + // Create nsIFile objects for userContent.css in /chrome/ and in /etc/ + var contentFile = chromeDir.clone(); + contentFile.append("userContent.css"); + var defaultContent = new FileUtils.File("${userContent}"); + + // No auto-upgrade. Should this be replaced with symlinking? + // // Remove the existing userContent.css if older than the installed one + // if (contentFile.exists() && defaultContent.exists() && + // contentFile.lastModifiedTime < defaultContent.lastModifiedTime) { + // contentFile.remove(false); + // } + + // Copy userContent.css to /chrome/ + if (!contentFile.exists()) { + defaultContent.copyTo(chromeDir, "userContent.css"); + updated = true; + } + + // Restart Firefox immediately if one of the files got updated + if (updated === true) { + var appStartup = Cc["@mozilla.org/toolkit/app-startup;1"].getService(Ci.nsIAppStartup); + appStartup.quit(Ci.nsIAppStartup.eForceQuit | Ci.nsIAppStartup.eRestart); + } + + defaultPref('general.useragent.override', 'Mozilla/5.0 (Android 11; Mobile; rv:96.0) Gecko/96.0 Firefox/96.0'); + defaultPref('browser.urlbar.suggest.topsites', false); + defaultPref('browser.urlbar.suggest.engines', false); + defaultPref('browser.newtabpage.enabled', true); + + // Enable android-style pinch-to-zoom + pref('dom.w3c.touch_events.enabled', true); + pref('apz.allow_zooming', true); + pref('apz.allow_double_tap_zooming', true); + + // Save vertical space by hiding the titlebar + pref('browser.tabs.inTitlebar', 1); + + // Disable search suggestions + pref('browser.search.suggest.enabled', false); + + // Empty new tab page: faster, less distractions + pref('browser.newtabpage.enabled', false); + + // Allow UI customizations with userChrome.css and userContent.css + pref('toolkit.legacyUserProfileCustomizations.stylesheets', true); + + // Select the entire URL with one click + pref('browser.urlbar.clickSelectsAll', true); + + // Disable cosmetic animations, save CPU + pref('toolkit.cosmeticAnimations.enabled', false); + + // Disable download animations, save CPU + pref('browser.download.animateNotifications', false); + ''; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0cae1ec5ec64..b85950f1e450 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -31082,6 +31082,8 @@ with pkgs; firefox-beta = wrapFirefox firefox-beta-unwrapped { }; firefox-devedition = wrapFirefox firefox-devedition-unwrapped { }; + firefox-mobile = callPackage ../applications/networking/browsers/firefox/mobile-config.nix { }; + firefox-esr = firefox-esr-102; firefox-esr-102 = wrapFirefox firefox-esr-102-unwrapped { };