diff options
-rw-r--r-- | tw/packages/finance.scm | 25 | ||||
-rw-r--r-- | tw/system/vin.scm | 32 |
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 |