{
	config,
	container,
	lib,
	pkgs,
	...
}: let
	cfg = config.container.module.search;
in {
	options.container.module.search = {
		enable = lib.mkEnableOption "the search frontend.";
		address = lib.mkOption {
			default = "10.1.0.26";
			type    = lib.types.str;
		};
		port = lib.mkOption {
			default = 8080;
			type    = lib.types.int;
		};
		domain = lib.mkOption {
			default = "search.${config.container.domain}";
			type    = lib.types.str;
		};
		storage = lib.mkOption {
			default = "${config.container.storage}/search";
			type    = lib.types.str;
		};
	};

	config = lib.mkIf cfg.enable {
		containers.search = container.mkContainer cfg {
			config = { ... }: container.mkContainerConfig cfg {
				services.searx = {
					enable  = true;
					package = pkgs.searxng;
					# REF: https://github.com/searxng/searxng/blob/master/searx/settings.yml
					settings = {
						general = {
							debug          = false;
							enable_metrics = false;
							instance_name  = "SearX";
						};
						server = {
							bind_address    = cfg.address;
							image_proxy     = false;
							limiter         = false;
							method          = "GET";
							port            = cfg.port;
							public_instance = false;
							secret_key      = "searxxx";
						};
						search = {
							autocomplete     = "";
							autocomplete_min = 4;
							default_lang     = "auto";
							safe_search      = 0;
						};
						ui = {
							center_alignment = false;
							default_locale   = "";
							default_theme    = "simple";
							hotkeys          = "vim";
							infinite_scroll  = false;
							simple_style     = "dark";
						};
						outgoing = {
							enable_http2        = true;
							max_request_timeout = 10.0;
							pool_connections    = 100;
							pool_maxsize        = 20;
							request_timeout     = 3.0;
							# proxies = {
							#   "all://" = with config.container.module; [
							#     # "socks5:${frkn.address}:${frkn.port}"
							#     "socks5:${frkn.address}:1081"
							#     # "socks5:${frkn.address}:9150"
							#   ];
							# };
							# using_tor_proxy = true;
							# extra_proxy_timeout = 10;
						};
						# plugins = [ ];
						enabled_plugins = [
							"Basic Calculator"
							"Hostnames plugin"
							"Tracker URL remover"
						];
						hostnames = {
							replace = with config.container.module; {
								"(.*\.)?youtu\.be$"    = yt.domain;
								"(.*\.)?youtube\.com$" = yt.domain;
							};
							remove = [
								"(.*\.)?dzen\.ru$"
								"(.*\.)?facebook.com$"
								"(.*\.)?gosuslugi\.ru$"
								"(.*\.)?quora\.com$"
								"(.*\.)?rutube\.ru$"
								"(.*\.)?vk\.com$"
							];
							low_priority = [
								"(.*\.)?google(\..*)?$"
								"(.*\.)?microsoft\.com$"
							];
							high_priority = [
								"(.*\.)?4pda.to$"
								"(.*\.)?github.com$"
								"(.*\.)?wikipedia.org$"
							];
						};
						categories_as_tabs = {
							files   = { };
							general = { };
							images  = { };
							it      = { };
							map     = { };
							news    = { };
							videos  = { };
						};
						engines = let
							mkEnable = name: {
								inherit name;
								disabled = false;
							};
							mkDisable = name: {
								inherit name;
								disabled = true;
							};
						in [
							(mkEnable "bing")
							(mkDisable "qwant")
						];
					};
				};
			};
		};
	};
}