{ config, lib, inputs, ... }: let cfg = config.modules.desktop.browsers.firefox; in { options.modules.desktop.browsers.firefox = { enable = lib.mkOption { default = false; example = true; }; }; config = lib.mkIf cfg.enable { home.file.".mozilla/firefox/Default/chrome/firefox-gnome-theme".source = inputs.firefox-gnome-theme; home.programs.firefox = { enable = true; profiles.Default = { search = { default = "DuckDuckGo"; force = true; }; userChrome = '' @import "firefox-gnome-theme/userChrome.css"; ''; userContent = '' @import "firefox-gnome-theme/userContent.css"; ''; settings = { ## GNOME theme "toolkit.legacyUserProfileCustomizations.stylesheets" = true; # Enable customChrome.css "browser.uidensity" = 0; # Set UI density to normal "svg.context-properties.content.enabled" = true; # Enable SVG context-propertes "browser.theme.dark-private-windows" = false; # Disable private window dark theme "widget.gtk.rounded-bottom-corners.enabled" = true; # Enable rounded bottom window corners ## Preferences "browser.ctrlTab.sortByRecentlyUsed" = true; "browser.discovery.enabled" = false; "browser.download.open_pdf_attachments_inline" = true; "browser.menu.showViewImageInfo" = true; "browser.newtabpage.enabled" = false; "browser.newtabpage.activity-stream.showSponsored" = false; "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; "browser.newtabpage.activity-stream.default.sites" = ""; "browser.privatebrowsing.forceMediaMemoryCache" = true; "browser.search.widget.inNavBar" = true; "browser.startup.page" = 3; "browser.startup.homepage" = "https://www.vimium.com"; "browser.toolbars.bookmarks.visibility" = "never"; "browser.uitour.enabled" = false; "browser.urlbar.suggest.engines" = false; "browser.urlbar.suggest.calculator" = true; "browser.urlbar.trending.featureGate" = false; "browser.urlbar.unitConversion.enabled" = true; "cookiebanners.service.mode" = 1; "cookiebanners.service.mode.privateBrowsing" = 1; "network.IDN_show_punycode" = true; ## Performance "browser.cache.jsbc_compression_level" = 3; "content.notify.interval" = 100000; "dom.enable_web_task_scheduling" = true; "dom.security.sanitizer.enabled" = true; "gfx.canvas.accelerated.cache-items" = 4096; "gfx.canvas.accelerated.cache-size" = 512; "gfx.content.skia-font-cache-size" = 20; "gfx.webrender.all" = true; "gfx.webrender.compositor" = true; "gfx.webrender.enable" = true; "image.mem.decode_bytes_at_a_time" = 32768; "layers.acceleration.force-enabled" = true; "layout.css.grid-template-masonry-value.enabled" = true; "media.ffmpeg.vaapi.enabled" = true; "media.memory_cache_max_size" = 65536; "media.cache_readahead_limit" = 7200; "media.cache_resume_threshold" = 3600; "network.dns.disablePrefetch" = true; "network.dns.disablePrefetchFromHTTPS" = true; "network.dnsCacheExpiration" = 3600; "network.http.max-connections" = 1800; "network.http.max-persistent-connections-per-server" = 10; "network.http.max-urgent-start-excessive-connections-per-host" = 5; "network.http.pacing.requests.enabled" = false; "network.predictor.enabled" = false; "network.prefetch-next" = false; "network.ssl_tokens_cache_capacity" = 10240; "pdfjs.enableScripting" = false; "security.mixed_content.block_display_content" = true; ## Experiments "app.normandy.enabled" = false; "app.normandy.api_url" = ""; "app.normandy.user_id" = ""; "app.shield.optoutstudies.enabled" = false; "browser.shopping.experience2023.active" = false; "browser.shopping.experience2023.enabled" = false; "extensions.screenshots.disabled" = true; "extensions.screenshots.upload-disabled" = true; "experiments.supported" = false; "experiments.enabled" = false; "experiments.manifest.uri" = ""; "network.allow-experiments" = false; ## Privacy "dom.private-attribution.submission.enabled" = false; # "privacy.resistFingerprinting" = true; "privacy.resistFingerprinting.autoDeclineNoUserInputCanvasPrompts" = false; "privacy.trackingprotection.enabled" = true; "privacy.trackingprotection.pbmode.enabled" = true; "privacy.userContext.enabled" = true; ## Geo "geo.enabled" = false; "geo.provider.use_gpsd" = false; "geo.wifi.uri" = ""; "browser.search.geoip.url" = ""; "browser.search.geoSpecificDefaults" = false; "browser.search.geoSpecificDefaults.url" = ""; ## Window meddling / popups "dom.disable_window_open_feature.close" = true; "dom.disable_window_open_feature.location" = true; "dom.disable_window_open_feature.menubar" = true; "dom.disable_window_open_feature.minimizable" = true; "dom.disable_window_open_feature.personalbar" = true; "dom.disable_window_open_feature.resizable" = true; "dom.disable_window_open_feature.status" = true; "dom.disable_window_open_feature.titlebar" = true; "dom.disable_window_open_feature.toolbar" = true; "dom.disable_window_move_resize" = true; "browser.link.open_newwindow" = 3; "browser.link.open_newwindow.restriction" = 0; "dom.disable_open_during_load" = true; "dom.popup_allowed_events" = "click dblclick"; ## Workers # "dom.serviceWorkers.enabled" = false; "dom.push.enabled" = false; "dom.webnotifications.enabled" = false; "dom.webnotifications.serviceworker.enabled" = false; "permissions.default.desktop-notification" = 2; ## DOM / JavaScript # "dom.event.clipboardevents.enabled" = false; "middlemouse.paste" = false; # "dom.allow_cut_copy" = false; "dom.disable_beforeunload" = true; "dom.vibrator.enabled" = false; # "javascript.options.asmjs" = false; # "javascript.options.wasm" = false; "dom.targetBlankNoOpener.enabled" = true; ## Hardware fingerprinting "dom.battery.enabled" = false; "dom.vr.enabled" = false; "media.navigator.enabled" = false; # "dom.webaudio.enabled" = false; ## Isolation "privacy.firstparty.isolate" = true; "privacy.firstparty.isolate.restrict_opener_access" = true; ## Telemetry "beacon.enabled" = false; "browser.newtabpage.activity-stream.feeds.telemetry" = false; "browser.newtabpage.activity-stream.telemetry" = false; "browser.send_pings" = false; "datareporting.policy.dataSubmissionEnabled" = false; "datareporting.healthReport.uploadEnabled" = false; "toolkit.coverage.opt-out" = true; "toolkit.coverage.endpoint.base" = ""; "toolkit.telemetry.archive.enabled" = false; "toolkit.telemetry.bhrPing.enabled" = false; "toolkit.telemetry.coverage.opt-out" = true; "toolkit.telemetry.enabled" = false; "toolkit.telemetry.firstShutdownPing.enabled" = false; "toolkit.telemetry.hybridContent.enabled" = false; "toolkit.telemetry.newProfilePing.enabled" = false; "toolkit.telemetry.reportingPolicy.firstRun" = false; "toolkit.telemetry.server" = "data:,"; "toolkit.telemetry.shutdownPingSender.enabled" = false; "toolkit.telemetry.unified" = false; "toolkit.telemetry.updatePing.enabled" = false; ## Pocket/Hello "loop.enabled" = false; "loop.feedback.baseUrl" = ""; "loop.gettingStarted.url" = ""; "loop.learnMoreUrl" = ""; "loop.legal.ToS_url" = ""; "loop.legal.privacy_url" = ""; "loop.oauth.google.redirect_uri" = ""; "loop.oauth.google.scope" = ""; "loop.server" = ""; "loop.soft_start_hostname" = ""; "loop.support_url" = ""; "loop.throttled2" = false; "loop.logDomains" = false; "browser.pocket.enabled" = false; "browser.pocket.api" = ""; "browser.pocket.site" = ""; "browser.pocket.oAuthConsumerKey" = ""; "browser.pocket.useLocaleList" = false; "brwoser.pocket.enabledLocales" = ""; ## Plugins "plugin.state.flash" = 0; "plugin.state.java" = 0; ## Misc "browser.selfsupport.url" = ""; }; }; }; }; }