nixos/sonic-server: init

Changed files
+78
nixos
modules
+1
nixos/modules/module-list.nix
···
./services/search/meilisearch.nix
./services/search/opensearch.nix
./services/search/qdrant.nix
+
./services/search/sonic-server.nix
./services/search/typesense.nix
./services/security/aesmd.nix
./services/security/authelia.nix
+77
nixos/modules/services/search/sonic-server.nix
···
+
{ config, lib, pkgs, ... }:
+
+
let
+
cfg = config.services.sonic-server;
+
+
settingsFormat = pkgs.formats.toml { };
+
configFile = settingsFormat.generate "sonic-server-config.toml" cfg.settings;
+
+
in {
+
meta.maintainers = [ lib.maintainers.anthonyroussel ];
+
+
options = {
+
services.sonic-server = {
+
enable = lib.mkEnableOption (lib.mdDoc "Sonic Search Index");
+
+
package = lib.mkPackageOptionMD pkgs "sonic-server" { };
+
+
settings = lib.mkOption {
+
type = lib.types.submodule { freeformType = settingsFormat.type; };
+
default = {
+
store.kv.path = "/var/lib/sonic/kv";
+
store.fst.path = "/var/lib/sonic/fst";
+
};
+
example = {
+
server.log_level = "debug";
+
channel.inet = "[::1]:1491";
+
};
+
description = lib.mdDoc ''
+
Sonic Server configuration options.
+
+
Refer to
+
<https://github.com/valeriansaliou/sonic/blob/master/CONFIGURATION.md>
+
for a full list of available options.
+
'';
+
};
+
};
+
};
+
+
config = lib.mkIf cfg.enable {
+
services.sonic-server.settings = lib.mapAttrs (name: lib.mkDefault) {
+
server = {};
+
channel.search = {};
+
store = {
+
kv = {
+
path = "/var/lib/sonic/kv";
+
database = {};
+
pool = {};
+
};
+
fst = {
+
path = "/var/lib/sonic/fst";
+
graph = {};
+
pool = {};
+
};
+
};
+
};
+
+
systemd.services.sonic-server = {
+
description = "Sonic Search Index";
+
+
wantedBy = [ "multi-user.target" ];
+
after = [ "network.target" ];
+
+
serviceConfig = {
+
Type = "simple";
+
+
ExecStart = "${lib.getExe cfg.package} -c ${configFile}";
+
DynamicUser = true;
+
Group = "sonic";
+
LimitNOFILE = "infinity";
+
Restart = "on-failure";
+
StateDirectory = "sonic";
+
StateDirectoryMode = "750";
+
User = "sonic";
+
};
+
};
+
};
+
}