aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tw/packages/finance.scm25
-rw-r--r--tw/system/vin.scm32
2 files changed, 57 insertions, 0 deletions
diff --git a/tw/packages/finance.scm b/tw/packages/finance.scm
new file mode 100644
index 00000000..08db5f30
--- /dev/null
+++ b/tw/packages/finance.scm
@@ -0,0 +1,25 @@
+(define-module (tw packages finance)
+ #:use-module (gnu packages haskell-xyz)
+ #:use-module (guix build-system haskell)
+ #:use-module (guix gexp)
+ #:use-module (guix git-download)
+ #:use-module (guix packages)
+ #:use-module ((guix licenses) #:prefix license:))
+
+(define-public hledger-dashboard
+ (package
+ (name "hledger-dashboard")
+ (version "1.0.0.0")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "git://lud.wg/~timo/hledger-dashboard.git")
+ (commit version)))
+ (sha256 (base32 "00pazck04av1sy4fqjvjvr3hx1z54b1zs78q9y92psfmbiwilxvv"))))
+ (build-system haskell-build-system)
+ (inputs (list ghc-postgresql-simple ghc-fsnotify ghc-hledger-lib))
+ (home-page #f)
+ (synopsis "Feed hledger data into a database")
+ (description "Maintain a database containing financial data extracted from
+hledger, for use in Grafana, e.g. to create nice graphs.")
+ (license license:gpl3+)))
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