nixos/modules/services/meilisearch.nix

85 lines
2.4 KiB
Nix
Raw Normal View History

2023-08-26 12:17:30 +08:00
inputs:
{
options.nixos.services.meilisearch = let inherit (inputs.lib) mkOption types; in
{
2023-08-26 13:30:35 +08:00
instances = mkOption
{
type = types.attrsOf (types.submodule (submoduleInputs: { options =
{
user = mkOption { type = types.nonEmptyStr; default = submoduleInputs.config._module.args.name; };
port = mkOption { type = types.ints.unsigned; };
};}));
default = {};
};
2023-08-26 12:17:30 +08:00
};
config =
let
inherit (inputs.config.nixos.services) meilisearch;
inherit (inputs.localLib) stripeTabs attrsToList;
2023-08-26 13:47:45 +08:00
inherit (builtins) map listToAttrs;
in
2023-08-26 12:17:30 +08:00
{
2023-08-27 00:33:59 +08:00
systemd =
{
services = listToAttrs (map
(instance:
2023-08-26 13:30:35 +08:00
{
2023-08-27 00:33:59 +08:00
name = "meilisearch-${instance.name}";
value =
2023-08-26 13:30:35 +08:00
{
2023-08-27 00:33:59 +08:00
description = "meiliSearch ${instance.name}";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig =
{
User = instance.value.user;
Group = inputs.config.users.users.${instance.value.user}.group;
ExecStart = "${inputs.pkgs.meilisearch}/bin/meilisearch"
+ " --config-file-path ${inputs.config.sops.templates."meilisearch-${instance.name}.toml".path}";
2023-08-27 02:04:00 +08:00
Restart = "always";
StartLimitBurst = 3;
LimitNOFILE = "infinity";
LimitNPROC = "infinity";
LimitCORE = "infinity";
2023-08-27 00:33:59 +08:00
};
2023-08-26 13:30:35 +08:00
};
2023-08-27 00:33:59 +08:00
})
(attrsToList meilisearch.instances));
tmpfiles.rules = map
(instance:
let
user = instance.value.user;
group = inputs.config.users.users.${instance.value.user}.group;
in
"d /var/lib/meilisearch/${instance.name} 0700 ${user} ${group}")
(attrsToList meilisearch.instances);
};
2023-08-26 12:17:30 +08:00
sops =
{
2023-08-26 13:47:45 +08:00
templates = listToAttrs (map
2023-08-26 13:30:35 +08:00
(instance:
{
name = "meilisearch-${instance.name}.toml";
value =
{
content = stripeTabs
''
2023-08-26 13:47:45 +08:00
db_path = "/var/lib/meilisearch/${instance.name}"
http_addr = "0.0.0.0:${toString instance.value.port}"
master_key = "${inputs.config.sops.placeholder."meilisearch/${instance.name}"}"
env = "production"
dump_dir = "/var/lib/meilisearch/${instance.name}/dumps"
log_level = "INFO"
max_indexing_memory = "2Gb"
2023-08-26 13:30:35 +08:00
'';
owner = inputs.config.users.users.misskey.name;
};
})
(attrsToList meilisearch.instances));
secrets = listToAttrs (map
(instance: { name = "meilisearch/${instance.name}"; value = {}; })
(attrsToList meilisearch.instances));
2023-08-26 12:17:30 +08:00
};
};
}