aboutsummaryrefslogtreecommitdiff
path: root/tw/services/games.scm
diff options
context:
space:
mode:
Diffstat (limited to 'tw/services/games.scm')
-rw-r--r--tw/services/games.scm42
1 files changed, 39 insertions, 3 deletions
diff --git a/tw/services/games.scm b/tw/services/games.scm
index 7b7d8a4b..d239b248 100644
--- a/tw/services/games.scm
+++ b/tw/services/games.scm
@@ -7,11 +7,11 @@
#:use-module (guix gexp)
#:use-module (guix records)
#:use-module (tw packages games)
+ #:use-module (tw services restic)
+ #:use-module (tw services secrets)
#:export (minecraft-server-service-type
minecraft-server-configuration))
-;; TODO: backups of Minecraft data
-
(define-configuration/no-serialization minecraft-server-configuration
(data-location (string "/var/lib/minecraft-server") "Path on disk where
server data will be stored.")
@@ -50,11 +50,47 @@ server data will be stored.")
(name group-name)
(system? #t)))))
+(define minecraft-backup-repository
+ (restic-local-repository
+ (path "/var/backups/minecraft")))
+
+(define minecraft-backup-password-file
+ "/etc/restic/lud-minecraft")
+
+(define minecraft-backup-password
+ (restic-password-source
+ (type 'file)
+ (name minecraft-backup-password-file)))
+
+(define (minecraft-backup-secrets config)
+ (list (secret
+ (encrypted-file (local-file "../system/files/restic/lud-minecraft.enc"))
+ (destination minecraft-backup-password-file))))
+
+(define (minecraft-restic-backups config)
+ (match-record config <minecraft-server-configuration> (data-location)
+ (list (restic-scheduled-backup
+ (schedule #~"30 3 * * *")
+ (paths (list data-location))
+ (repo minecraft-backup-repository)
+ (password minecraft-backup-password)))))
+
+(define (minecraft-backup-cleanups config)
+ (list (restic-scheduled-cleanup
+ (schedule #~"30 4 * * *")
+ (repo minecraft-backup-repository)
+ (password minecraft-backup-password)
+ (keep-daily 30)
+ (keep-monthly -1))))
+
(define minecraft-server-service-type
(service-type
(name 'minecraft-server)
(extensions (list (service-extension shepherd-root-service-type minecraft-server-shepherd)
(service-extension activation-service-type minecraft-server-activation)
- (service-extension account-service-type minecraft-server-accounts)))
+ (service-extension account-service-type minecraft-server-accounts)
+ (service-extension secrets-service-type minecraft-backup-secrets)
+ (service-extension restic-backup-service-type minecraft-restic-backups)
+ (service-extension restic-cleanup-service-type minecraft-backup-cleanups)))
(default-value (minecraft-server-configuration))
(description "Run a Minecraft server.")))