install userChrome.css using autoconfig instead of schell scripts (MR 2)
Firefox can run an autoconfig Javascript on startup, which can be used to install and update userChrome.css, both when creating a new profile and using a pre-existing one. This removes the need for a wrapper script and related complications (changes to $PATH, different processing for new and pre-existing profiles...) Co-Authored-By: Oliver Smith <ollieparanoid@postmarketos.org>
This commit is contained in:
parent
08e2288138
commit
712b850c3b
5 changed files with 39 additions and 46 deletions
6
Makefile
6
Makefile
|
@ -27,13 +27,11 @@ install: all
|
||||||
"$(DESTDIR)/etc/firefox/policies/policies.json"
|
"$(DESTDIR)/etc/firefox/policies/policies.json"
|
||||||
install -Dm644 src/prefs.js \
|
install -Dm644 src/prefs.js \
|
||||||
"$(DESTDIR)/$(FIREFOX_DIR)/defaults/pref/mobile-config.js"
|
"$(DESTDIR)/$(FIREFOX_DIR)/defaults/pref/mobile-config.js"
|
||||||
|
install -Dm644 src/mobile-config-autoconfig.js \
|
||||||
|
"$(DESTDIR)/$(FIREFOX_DIR)/mobile-config-autoconfig.js"
|
||||||
install -Dm644 "out/home.html" \
|
install -Dm644 "out/home.html" \
|
||||||
"$(DESTDIR)/usr/share/mobile-config-firefox/home.html"
|
"$(DESTDIR)/usr/share/mobile-config-firefox/home.html"
|
||||||
install -Dm644 "out/userChrome.css" \
|
install -Dm644 "out/userChrome.css" \
|
||||||
"$(DESTDIR)/etc/mobile-config-firefox/userChrome.css"
|
"$(DESTDIR)/etc/mobile-config-firefox/userChrome.css"
|
||||||
install -Dm755 "src/mobile-config-firefox.sh" \
|
|
||||||
"$(DESTDIR)/usr/mobile-config/bin/firefox"
|
|
||||||
install -Dm755 "src/mobile-config-path.sh" \
|
|
||||||
"$(DESTDIR)/etc/profile.d/mobile-config-path.sh"
|
|
||||||
|
|
||||||
.PHONY: all clean install
|
.PHONY: all clean install
|
||||||
|
|
33
src/mobile-config-autoconfig.js
Normal file
33
src/mobile-config-autoconfig.js
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
// Copyright 2020 Arnaud Ferraris, Oliver Smith
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
// 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");
|
||||||
|
|
||||||
|
// Create <profile>/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 <profile>/chrome/ and in /etc/
|
||||||
|
var chromeFile = chromeDir.clone();
|
||||||
|
chromeFile.append("userChrome.css");
|
||||||
|
var defaultChrome = new FileUtils.File("/etc/mobile-config-firefox/userChrome.css");
|
||||||
|
|
||||||
|
// 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 <profile>/chrome/
|
||||||
|
if (!chromeFile.exists()) {
|
||||||
|
defaultChrome.copyTo(chromeDir, "userChrome.css");
|
||||||
|
}
|
|
@ -1,39 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
# Copyright 2020 Oliver Smith
|
|
||||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
||||||
|
|
||||||
# Create chrome/userChrome.css symlink in a firefox profile dir
|
|
||||||
# $1: path to profile dir, e.g. "/home/user/.mozilla/firefox/asdf.default"
|
|
||||||
prepare_profile() {
|
|
||||||
mkdir -p "$1/chrome"
|
|
||||||
if ! [ -e "$1/chrome/userChrome.css" ]; then
|
|
||||||
ln -sv /etc/mobile-config-firefox/userChrome.css \
|
|
||||||
"$1/chrome/userChrome.css"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ -e ~/.mozilla/firefox/profiles.ini ]; then
|
|
||||||
# Firefox was started without this wrapper and created profiles.ini.
|
|
||||||
# Add the userChrome.css symlink to all existing profiles, then let
|
|
||||||
# firefox run with the default profile.
|
|
||||||
|
|
||||||
for profiledir in ~/.mozilla/firefox/*/; do
|
|
||||||
if ! [ -e "$profiledir/prefs.js" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
prepare_profile "$profiledir"
|
|
||||||
done
|
|
||||||
|
|
||||||
exec /usr/bin/firefox "$@"
|
|
||||||
else
|
|
||||||
# Firefox was not started without this wrapper. Create a profile dir
|
|
||||||
# called "firefox.default" if it does not exist yet, and add the
|
|
||||||
# userChrome.css symlink. Let firefox use this profile. It will not
|
|
||||||
# create the profiles.ini file.
|
|
||||||
|
|
||||||
profiledir=~/.mozilla/firefox/firefox.default
|
|
||||||
prepare_profile "$profiledir"
|
|
||||||
|
|
||||||
exec /usr/bin/firefox --profile "$profiledir" "$@"
|
|
||||||
fi
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
export PATH="/usr/local/bin:/usr/mobile-config/bin:$PATH"
|
|
|
@ -1,6 +1,10 @@
|
||||||
// Copyright 2020 Oliver Smith, Martijn Braam
|
// Copyright 2020 Oliver Smith, Martijn Braam
|
||||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
// Set up autoconfig (we use it to copy/update userChrome.css into profile dir)
|
||||||
|
pref('general.config.filename', "mobile-config-autoconfig.js");
|
||||||
|
pref('general.config.obscure_value', 0);
|
||||||
|
|
||||||
// Select a mobile user agent for firefox (same as tor browser on android)
|
// Select a mobile user agent for firefox (same as tor browser on android)
|
||||||
pref('general.useragent.override', 'Mozilla/5.0 (Android 6.0; Mobile; rv:68.0) Gecko/20100101 Firefox/68.0');
|
pref('general.useragent.override', 'Mozilla/5.0 (Android 6.0; Mobile; rv:68.0) Gecko/20100101 Firefox/68.0');
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue