glados/glados-module.nix

113 lines
3.1 KiB
Nix

{ pkgs, lib, config, ... }:
let
cfg = config.services.glados;
ownerArgs = list: toString (map (id: "--owner ${id}") list);
in {
options.services.glados = {
enable = lib.mkEnableOption "GLaDOS systemd service";
discord = {
guildId = lib.mkOption {
type = lib.types.str;
description = "Discord guild ID";
example = "000000000000000000";
};
ownerIds = lib.mkOption {
type = lib.types.listOf lib.types.str;
description = "Discord guild owner IDs";
example = "[ 000000000000000000 ]";
};
adminChannel = lib.mkOption {
type = lib.types.str;
description = "Discord Admin channel ID";
example = "000000000000000000";
};
infoChannel = lib.mkOption {
type = lib.types.str;
description = "Discord Info channel ID";
example = "000000000000000000";
};
botToken = lib.mkOption {
type = lib.types.str;
description = "Discord bot token";
example = "AAAAAAAAAAAAAAAAAAAAAAAA.AAAAAA.AAAAAAAAAAAAAAAAAAA-AAAAAAA";
};
camRole = lib.mkOption {
type = lib.types.str;
description = "Role used for Minecraft cam accounts";
example = "000000000000000000";
};
};
influx = {
host = lib.mkOption {
type = lib.types.str;
description = "Influx db host url";
example = "localhost:8000";
};
database = lib.mkOption {
type = lib.types.str;
description = "Influx database to store time series in";
example = "minecraft";
};
user = lib.mkOption {
type = lib.types.str;
description = "Influx database user";
example = "minecraft";
};
password = lib.mkOption {
type = lib.types.str;
description = "Influx database user password";
example = "minecraft";
};
};
rcon = {
address = lib.mkOption {
type = lib.types.str;
description = "RCON address";
example = "your-host.com:12345";
};
password = lib.mkOption {
type = lib.types.str;
description = "RCON password";
example = "your-secret-password";
};
};
};
config = mkIf cfg.enable {
systemd.services.glados = {
wantedBy = [ "default.target" ];
serviceConfig = {
ExecStart = ''
${pkgs.glados}/bin/glados
--guild-id ${cfg.discord.guildId}
${ownerArgs cfg.discord.ownerIds}
--admin-channel ${cfg.discord.adminChannel}
--info-channel ${cfg.discord.infoChannel}
--discord-token ${cfg.discord.botToken}
--cam-group-name ${cfg.discord.camRole}
--influx-host ${cfg.influx.host}
--influx-db ${cfg.influx.database}
--influx-user ${cfg.influx.user}
--influx-password ${cfg.influx.password}
--rcon-address ${cfg.rcon.address}
--rcon-password ${cfg.rcon.password}
'';
};
};
};
}