113 lines
3.1 KiB
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}
|
|
'';
|
|
};
|
|
};
|
|
};
|
|
}
|