I haven’t seen this documented yet, and wanted to point out that it’s possible to use BOTH the system-level Firefox and the home-manager-level Firefox settings.
Why would you want to do this? Well, each has its advantages:
System-level Firefox
- allows you to create system-wide “policies” that include “locked” preferences which cannot be sneakily modified by Firefox (e.g. I’ve noticed
*sponsored
settings change based on internal API calls, I guess) - allows you to create
force_installed
Firefox extensions that skip the permission dialog to the user upon first-time use of a new Firefox profile
Home-manager-level Firefox
- allows you to re-apply preferences to an existing Firefox profile, rather than set defaults for new profiles
How does this look in practice?
I have the following system-level Firefox nix settings:
{ config, pkgs, ... }:
let
lock-false = {
Value = false;
Status = "locked";
};
lock-true = {
Value = true;
Status = "locked";
};
lock-empty-string = {
Value = "";
Status = "locked";
};
in {
programs.firefox = {
enable = true;
policies = {
DisableTelemetry = true;
DisableFirefoxStudies = true;
DontCheckDefaultBrowser = true;
DisablePocket = true;
SearchBar = "unified";
Preferences = {
# Privacy settings
"extensions.pocket.enabled" = lock-false;
"browser.newtabpage.pinned" = lock-empty-string;
"browser.topsites.contile.enabled" = lock-false;
"browser.newtabpage.activity-stream.showSponsored" = lock-false;
"browser.newtabpage.activity-stream.system.showSponsored" = lock-false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = lock-false;
};
ExtensionSettings = {
"uBlock0@raymondhill.net" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
installation_mode = "force_installed";
};
"{446900e4-71c2-419f-a6a7-df9c091e268b}" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi";
installation_mode = "force_installed";
};
"jid1-MnnxcxisBPnSXQ@jetpack" = {
install_url = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi";
installation_mode = "force_installed";
};
"extension@tabliss.io" = {
install_url = "https://addons.mozilla.org/firefox/downloads/file/3940751/tabliss-2.6.0.xpi";
installation_mode = "force_installed";
};
};
};
};
}
And in my home-manager, I have the following:
programs.firefox = {
enable = true;
profiles = {
default = {
id = 0;
name = "default";
isDefault = true;
settings = {
# "browser.startup.homepage" = "https://duckduckgo.com";
"browser.search.defaultenginename" = "DuckDuckGo";
"browser.search.order.1" = "DuckDuckGo";
"signon.rememberSignons" = false;
"widget.use-xdg-desktop-portal.file-picker" = 1;
"browser.aboutConfig.showWarning" = false;
"browser.compactmode.show" = true;
"browser.cache.disk.enable" = false; # Be kind to hard drive
"mousewheel.default.delta_multiplier_x" = 20;
"mousewheel.default.delta_multiplier_y" = 20;
"mousewheel.default.delta_multiplier_z" = 20;
# Firefox 75+ remembers the last workspace it was opened on as part of its session management.
# This is annoying, because I can have a blank workspace, click Firefox from the launcher, and
# then have Firefox open on some other workspace.
"widget.disable-workspace-management" = true;
};
search = {
force = true;
default = "DuckDuckGo";
order = [ "DuckDuckGo" "Google" ];
};
};
};
};
If anyone has additional details, or understands better how these interact, by all means keep us apprised. Thanks.