{ 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
    ];

    programs.firefox = {
      enable = true;
      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.xeovalyte = {
        bookmarks = [
          {
            name = "Toolbar";
            toolbar = true;
            bookmarks = [
              {
                name = "Brightspace";
                bookmarks = [
                  {
                    name = "Books";
                    url = "https://drive.google.com/drive/folders/1L5OTbn5p3i7_Nc80hc5PztiEGHKwi-I4";
                  }
                  {
                    name = "LCB";
                    url = "https://brightspace.tudelft.nl/d2l/le/content/681010/Home";
                  }
                  {
                    name = "Calculus";
                    url = "https://brightspace.tudelft.nl/d2l/le/content/681024/Home";
                  }
                  {
                    name = "IP1";
                    url = "https://brightspace.tudelft.nl/d2l/le/content/681020/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 = "SearXNG";

        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/";
            }
          ];
          "signon.rememberSignons" = false;
        };
      };
    };
  };
}

  

