summaryrefslogtreecommitdiff
path: root/modules/nixos/duksebot/default.nix
diff options
context:
space:
mode:
authorLinnnus <[email protected]>2023-10-01 21:48:51 +0200
committerLinnnus <[email protected]>2023-10-01 21:48:51 +0200
commit6d22256a85df7228a356a802dbc513c8abeeb2b7 (patch)
treeeddc506e9cb0aa49c79c261a2995dd8de41135b7 /modules/nixos/duksebot/default.nix
parent877db4137c34216fc2623570bc155d73e4b27f0b (diff)
Export modules
Diffstat (limited to 'modules/nixos/duksebot/default.nix')
-rw-r--r--modules/nixos/duksebot/default.nix71
1 files changed, 71 insertions, 0 deletions
diff --git a/modules/nixos/duksebot/default.nix b/modules/nixos/duksebot/default.nix
new file mode 100644
index 0000000..c1dc5cf
--- /dev/null
+++ b/modules/nixos/duksebot/default.nix
@@ -0,0 +1,71 @@
+# This module defines an on-demand minecraft server service which turns off the
+# server when it's not being used.
+
+{ config, lib, pkgs, modulesPath, ... }:
+
+let
+ inherit (lib) mkIf mkOption mkEnableOption types;
+
+ cfg = config.my.services.duksebot;
+in
+{
+ options.my.services.duksebot = {
+ enable = mkEnableOption "duksebot daily reminder";
+
+ package = mkOption {
+ description = "What package to use";
+ default = pkgs.duksebot;
+ type = types.package;
+ };
+ };
+
+ config = mkIf cfg.enable {
+ # Create a user to run the server under.
+ users.users.duksebot = {
+ description = "Runs daily dukse reminder";
+ group = "duksebot";
+ isSystemUser = true;
+ home = "/srv/duksebot";
+ createHome = true;
+ };
+ users.groups.duksebot = { };
+
+ age.secrets.duksebot-env = {
+ file = ../../../secrets/duksebot.env.age;
+ owner = config.users.users.duksebot.name;
+ group = config.users.users.duksebot.group;
+ mode = "0440";
+ };
+
+ # Create a service which simply runs script. This will be invoked by our timer.
+ systemd.services.duksebot = {
+ serviceConfig = {
+ # We only want to run this once every time the timer triggers it.
+ Type = "oneshot";
+ # Run as the user we created above.
+ User = "duksebot";
+ Group = "duksebot";
+ WorkingDirectory = config.users.users.duksebot.home;
+ };
+ script = ''
+ # Load the secret environment variables.
+ export $(grep -v '^#' ${config.age.secrets.duksebot-env.path} | xargs)
+ # Kick off.
+ exec "${cfg.package}"/bin/duksebot
+ '';
+ };
+
+ # Create a timer to activate our oneshot service.
+ systemd.timers.duksebot = {
+ wantedBy = [ "timers.target" ];
+ partOf = [ "duksebot.service" ];
+ after = [ "network-online.target" ];
+ wants = [ "network-online.target" ]; # FIXME: redundant?
+ timerConfig = {
+ # OnCalendar = "*-*-* 7:00:00";
+ OnCalendar = "*:0/1";
+ Unit = "duksebot.service";
+ };
+ };
+ };
+}