Files
minecraft-heatmap/module.nix
2025-08-25 14:15:01 +02:00

102 lines
3.0 KiB
Nix

{ config, lib, pkgs, ... }:
let
cfg = config.services.minecraft-heatmap;
in
{
options.services.minecraft-heatmap = {
enable = lib.mkEnableOption "";
mclog2psqlPackage = lib.mkPackageOption pkgs "mclog2psql" { };
onCalendar = lib.mkOption {
type = lib.types.str;
default = "05:00:00";
description = "Systemd timer OnCalendar setting for the Minecraft Heatmap log ingester.";
};
minecraftLogsDir = lib.mkOption {
type = lib.types.path;
default = "/var/cache/minecraft-heatmap/logs";
description = "Directory containing Minecraft server log files to be ingested.";
};
database = {
host = lib.mkOption {
type = lib.types.str;
default = "localhost";
description = "Database host for Minecraft Heatmap.";
};
port = lib.mkOption {
type = lib.types.port;
default = 5432;
description = "Database port for Minecraft Heatmap.";
};
name = lib.mkOption {
type = lib.types.str;
default = "minecraft_heatmap";
description = "Database name for Minecraft Heatmap.";
};
user = lib.mkOption {
type = lib.types.str;
default = "minecraft_heatmap";
description = "Database user for Minecraft Heatmap.";
};
passwordFile = lib.mkOption {
type = with lib.types; nullOr path;
default = null;
description = "Path to the file containing the database password for Minecraft Heatmap.";
};
};
};
config = lib.mkIf cfg.enable {
systemd.services.minecraft-heatmap-ingest-logs = {
description = "Minecraft Heatmap log ingester service";
environment = {
MINECRAFT_HEATMAP_DIR = cfg.minecraftLogsDir;
MINECRAFT_HEATMAP_DB_HOST = cfg.database.host;
MINECRAFT_HEATMAP_DB_PORT = toString cfg.database.port;
MINECRAFT_HEATMAP_DB_NAME = cfg.database.name;
MINECRAFT_HEATMAP_DB_USER = cfg.database.user;
MINECRAFT_HEATMAP_DB_PASSWORD_FILE = lib.optionalString (cfg.database.passwordFile != null) "%d/minecraft-heatmap-db-password";
};
serviceConfig = {
Type = "oneshot";
ExecStart = "${cfg.mclog2psqlPackage}/bin/mclog2psql";
Restart = "on-failure";
RestartSec = "5s";
User = "minecraft-heatmap";
Group = "minecraft-heatmap";
DynamicUser = true;
LoadCredential = lib.mkIf (cfg.database.passwordFile != null) [
"minecraft-heatmap-db-password:${cfg.database.passwordFile}"
];
CacheDirectory = "minecraft-heatmap";
CacheDirectoryMode = "0700";
};
};
systemd.timers.minecraft-heatmap-ingest-logs = {
description = "Minecraft Heatmap log ingester timer";
wantedBy = [ "timers.target" ];
timerConfig = {
OnCalendar = cfg.onCalendar;
Persistent = true;
RandomizedDelaySec = "1h";
};
};
# systemd.sockets.minecraft-heatmap-rest-endpoint = {};
# systemd.sockets.minecraft-heatmap-rest-endpoint = {};
};
}