{ pkgs, config, ... }:
let
  bookmarks = [
    (mkBookmark "Dashboard" "https://home.voronind.com")
    (mkBookmark "Watch" "https://watch.voronind.com")
    (mkBookmark "Telegram" "https://web.telegram.org/a")
    (mkBookmark "WorkChat" "https://fsmm.fsight.ru/fmp")
    (mkBookmark "Mail" "https://mail.voronind.com")
    (mkBookmark "WorkMail" "https://mail.fsight.ru")
    (mkBookmark "Git" "https://git.voronind.com")
    (mkBookmark "WorkGit" "https://git.fmp.fsight.world")
    (mkBookmark "WorkBoard" "https://support.fsight.ru")
    (mkBookmark "Hass" "https://iot.voronind.com")
    (mkBookmark "Cloud" "https://cloud.voronind.com")
  ];

  searchEngines = [
    (mkSearchEngine "s" "SearX" "https://search.voronind.com/search?q={searchTerms}")
    (mkSearchEngine "ru" "RuTracker" "https://rutracker.org/forum/tracker.php?nm={searchTerms}")
    (mkSearchEngine "re" "Reddit" "https://www.reddit.com/search/?q={searchTerms}")
    (mkSearchEngine "no" "NixOS Options" "https://search.nixos.org/options?query={searchTerms}")
    (mkSearchEngine "np" "NixOS Packages" "https://search.nixos.org/packages?query={searchTerms}")
    (mkSearchEngine "so" "Stack Overflow" "https://stackoverflow.com/search?tab=votes&q={searchTerms}")
    (mkSearchEngine "hm" "Home Manager" "https://home-manager-options.extranix.com/?query={searchTerms}")
  ];

  extensions = {
    "addon@darkreader.org" = mkExtension "https://addons.mozilla.org/firefox/downloads/latest/darkreader/latest.xpi";
    "cliget@zaidabdulla.com" = mkExtension "https://addons.mozilla.org/firefox/downloads/latest/cliget/latest.xpi";
    "foxyproxy@eric.h.jung" = mkExtension "https://addons.mozilla.org/firefox/downloads/latest/foxyproxy-standard/latest.xpi";
    "uBlock0@raymondhill.net" = mkExtension "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
    "{446900e4-71c2-419f-a6a7-df9c091e268b}" = mkExtension "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi";
    "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}" = mkExtension "https://addons.mozilla.org/firefox/downloads/latest/user-agent-string-switcher/latest.xpi";
    "{d7742d87-e61d-4b78-b8a1-b469842139fa}" = mkExtension "https://addons.mozilla.org/firefox/downloads/latest/vimium-ff/latest.xpi";
    "{e7625f06-e252-479d-ac7a-db68aeaff2cb}" = mkExtension "https://addons.mozilla.org/firefox/downloads/latest/togglefonts/latest.xpi";
    # NOTE: This extension is helpful to find the required parameters for this config.
    # Or find them yourself inside the `about:support`.
    # "queryamoid@kaply.com"                   = mkExtension "https://github.com/mkaply/queryamoid/releases/download/v0.1/query_amo_addon_id-0.1-fx.xpi";
  };

  extraConfig = ''
    // Bookmarks.
    user_pref("browser.microsummary.enabled",          true);
    user_pref("browser.places.importBookmarksHTML",    true);
    user_pref("browser.toolbars.bookmarks.visibility", "never");

    // Fonts.
    user_pref("browser.display.use_document_fonts", 0);
    user_pref("font.minimum-size.x-cyrillic", ${toString config.style.font.size.application});
    user_pref("font.minimum-size.x-unicode",  ${toString config.style.font.size.application});
    user_pref("font.minimum-size.x-western",  ${toString config.style.font.size.application});
    user_pref("font.name.monospace.x-cyrillic", "${config.style.font.monospace.name}");
    user_pref("font.name.monospace.x-unicode",  "${config.style.font.monospace.name}");
    user_pref("font.name.monospace.x-western",  "${config.style.font.monospace.name}");
    user_pref("font.name.sans-serif.x-cyrillic", "${config.style.font.sansSerif.name}");
    user_pref("font.name.sans-serif.x-unicode",  "${config.style.font.sansSerif.name}");
    user_pref("font.name.sans-serif.x-western",  "${config.style.font.sansSerif.name}");
    user_pref("font.name.serif.x-cyrillic", "${config.style.font.serif.name}");
    user_pref("font.name.serif.x-unicode",  "${config.style.font.serif.name}");
    user_pref("font.name.serif.x-western",  "${config.style.font.serif.name}");

    // Animations.
    user_pref("browser.fullscreen.animateUp", 0);
    user_pref("browser.fullscreen.autohide", true);

    // Homepage.
    user_pref("browser.newtabpage.enabled", false);
    user_pref("browser.startup.homepage", "https://home.voronind.com/");
    user_pref("browser.startup.page", 3);

    // Passwords.
    user_pref("signon.prefillForms",    false);
    user_pref("signon.rememberSignons", false);

    // Formats.
    user_pref("image.jxl.enabled", true);

    // User agent.
    // user_pref("general.useragent.override", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36");

    // Disable HTTP3.
    user_pref("network.http.http3.enable", false);

    // Disable built-in DoH.
    user_pref("doh-rollout.disable-heuristics", true);
    user_pref("network.trr.mode", 5);

    // HTTPS only mode.
    user_pref("dom.security.https_only_mode", true);
    user_pref("dom.security.https_only_mode_ever_enabled", true);

    // Style.
    user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);

    // Disable auto gain for the mic.
    // user_pref("media.getusermedia.audio.processing.aec", 0);
    // user_pref("media.getusermedia.audio.processing.aec.enabled", false);
    // user_pref("media.getusermedia.audio.processing.agc", 0);
    // user_pref("media.getusermedia.audio.processing.agc.enabled", false);
    // user_pref("media.getusermedia.audio.processing.agc2.forced", false)
    // user_pref("media.getusermedia.audio.processing.hpf.enabled", false);
    // user_pref("media.getusermedia.audio.processing.noise", 0);
    // user_pref("media.getusermedia.audio.processing.noise.enabled", false);
    // user_pref("media.getusermedia.audio.processing.platform.enabled", false);
    // user_pref("media.getusermedia.audio.processing.transient.enabled", false);
  '';

  userChrome = ''
    * {
      font-family: "${config.style.font.serif.name}" !important;
      font-size:   ${toString config.style.font.size.application}pt !important;
    }
  '';

  userContent = ''
    @-moz-document url(about:home), url(about:newtab), url(about:privatebrowsing), url(about:blank) {
      .click-target-container *, .top-sites-list * {
        color: #fff !important ;
        text-shadow: 2px 2px 2px #222 !important ;
      }
      body::before {
        content: "" ;
        z-index: -1 ;
        position: fixed ;
        top: 0 ;
        left: 0 ;
        background: #f9a no-repeat url("${config.module.wallpaper.path}?raw=true") center ;
        background-color: #222;
        background-size: cover ;
        /* filter: blur(4px) ; */
        width: 100vw ;
        height: 100vh ;
      }
      /* .logo { background-image: url("{repo}/logo.png?raw=true") !important; } */
      /* .logo { background-image: none !important; } */
    }
  '';

  mkExtension = install_url: {
    inherit install_url;
    installation_mode = "force_installed";
  };

  mkBookmark = name: url: { inherit name url; };

  mkSearchEngine = Alias: Description: URLTemplate: {
    inherit Alias Description URLTemplate;
    Method = "GET";
    Name = Description;
  };
in
{
  enable = true;
  package = pkgs.firefox-esr;
  # languagePacks = [ "en-US" "ru" ];
  profiles.default = {
    inherit extraConfig userChrome userContent;
  };
  policies = {
    ManagedBookmarks = [ { toplevel_name = "Pin"; } ] ++ bookmarks;
    ExtensionUpdate = true;
    ExtensionSettings = {
      # Block extension installation outside of this config.
      "*" = {
        install_sources = [ "*" ];
        installation_mode = "blocked";
      };
    } // extensions;
    # NOTE: `firefox-esr` edition is required to change search engines.
    SearchEngines = {
      Add = searchEngines;
      Default = "SearX";
      PreventInstalls = true;
      Remove = [
        "Bing"
        "DuckDuckGo"
        "Google"
        "Wikipedia (en)"
      ];
    };
  };
}