Firefox
Firefox[1] is a free and open-source web browser developed by the Mozilla Foundation. It is known for its focus on privacy, security, and user freedom, offering a customizable experience through a rich ecosystem of add-ons and themes.
Installation
Shell
$ nix-shell -p firefox
The command above makes firefox
available in your current shell without modifying any configuration files.
System setup
# Example for /etc/nixos/configuration.nix
environment.systemPackages = [
pkgs.firefox
];
# User-specific installation (in ~/.config/nixpkgs/home.nix)
home.packages = [
pkgs.firefox
];
After rebuilding with nixos-rebuild switch
, Firefox will be installed system-wide.
Configuration
Basic
programs.firefox = {
enable = true;
languagePacks = [ "en-US" "de" "fr" ];
preferences = {
"browser.startup.homepage" = "https://example.com";
"privacy.resistFingerprinting" = true;
};
policies = {
DisableTelemetry = true;
};
};
The snippet above enables Firefox for all users (or the current Home Manager profile, if placed in home.nix
).
Advanced
Home Manager allows for deep customization of Firefox, including extensions, search engines, bookmarks, and themes. The example below shows a configuration for adding custom search engines with aliases.
programs.firefox = {
enable = true;
languagePacks = [ "en-US" ];
policies = {
# Updates & Background Services
AppAutoUpdate = false;
BackgroundAppUpdate = false;
# Feature Disabling
DisableBuiltinPDFViewer = true;
DisableFirefoxStudies = true;
DisableFirefoxAccounts = true;
DisableFirefoxScreenshots = true;
DisableForgetButton = true;
DisableMasterPasswordCreation = true;
DisableProfileImport = true;
DisableProfileRefresh = true;
DisableSetDesktopBackground = true;
DisablePocket = true;
DisableTelemetry = true;
DisableFormHistory = true;
DisablePasswordReveal = true;
# Access Restrictions
BlockAboutConfig = false;
BlockAboutProfiles = true;
BlockAboutSupport = true;
# UI and Behavior
DisplayMenuBar = "never";
DontCheckDefaultBrowser = true;
HardwareAcceleration = false;
OfferToSaveLogins = false;
DefaultDownloadDirectory = "${home}/Downloads";
# Extensions
ExtensionSettings = let
moz = short: "https://addons.mozilla.org/firefox/downloads/latest/${short}/latest.xpi";
in {
"*".installation_mode = "blocked";
"uBlock0@raymondhill.net" = {
install_url = moz "ublock-origin";
installation_mode = "force_installed";
updates_disabled = true;
};
"{f3b4b962-34b4-4935-9eee-45b0bce58279}" = {
install_url = moz "animated-purple-moon-lake";
installation_mode = "force_installed";
updates_disabled = true;
};
"{73a6fe31-595d-460b-a920-fcc0f8843232}" = {
install_url = moz "noscript";
installation_mode = "force_installed";
updates_disabled = true;
};
"3rdparty".Extensions = {
"uBlock0@raymondhill.net".adminSettings = {
userSettings = rec {
uiTheme = "dark";
uiAccentCustom = true;
uiAccentCustom0 = "#8300ff";
cloudStorageEnabled = mkForce false;
importedLists = [
"https:#filters.adtidy.org/extension/ublock/filters/3.txt"
"https:#github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
];
externalLists = lib.concatStringsSep "\n" importedLists;
};
selectedFilterLists = [
"CZE-0"
"adguard-generic"
"adguard-annoyance"
"adguard-social"
"adguard-spyware-url"
"easylist"
"easyprivacy"
"https:#github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
"plowe-0"
"ublock-abuse"
"ublock-badware"
"ublock-filters"
"ublock-privacy"
"ublock-quick-fixes"
"ublock-unbreak"
"urlhaus-1"
];
};
};
};
};
profiles.default.search = {
force = true;
default = "DuckDuckGo";
privateDefault = "DuckDuckGo";
engines = {
"Nix Packages" = {
urls = [
{
template = "https://search.nixos.org/packages";
params = [
{ name = "channel"; value = "unstable"; }
{ name = "query"; value = "{searchTerms}"; }
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
"Nix Options" = {
urls = [
{
template = "https://search.nixos.org/options";
params = [
{ name = "channel"; value = "unstable"; }
{ name = "query"; value = "{searchTerms}"; }
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@no" ];
};
"NixOS Wiki" = {
urls = [
{
template = "https://wiki.nixos.org/w/index.php";
params = [
{ name = "search"; value = "{searchTerms}"; }
];
}
];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@nw" ];
};
};
};
};
More options are available on Home Manager's site.
Firefox Variants
There are several Firefox variants available. To choose one, set the programs.firefox.package
option accordingly.
firefox
package.Variant: Official Binaries
Mozilla provides official pre-built Firefox binaries via the firefox-bin
package, which are downloaded directly from Mozilla's servers.
Variant: Extended Support Release (ESR)
firefox-esr
is a variant that receives security updates for a longer period with a slower feature implementation cadence. It also allows for more extensive policy-based configuration.
Variant: Nightly
Nightly builds are daily builds from the central Mozilla repository.
Method 1: Using nix-community/flake-firefox-nightly
This method is reproducible but may lag behind the upstream version. First, add the input to your flake:
inputs = {
firefox.url = "github:nix-community/flake-firefox-nightly";
firefox.inputs.nixpkgs.follows = "nixpkgs";
};
Then, add the package to your system:
# In configuration.nix, assuming use of specialArgs
environment.systemPackages = [
inputs.firefox.packages.${pkgs.stdenv.hostPlatform.system}.firefox-nightly-bin
];
Method 2: Using mozilla/nixpkgs-mozilla
This method is not necessarily reproducible without a flake-like system but will always be the latest version.
nixpkgs.overlays = [
(import (builtins.fetchTarball "https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz"))
];
programs.firefox.package = pkgs.latest.firefox-nightly-bin;
Using this method requires the --impure
flag for Nix commands, for example:
$ nixos-rebuild switch --impure
Tips and Tricks
Enhancing Privacy
Beyond the declarative settings above, you can further enhance privacy:
- Container Tabs: Use an extension like Multi-Account Containers to isolate websites from each other, preventing cross-site tracking.
- DNS over HTTPS (DoH): Encrypt your DNS queries by enabling DoH in Firefox's network settings to prevent ISP snooping.
Wayland support
environment.sessionVariables.MOZ_ENABLE_WAYLAND = "1";
Setting the variable above makes Firefox use Wayland when available.
Touchpad Gestures and Smooth Scrolling
Enable xinput2
to improve touchscreen support and enable additional touchpad gestures and smooth scrolling.
environment.sessionVariables.MOZ_USE_XINPUT2 = "1";
KDE Plasma Integration
1. Add the native messaging host package to your configuration:
programs.firefox.nativeMessagingHosts.packages = [ pkgs.plasma-browser-integration ];
2. Install the corresponding browser add-on.
Use KDE file picker
To use the KDE file picker instead of the GTK one, set the following preference:
programs.firefox.preferences = {
"widget.use-xdg-desktop-portal.file-picker" = 1;
};
Troubleshooting
Native Messaging Hosts Fail to Load
Native messaging hosts (used for extensions like Plasma Integration) do not work with the -bin
variants of Firefox or with Firefox installed imperatively via nix-env
. You must use a variant built from source via your NixOS or Home Manager configuration.
ALSA audio instead of PulseAudio
To force Firefox to use ALSA, you can override it with a wrapper:
programs.firefox.package = pkgs.wrapFirefox pkgs.firefox-unwrapped { libpulseaudio = pkgs.libalsa; };
Screen Sharing under Wayland
Screen sharing on Wayland requires enabling PipeWire and the appropriate XDG Desktop Portals.
services.pipewire.enable = true;
xdg.portal = {
enable = true;
# Add the portal for your compositor, e.g.:
extraPortals = with pkgs; [
xdg-desktop-portal-wlr # For Sway/wlroots
# xdg-desktop-portal-gtk # For GNOME
# xdg-desktop-portal-kde # For KDE
];
};
See also
- Home Manager – Declarative per-user configuration
- NixOS options for Firefox
- Firefox topics on NixOS Discourse
References
- ↑ Mozilla Foundation, "Firefox", Official Website, Accessed June 2025. https://www.mozilla.org/firefox