(define-module (rodion services miniflux) #:use-module (gnu services shepherd) #:use-module (gnu services) #:use-module (gnu services configuration) #:use-module (gnu system shadow) #:use-module (guix gexp) #:use-module (guix records) #:use-module (gnu packages admin) #:use-module (gnu services databases) #:use-module (rodion packages go) #:export (miniflux-service-type miniflux-configuration miniflux-configuration? miniflux-configuration-test?)) (define-record-type* miniflux-configuration make-miniflux-configuration miniflux-configuration? (test? miniflux-configuration-test? (default #t))) (define (miniflux-shepherd-service _) (list (shepherd-service (documentation "Run Miniflux server") (provision '(miniflux)) (requirement '(networking postgresql)) (start #~(make-forkexec-constructor (list (string-append #$miniflux "/bin/miniflux")) #:environment-variables (list "DATABASE_URL=host=/var/run/postgresql user=miniflux dbname=miniflux sslmode=disable" "RUN_MIGRATIONS=1" "CREATE_ADMIN=1" "ADMIN_USERNAME=admin" "ADMIN_PASSWORD=password") #:user "miniflux" #:group "miniflux" #:log-file "/var/log/miniflux.log")) (stop #~(make-kill-destructor))))) (define (miniflux-account config) (list (user-group (name "miniflux") (system? #t)) (user-account (name "miniflux") (group "miniflux") (home-directory "/var/empty") (shell (file-append shadow "/sbin/nologin")) (system? #t)))) (define (miniflux-postgresql-role config) (list (postgresql-role (name "miniflux") (create-database? #t)))) (define miniflux-service-type (service-type (name 'miniflux) (description "Miniflux service") (default-value (miniflux-configuration)) (extensions (list (service-extension shepherd-root-service-type miniflux-shepherd-service) (service-extension account-service-type miniflux-account) (service-extension postgresql-service-type (const #t)) (service-extension postgresql-role-service-type miniflux-postgresql-role)))))