unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
blob 7cc1c94f82f8db13daa70d54b70e1d4008569b39 4495 bytes (raw)
name: gnu/services/printing.scm 	 # note: path name is non-authoritative(*)

  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))))


debug log:

solving 4bc33a2 ...
found 4bc33a2 in https://yhetil.org/guix-devel/20160323005101.62b537c9@scratchpost.org/

applying [1/1] https://yhetil.org/guix-devel/20160323005101.62b537c9@scratchpost.org/
diff --git a/gnu/services/printing.scm b/gnu/services/printing.scm
new file mode 100644
index 0000000..4bc33a2

Checking patch gnu/services/printing.scm...
1:115: new blank line at EOF.
+
Applied patch gnu/services/printing.scm cleanly.
warning: 1 line adds whitespace errors.

index at:
100644 7cc1c94f82f8db13daa70d54b70e1d4008569b39	gnu/services/printing.scm

(*) Git path names are given by the tree(s) the blob belongs to.
    Blobs themselves have no identifier aside from the hash of its contents.^

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).