{
  config,
  lib,
  inputs,
  pkgs,
  ...
}: let
  cfg = config.hive.firefox;
in {
  options.hive.firefox = {
    enable = lib.mkEnableOption "Enable Firefox";
    plasmaIntegration = lib.mkEnableOption "Enable Plasma Integration";
    passFF = lib.mkEnableOption "Enable PassFF";
  };
  config = lib.mkIf cfg.enable {
    programs.firefox = {
      enable = true;

      # Default profile
      profiles.jonas = {
        name = "Jonas";
        id = 0;
        isDefault = true;

        # Search
        search = {
          default = "ddg";
          order = ["ddg" "google"];
          force = true;
          engines = {
            "Nix Packages" = {
              urls = [
                {
                  template = "https://search.nixos.org/packages";
                  params = [
                    {
                      name = "type";
                      value = "packages";
                    }
                    {
                      name = "query";
                      value = "{searchTerms}";
                    }
                  ];
                }
              ];
            };
            "Noogle" = {
              urls = [
                {
                  template = "https://noogle.dev/q";
                  params = [
                    {
                      name = "term";
                      value = "{searchTerms}";
                    }
                  ];
                }
              ];
            };
            "cppreference" = {
              urls = [
                {
                  template = "https://en.cppreference.com/mwiki/index.php";
                  params = [
                    {
                      name = "title";
                      value = "Special%3ASearch";
                    }
                    {
                      name = "search";
                      value = "{searchTerms}";
                    }
                    {
                      name = "Go";
                      value = "go";
                    }
                  ];
                }
              ];
            };
          };
        };

        # Extensions
        extensions.packages = with inputs.firefox-addons.packages."x86_64-linux"; ([
            ublock-origin
            violentmonkey
          ]
          ++ lib.optional cfg.plasmaIntegration plasma-integration
          ++ lib.optional cfg.passFF passff);
      };
    };
    home.packages =
      lib.optional cfg.passFF
      pkgs.passff-host;
  };
}
