{ config, lib, pkgs, inputs, ... }: with lib; with lib.my; let cfg = config.modules.desktop.browsers.firefox; in { options.modules.desktop.browsers.firefox = { enable = mkBoolOpt false; }; config = 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.cs "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 ## Preferences "browser.ctrlTab.sortByRecentlyUsed" = true; "browser.newtabpage.enabled" = false; "browser.search.widget.inNavBar" = true; "browser.startup.page" = 3; "browser.startup.homepage" = "https://www.vimium.com"; "browser.toolbars.bookmarks.visibility" = "never"; ## Experiments "app.normandy.enabled" = false; "app.normandy.api_url" = ""; "app.normandy.user_id" = ""; "extensions.screenshots.disabled" = true; "extensions.screenshots.upload-disabled" = true; "experiments.supported" = false; "experiments.enabled" = false; "experiments.manifest.uri" = ""; "network.allow-experiments" = false; "privacy.trackingprotection.enabled" = false; ## 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; ## 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" = ""; ## Misc "browser.selfsupport.url" = ""; }; }; }; }; }