{ config, lib, pkgs, ... }:

# about:policies
# Check about:support for extension/add-on ID strings.
# Check about:config for options.

with lib;

let
  cfg = config.settings.applications.firefox;
in {
  options = {
    settings.applications.firefox.enable = lib.mkOption {
      type = lib.types.bool;
      description = ''
        Enable firefox
      '';
    };
  };

  config = mkIf cfg.enable {
    home.packages = with pkgs; [
      unstable.firefoxpwa
    ];

    stylix.targets.firefox.profileNames = [ "${config.home.username}" ];
    
    programs.firefox = lib.mkMerge [
      {
        enable = true;
      }
      (lib.mkIf (config.home.username == "xeovalyte") {
        nativeMessagingHosts = [ pkgs.unstable.firefoxpwa ];
        policies = {
          DisableTelemetry = true;
          DisableFirefoxStudies = true;
          EnableTrackingProtection = {
            Value = true;
            Locked = true;
            Cryptomining = true;
            Fingerprinting = true;
          };
          DisablePocket = true;
          DisableFirefoxAccounts = true;
          DisableAccounts = true;
          DontCheckDefaultBrowser = true;
          DisplayBookmarksToolbar = "newpage";
          ExtensionSettings = {
            "nl-NL@dictionaries.addons.mozilla.org" = {
              install_url = "https://addons.mozilla.org/firefox/downloads/latest/woordenboek-nederlands/latest.xpi";
              installation_mode = "force_installed";
            };
            "uBlock0@raymondhill.net" = {
              install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
              installation_mode = "force_installed";
            };
            "{446900e4-71c2-419f-a6a7-df9c091e268b}" = {
              install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi";
              installation_mode = "force_installed";
            };
            "firefoxpwa@filips.si" = {
              install_url = "https://addons.mozilla.org/firefox/downloads/latest/pwas-for-firefox/latest.xpi";
              installation_mode = "force_installed";
            };
            "markdown-viewer@outofindex.com" = {
              install_url = "https://addons.mozilla.org/firefox/downloads/latest/markdown-viewer-chrome/latest.xpi";
              installation_mode = "force_installed";
            };
          };
        };
        profiles.${config.home.username} = {
          bookmarks.force = true;
          bookmarks.settings = [
            {
              name = "Toolbar";
              toolbar = true;
              bookmarks = [
                {
                  name = "Brightspace";
                  bookmarks = [
                    {
                      name = "Books";
                      url = "https://drive.google.com/drive/folders/1L5OTbn5p3i7_Nc80hc5PztiEGHKwi-I4";
                    }
                    {
                      name = "Linear algebra and Differential equations";
                      url = "https://brightspace.tudelft.nl/d2l/le/content/681028/Home";
                    }
                    {
                      name = "Electrical Energy Fundamentals";
                      url = "https://brightspace.tudelft.nl/d2l/le/content/681016/Home";
                    }
                    {
                      name = "IP 2";
                      url = "https://brightspace.tudelft.nl/d2l/le/content/681022/Home";
                    }
                  ];
                }
              ];
            }
          ];
          search.engines = {
            "Nix" = {
              urls = [{
                template = "https://mynixos.com/search";
                params = [
                  { name = "q"; value = "{searchTerms}"; }
                ];
              }];

              icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
              definedAliases = [ "@nix" ];
            };

            "SearXNG" = {
              urls = [{
                template = "https:/search.xeovalyte.dev/search";
                params = [
                  { name = "q"; value = "{searchTerms}"; }
                ];
              }];

              definedAliases = [ "@searxng" ];
            };

            "Startpage" = {
              urls = [{
                template = "https:/startpage.com/sp/search";
                params = [
                  { name = "q"; value = "{searchTerms}"; }
                ];
              }];

              definedAliases = [ "@sp" ];
            };

            "bing".metaData.hidden = true;
            "google".metaData.hidden = true;
            "ebay".metaData.hidden = true;
          };
          search.force = true;
          search.default = "ddg";

          settings = {
            "browser.disableResetPrompt" = true;
            "browser.download.panel.shown" = true;
            "browser.download.useDownloadDir" = false;
            "browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
            "browser.shell.checkDefaultBrowser" = false;
            "browser.shell.defaultBrowserCheckCount" = 1;
            "dom.security.https_only_mode" = true;
            "privacy.trackingProtection.enabled" = true;
            "browser.toolbars.bookmarks.visibility" = "newtab";
            "browser.translations.neverTranslateLanguages" = "nl";
            "browser.newtabpage.pinned" = [
              {
                label = "Server";
                url = "https://home.xeovalyte.dev";
              }
              {
                label = "Youtube";
                url = "https://youtube.com";
              }
              {
                label = "My TU Delft";
                url = "https://my.tudelft.nl/";
              }
              {
                label = "Vikunja";
                url = "https://vikunja.xeovalyte.dev/";
              }
            ];
            "signon.rememberSignons" = false;
          };
        };
      })
    ];
  };
}

  

