summaryrefslogtreecommitdiff
path: root/gnu/installer/services.scm
diff options
context:
space:
mode:
authorMarius Bakke <mbakke@fastmail.com>2019-05-01 23:11:41 +0200
committerMarius Bakke <mbakke@fastmail.com>2019-05-01 23:11:41 +0200
commit3b458d5462e6bbd852c2dc5c6670d5655abf53f5 (patch)
tree4f3ccec0de1c355134369333c17e948e3258d546 /gnu/installer/services.scm
parent2ca3fdc2db1aef96fbf702a2f26f5e18ce832038 (diff)
parent14da3daafc8dd92fdabd3367694c930440fd72cb (diff)
downloadpatches-3b458d5462e6bbd852c2dc5c6670d5655abf53f5.tar
patches-3b458d5462e6bbd852c2dc5c6670d5655abf53f5.tar.gz
Merge branch 'master' into core-updates
Diffstat (limited to 'gnu/installer/services.scm')
-rw-r--r--gnu/installer/services.scm158
1 files changed, 123 insertions, 35 deletions
diff --git a/gnu/installer/services.scm b/gnu/installer/services.scm
index ed44b87682..fbfcdac4e5 100644
--- a/gnu/installer/services.scm
+++ b/gnu/installer/services.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2019 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -18,42 +19,129 @@
(define-module (gnu installer services)
#:use-module (guix records)
- #:export (<desktop-environment>
- desktop-environment
- make-desktop-environment
- desktop-environment-name
- desktop-environment-snippet
+ #:use-module (srfi srfi-1)
+ #:export (system-service?
+ system-service-name
+ system-service-type
+ system-service-recommended?
+ system-service-snippet
+ system-service-packages
- %desktop-environments
- desktop-environments->configuration))
+ desktop-system-service?
+ networking-system-service?
-(define-record-type* <desktop-environment>
- desktop-environment make-desktop-environment
- desktop-environment?
- (name desktop-environment-name) ;string
- (snippet desktop-environment-snippet)) ;symbol
+ %system-services
+ system-services->configuration))
+
+(define-record-type* <system-service>
+ system-service make-system-service
+ system-service?
+ (name system-service-name) ;string
+ (type system-service-type) ;'desktop | 'networking
+ (recommended? system-service-recommended? ;Boolean
+ (default #f))
+ (snippet system-service-snippet ;list of sexps
+ (default '()))
+ (packages system-service-packages ;list of sexps
+ (default '())))
;; This is the list of desktop environments supported as services.
-(define %desktop-environments
- (list
- (desktop-environment
- (name "GNOME")
- (snippet '(gnome-desktop-service)))
- (desktop-environment
- (name "Xfce")
- (snippet '(xfce-desktop-service)))
- (desktop-environment
- (name "MATE")
- (snippet '(mate-desktop-service)))
- (desktop-environment
- (name "Enlightenment")
- (snippet '(service enlightenment-desktop-service-type)))))
-
-(define (desktop-environments->configuration desktop-environments)
- "Return the configuration field for DESKTOP-ENVIRONMENTS."
- (let ((snippets
- (map desktop-environment-snippet desktop-environments)))
- `(,@(if (null? snippets)
- '()
- `((services (cons* ,@snippets
- %desktop-services)))))))
+(define %system-services
+ (let-syntax ((desktop-environment (syntax-rules ()
+ ((_ fields ...)
+ (system-service
+ (type 'desktop)
+ fields ...))))
+ (G_ (syntax-rules () ;for xgettext
+ ((_ str) str))))
+ (list
+ (desktop-environment
+ (name "GNOME")
+ (snippet '((service gnome-desktop-service-type))))
+ (desktop-environment
+ (name "Xfce")
+ (snippet '((service xfce-desktop-service-type))))
+ (desktop-environment
+ (name "MATE")
+ (snippet '((service mate-desktop-service-type))))
+ (desktop-environment
+ (name "Enlightenment")
+ (snippet '((service enlightenment-desktop-service-type))))
+ (desktop-environment
+ (name "Openbox")
+ (packages '((specification->package "openbox"))))
+ (desktop-environment
+ (name "awesome")
+ (packages '((specification->package "awesome"))))
+ (desktop-environment
+ (name "i3")
+ (packages '((specification->package "i3-wm"))))
+ (desktop-environment
+ (name "ratpoison")
+ (packages '((specification->package "ratpoison"))))
+
+ ;; Networking.
+ (system-service
+ (name (G_ "OpenSSH secure shell daemon (sshd)"))
+ (type 'networking)
+ (snippet '((service openssh-service-type))))
+ (system-service
+ (name (G_ "Tor anonymous network router"))
+ (type 'networking)
+ (snippet '((service tor-service-type))))
+ (system-service
+ (name (G_ "Mozilla NSS certificates, for HTTPS access"))
+ (type 'networking)
+ (packages '((specification->package "nss-certs")))
+ (recommended? #t))
+
+ ;; Network connectivity management.
+ (system-service
+ (name (G_ "NetworkManager network connection manager"))
+ (type 'network-management)
+ (snippet '((service network-manager-service-type)
+ (service wpa-supplicant-service-type))))
+ (system-service
+ (name (G_ "Connman network connection manager"))
+ (type 'network-management)
+ (snippet '((service connman-service-type)
+ (service wpa-supplicant-service-type))))
+ (system-service
+ (name (G_ "DHCP client (dynamic IP address assignment)"))
+ (type 'network-management)
+ (snippet '((service dhcp-client-service-type)))))))
+
+(define (desktop-system-service? service)
+ "Return true if SERVICE is a desktop environment service."
+ (eq? 'desktop (system-service-type service)))
+
+(define (networking-system-service? service)
+ "Return true if SERVICE is a desktop environment service."
+ (eq? 'networking (system-service-type service)))
+
+(define (system-services->configuration services)
+ "Return the configuration field for SERVICES."
+ (let* ((snippets (append-map system-service-snippet services))
+ (packages (append-map system-service-packages services))
+ (desktop? (find desktop-system-service? services))
+ (base (if desktop?
+ '%desktop-services
+ '%base-services)))
+ (if (null? snippets)
+ `(,@(if (null? packages)
+ '()
+ `((packages (list ,@packages))))
+ (services ,base))
+ `(,@(if (null? packages)
+ '()
+ `((packages (list ,@packages))))
+ (services (append (list ,@snippets
+
+ ,@(if desktop?
+ ;; XXX: Assume 'keyboard-layout' is in
+ ;; scope.
+ '((set-xorg-configuration
+ (xorg-configuration
+ (keyboard-layout keyboard-layout))))
+ '()))
+ ,base))))))