{ config, lib, pkgs, npins, ... }: { options.zpha.programs.firefox.enable = lib.mkEnableOption "firefox"; config = lib.mkIf config.zpha.programs.firefox.enable { preservation.preserveAt."/persist".users.zaphyra.directories = [ ".config/mozilla/firefox" ".cache/mozilla/firefox" ]; users.users.zaphyra.maid = { environment.sessionVariables.BROWSER = "firefox"; file.xdg_config = { "mozilla/firefox/gnome-theme".source = npins.firefoxGnomeTheme; "mozilla/firefox/zaphyra/chrome/userChrome.css".text = '' @import "../../gnome-theme/theme/gnome-theme.css"; ''; "mozilla/firefox/zaphyra/chrome/userContent.css".text = '' @import "../../gnome-theme/userContent.css"; ''; "mozilla/firefox/profiles.ini".text = '' [Profile0] Name=zaphyra IsRelative=1 Path=zaphyra Default=1 [General] StartWithLastProfile=1 Version=2 ''; }; xdg.mime-apps.defaultApplications = { "x-scheme-handler/http" = "firefox.desktop"; "x-scheme-handler/https" = "firefox.desktop"; "x-scheme-handler/chrome" = "firefox.desktop"; "image/svg+xml" = "firefox.desktop"; "text/html" = "firefox.desktop"; "text/xml" = "firefox.desktop"; }; packages = lib.singleton ( pkgs.firefox.override (old: { extraPrefsFiles = [ (pkgs.writeText "firefox-autoconfig.js" ( let uiState = { currentVersion = 23; newElementCount = 0; seen = [ ]; dirtyAreaCache = [ ]; placements = { widget-overflow-fixed-list = [ ]; toolbar-menubar = [ "menubar-items" ]; vertical-tabs = [ "tabbrowser-tabs" ]; PersonalToolbar = [ ]; unified-extensions-area = [ "containerise_kinte_sh-browser-action" "_e9090647-32ff-48e4-9c3c-1361e8fd270e_-browser-action" "_contain-facebook-browser-action" "_12cf650b-1822-40aa-bff0-996df6948878_-browser-action" "_testpilot-containers-browser-action" "sponsorblocker_ajay_app-browser-action" "_ublacklist-browser-action" ]; nav-bar = [ "sidebar-button" "back-button" "forward-button" "stop-reload-button" "urlbar-container" "downloads-button" "_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action" "ublock0_raymondhill_net-browser-action" "unified-extensions-button" ]; TabsToolbar = [ ]; }; }; in '' // required for firefox-gnome-theme lockPref("browser.toolbars.bookmarks.visibility", "never"); lockPref("browser.tabs.drawInTitlebar", true); lockPref("browser.theme.dark-private-windows", false); lockPref("browser.uidensity", 0); lockPref("svg.context-properties.content.enabled", true); lockPref("toolkit.legacyUserProfileCustomizations.stylesheets", true); // enable vertical tabs lockPref("sidebar.verticalTabs", true); lockPref("sidebar.visibility", "expand-on-hover"); lockPref("sidebar.main.tools", ""); lockPref("sidebar.verticalTabs.dragToPinPromo.dismissed", true); pref("browser.uiCustomization.state", "${lib.escape [ "\"" ] (builtins.toJSON uiState)}"); '' )) ]; nativeMessagingHosts = [ ]; extraPolicies = { SearchEngines = { Default = "Kagi"; Add = [ { Name = "Kagi"; URLTemplate = "https://kagi.com/search?q={searchTerms}"; Method = "GET"; IconURL = "https://kagi.com/favicon.png"; Alias = "kagi"; Description = "Search with kagi"; SuggestURLTemplate = "https://kagisuggest.com/api/autosuggest?q={searchTerms}"; } { Name = "Noogle"; URLTemplate = "https://noogle.dev/q?term={searchTerms}"; Method = "GET"; IconURL = "https://noogle.dev/favicon.png"; Alias = "noogle"; Description = "Search with noogle"; } { Name = "NixOS Options"; URLTemplate = "https://search.nixos.org/options?query={searchTerms}"; Method = "GET"; IconURL = "https://search.nixos.org/favicon.png"; Alias = "nixos"; Description = "Search in NixOS options"; } { Name = "Nix Packages"; URLTemplate = "https://search.nixos.org/packages?query={searchTerms}"; Method = "GET"; IconURL = "https://search.nixos.org/favicon.png"; Alias = "nixpkgs"; Description = "Search in nixpkgs"; } ]; }; DisableSetDesktopBackground = true; # disable tracking bullshit DisableTelemetry = true; DisablePocket = true; DisableFirefoxStudies = true; DisableFeedbackCommands = true; # disable password manager PasswordManagerEnabled = false; OfferToSaveLogins = false; PrimaryPassword = false; AutofillCreditCardEnabled = false; # disable bookmark-toolbar NoDefaultBookmarks = true; DisplayBookmarksToolbar = "never"; DisplayMenuBar = "default-off"; Homepage.StartPage = "previous-session"; Homepage.Locked = true; # disable DoH DNSOverHTTPS.Enabled = false; DNSOverHTTPS.Locked = true; # enable tracking protection EnableTrackingProtection = { Cryptomining = true; Fingerprinting = true; Value = true; Locked = true; }; UserMessaging = { ExtensionRecommendations = false; FeatureRecommendations = false; UrlbarInterventions = false; SkipOnboarding = true; MoreFromMozilla = false; FirefoxLabs = false; Locked = true; }; Handlers.schemes = let handler = { action = "useHelperApp"; ask = true; handlers = [ { name = "VDV PKPass DB Navigator Hook"; path = pkgs.writeShellScript "db-hook" '' #!/usr/bin/env bash if [[ "$1" == "dbnav:"* ]]; then url=$(echo -n $1 | base64) xdg-open "https://vdv-pkpass.magicalcodewit.ch/account/db_login/callback?url=$url" elif [[ "$1" == "bahnbonus:"* ]]; then url=$(echo -n $1 | base64) xdg-open "https://vdv-pkpass.magicalcodewit.ch/account/bahnbonus_login/callback?url=$url" else xdg-open "$1" fi ''; } ]; }; in { dbnav = handler; bahnbonus = handler; }; Preferences = lib.mapAttrs (_name: value: { Status = "locked"; Value = value; }) { "browser.uitour.enabled" = false; # "pinch-to-zoom" zoom with alt+mousewheel "mousewheel.with_alt.action" = 5; # disable some password-manager/autofill features "signon.generation.enabled" = false; "signon.autofillForms" = false; "signon.firefoxRelay.feature" = "disabled"; "signon.management.page.breach-alerts.enabled" = false; # ask websites to not share or sell data "privacy.globalprivacycontrol.enabled" = true; # disable AI bullshit "browser.ml.smartAssist.enabled" = false; "browser.ml.pageAssist.enabled" = false; "browser.ml.chat.sidebar" = false; "browser.ml.chat.shortcuts" = false; "browser.ml.enable" = false; "browser.ml.chat.enabled" = false; "browser.ml.linkPreview.enabled" = false; "browser.tabs.groups.smart.enabled" = false; "browser.tabs.groups.smart.userEnabled" = false; "extensions.ml.enabled" = false; # disable warning on `abou:config` "browser.aboutConfig.showWarning" = false; # disable telemetry stuff "browser.ping-centre.telemetry" = false; "browser.topsites.contile.enabled" = false; "browser.crashReports.unsubmittedCheck.autoSubmit2" = false; # just open previous session "browser.startup.page" = 3; # disable trending search suggestions "browser.urlbar.suggest.trending" = false; # disable 'fancy' newtab page bullshit with tons of tracking and ads "browser.startup.homepage" = "chrome://browser/content/blanktab.html"; "browser.newtabpage.enabled" = false; "browser.newtabpage.activity-stream.telemetry" = false; "browser.newtabpage.activity-stream.showSearch" = false; "browser.newtabpage.activity-stream.showSponsored" = false; "browser.newtabpage.activity-stream.showSponsoredTopSites" = false; "browser.newtabpage.activity-stream.feeds.telemetry" = false; "browser.newtabpage.activity-stream.feeds.topsites" = false; "browser.newtabpage.activity-stream.feeds.snippets" = false; "browser.newtabpage.activity-stream.feeds.system.topsites" = false; "browser.newtabpage.activity-stream.feeds.section.highlights" = 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; }; ExtensionSettings = lib.pipe [ # Bitwarden Password Manager [ "navbar" "{446900e4-71c2-419f-a6a7-df9c091e268b}" ] # uBlock Origin [ "navbar" "uBlock0@raymondhill.net" ] # uBlacklist [ "menupanel" "@ublacklist" ] # Facebook Container [ "menupanel" "@contain-facebook" ] # Google Container [ "menupanel" "@contain-google" ] # Containerise [ "menupanel" "containerise@kinte.sh" ] # cookies.txt [ "menupanel" "{12cf650b-1822-40aa-bff0-996df6948878}" ] # Firefox Multi-Account Containers [ "menupanel" "@testpilot-containers" ] # IndicateTLS [ "menupanel" "{252ee273-8c8d-4609-b54d-62ae345be0a1}" ] # IPvFoo [ "menupanel" "ipvfoo@pmarks.net" ] # Modern for Wikipedia [ "menupanel" "{e9090647-32ff-48e4-9c3c-1361e8fd270e}" ] # SponsorBlock for YouTube - Skip Sponsorships [ "menupanel" "sponsorBlocker@ajay.app" ] # German Dictionary [ "menupanel" "de-DE@dictionaries.addons.mozilla.org" ] ] [ (lib.map (config: { name = lib.elemAt config 1; value = { installation_mode = "normal_installed"; default_area = lib.elemAt config 0; install_url = "https://addons.mozilla.org/firefox/downloads/latest/${lib.elemAt config 1}/latest.xpi"; }; })) lib.listToAttrs ]; }; }) ); }; }; }