Firefox: Difference between revisions
imported>Samueldr Adds FAQ for firefox quantum |
m Modern alias |
||
(72 intermediate revisions by 37 users not shown) | |||
Line 1: | Line 1: | ||
{{ | <languages/> | ||
{{infobox application | |||
|name=Mozilla Firefox | |||
|image=Firefox logo, 2019.svg | |||
|type=Web Browser | |||
|developer=Mozilla Foundation & Community | |||
|firstRelease=November 9, 2004 | |||
|latestRelease=Firefox 140.0 (June 24, 2025) | |||
|status=Active | |||
|license=[https://www.mozilla.org/MPL/2.0/ Mozilla Public License 2.0] | |||
|os=Cross-platform (Linux, macOS, Windows, *BSD) | |||
|website=[https://www.mozilla.org/firefox mozilla.org/firefox] | |||
|github=mozilla/firefox | |||
|bugTracker=[https://bugzilla.mozilla.org/ Bugzilla] | |||
|documentation=[https://support.mozilla.org/ Official Support] | |||
}} | |||
<translate> | |||
<!--T:1--> | |||
<strong>Firefox</strong><ref>Mozilla Foundation, "Firefox", Official Website, Accessed June 2025. https://www.mozilla.org/firefox</ref> 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 == <!--T:3--> | ||
=== | ==== Shell ==== <!--T:4--> | ||
</translate> | |||
{{code|lang=bash|line=no|1=$ nix-shell -p firefox}} | |||
<translate> | |||
<!--T:5--> | |||
The command above makes <code>firefox</code> available in your current shell without modifying any configuration files. | |||
==== System setup ==== <!--T:6--> | |||
</translate> | |||
{{code|lang=nix|line=no|1=# Example for /etc/nixos/configuration.nix | |||
environment.systemPackages = [ | |||
pkgs.firefox | |||
]; | |||
# User-specific installation (in ~/.config/nixpkgs/home.nix) | |||
home.packages = [ | |||
pkgs.firefox | |||
];}} | |||
<translate> | |||
<!--T:7--> | |||
After rebuilding with <code>nixos-rebuild switch</code>, Firefox will be installed system-wide. | |||
== Configuration == <!--T:8--> | |||
==== Basic ==== <!--T:9--> | |||
</translate> | |||
{{code|lang=nix|line=no|1= | |||
programs.firefox = { | |||
enable = true; | |||
languagePacks = [ "en-US" "de" "fr" ]; | |||
preferences = { | |||
"browser.startup.homepage" = "https://example.com"; | |||
"privacy.resistFingerprinting" = true; | |||
}; | |||
policies = { | |||
DisableTelemetry = true; | |||
}; | |||
}; | |||
}} | |||
<translate> | |||
<!--T:10--> | |||
The snippet above enables Firefox for all users (or the current Home Manager profile, if placed in <code>home.nix</code>). | |||
==== Advanced ==== <!--T:11--> | |||
</translate> | |||
<translate> | |||
<!--T:11a--> | |||
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. | |||
</translate> | |||
{{code|lang=nix|line=no|1= | |||
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" ]; | |||
}; | |||
}; | |||
}; | |||
}; | |||
}} | |||
<translate> | |||
<!--T:11b--> | |||
[https://nix-community.github.io/home-manager/options.xhtml#opt-programs.firefox.enable More options are available on Home Manager's site.] | |||
</translate> | |||
<translate> | |||
== Firefox Variants == <!--T:12--> | |||
</translate> | |||
<translate> | |||
<!--T:13--> | |||
There are several Firefox variants available. To choose one, set the <code>programs.firefox.package</code> option accordingly. | |||
</translate> | |||
{{Note|The packages for the variants listed below are installed ''instead'' of the normal <code>firefox</code> package.}} | |||
<translate> | |||
=== Variant: Official Binaries === <!--T:14--> | |||
</translate> | |||
<translate> | |||
<!--T:15--> | |||
Mozilla provides official pre-built Firefox binaries via the <code>firefox-bin</code> package, which are downloaded directly from Mozilla's servers. | |||
</translate> | |||
<translate> | |||
=== Variant: Extended Support Release (ESR) === <!--T:16--> | |||
</translate> | |||
<translate> | |||
<!--T:17--> | |||
<code>firefox-esr</code> 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. | |||
</translate> | |||
<translate> | |||
=== Variant: Nightly === <!--T:18--> | |||
</translate> | |||
<translate> | |||
<!--T:19--> | |||
Nightly builds are daily builds from the central Mozilla repository. | |||
</translate> | |||
<translate> | |||
==== Method 1: Using nix-community/flake-firefox-nightly ==== <!--T:20--> | |||
</translate> | |||
<translate> | |||
<!--T:21--> | |||
This method is reproducible but may lag behind the upstream version. First, add the input to your flake: | |||
</translate> | |||
{{code|lang=nix|line=no|1= | |||
inputs = { | |||
firefox.url = "github:nix-community/flake-firefox-nightly"; | |||
firefox.inputs.nixpkgs.follows = "nixpkgs"; | |||
}; | |||
}} | |||
<translate> | |||
<!--T:22--> | |||
Then, add the package to your system: | |||
</translate> | |||
{{code|lang=nix|line=no|1= | |||
# In configuration.nix, assuming use of specialArgs | |||
environment.systemPackages = [ | |||
inputs.firefox.packages.${pkgs.stdenv.hostPlatform.system}.firefox-nightly-bin | |||
]; | |||
}} | |||
<translate> | |||
==== Method 2: Using mozilla/nixpkgs-mozilla ==== <!--T:23--> | |||
</translate> | |||
<translate> | |||
<!--T:24--> | |||
This method is not necessarily reproducible without a flake-like system but will always be the latest version. | |||
</translate> | |||
{{code|lang=nix|line=no|1= | |||
nixpkgs.overlays = [ | |||
(import (builtins.fetchTarball "https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz")) | |||
]; | |||
programs.firefox.package = pkgs.latest.firefox-nightly-bin; | |||
}} | |||
<translate> | |||
<!--T:25--> | |||
Using this method requires the <code>--impure</code> flag for Nix commands, for example: | |||
</translate> | |||
{{code|lang=bash|line=no|1=$ nixos-rebuild switch --impure}} | |||
<translate> | |||
== Tips and Tricks == <!--T:26--> | |||
</translate> | |||
<translate> | |||
==== Enhancing Privacy ==== <!--T:27--> | |||
</translate> | |||
{{Note|Hardening Firefox often involves a trade-off between privacy and convenience. Some websites may not function correctly with aggressive settings.}} | |||
<translate> | |||
<!--T:28--> | |||
Beyond the declarative settings above, you can further enhance privacy: | |||
* '''Container Tabs''': Use an extension like [https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/ 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. | |||
</translate> | |||
<translate> | |||
==== Wayland support ==== <!--T:29--> | |||
</translate> | |||
{{code|lang=nix|line=no|1=environment.sessionVariables.MOZ_ENABLE_WAYLAND = "1";}} | |||
<translate> | |||
<!--T:30--> | |||
Setting the variable above makes Firefox use Wayland when available. | |||
</translate> | |||
<translate> | |||
==== Touchpad Gestures and Smooth Scrolling ==== <!--T:31--> | |||
</translate> | |||
<translate> | |||
<!--T:32--> | |||
Enable <code>xinput2</code> to improve touchscreen support and enable additional touchpad gestures and smooth scrolling. | |||
</translate> | |||
{{code|lang=nix|line=no|1= | |||
environment.sessionVariables.MOZ_USE_XINPUT2 = "1"; | |||
}} | |||
<translate> | |||
==== KDE Plasma Integration ==== <!--T:33--> | |||
</translate> | |||
<translate> | |||
<!--T:34--> | |||
1. Add the native messaging host package to your configuration: | |||
</translate> | |||
{{code|lang=nix|line=no|1=programs.firefox.nativeMessagingHosts.packages = [ pkgs.plasma-browser-integration ];}} | |||
<translate> | |||
<!--T:35--> | |||
2. Install the corresponding [https://addons.mozilla.org/en-US/firefox/addon/plasma-integration/ browser add-on]. | |||
</translate> | |||
<translate> | |||
==== Use KDE file picker ==== <!--T:36--> | |||
</translate> | |||
<translate> | |||
<!--T:37--> | |||
To use the KDE file picker instead of the GTK one, set the following preference: | |||
</translate> | |||
{{code|lang=nix|line=no|1= | |||
programs.firefox.preferences = { | |||
"widget.use-xdg-desktop-portal.file-picker" = 1; | |||
}; | |||
}} | |||
<translate> | |||
== Troubleshooting == <!--T:38--> | |||
</translate> | |||
<translate> | |||
==== Native Messaging Hosts Fail to Load ==== <!--T:39--> | |||
</translate> | |||
<translate> | |||
<!--T:40--> | |||
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. | |||
</translate> | |||
<translate> | |||
==== ALSA audio instead of PulseAudio ==== <!--T:41--> | |||
</translate> | |||
<translate> | |||
<!--T:42--> | |||
To force Firefox to use ALSA, you can override it with a wrapper: | |||
</translate> | |||
{{code|lang=nix|line=no|1=programs.firefox.package = pkgs.wrapFirefox pkgs.firefox-unwrapped { libpulseaudio = pkgs.libalsa; };}} | |||
<translate> | |||
==== Screen Sharing under Wayland ==== <!--T:43--> | |||
</translate> | |||
<translate> | |||
<!--T:44--> | |||
Screen sharing on Wayland requires enabling PipeWire and the appropriate XDG Desktop Portals. | |||
</translate> | |||
{{code|lang=nix|line=no|1= | |||
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 | |||
]; | |||
}; | |||
}} | |||
<translate> | |||
== See also == <!--T:45--> | |||
</translate> | |||
<translate> | |||
* [[Home Manager]] – Declarative per-user configuration | |||
* [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] | |||
</translate> | |||
<translate> | |||
== References == <!--T:46--> | |||
</translate> | |||
[[Category:Applications]] | |||
[[Category:Web Browser]] |