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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
| | ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu services printing)
#:use-module (gnu services)
#:use-module (gnu services shepherd)
#:use-module (gnu packages cups)
#:use-module (guix gexp)
#:use-module (guix records)
#:use-module (srfi srfi-1)
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
#:export (cups-service))
; TODO or just fetch the one from cups and modify it a bit.
(define (default-cups-files-config data-dir)
;; generate cups-files.conf [for cupsd -s ...], especially dynamically set DataDir.
(mixed-text-file "cups-files.conf"
"AccessLog syslog\n"
"ErrorLog syslog\n"
"PageLog syslog\n"
"FatalErrors all\n"
"SyncOnClose Yes\n"
"User nobody\n"
"Group lp\n"
; FIXME SystemGroup lpadmin sys system root
; FIXME ConfigFilePerm
;; DataDir /var/lib/cupsd/data
(string-append "DataDir " data-dir "\n") ; /gnu/store/1h53jmsx7gm7b2sfk0h0k6bgmp8fhv0i-cups-2.1.0/share/cups
(string-append "DocumentRoot" /gnu/store/1h53jmsx7gm7b2sfk0h0k6bgmp8fhv0i-cups-2.1.0 "/share/doc/cups\n")
"CacheDir /var/cache/cups\n"
"StateDir /var/run/cups\n"
; FIXME FontPath /zzz
"Printcap /etc/printcap\n"
"PrintcapFormat bsd\n"
"RequestRoot /var/spool/cups\n"
;;/gnu/store/1h53jmsx7gm7b2sfk0h0k6bgmp8fhv0i-cups-2.1.0/lib/cups
"ServerBin /home/dannym/.guix-profile/lib/cups\n" ; FIXME
"ServerRoot /etc/cups\n" ; FIXME
))
(define-record-type* <cups>
cups make-cups
cups?
(printers cups-printers)
(provision cups-provision))
; TODO cupsd -c /etc/cupsd.conf -s /etc/cups-files.conf -f
; TODO what user should cupsd run as? (Debian: root)
; TODO cups-browsed (Debian: also as root)
; TODO list of printers; paper size, printer vendor and model, interface (if necessary).
; TODO binding to network interface; running the config html page; auth there; auth in general?
; TODO support scanners and hpaio thing as sane dll
; FIXME extensions (list (service-extension ...
; FIXME compose concatenate
; FIXME extend (lambda (config actions)
; merge: /var/lib/hp ? no.
; merge: /etc/hp ? no.
; merge: /usr/share/hal/fdi ? useless.
; merge: /etc/udev/rules.d ? done.
; merge: /lib/systemd/system ? useless.
; TODO merge: /lib/cups/filter
; TODO merge: /lib/cups/backend
; TODO merge: mime.types
; TODO merge: /share/applications
; TODO merge: /usr/share/ppd/HP via DRV?
; TODO merge: drv into DataDir
(define cups-service-type
(shepherd-service-type
'cups
(match-lambda
(($ <cups> printers provision)
(let ((loopback? (memq 'loopback provision)))
(shepherd-service
(requirement '(udev networking)) ; TODO check actual config and reduce
(documentation "Bring up printing services.")
(provision provision)
(start #~(make-forkexec-constructor
(list (string-append "/sbin/cupsd") ; FIXME #$cups
"-s" (default-cups-files-config "/tmp") ; FIXME pass merged datadir
; FIXME "-c" cups config
"-f")))
(stop #~(make-kill-destructor))))))))
(define* (cups-service #:key printers (provision '(printing)) )
"Return a printing service that starts cups."
(service cups-service-type
(cups (printers printers)
(provision provision))))
|