synix/modules/nixos/baibot/default.nix
sid 95a533c876
All checks were successful
Deploy docs / build-and-deploy (push) Successful in 3s
initial commit
2026-02-23 20:34:35 +01:00

98 lines
2.4 KiB
Nix

{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.baibot;
homeDir = "/var/lib/baibot";
inherit (lib)
mkEnableOption
mkIf
mkOption
optional
types
;
in
{
options = {
services.baibot = {
enable = mkEnableOption "Baibot, a Matrix AI bot.";
configFile = mkOption {
type = types.nullOr types.path;
default = "${homeDir}/config.yml";
description = ''
Path to the baibot configuration file. Use the template for reference:
https://github.com/etkecc/baibot/blob/main/etc/app/config.yml.dist
'';
};
persistenceDataDirPath = mkOption {
type = types.nullOr types.path;
default = "${homeDir}/data";
description = ''
Path to the directory where baibot will store its persistent data.
'';
};
environmentFile = lib.mkOption {
description = ''
Path to an environment file that is passed to the systemd service.
'';
type = lib.types.nullOr lib.types.path;
default = null;
example = "/run/secrets/baibot";
};
package = mkOption {
type = types.nullOr types.package;
default = null;
description = ''
The baibot package to use for the service. This must be set by the user,
as there is no default baibot package available in Nixpkgs.
'';
};
};
};
config = mkIf cfg.enable {
assertions = [
{
assertion = cfg.package != null;
message = "The baibot package is not specified. Please set the services.baibot.package option to a valid baibot package.";
}
];
users = {
users.baibot = {
isSystemUser = true;
description = "Baibot system user";
home = homeDir;
createHome = true;
group = "baibot";
};
groups.baibot = { };
};
systemd.services.baibot = {
description = "Baibot Service";
after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
environment = {
BAIBOT_CONFIG_FILE_PATH = cfg.configFile;
BAIBOT_PERSISTENCE_DATA_DIR_PATH = cfg.persistenceDataDirPath;
};
serviceConfig = {
ExecStart = "${cfg.package}/bin/baibot";
EnvironmentFile = optional (cfg.environmentFile != null) cfg.environmentFile;
Restart = "always";
User = "baibot";
Group = "baibot";
};
};
};
}