mirror of https://codeberg.org/anemofilia/zero
45 lines
1.5 KiB
Scheme
45 lines
1.5 KiB
Scheme
|
(define-module (buer shepherd-services)
|
||
|
#:use-module (guix gexp)
|
||
|
#:use-module (gnu services shepherd)
|
||
|
#:use-module (shepherd service timer)
|
||
|
|
||
|
#:export (guix-gc snapshot-@home timer))
|
||
|
|
||
|
(define timer-trigger-action
|
||
|
(shepherd-action
|
||
|
(name 'trigger)
|
||
|
(procedure #~trigger-timer)
|
||
|
(documentation
|
||
|
"Trigger the action associated with @var{timer} as if it had reached its
|
||
|
next calendar event.")))
|
||
|
|
||
|
(define guix-gc
|
||
|
(shepherd-service
|
||
|
(provision '(guix-gc))
|
||
|
(modules '((shepherd service timer)))
|
||
|
(start #~(make-timer-constructor
|
||
|
(calendar-event #:days-of-month '(1 15))
|
||
|
(command '("guix" "gc" "--optimize" "--free-space=10G"))))
|
||
|
(stop #~(make-timer-destructor))
|
||
|
(actions (list timer-trigger-action))))
|
||
|
|
||
|
(define snapshot-@home
|
||
|
(shepherd-service
|
||
|
(provision '(snapshot-@home))
|
||
|
(modules '((shepherd service timer)))
|
||
|
(start #~(make-timer-constructor
|
||
|
(calendar-event #:days-of-month '(1 15))
|
||
|
(lambda ()
|
||
|
(let* ((btrfs "/run/current-system/profile/bin/btrfs")
|
||
|
(date (strftime "%Y-%m-%d" (localtime (current-time)))))
|
||
|
(system* btrfs "subvolume" "snapshot" "/home"
|
||
|
(string-append "/snapshots/home/" date))))))
|
||
|
(stop #~(make-timer-destructor))
|
||
|
(actions (list timer-trigger-action))))
|
||
|
|
||
|
(define timer
|
||
|
(shepherd-service
|
||
|
(provision '(timer))
|
||
|
(modules '((shepherd service timer)))
|
||
|
(free-form #~(timer-service))))
|