Firefox already has an excellent cloud-based Sync system for sharing settings and browser history between computers — but perhaps you don’t want any of your data stored on remote servers; or you keep separate work and personal profiles; or you don’t want to have to set it up in several places (like short-lived virtual machines); or maybe you just like to keep all your settings in plain text files you can copy around.
I fall into several of those categories, but until recently, I didn’t know Firefox had a built-in solution.
In addition to the more well-known userChrome.css
and userContent.css
files (which can be used to control, respectively, the appearance of the
browser itself and the styling of pages you visit), Firefox also has a user.js
file to
define personal preferences and settings. Anything exposed in the UI, or via
the special about:config
page, can be set from here — and,
crucially, shared to different machines or profiles, without needing to click
through the UI to reconfigure anything.
The only tricky part is finding the name of the setting you want. Most
options are documented on this wiki page of
about:config
entries, but if it’s not there, a bit of hunting
in the about:config
page, or of searching online, usually reveals
what you need. Then, simply create a file named user.js
in the
root of your Firefox profile directory (which, on Linux, looks something like
~/.mozilla/firefox/<randomname>.default/
), and put a line
like this in it:
user_pref("name.of.setting", value);
You can also use this mechanism to save and share settings that aren't
exposed in the Preferences UI, without needing to remember and set cryptic
keywords in the about:config
page.
For example, to enable Firefox’s built-in tracking protection all the time, even when not in Private Browsing mode (which you can’t yet do through the GUI!), include this snippet:
// Use Tracking Protection mode everywhere, not just in Private Browsing
user_pref("privacy.trackingprotection.enabled", true);
Or, to permanently clear out the junk that gets added at the top and bottom
of every page you print out (like date & time, page number, etc.), set all of
print.print_headerleft
, print.print_headercenter
,
print.print_headerright
, print.print_footerleft
,
print.print_footercenter
, and
print.print_footerright
to the empty string: ""
.
For more ideas and examples, have a look at my user.js file.