{ config, pkgs, lib, ... }: # Thanks sleepy@discourse.nixos.org! # Taken from https://discourse.nixos.org/t/declare-firefox-extensions-and-settings/36265/5 { # Might eventually include extensions. Probably not though. options.cady = { firefox = { enable = lib.mkEnableOption "Firefox defaults"; userChromePath = lib.mkOption { type = lib.types.path; description = "Path to userChrome.css"; }; extraPrefs = lib.mkOption { description = "Additional options for Firefox preferences, loaded globally."; type = lib.types.attrs; default = {}; }; }; }; config = lib.mkMerge [ (lib.mkIf (config.cady.firefox.enable) { # ---- sidebery is stored in firefox sync ---- # My own code, no longer sleepy. # https://discourse.nixos.org/t/anyone-using-firefox-gnome-theme-successfully-with-nixos-home-manager/19248 massively helped!! home.file.".mozilla/firefox/default/chrome/userChrome.css".source = config.cady.firefox.userChromePath; programs.firefox = { enable = true; package = pkgs.wrapFirefox pkgs.firefox-unwrapped { extraPolicies = { DisableTelemetry = true; DisableFirefoxStudies = true; EnableTrackingProtection = { Value = true; Locked = true; Cryptomining = true; Fingerprinting = true; }; DisablePocket = true; DisableFirefoxScreenshots = true; OverrideFirstRunPage = ""; OverridePostUpdatePage = ""; DontCheckDefaultBrowser = true; # add policies here... # ---- EXTENSIONS ---- ExtensionSettings = { # "*".installation_mode = "blocked"; # blocks all addons except the ones specified below # # uBlock Origin: # "uBlock0@raymondhill.net" = { # install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; # installation_mode = "force_installed"; # }; # # add extensions here... }; # ---- PREFERENCES ---- # Set preferences shared by all profiles. Preferences = { "browser.contentblocking.category" = { Value = "strict"; }; "extensions.pocket.enabled" = false; "extensions.screenshots.disabled" = true; "browser.newtabpage.activity-stream.feeds.section.topstories" = false; "browser.newtabpage.activity-stream.feeds.snippets" = false; "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; "browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = false; "browser.newtabpage.activity-stream.section.highlights.includeDownloads" = false; "browser.newtabpage.activity-stream.section.highlights.includeVisited" = false; "browser.newtabpage.activity-stream.showSponsored" = false; "browser.newtabpage.activity-stream.system.showSponsored" = false; "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; # add global preferences here... "layout.css.color-mix.enabled" = true; "layout.css.light-dark.enabled" = true; "layout.css.has-selector.enabled" = true; "toolkit.legacyUserProfileCustomizations.stylesheets" = true; "browser.tabs.allow_transparent_browser" = true; } // config.cady.firefox.extraPrefs; }; }; # ---- PROFILES ---- # Switch profiles via about:profiles page. # For options that are available in Home-Manager see # https://nix-community.github.io/home-manager/options.html#opt-programs.firefox.profiles profiles = { default = { # choose a profile name; directory is /home/<user>/.mozilla/firefox/profile_0 id = 0; # 0 is the default profile; see also option "isDefault" name = "default"; # name as listed in about:profiles isDefault = true; # can be omitted; true if profile ID is 0 settings = { # specify profile-specific preferences here; check about:config for options }; }; }; }; }) ]; }