nixos/clients/quadraticserver/searxng.nix
2025-07-31 22:29:06 -04:00

115 lines
3 KiB
Nix

{lib, ...}: {
services = let
socket = "/var/run/searx/socket";
domain = "search.federated.nexus";
in {
searx = {
enable = true;
settings = let
enginesByCategory = {
general = {
google = {};
duckduckgo = {};
};
"social media" = {
tootfinder = {};
"mastodon users" = {};
"lemmy communities" = {};
"lemmy comments" = {};
"lemmy users" = {};
"lemmy posts" = {};
};
images = {
"duckduckgo images".disabled = false;
"google images" = {};
};
map.openstreetmap = {};
videos = {
peertube.disabled = false;
youtube = {};
};
it = {
github = {};
askubuntu = {};
superuser = {};
stackoverflow = {};
codeberg.disabled = false;
"gitea.com".disabled = false;
"git.federated.nexus" = {
engine = "gitea";
base_url = "https://git.federated.nexus";
};
};
};
engines =
builtins.foldl'
(
acc: category:
acc
// lib.mapAttrs' (name: val: {
name = name;
value = val // {categories = [category];};
})
enginesByCategory.${category}
)
{}
(lib.attrNames enginesByCategory);
in {
general = {
instance_name = "Federated Nexus Search";
contact_url = "mailto:henry@henryhiles.com";
};
search = {
autocomplete = "duckduckgo";
favicon_resolver = "duckduckgo";
};
ui = {
query_in_title = true;
infinite_scroll = true;
center_alignment = true;
};
server = {
method = "GET";
base_url = "https://${domain}";
bind_address = "unix://${socket}";
secret_key = "I don't use anything that requires a secret key.";
};
plugins = {
"searx.plugins.oa_doi_rewrite.SXNGPlugin".active = true;
"searx.plugins.tracker_url_remover.SXNGPlugin".active = true;
};
categories_as_tabs = builtins.listToAttrs (
map (category: {
name = category;
value = {};
}) (lib.attrNames enginesByCategory)
);
use_default_settings.engines.keep_only = lib.attrNames engines;
engines = lib.mapAttrsToList (name: value: {inherit name;} // value) engines;
};
};
caddy.authedHosts."${domain}" = "reverse_proxy unix/${socket}";
};
systemd.services = let
commonConfig = builtins.mapAttrs (_: value: lib.mkForce value) {
Group = "caddy";
RuntimeDirectoryMode = "0770";
UMask = "007";
};
in {
searx.serviceConfig = commonConfig;
searx-init.serviceConfig = commonConfig;
};
}