gnu: Add graphical installer support.
[jackhill/guix/guix.git] / gnu / installer / newt.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
3 ;;;
4 ;;; This file is part of GNU Guix.
5 ;;;
6 ;;; GNU Guix is free software; you can redistribute it and/or modify it
7 ;;; under the terms of the GNU General Public License as published by
8 ;;; the Free Software Foundation; either version 3 of the License, or (at
9 ;;; your option) any later version.
10 ;;;
11 ;;; GNU Guix is distributed in the hope that it will be useful, but
12 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ;;; GNU General Public License for more details.
15 ;;;
16 ;;; You should have received a copy of the GNU General Public License
17 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
18
19 (define-module (gnu installer newt)
20 #:use-module (gnu installer)
21 #:use-module (guix discovery)
22 #:use-module (guix gexp)
23 #:use-module (guix ui)
24 #:export (newt-installer))
25
26 (define (modules)
27 (cons '(newt)
28 (map module-name
29 (scheme-modules
30 (dirname (search-path %load-path "guix.scm"))
31 "gnu/installer/newt"
32 #:warn warn-about-load-error))))
33
34 (define init
35 #~(begin
36 (newt-init)
37 (clear-screen)
38 (set-screen-size!)))
39
40 (define exit
41 #~(begin
42 (newt-finish)))
43
44 (define exit-error
45 #~(lambda (key args)
46 (newt-finish)))
47
48 (define locale-page
49 #~(lambda* (#:key
50 supported-locales
51 iso639-languages
52 iso3166-territories)
53 (run-locale-page
54 #:supported-locales supported-locales
55 #:iso639-languages iso639-languages
56 #:iso3166-territories iso3166-territories)))
57
58 (define timezone-page
59 #~(lambda* (zonetab)
60 (run-timezone-page zonetab)))
61
62 (define logo
63 (string-append
64 (dirname (search-path %load-path "guix.scm"))
65 "/gnu/installer/aux-files/logo.txt"))
66
67 (define welcome-page
68 #~(run-welcome-page #$(local-file logo)))
69
70 (define menu-page
71 #~(lambda (steps)
72 (run-menu-page steps)))
73
74 (define keymap-page
75 #~(lambda* (#:key models layouts)
76 (run-keymap-page #:models models
77 #:layouts layouts)))
78
79 (define network-page
80 #~(run-network-page))
81
82 (define hostname-page
83 #~(run-hostname-page))
84
85 (define user-page
86 #~(run-user-page))
87
88 (define newt-installer
89 (installer
90 (name 'newt)
91 (modules (modules))
92 (init init)
93 (exit exit)
94 (exit-error exit-error)
95 (keymap-page keymap-page)
96 (locale-page locale-page)
97 (menu-page menu-page)
98 (network-page network-page)
99 (timezone-page timezone-page)
100 (hostname-page hostname-page)
101 (user-page user-page)
102 (welcome-page welcome-page)))