Jump to content

Firefox: Difference between revisions

From Official NixOS Wiki
Ardenet (talk | contribs)
Marked this version for translation
Added new section to troubleshooting in regards to getting policies working. Home manager cannot completely configure firefox installed through the system configuration since it is not only linking configuration files as it typically does, but in addition creates a new wrapped version of the executable. This is not currently made clear in the documentation on Home Manager's site nor here
 
(7 intermediate revisions by 4 users not shown)
Line 6: Line 6:
   |developer=Mozilla Foundation & Community
   |developer=Mozilla Foundation & Community
   |firstRelease=November 9, 2004
   |firstRelease=November 9, 2004
   |latestRelease=Firefox 140.0 (June 24, 2025)
   |latestRelease=Firefox 150.0 (April 21, 2026)
   |status=Active
   |status=Active
   |license=[https://www.mozilla.org/MPL/2.0/ Mozilla Public License 2.0]
   |license=[https://www.mozilla.org/MPL/2.0/ Mozilla Public License 2.0]
   |os=Cross-platform (Linux, macOS, Windows, *BSD)
   |os=Cross-platform (Linux, macOS, Windows, *BSD)
   |website=[https://www.mozilla.org/firefox mozilla.org/firefox]
   |website=[https://www.mozilla.org/firefox mozilla.org/firefox]
   |github=mozilla/firefox
   |github=mozilla-firefox/firefox
   |bugTracker=[https://bugzilla.mozilla.org/ Bugzilla]
   |bugTracker=[https://bugzilla.mozilla.org/ Bugzilla]
   |documentation=[https://support.mozilla.org/ Official Support]
   |documentation=[https://support.mozilla.org/ Official Support]
Line 24: Line 24:
</translate>
</translate>


{{code|lang=bash|line=no|1=$ nix-shell -p firefox}}
<syntaxhighlight lang=console>
$ nix-shell -p firefox
</syntaxhighlight>


<translate>
<translate>
Line 151: Line 153:


           importedLists = [
           importedLists = [
             "https:#filters.adtidy.org/extension/ublock/filters/3.txt"
             "https://filters.adtidy.org/extension/ublock/filters/3.txt"
             "https:#github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
             "https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
           ];
           ];


Line 166: Line 168:
           "easylist"
           "easylist"
           "easyprivacy"
           "easyprivacy"
           "https:#github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
           "https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
           "plowe-0"
           "plowe-0"
           "ublock-abuse"
           "ublock-abuse"
Line 182: Line 184:
   profiles.default.search = {
   profiles.default.search = {
     force          = true;
     force          = true;
     default        = "DuckDuckGo";
     default        = "ddg";
     privateDefault  = "DuckDuckGo";
     privateDefault  = "ddg";


     engines = {
     engines = {
Line 233: Line 235:
<translate>
<translate>
<!--T:25-->
<!--T:25-->
[https://nix-community.github.io/home-manager/options.xhtml#opt-programs.firefox.enable More options are available on Home Manager's site.]
[https://nix-community.github.io/home-manager/options.xhtml#opt-programs.firefox.enable More options are available on Home Manager's site.] [https://firefox-admin-docs.mozilla.org/reference/policies/ More options for policies can be found on Mozilla's site.]
 
To reload uBlock Origin settings from <code>policies.json</code>, open the uBlock Origin dashboard and choose ''Reset to default settings''.


== Firefox Variants == <!--T:4-->
== Firefox Variants == <!--T:4-->
Line 303: Line 307:
</translate>
</translate>


{{code|lang=bash|line=no|1=$ nixos-rebuild switch --impure}}
<syntaxhighlight lang=console>
$ nixos-rebuild switch --impure
</syntaxhighlight>


<translate>
<translate>
== Tips and Tricks == <!--T:28-->
== Tips and Tricks == <!--T:28-->


Line 362: Line 369:
<!--T:42-->
<!--T:42-->
Native messaging hosts (used for extensions like Plasma Integration) do not work with the <code>-bin</code> variants of Firefox or with Firefox installed imperatively via <code>nix-env</code>. You must use a variant built from source via your NixOS or Home Manager configuration.
Native messaging hosts (used for extensions like Plasma Integration) do not work with the <code>-bin</code> variants of Firefox or with Firefox installed imperatively via <code>nix-env</code>. You must use a variant built from source via your NixOS or Home Manager configuration.
==== Policies Failed to Load when using Home Manager ====
If the policies are not configured when using Home Manager, ensure that the package is installed via your Home Manager configuration rather than your NixOS configuration. Additionally, some options are only available when using the <code>firefox-esr</code> variant of the package.


==== ALSA audio instead of PulseAudio ==== <!--T:27-->
==== ALSA audio instead of PulseAudio ==== <!--T:27-->
Line 397: Line 407:
* [[Home Manager]] – Declarative per-user configuration
* [[Home Manager]] – Declarative per-user configuration
* [https://search.nixos.org/options?channel=unstable&query=programs.firefox NixOS options for Firefox]
* [https://search.nixos.org/options?channel=unstable&query=programs.firefox NixOS options for Firefox]
* [https://discourse.nixos.org/tag/firefox Firefox topics on NixOS Discourse]
* [https://firefox-admin-docs.mozilla.org/reference/policies/ Policy template options for Firefox]


== References == <!--T:67-->
== References == <!--T:67-->

Latest revision as of 23:14, 28 August 2026

Mozilla Firefox

Web Browser Application

100%
Developer(s)Mozilla Foundation & Community
Latest releaseFirefox 150.0 (April 21, 2026)
StatusActive
Operating SystemCross-platform (Linux, macOS, Windows, *BSD)
LicenseMozilla Public License 2.0
External links
Websitemozilla.org/firefox
GitHubmozilla-firefox/firefox
Bug trackerBugzilla
DocumentationOfficial Support

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;
      };
    };

    # Extension configuration 
    "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         = "ddg";
    privateDefault  = "ddg";

    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. More options for policies can be found on Mozilla's site.

To reload uBlock Origin settings from policies.json, open the uBlock Origin dashboard and choose Reset to default settings.

Firefox Variants

There are several Firefox variants available. To choose one, set the programs.firefox.package option accordingly.

Note: The packages for the variants listed below are installed instead of the normal 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

Force XWayland (X11) instead of Wayland

Firefox defaults to native Wayland when running under a Wayland compositor. To force it to use XWayland (X11) instead:

environment.sessionVariables.MOZ_ENABLE_WAYLAND = "0";

This is useful when troubleshooting Wayland-specific issues or when certain features work better under X11.

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.kdePackages.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.

Policies Failed to Load when using Home Manager

If the policies are not configured when using Home Manager, ensure that the package is installed via your Home Manager configuration rather than your NixOS configuration. Additionally, some options are only available when using the firefox-esr variant of the package.

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

References

  1. Mozilla Foundation, "Firefox", Official Website, Accessed June 2025. https://www.mozilla.org/firefox