1{ lib, config, pkgs, helpers, ... }:
2
3with lib;
4let
5 cfg = config.modules.apps;
6in {
7 options.modules.apps.firefox = {
8 enable = mkOption {
9 default = false;
10 description = "Whether to enable Firefox.";
11 type = types.bool;
12 };
13 };
14
15 config.modules.apps.firefox = {
16 enable = if helpers.isLinux then (mkDefault false) else (mkForce false);
17 };
18} // helpers.linuxAttrs {
19 config = mkIf (cfg.enable && cfg.firefox.enable) {
20 programs.firefox = {
21 enable = true;
22 package = with pkgs; (wrapFirefox (firefox-unwrapped.override { pipewireSupport = true; }) {});
23 profiles.default = {
24 settings = {
25 "browser.aboutConfig.showWarning" = false;
26 "browser.contentblocking.category" = "strict";
27 "browser.newtabpage.enabled" = false;
28 "browser.shell.checkDefaultBrowser" = false;
29 "privacy.annotate_channels.strict_list.enabled" = true;
30 "privacy.trackingprotection.enabled" = true;
31 "privacy.trackingprotection.socialtracking.enabled" = true;
32 "browser.startup.homepage" = "about:blank";
33 "trailhead.firstrun.didSeeAboutWelcome" = true;
34 "media.ffmpeg.vaapi.enabled" = true;
35 "media.hardware-video-decoding.force-enabled" = true;
36 "media.hardwaremediakeys.enabled" = true;
37 "extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
38 "font.default.x-western" = "sans-serif";
39 "font.name.sans-serif.x-western" = "Inter";
40 "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
41 "gfx.webrender.all" = true;
42 };
43 };
44 };
45
46 systemd.user.sessionVariables = {
47 MOZ_ENABLE_WAYLAND = 1;
48 MOZ_WEBRENDER = 1;
49 NIXOS_OZONE_WL = mkDefault 1;
50 BROWSER = "firefox";
51 };
52
53 xdg = {
54 mimeApps = {
55 enable = mkDefault true;
56 defaultApplications = let
57 browser = [ "firefox.desktop" ];
58 in {
59 "application/json" = browser;
60 "application/pdf" = browser;
61 "application/xml" = browser;
62 "application/xhtml+xml" = browser;
63 "application/xhtml_xml" = browser;
64 "application/x-extension-htm" = browser;
65 "application/x-extension-html" = browser;
66 "x-scheme-handler/about" = browser;
67 "x-scheme-handler/ftp" = browser;
68 "x-scheme-handler/http" = browser;
69 "x-scheme-handler/https" = browser;
70 "x-scheme-handler/unknown" = browser;
71 "text/html" = browser;
72 "text/xml" = browser;
73 };
74 };
75 };
76 };
77}