diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-06-25 22:54:52 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-06-25 23:53:27 +0200 |
commit | fe6e3fe2a56aede1d5e04bab3281515c8df86ff8 (patch) | |
tree | 352cdbc887b981e99aedd9a025e2823ae34f4d34 | |
parent | 64e40dbb692d537e67d1dccd727dd5c36e39a10e (diff) | |
download | guix-fe6e3fe2a56aede1d5e04bab3281515c8df86ff8.tar.gz |
system: Support the addition of old entries in the GRUB menu.
* gnu/system.scm (operating-system-grub.cfg): Add 'old-entries' parameter. Pass it to 'grub-configuration-file'. * gnu/system/grub.scm (grub-configuration-file): Add #:old-entries parameter. Honor it.
-rw-r--r-- | gnu/system.scm | 8 | ||||
-rw-r--r-- | gnu/system/grub.scm | 16 |
2 files changed, 18 insertions, 6 deletions
diff --git a/gnu/system.scm b/gnu/system.scm index 12d9f5fe02..0b62350c63 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -493,8 +493,9 @@ we're running in the final root." (package-version kernel) " (technology preview)")) -(define (operating-system-grub.cfg os) - "Return the GRUB configuration file for OS." +(define* (operating-system-grub.cfg os #:optional (old-entries '())) + "Return the GRUB configuration file for OS. Use OLD-ENTRIES to populate the +\"old entries\" menu." (mlet* %store-monad ((system (operating-system-derivation os)) (root-fs -> (operating-system-root-file-system os)) @@ -509,7 +510,8 @@ we're running in the final root." #~(string-append "--load=" #$system "/boot"))) (initrd #~(string-append #$system "/initrd")))))) - (grub-configuration-file (operating-system-bootloader os) entries))) + (grub-configuration-file (operating-system-bootloader os) entries + #:old-entries old-entries))) (define (operating-system-parameters-file os) "Return a file that describes the boot parameters of OS. The primary use of diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm index e789e4c591..85a9fca9ff 100644 --- a/gnu/system/grub.scm +++ b/gnu/system/grub.scm @@ -63,9 +63,12 @@ (initrd menu-entry-initrd)) ; file name of the initrd as a gexp (define* (grub-configuration-file config entries - #:key (system (%current-system))) + #:key + (system (%current-system)) + (old-entries '())) "Return the GRUB configuration file corresponding to CONFIG, a -<grub-configuration> object." +<grub-configuration> object. OLD-ENTRIES is taken to be a list of menu +entries corresponding to old generations of the system." (define all-entries (append entries (grub-configuration-menu-entries config))) @@ -93,7 +96,14 @@ search.file ~a/bzImage~%" (($ <menu-entry> _ linux) linux)) all-entries)) - #$@(map entry->gexp all-entries)))) + #$@(map entry->gexp all-entries) + + #$@(if (pair? old-entries) + #~((format port " +submenu \"GNU system, old configurations...\" {~%") + #$@(map entry->gexp old-entries) + (format port "}~%")) + #~())))) (gexp->derivation "grub.cfg" builder)) |