{ inputs, config, lib, pkgs, ... }: let cfg = config.ptw.programs.firefox; in { options.ptw.programs.firefox = { enable = lib.mkEnableOption "Configure Firefox using HomeManager"; }; config = lib.mkIf cfg.enable { environment = { systemPackages = with pkgs; [ firefox-wayland tor-browser-bundle-bin ]; # Deploy a Firefox policy to set the search engine and do some other things etc."firefox/policies/policies.json".source = ./policies.json; sessionVariables = { # Enable multi-touch... "MOZ_USE_XINPUT2" = "1"; # ... and Wayland "MOZ_ENABLE_WAYLAND" = "1"; }; }; home-manager.users."${config.ptw.system.singleUser}".programs.firefox = { enable = true; extensions = with pkgs.nur.repos.rycee.firefox-addons; [ https-everywhere ublock-origin umatrix decentraleyes privacy-redirect ]; profiles.default = { id = 0; # NOTE: This is important isDefault = true; name = "Default Profile"; settings = { "browser.search.suggest.enabled" = false; "browser.tabs.drawInTitlebar" = true; "browser.aboutConfig.showWarning" = false; "browser.crashReports.unsubmittedCheck.autoSubmit" = false; "browser.crashReports.unsubmittedCheck.autoSubmit2" = false; "browser.crashReports.unsubmittedCheck.enabled" = false; "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; "browser.newtabpage.activity-stream.feeds.topsites" = false; "browser.newtabpage.activity-stream.improvesearch.topSiteSearchShortcuts" = false; "browser.newtabpage.enabled" = false; "browser.newtabpage.enhanced" = false; "browser.newtabpage.introShown" = true; "browser.send_pings" = false; "browser.shell.checkDefaultBrowser" = false; # NixOS is a bit wonky here "app.shield.optoutstudies.enabled" = false; "app.normandy.api_url" = ""; "app.normandy.enabled" = false; "breakpad.reportURL" = ""; "services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsoredTopSite" = false; "signon.autofillForms" = false; "signon.rememberSignons" = false; "signon.management.page.breach-alerts.enabled" = false; "toolkit.telemetry.archive.enabled" = false; "toolkit.telemetry.bhrPing.enabled" = false; "toolkit.telemetry.cachedClientID" = ""; "toolkit.telemetry.enabled" = false; "toolkit.telemetry.firstShutdownPing.enabled" = false; "toolkit.telemetry.hybridContent.enabled" = false; "toolkit.telemetry.newProfilePing.enabled" = false; "toolkit.telemetry.prompted" = 2; "toolkit.telemetry.rejected" = true; "toolkit.telemetry.reportingpolicy.firstRun" = false; "toolkit.telemetry.server" = ""; "toolkit.telemetry.shutdownPingSender.enabled" = false; "toolkit.telemetry.unified" = false; "toolkit.telemetry.unifiedIsOptIn" = false; "toolkit.telemetry.updatePing.enabled" = false; "webgl.disabled" = true; "webgl.renderer-string-override" = " "; "webgl.vendor-string-override" = " "; "experiments.activeExperiment" = false; "experiments.enabled" = false; "experiments.manifest.uri" = ""; "experiments.supported" = false; "extensions.getAddons.cache.enabled" = false; "extensions.getAddons.showPane" = false; "extensions.pocket.enabled" = false; "extensions.screenshots.upload-disabled" = true; "extensions.shield-recipe-client.api_url" = ""; "extensions.shield-recipe-client.enabled" = false; "extensions.webservice.discoverURL" = ""; "extensions.htmlaboutaddons.recommendations.enabled" = false; "media.autoplay.default" = 2; "media.eme.enabled" = false; "media.gmp-widevinecdm.enabled" = false; "media.navigator.enabled" = false; "media.peerconnection.enabled" = false; "media.video_stats.enabled" = false; "network.IDN_show_punycode" = true; "network.allow-experiments" = false; "network.captive-portal-service.enabled" = false; "network.cookie.cookieBehavior" = 1; "network.dns.disablePrefetch" = true; "network.dns.disablePrefetchFromHTTPS" = true; "network.http.referer.spoofSource" = true; "network.http.speculative-parallel-limit" = 0; "network.predictor.enable-prefetch" = false; "network.predictor.enabled" = false; "network.prefetch-next" = false; "network.trr.mode" = 5; "privacy.donottrackheader.enabled" = true; "privacy.donottrackheader.value" = 1; "privacy.trackingprotection.cryptomining.enabled" = true; "privacy.trackingprotection.enabled" = true; "privacy.trackingprotection.fingerprinting.enabled" = true; "privacy.trackingprotection.pbmode.enabled" = true; "privacy.usercontext.about_newtab_segregation.enabled" = true; "security.ssl.disable_session_identifiers" = true; # UI "ui.key.menuAccessKeyFocuses" = false; # Hardware Video Acceleration "media.ffmpeg.vaapi.enabled" = true; "media.ffvpx.enabled" = false; "media.rdd-vpx.enabled" = false; "media.navigator.mediadataencoder_vpx_enabled" = true; # WebRender "gfx.webrender.all" = true; # Better smooth scrolling "general.smoothScroll.msdPhysics.continuousMotionMaxDeltaMS" = 250; "general.smoothScroll.msdPhysics.enabled" = true; "general.smoothScroll.msdPhysics.motionBeginSpringConstant" = 450; "general.smoothScroll.msdPhysics.regularSpringConstant" = 450; "general.smoothScroll.msdPhysics.slowdownMinDeltaMS" = 50; "general.smoothScroll.msdPhysics.slowdownMinDeltaRatio;0" = 4; "general.smoothScroll.msdPhysics.slowdownSpringConstant" = 5000; "mousewheel.min_line_scroll_amount" = 22; "toolkit.scrollbox.horizontalScrollDistance" = 4; "toolkit.scrollbox.verticalScrollDistance" = 5; # Misc "layout.spellcheckDefault" = 0; # I don't use spellcheck "extensions.activeThemeID" = "firefox-alpenglow@mozilla.org"; # It's a nice theme }; }; }; }; }