aboutsummaryrefslogtreecommitdiff
path: root/etc/time-travel-manifest.scm
blob: 039ca89889dd36411963295403b6ebb2582a23f1 (about) (plain)
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
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.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/>.

;;; This file returns a manifest containing entries to build past Guix
;;; releases from the current Guix, as per 'guix time-machine'.

(use-modules (srfi srfi-9) (ice-9 match)
             (guix channels) (guix gexp)
             ((guix store) #:select (%store-monad))
             ((guix monads) #:select (mparameterize return))
             ((guix git) #:select (%repository-cache-directory))
             ((guix build utils) #:select (mkdir-p)))

;; Representation of the latest channels.  This type exists just so we can
;; refer to such records in a gexp.
(define-record-type <guix-instance>
  (guix-instance channels)
  guix-instance?
  (channels guix-instance-channels))

(define-gexp-compiler (guix-instance-compiler (instance <guix-instance>)
                                              system target)
  (match instance
    (($ <guix-instance> channels)
     ;; When this manifest is evaluated by Cuirass, make sure it does not
     ;; fiddle with the cached checkout that Cuirass is also using since
     ;; concurrent accesses are unsafe.
     (mparameterize %store-monad ((%repository-cache-directory
                                   (string-append (%repository-cache-directory)
                                                  "/time-travel/" system)))
       (return (mkdir-p (%repository-cache-directory)))
       (latest-channel-derivation channels)))))

(define (guix-instance->manifest-entry instance)
  "Return a manifest entry for INSTANCE."
  (define (shorten commit)
    (string-take commit 7))

  (manifest-entry
    (name "guix")
    (version (string-join (map (compose shorten channel-commit)
                               (guix-instance-channels instance))
                          "-"))
    (item instance)))

(define (commit->guix-instance commit)
  "Return a Guix instance for COMMIT."
  (guix-instance (list (channel
                        (inherit %default-guix-channel)
                        (commit commit)))))

(define %release-commits
  ;; Release commits: the list of version/commit pairs.
  ;;
  ;; Note: To merely compute the derivation of these revisions, we need to be
  ;; able to build their dependencies.  Some of them no longer build from
  ;; source due to time traps like <https://issues.guix.gnu.org/58650>; those
  ;; need to be built beforehand in a virtual build machine running "in the
  ;; past".
  '(("1.4.0" . "8e2f32cee982d42a79e53fc1e9aa7b8ff0514714")
    ("1.3.0" . "a0178d34f582b50e9bdbb0403943129ae5b560ff")
    ("1.2.0" . "a099685659b4bfa6b3218f84953cbb7ff9e88063")
    ("1.1.0" . "d62c9b2671be55ae0305bebfda17b595f33797f2")
    ("1.0.1" . "d68de958b60426798ed62797ff7c96c327a672ac")
    ("1.0.0" . "6298c3ffd9654d3231a6f25390b056483e8f407c")
    ("0.16.0" . "4a0b87f0ec5b6c2dcf82b372dd20ca7ea6acdd9c")))

(manifest
 (map (match-lambda
        ((version . commit)
         (let ((entry (guix-instance->manifest-entry
                       (commit->guix-instance commit))))
           (manifest-entry
             (inherit entry)
             (version version)))))
      %release-commits))
into a list of strings and pass it to 'run-command'. * gnu/installer/newt/page.scm (edit-file): Likewise. Ludovic Courtès 2020-03-05installer: Implement a dialog on /var/guix/installer-socket....This will allow us to automate testing of the installer. * gnu/installer/utils.scm (%client-socket-file) (current-server-socket, current-clients): New variables. (open-server-socket, call-with-server-socket): New procedure. (with-server-socket): New macro. (run-shell-command): Add call to 'send-to-clients'. Select on both current-input-port and current-clients. * gnu/installer/steps.scm (run-installer-steps): Wrap 'call-with-prompt' in 'with-socket-server'. Call 'sigaction' for SIGPIPE. * gnu/installer/newt/page.scm (watch-clients!, close-port-and-reuse-fd) (run-form-with-clients, send-to-clients): New procedures. (draw-info-page): Add call to 'run-form-with-clients'. (run-input-page): Likewise. Handle EXIT-REASON equal to 'exit-fd-ready. (run-confirmation-page): Likewise. (run-listbox-selection-page): Likewise. Define 'choice->item' and use it. (run-checkbox-tree-page): Likewise. (run-file-textbox-page): Add call to 'run-form-with-clients'. Handle 'exit-fd-ready'. * gnu/installer/newt/partition.scm (run-disk-page): Pass #:client-callback-procedure to 'run-listbox-selection-page'. * gnu/installer/newt/user.scm (run-user-page): Call 'run-form-with-clients'. Handle 'exit-fd-ready'. * gnu/installer/newt/welcome.scm (run-menu-page): Define 'choice->item' and use it. Call 'run-form-with-clients'. * gnu/installer/newt/final.scm (run-install-success-page) (run-install-failed-page): When (current-clients) is non-empty, call 'send-to-clients' without displaying a choice window. Ludovic Courtès 2020-01-20installer: Disable F12 hot key....Fixes <https://bugs.gnu.org/38562>. Reported by Brice Waegeneire <brice@waegenei.re>. Previously, pressing F12 or shift-F2 in one of those forms would cause it to exit, usually with the default value #t because the caller had not provided a useful hotkey "callback". * gnu/installer/newt/page.scm (run-input-page, run-confirmation-page) (run-listbox-selection-page, run-checkbox-tree-page) (run-file-textbox-page): Pass #:flags FLAG-NOF12 to 'make-form'. Ludovic Courtès 2020-01-20installer: Makes sure the installer proceeds after hitting "Edit"....Fixes <https://bugs.gnu.org/39199>. Reported by Jonathan Brielmaier <jonathan.brielmaier@web.de>. * gnu/installer/newt/page.scm (run-file-textbox-page): Move 'loop' to the beginning of the body. Do not call 'loop' from the 'dynamic-wind' exit handler as we would not return the value of the second call to 'loop'. Ludovic Courtès 2020-01-12installer: Add an "Edit" button on the final page....Fixes <https://bugs.gnu.org/36885>. Reported by <lukasbf@tutanota.com>. * gnu/installer/newt/page.scm (edit-file): New procedure. (run-file-textbox-page): Add #:edit-button? and #:editor-locale parameters. Remove 'file-text' and add 'edit-button', and add it to the horizontal stacked grid when EXIT-BUTTON? is true. Wrap body in 'loop'. Handle case where ARGUMENT is EDIT-BUTTON by calling 'loop'. * gnu/installer/newt/final.scm (run-config-display-page): Add #:locale parameter. Pass #:edit-button? and #:editor-locale to 'run-file-textbox-page'. (run-final-page): Pass LOCALE to 'run-config-display-page'. Ludovic Courtès 2019-08-26installer: Show, don't Hide....* gnu/installer/newt/user.scm (run-user-add-page): Change the input visibility checkbox's text to ‘Show’, and default to unchecked. * gnu/installer/newt/page.scm (run-input-page): Likewise. Rename INPUT-HIDE-CHECKBOX? argument to INPUT-VISIBILITY-CHECKBOX?. Tobias Geerinckx-Rice 2019-05-14installer: Reflow run-file-textbox-page text....* gnu/installer/newt/page.scm (run-file-textbox-page): Reflow text. Signed-off-by: Danny Milosavljevic <dannym@scratchpost.org> Mathieu Othacehe 2019-05-14installer: Allow for arbitrary long passphrases and passwords....Fixes <https://bugs.gnu.org/35716>. Reported by sirmacik <sirmacik@wioo.waw.pl>. * gnu/installer/newt/page.scm (run-input-page): Add FLAG-SCROLL to INPUT-FLAGS*. * gnu/installer/newt/user.scm (run-user-add-page): Add FLAG-SCROLL to ENTRY-PASSWORD. Ludovic Courtès 2019-05-07installer: Add password 'hide' checkbox....* gnu/installer/newt/page.scm (run-input-page)[input-hide-checkbox?]: New parameter adding a checkbox to toggle password hiding. By default, the checkbox is active and the password is hence hided. * gnu/installer/newt/partition.scm (prompt-luks-passwords): Enable the previous parameter on both password input pages. * gnu/installer/newt/user.scm (run-root-password-page): Enable the previous parameter, (confirm-password): ditto, (run-user-add-page): add a checkbox to toggle password hiding. Mathieu Othacehe 2019-04-28installer: Add #:selection parameter to 'run-checkbox-tree-page'....* gnu/installer/newt/page.scm (%none-selected): New variable. (run-checkbox-tree-page): Add #:selection. [fill-checkbox-tree]: Honor it. Ludovic Courtès 2019-04-25installer: 'run-input-page' has a new #:input-flags parameter....* gnu/installer/newt/page.scm (run-input-page): Add #:input-flags and honor it. Ludovic Courtès 2019-04-17installer: Sort items with 'string-locale<?'....That way "Österreich" comes before "Schweiz" in a German locale (or pretty much any sane locale.) * gnu/installer/newt/page.scm (run-listbox-selection-page)[sort-listbox-items]: Use 'string-locale<?' instead of 'string<=?'. Ludovic Courtès 2019-03-27installer: Ask for confirmation before formatting partitions....* gnu/installer/newt/page.scm (run-confirmation-page): New procedure. * gnu/installer/newt/partition.scm (draw-formatting-page): Call it. Ludovic Courtès 2019-02-18gnu: Fix some typos in the installer....* gnu/installer/connman.scm (connman-connect-with-auth): Fix typo in documentation. * gnu/installer/newt/keymap.scm (sort-variants): Likewise. * gnu/installer/newt/page.scm (run-listbox-selection-page): Likewise. * gnu/installer/parted.scm (mkpart): Likewise. * gnu/installer/newt/utils.scm (destroy-form-and-pop): Likewise. * gnu/installer/newt/wifi.scm (run-unknown-error-page): Fix typo. (wifi-listbox-heigth): Rename to… (wifi-listbox-height): …this, and adjust caller. * gnu/installer/timezone.scm (locate-childrens): Rename to… (locate-children): …this. Adjust all callers. Tobias Geerinckx-Rice 2019-01-17installer: Rename "Ok" buttons to "OK"....* gnu/installer/newt/page.scm: s/Ok/OK/. * gnu/installer/newt/partition.scm: Ditto. * gnu/installer/newt/user.scm: Ditto. Mathieu Othacehe 2019-01-17installer: Make exit button optional for run-file-textbox-page....* gnu/installer/newt/page.scm (run-file-textbox-page)[exit-button?]: New argument. Mathieu Othacehe 2019-01-17installer: Make sure every sentence is dot terminated....gnu/installer/newt/hostname.scm: Finish sentences by a dot. gnu/installer/newt/network.scm: Ditto. gnu/installer/newt/page.scm: Ditto. gnu/installer/newt/partition.scm: Ditto. gnu/installer/newt/user.scm: Ditto. gnu/installer/newt/wifi.scm: Ditto. Mathieu Othacehe 2019-01-17installer: Turn "Cancel" buttons into "Exit" buttons....This change and previous ones were, Suggested-by: Thorsten Wilms <t_w_@freenet.de> here: https://lists.gnu.org/archive/html/guix-devel/2018-11/msg00330.html gnu/installer/newt/ethernet.scm: Turn cancel into exit. gnu/installer/newt/final.scm: Ditto. gnu/installer/newt/keymap.scm: Ditto. gnu/installer/newt/locale.scm: Ditto. gnu/installer/newt/network.scm: Ditto. gnu/installer/newt/page.scm: Ditto. gnu/installer/newt/partition.scm: Ditto. gnu/installer/newt/services.scm: Ditto. gnu/installer/newt/timezone.scm: Ditto. gnu/installer/newt/user.scm: Ditto. gnu/installer/newt/wifi.scm: Ditto. Mathieu Othacehe 2019-01-17installer: Add new pages....* gnu/installer/newt/page.scm (run-scale-page): New exported procedure, (run-checkbox-tree-page): ditto, (run-file-textbox-page): ditto. Mathieu Othacehe 2019-01-17gnu: Add graphical installer support....* configure.ac: Require that guile-newt is available. * gnu/installer.scm: New file. * gnu/installer/aux-files/logo.txt: New file. * gnu/installer/build-installer.scm: New file. * gnu/installer/connman.scm: New file. * gnu/installer/keymap.scm: New file. * gnu/installer/locale.scm: New file. * gnu/installer/newt.scm: New file. * gnu/installer/newt/ethernet.scm: New file. * gnu/installer/newt/hostname.scm: New file. * gnu/installer/newt/keymap.scm: New file. * gnu/installer/newt/locale.scm: New file. * gnu/installer/newt/menu.scm: New file. * gnu/installer/newt/network.scm: New file. * gnu/installer/newt/page.scm: New file. * gnu/installer/newt/timezone.scm: New file. * gnu/installer/newt/user.scm: New file. * gnu/installer/newt/utils.scm: New file. * gnu/installer/newt/welcome.scm: New file. * gnu/installer/newt/wifi.scm: New file. * gnu/installer/steps.scm: New file. * gnu/installer/timezone.scm: New file. * gnu/installer/utils.scm: New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add previous files. * gnu/system.scm: Export %root-account. * gnu/system/install.scm (%installation-services): Use kmscon instead of linux VT for all tty. (installation-os)[users]: Add the graphical installer as shell of the root account. [packages]: Add font related packages. * po/guix/POTFILES.in: Add installer files. Mathieu Othacehe