{ pkgs, lib, config, ... }: let cfg = config.services.kanboard; serviceName = "phpfpm-kanboard.service"; in { services.kanboard = { enable = true; nginx = null; domain = "kanboard.sorre.internal"; package = pkgs.kanboard; dataDir = "/var/lib/kanboard"; settings = { }; }; services.phpfpm.pools.kanboard.settings."listen.owner" = lib.mkForce config.services.caddy.user; systemd.services.backup-kanboard = lib.mkIf cfg.enable { serviceConfig = { Type = "exec"; User = cfg.user; Group = cfg.group; StateDirectory = "backups/kanboard"; StateDirectoryMode = "0700"; Umask = "077"; }; description = "Back up kanboard data"; conflicts = [ serviceName ]; path = [ pkgs.gnutar ]; enableStrictShellChecks = true; script = '' #!/usr/bin/env bash set -euo pipefail TIMESTAMP="$(date +%Y%m%d%H%M%S)" BACKUP_PATH="$STATE_DIRECTORY/$TIMESTAMP.backup.tar" echo "Backing up kanboard to $BACKUP_PATH" >&2 tar cf "$BACKUP_PATH" /var/lib/kanboard chmod u=r,go-rwx "$BACKUP_PATH" find "$STATE_DIRECTORY" -type f -name '*.backup.tar' -print0 | sort --zero-terminated --reverse | tail --zero-terminated --lines=+6 | xargs --null --no-run-if-empty rm -- ''; }; # See: https://unix.stackexchange.com/a/804263 systemd.services.backup-kanboard-restart-service = { unitConfig = { StopPropagatedFrom = "backup-kanboard.service"; Before = "backup-kanboard.service"; User = "root"; }; path = [ pkgs.systemdMinimal ]; serviceConfig = { Type = "oneshot"; User = "root"; RemainAfterExit = true; ExecStop = "systemctl start ${serviceName}"; }; wantedBy = [ "backup-kanboard.service" ]; }; systemd.timers.backup-kanboard = { description = "Back up kanboard every morning"; timerConfig.OnCalendar = "*-*-* 05:00:00"; wantedBy = [ "timers.target" ]; }; }