aboutsummaryrefslogtreecommitdiff
path: root/tw/system/vin.scm
diff options
context:
space:
mode:
authorTimo Wilken2023-05-28 20:35:19 +0200
committerTimo Wilken2023-05-28 21:34:21 +0200
commit9447bb2ec9bc9e6fa75c9709adf485151032076a (patch)
tree2171732755f47ceb6b13a5351b15c3ace41d7b17 /tw/system/vin.scm
parent98374ca5f758bc7d82557e0d2b5c710175d37a21 (diff)
Deploy hledger dashboard daemon
Diffstat (limited to 'tw/system/vin.scm')
-rw-r--r--tw/system/vin.scm32
1 files changed, 32 insertions, 0 deletions
diff --git a/tw/system/vin.scm b/tw/system/vin.scm
index 5b190756..9d64e157 100644
--- a/tw/system/vin.scm
+++ b/tw/system/vin.scm
@@ -1,14 +1,19 @@
(define-module (tw system vin)
#:use-module (gnu)
#:use-module (gnu bootloader grub)
+ #:use-module (gnu packages databases)
#:use-module (gnu services admin) ; unattended-upgrade-service-type
+ #:use-module (gnu services databases)
#:use-module (gnu services docker)
#:use-module (gnu services dbus)
#:use-module (gnu services desktop) ; elogind-service-type
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu services syncthing)
#:use-module (gnu system locale)
#:use-module (gnu system nss)
#:use-module (guix gexp)
#:use-module (tw channels)
+ #:use-module (tw packages finance)
#:use-module (tw services grafana)
#:use-module (tw services restic)
#:use-module (tw system))
@@ -113,6 +118,33 @@
(service dbus-root-service-type) ; required by `docker-service-type'
(service elogind-service-type) ; required by `docker-service-type'
+ ;; Personal statistics exporter: stores hledger data (and soon location
+ ;; data?) in Postgres for Grafana to read.
+ (service syncthing-service-type
+ (syncthing-configuration (user "timo")))
+ (service postgresql-service-type
+ (postgresql-configuration
+ ;; hledger-dashboard is linked against libpq from postgresql@14.
+ ;; Using a different Postgres server version is probably fine, though.
+ (postgresql postgresql-14)))
+ (simple-service 'hledger-dashboard-roles postgresql-role-service-type
+ (list (postgresql-role
+ (name "timo")
+ (create-database? #t)
+ (permissions '(login)))))
+ (simple-service 'hledger-dashboard shepherd-root-service-type
+ (list (shepherd-service
+ (provision '(hledger-dashboard))
+ (requirement '(postgresql syncthing-timo))
+ (documentation
+ "Monitor a ledger file and keep a database in sync with it.")
+ (start #~(make-forkexec-constructor
+ (list #$(file-append hledger-dashboard "/bin/hledger-dashboard")
+ ;; This is where Syncthing puts the ledger file.
+ "-f" "/home/timo/sync/ledger/ledger.journal")
+ #:user "timo" #:group "users"))
+ (stop #~(make-kill-destructor)))))
+
(service unattended-upgrade-service-type
(unattended-upgrade-configuration
(schedule "22 07 * * sat") ; 07:22 every Saturday morning