diff options
Diffstat (limited to 'gnu/installer')
-rw-r--r-- | gnu/installer/newt/services.scm | 41 | ||||
-rw-r--r-- | gnu/installer/services.scm | 17 |
2 files changed, 44 insertions, 14 deletions
diff --git a/gnu/installer/newt/services.scm b/gnu/installer/newt/services.scm index 10c19115ca..2a221790d2 100644 --- a/gnu/installer/newt/services.scm +++ b/gnu/installer/newt/services.scm @@ -45,19 +45,14 @@ choose the one to use on the log-in screen.") (condition (&installer-step-abort)))))) -(define (run-networking-cbt-page network-management?) - "Run a page allowing the user to select networking services. When -NETWORK-MANAGEMENT? is true, include network management services like -NetworkManager." +(define (run-networking-cbt-page) + "Run a page allowing the user to select networking services." (run-checkbox-tree-page #:info-text (G_ "You can now select networking services to run on your \ system.") #:title (G_ "Network service") - #:items (filter (let ((types (if network-management? - '(network-management networking) - '(networking)))) - (lambda (service) - (memq (system-service-type service) types))) + #:items (filter (lambda (service) + (eq? 'networking (system-service-type service))) %system-services) #:item->text (compose G_ system-service-name) #:checkbox-tree-height 5 @@ -67,9 +62,35 @@ system.") (condition (&installer-step-abort)))))) +(define (run-network-management-page) + "Run a page to select among several network management methods." + (let ((title (G_ "Network management"))) + (run-listbox-selection-page + #:title title + #:info-text (G_ "Choose the method to manage network connections. + +We recommend NetworkManager or Connman for a WiFi-capable laptop; the DHCP \ +client may be enough for a server.") + #:info-textbox-width 70 + #:listbox-items (filter (lambda (service) + (eq? 'network-management + (system-service-type service))) + %system-services) + #:listbox-item->text (compose G_ system-service-name) + #:sort-listbox-items? #f + #:button-text (G_ "Exit") + #:button-callback-procedure + (lambda _ + (raise + (condition + (&installer-step-abort))))))) + (define (run-services-page) (let ((desktop (run-desktop-environments-cbt-page))) ;; When the user did not select any desktop services, and thus didn't get ;; '%desktop-services', offer network management services. (append desktop - (run-networking-cbt-page (null? desktop))))) + (run-networking-cbt-page) + (if (null? desktop) + (list (run-network-management-page)) + '())))) diff --git a/gnu/installer/services.scm b/gnu/installer/services.scm index 0e98392bfb..4dbfe74bf9 100644 --- a/gnu/installer/services.scm +++ b/gnu/installer/services.scm @@ -20,6 +20,7 @@ (define-module (gnu installer services) #:use-module (guix records) #:use-module (srfi srfi-1) + #:use-module (ice-9 match) #:export (system-service? system-service-name system-service-type @@ -75,15 +76,17 @@ (system-service (name (G_ "NetworkManager network connection manager")) (type 'network-management) - (snippet '(service network-manager-service-type))) + (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))) + (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)))))) + (snippet '(service dhcp-client-service-type)))))) (define (desktop-system-service? service) "Return true if SERVICE is a desktop environment service." @@ -95,7 +98,13 @@ (define (system-services->configuration services) "Return the configuration field for SERVICES." - (let* ((snippets (map system-service-snippet services)) + (let* ((snippets (append-map (lambda (service) + (match (system-service-snippet service) + ((and lst (('service _ ...) ...)) + lst) + (sexp + (list sexp)))) + services)) (desktop? (find desktop-system-service? services)) (base (if desktop? '%desktop-services |