{ inputs, pkgs, lib, ... }: let firefox-addons = inputs.firefox-addons.packages.${pkgs.system}; commonSettings = { # Disable DNS over HTTPS (use system DNS, i.e. VPN's DNS) "network.trr.mode" = 5; # Set Security Level Safer # "browser.security_level.security_slider" = 2; # Disable private browsing mode and enable restoring sessions "browser.privatebrowsing.autostart" = false; "browser.startup.page" = 3; # Enable persistence of site data "permissions.memory_only" = false; # Customise clear on shutdown "privacy.clearOnShutdown.cache" = true; "privacy.clearOnShutdown.cookies" = true; "privacy.clearOnShutdown.sessions" = true; "privacy.clearOnShutdown.offlineApps" = true; "privacy.clearOnShutdown.openWindows" = false; "privacy.clearOnShutdown.siteSettings" = false; "privacy.clearOnShutdown.downloads" = false; "privacy.clearOnShutdown.formdata" = false; "privacy.clearOnShutdown.history" = false; # Disable extension auto updates "extensions.update.enabled" = false; "extensions.update.autoUpdateDefault" = false; # Use native file picker instead of GTK file picker "widget.use-xdg-desktop-portal.file-picker" = 1; # enable WebAuthn "security.webauth.webauthn" = true; # video acceleration "media.ffmpeg.vaapi.enabled" = true; }; commonSearch = { force = true; # TODO defaults don't work default = "qwant"; privateDefault = "qwant"; order = [ "qwant" "ecosia" "ddg" "startpage" "kagi" ]; engines = { # builtin startpage.metaData.alias = "@s"; ddg.metaData.alias = "@d"; # extra qwant = { name = "Qwant"; urls = [ { template = "https://www.qwant.com/?q={searchTerms}"; } ]; iconMapObj."16" = "https://www.qwant.com/favicon.ico"; definedAliases = [ "@q" ]; }; ecosia = { name = "Ecosia"; urls = [ { template = "https://www.ecosia.org/search?q={searchTerms}"; } ]; iconMapObj."16" = "https://www.ecosia.org/favicon.ico"; definedAliases = [ "@e" ]; }; kagi = { name = "Kagi"; urls = [ { template = "https://kagi.com/search?q={searchTerms}"; } ]; iconMapObj."16" = "https://kagi.com/favicon.ico"; definedAliases = [ "@k" ]; }; github = { name = "GitHub"; urls = [ { template = "https://github.com/search?q={searchTerms}"; } ]; iconMapObj."16" = "https://github.com/favicon.ico"; definedAliases = [ "@gh" ]; }; gitlab = { name = "GitLab"; urls = [ { template = "https://gitlab.com/search?search={searchTerms}"; } ]; iconMapObj."16" = "https://gitlab.com/favicon.ico"; definedAliases = [ "@gl" ]; }; codeberg = { name = "Codeberg"; urls = [ { template = "https://codeberg.org/explore/repos?q={searchTerms}"; } ]; iconMapObj."16" = "https://codeberg.org/favicon.ico"; definedAliases = [ "@cb" ]; }; nix-packages = { name = "Nix Packages"; urls = [ { template = "https://search.nixos.org/packages?query={searchTerms}"; } ]; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@np" ]; }; nixos-options = { name = "NixOS Options"; urls = [ { template = "https://search.nixos.org/options?query={searchTerms}"; } ]; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@no" ]; }; nix-flakes-packages = { name = "Nix Flakes: Packages"; urls = [ { template = "https://search.nixos.org/flakes?type=packages&query={searchTerms}"; } ]; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@nfp" ]; }; nix-flakes-options = { name = "Nix Flakes: Options"; urls = [ { template = "https://search.nixos.org/flakes?type=options&query={searchTerms}"; } ]; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@nfo" ]; }; nixos-wiki = { name = "NixOS Wiki"; urls = [ { template = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; } ]; icon = "''${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@nw" ]; }; crates-io = { name = "Crates.io"; urls = [ { template = "https://crates.io/search?q={searchTerms}"; } ]; iconMapObj."16" = "https://crates.io/favicon.ico"; definedAliases = [ "@rc" ]; }; docs-rs = { name = "Docs.rs"; urls = [ { template = "https://docs.rs/releases/search?query={searchTerms}"; } ]; iconMapObj."16" = "https://docs.rs/favicon.ico"; definedAliases = [ "@rd" ]; }; rust-book = { name = "Rust Book"; urls = [ { template = "https://doc.rust-lang.org/book/?search={searchTerms}"; } ]; iconMapObj."16" = "https://doc.rust-lang.org/book/favicon.svg"; definedAliases = [ "@rb" ]; }; rust-std = { name = "Rust std"; urls = [ { template = "https://doc.rust-lang.org/stable/std/?search={searchTerms}"; } ]; iconMapObj."16" = "https://www.rust-lang.org/static/images/favicon.svg"; definedAliases = [ "@rs" ]; }; npm = { name = "npm"; urls = [ { template = "https://www.npmjs.com/search?q={searchTerms}"; } ]; iconMapObj."16" = "https://static-production.npmjs.com/da3ab40fb0861d15c83854c29f5f2962.png"; definedAliases = [ "@npm" ]; }; pypi = { name = "PyPI"; urls = [ { template = "https://pypi.org/search/?q={searchTerms}"; } ]; iconMapObj."16" = "https://pypi.org/favicon.ico"; definedAliases = [ "@pypi" ]; }; stack-overflow = { name = "Stack Overflow"; urls = [ { template = "https://stackoverflow.com/search?q={searchTerms}"; } ]; iconMapObj."16" = "https://cdn.sstatic.net/Sites/stackoverflow/Img/favicon.ico"; definedAliases = [ "@so" ]; }; wikipedia = { name = "Wikipedia"; urls = [ { template = "https://en.wikipedia.org/wiki/{searchTerms}"; } ]; iconMapObj."16" = "https://en.wikipedia.org/favicon.ico"; definedAliases = [ "@w" ]; }; wolfram-alpha = { name = "Wolfram Alpha"; urls = [ { template = "https://www.wolframalpha.com/input?i={searchTerms}"; } ]; iconMapObj."16" = "https://www.wolframalpha.com/_next/static/images/favicon_1zbE9hjk.ico"; definedAliases = [ "@wa" ]; }; reddit = { name = "Reddit"; urls = [ { template = "https://www.reddit.com/search/?q={searchTerms}"; } ]; iconMapObj."16" = "https://www.reddit.com/favicon.ico"; definedAliases = [ "@r" ]; }; }; }; commonExtensions = with firefox-addons; [ dictionary-german proton-pass libredirect zotero-connector ]; in { imports = [ ../modules/firefox/mullvad-browser.nix ]; programs.mullvad-browser = { enable = true; createProfileBins = true; profiles = { private = { id = 0; settings = commonSettings; search = commonSearch; extensions.packages = commonExtensions; }; work = { id = 1; settings = commonSettings; extensions.packages = commonExtensions ++ (with firefox-addons; [ bitwarden react-devtools reduxdevtools ]); }; }; }; }