X-Git-Url: http://git.hcoop.net/jackhill/guix/guix.git/blobdiff_plain/ebb7cf9e21060105d9950dd5142c0eb918083666..ff32b2dd3edaed03ae48b853f8621d5848fa00ec:/gnu/installer.scm diff --git a/gnu/installer.scm b/gnu/installer.scm index 04f3dd5f26..d2be4b34f9 100644 --- a/gnu/installer.scm +++ b/gnu/installer.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2018, 2020 Mathieu Othacehe ;;; Copyright © 2019, 2020 Ludovic Courtès ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice +;;; Copyright © 2020 Florian Pelz ;;; ;;; This file is part of GNU Guix. ;;; @@ -26,6 +27,8 @@ #:use-module (guix utils) #:use-module (guix ui) #:use-module ((guix self) #:select (make-config.scm)) + #:use-module (guix packages) + #:use-module (guix git-download) #:use-module (gnu installer utils) #:use-module (gnu packages admin) #:use-module (gnu packages base) @@ -59,8 +62,16 @@ (('guix 'build _ ...) #t) (_ #f))) +(define not-config? + ;; Select (guix …) and (gnu …) modules, except (guix config). + (match-lambda + (('guix 'config) #f) + (('guix _ ...) #t) + (('gnu _ ...) #t) + (_ #f))) + (define* (build-compiled-file name locale-builder) - "Return a file-like object that evalutes the gexp LOCALE-BUILDER and store + "Return a file-like object that evaluates the gexp LOCALE-BUILDER and store its result in the scheme file NAME. The derivation will also build a compiled version of this file." (define set-utf8-locale @@ -73,8 +84,10 @@ version of this file." (define builder (with-extensions (list guile-json-3) - (with-imported-modules (source-module-closure - '((gnu installer locale))) + (with-imported-modules `(,@(source-module-closure + '((gnu installer locale)) + #:select? not-config?) + ((guix config) => ,(make-config.scm))) #~(begin (use-modules (gnu installer locale)) @@ -101,11 +114,12 @@ version of this file." (setlocale LC_ALL locale)) ;; Restart the documentation viewer so it displays the manual in - ;; language that corresponds to LOCALE. - (with-error-to-port (%make-void-port "w") - (lambda () - (stop-service 'term-tty2) - (start-service 'term-tty2 (list locale))))))) + ;; language that corresponds to LOCALE. Make sure that nothing is + ;; printed on the console. + (parameterize ((shepherd-message-port + (%make-void-port "w"))) + (stop-service 'term-tty2) + (start-service 'term-tty2 (list locale)))))) (define* (compute-locale-step #:key locales-name @@ -156,11 +170,11 @@ been performed at build time." (define apply-keymap ;; Apply the specified keymap. Use the default keyboard model. #~(match-lambda - ((layout variant) + ((layout variant options) (kmscon-update-keymap (default-keyboard-model) - layout variant)))) + layout variant options)))) -(define* (compute-keymap-step) +(define* (compute-keymap-step context) "Return a gexp that runs the keymap-page of INSTALLER and install the selected keymap." #~(lambda (current-installer) @@ -172,8 +186,8 @@ selected keymap." "/share/X11/xkb/rules/base.xml"))) (lambda (models layouts) ((installer-keymap-page current-installer) - layouts))))) - (#$apply-keymap result) + layouts '#$context))))) + (and result (#$apply-keymap result)) result))) (define (installer-steps) @@ -181,10 +195,15 @@ selected keymap." #:locales-name "locales" #:iso639-languages-name "iso639-languages" #:iso3166-territories-name "iso3166-territories")) - (keymap-step (compute-keymap-step)) (timezone-data #~(string-append #$tzdata "/share/zoneinfo/zone.tab"))) #~(lambda (current-installer) + ((installer-parameters-menu current-installer) + (lambda () + ((installer-parameters-page current-installer) + (lambda _ + (#$(compute-keymap-step 'param) + current-installer))))) (list ;; Ask the user to choose a locale among those supported by ;; the glibc. Install the selected locale right away, so that @@ -216,17 +235,19 @@ selected keymap." ;; The installer runs in a kmscon virtual terminal where loadkeys ;; won't work. kmscon uses libxkbcommon as a backend for keyboard - ;; input. It is possible to update kmscon current keymap by sending it - ;; a keyboard model, layout and variant, in a somehow similar way as - ;; what is done with setxkbmap utility. + ;; input. It is possible to update kmscon current keymap by sending + ;; it a keyboard model, layout, variant and options, in a somehow + ;; similar way as what is done with setxkbmap utility. ;; ;; So ask for a keyboard model, layout and variant to update the - ;; current kmscon keymap. + ;; current kmscon keymap. For non-Latin layouts, we add an + ;; appropriate second layout and toggle via Alt+Shift. (installer-step (id 'keymap) (description (G_ "Keyboard mapping selection")) (compute (lambda _ - (#$keymap-step current-installer))) + (#$(compute-keymap-step 'default) + current-installer))) (configuration-formatter keyboard-layout->configuration)) ;; Ask the user to input a hostname for the system. @@ -245,6 +266,13 @@ selected keymap." (compute (lambda _ ((installer-network-page current-installer))))) + ;; Ask whether to enable substitute server discovery. + (installer-step + (id 'substitutes) + (description (G_ "Substitute server discovery")) + (compute (lambda _ + ((installer-substitutes-page current-installer))))) + ;; Prompt for users (name, group and home directory). (installer-step (id 'user) @@ -259,7 +287,7 @@ selected keymap." (description (G_ "Services")) (compute (lambda _ ((installer-services-page current-installer)))) - (configuration-formatter system-services->configuration)) + (configuration-formatter system-services->configuration)) ;; Run a partitioning tool allowing the user to modify ;; partition tables, partitions and their mount points. @@ -272,7 +300,7 @@ selected keymap." ((installer-partition-page current-installer)))) (configuration-formatter user-partitions->configuration)) - (installer-step + (installer-step (id 'final) (description (G_ "Configuration file")) (compute @@ -287,7 +315,8 @@ selected keymap." ;; translated. #~(begin (bindtextdomain "guix" (string-append #$guix "/share/locale")) - (textdomain "guix"))) + (textdomain "guix") + (setlocale LC_ALL ""))) (define set-installer-path ;; Add the specified binary to PATH for later use by the installer. @@ -297,8 +326,10 @@ selected keymap." cryptsetup dosfstools ;mkfs.fat e2fsprogs ;mkfs.ext4 + lvm2-static ;dmsetup btrfs-progs jfsutils ;jfs_mkfs + ntfs-3g ;mkfs.ntfs kbd ;chvt guix ;guix system init call util-linux ;mkwap @@ -337,6 +368,7 @@ selected keymap." (gnu installer services) (gnu installer timezone) (gnu installer user) + (gnu installer utils) (gnu installer newt) ((gnu installer newt keymap) #:select (keyboard-layout->configuration)) @@ -418,5 +450,6 @@ selected keymap." ;; some reason, unicode support is not correctly installed ;; when calling this in 'installer-builder'. (setenv "LANG" "en_US.UTF-8") - (execl #$(program-file "installer-real" installer-builder) + (execl #$(program-file "installer-real" installer-builder + #:guile guile-3.0-latest) "installer-real"))))