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

with lib;

let
  cfg = config.targets.darwin;
  searchEngines = {
    Bing = "com.bing.www";
    DuckDuckGo = "com.duckduckgo";
    Ecosia = "org.ecosia.www";
    Google = "com.google.www";
    Yahoo = "com.yahoo.www";
  };
  searchId = getAttr cfg.search searchEngines;
in {
  options.targets.darwin.search = mkOption {
    type = with types; nullOr (enum (attrNames searchEngines));
    default = null;
    description = "Default search engine.";
  };

  config = mkIf (cfg.search != null) {
    assertions = [
      (hm.assertions.assertPlatform "targets.darwin.search" pkgs
        platforms.darwin)
    ];

    targets.darwin.defaults = {
      NSGlobalDomain.NSPreferredWebServices = {
        NSWebServicesProviderWebSearch = {
          NSDefaultDisplayName = cfg.search;
          NSProviderIdentifier = searchId;
        };
      };
      "com.apple.Safari".SearchProviderIdentifier = searchId;
    };
  };
}