summaryrefslogtreecommitdiff
path: root/rodion/services/miniflux.scm
blob: 23db38c21adf4a5aa0120a80e6221a9be4138a77 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
(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>
  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)))))