Message ID | FA552D7A-638E-4317-B00F-7F5D380A4AD3@vodafonemail.de |
---|---|
State | Accepted |
Headers | show |
Series | [bug#41163] gnu: grub: Allow a PNG image and replace (aspect-ratio) with (resolution). | expand |
Context | Check | Description |
---|---|---|
cbaines/applying patch | fail | View Laminar job |
Hello Stefan, For some reason I cannot apply this patch. Could you send an updated revision based on master? A few comments below: > * gnu/bootloaders/grub.scm (<grub-image>)[resolution]: Replacement of the > 'aspect-ratio' field. You can write something like: * gnu/bootloaders/grub.scm (<grub-image>)[aspect-ratio]: Remove this field and replace it by ... [resolution]: ... this field. > + (resolution grub-image-resolution > + (default '(1024 . 768))) > + (file grub-image-file > + (default (file-append %artwork-repository > + "/grub/GuixSD-fully-black-4-3.svg")))) I'm not sure about defaulting to this file. This record is meant to describe a generic image. Could you keep this empty? > (define* (svg->png svg #:key width height) > - "Build a PNG of HEIGHT x WIDTH from SVG." > + "Build a PNG of HEIGHT x WIDTH from SVG if its file suffix is \".svg\". I'm not sure having "svg->png" handle other file types than ".svg" is very clear. > + #~(if (string-suffix? ".svg" #+svg) > + (begin > + (use-modules (gnu build svg)) > + (svg->png #+svg #$output > + #:width #$width > + #:height #$height)) > + (copy-file #+svg #$output)))))) You could move this check to "grub-background-image" procedure. So that "svg->png" only deals with ".svg" files. > + (let ((resolution (grub-image-resolution image))) > + (svg->png (grub-image-file image) > + #:width (car resolution) > + #:height (cdr resolution)))))) "car" and "cdr" should be avoided. You can write something like that instead: --8<---------------cut here---------------start------------->8--- (match resolution ((width . height) (svg->png (grub-image-file image) #:width width #:height height))) --8<---------------cut here---------------end--------------->8--- Thanks for this patch, Mathieu
Hi Mathieu! Many thanks for your reply! :-) > Am 10.05.2020 um 09:07 schrieb Mathieu Othacehe <othacehe@gnu.org>: > > For some reason I cannot apply this patch. Could you send an updated > revision based on master? I’ll try. > A few comments below: > >> * gnu/bootloaders/grub.scm (<grub-image>)[resolution]: Replacement of the >> 'aspect-ratio' field. > > You can write something like: > > * gnu/bootloaders/grub.scm (<grub-image>)[aspect-ratio]: Remove this > field and replace it by ... > [resolution]: ... this field. OK. >> + (resolution grub-image-resolution >> + (default '(1024 . 768))) >> + (file grub-image-file >> + (default (file-append %artwork-repository >> + "/grub/GuixSD-fully-black-4-3.svg")))) > > I'm not sure about defaulting to this file. This record is meant to > describe a generic image. Could you keep this empty? The point is that currently the grub-theme used by default is %default-theme, even if you set the theme field inside your bootloader-configuration to #f (this is documented). And %default-theme is using the very same file. If you now just want to modify the size of this image file to your screen resolution (I'd guess 1920 x 1080 is common), then you need to inherit form %default-theme and somehow change the resolution, probably making use of %background-image as well. This gets complicated and is not obvious – moreover as both variables are not documented. With my proposed change, you can create a new grub-theme which has all the current guix defaults and only modify the parts you want to change: (grub-theme (image (grub-image (resolution '(1920 . 1080))))) Compare this with an alternative code to achieve the same, if the file field would default to #f: (grub-theme (inherit %default-theme) (image (grub-image (inherit %background-image) (resolution '(1920 . 1080)))))) Actually I question that it makes much sense to have a separate grub-image record at all, now that I'm about to remove the list of it from grub-theme. But I'm hesitating to change too much – that’s also the reason that I didn't delete %default-theme and %background-image. So despite your comment, I’d go even further: For me something like this would look much easier without having any loss: (grub-theme (resolution '(1920 . 1080) (file %my-neat-backround-svg) (color-highlight '((fg . green) (bg . black)))) Or to stay with the simpler examples above: (grub-theme (resolution '(1920 . 1080))) And any missing field would stay the same as the current default. >> (define* (svg->png svg #:key width height) >> - "Build a PNG of HEIGHT x WIDTH from SVG." >> + "Build a PNG of HEIGHT x WIDTH from SVG if its file suffix is \".svg\". > > I'm not sure having "svg->png" handle other file types than ".svg" is > very clear. > >> + #~(if (string-suffix? ".svg" #+svg) >> + (begin >> + (use-modules (gnu build svg)) >> + (svg->png #+svg #$output >> + #:width #$width >> + #:height #$height)) >> + (copy-file #+svg #$output)))))) > > You could move this check to "grub-background-image" procedure. So that > "svg->png" only deals with ".svg" files. Yes, that makes sense. >> + (let ((resolution (grub-image-resolution image))) >> + (svg->png (grub-image-file image) >> + #:width (car resolution) >> + #:height (cdr resolution)))))) > > "car" and "cdr" should be avoided. You can write something like that > instead: > > --8<---------------cut here---------------start------------->8--- > (match resolution > ((width . height) > (svg->png (grub-image-file image) > #:width width > #:height height))) > --8<---------------cut here---------------end--------------->8— Looks nice. Bye Stefan
diff --git a/gnu/bootloader/grub.scm b/gnu/bootloader/grub.scm index 67736724a7..c70c3e260d 100644 --- a/gnu/bootloader/grub.scm +++ b/gnu/bootloader/grub.scm @@ -40,12 +40,12 @@ #:use-module (srfi srfi-2) #:export (grub-image grub-image? - grub-image-aspect-ratio + grub-image-resolution grub-image-file grub-theme grub-theme? - grub-theme-images + grub-theme-image grub-theme-color-normal grub-theme-color-highlight @@ -82,34 +82,28 @@ denoting a file name." (define-record-type* <grub-image> grub-image make-grub-image grub-image? - (aspect-ratio grub-image-aspect-ratio ;rational number - (default 4/3)) - (file grub-image-file)) ;file-valued gexp (SVG) + (resolution grub-image-resolution + (default '(1024 . 768))) + (file grub-image-file + (default (file-append %artwork-repository + "/grub/GuixSD-fully-black-4-3.svg")))) (define-record-type* <grub-theme> + ;; Default theme contributed by Felipe López. grub-theme make-grub-theme grub-theme? - (images grub-theme-images - (default '())) ;list of <grub-image> + (image grub-theme-image + (default (grub-image))) (color-normal grub-theme-color-normal - (default '((fg . cyan) (bg . blue)))) + (default '((fg . light-gray) (bg . black)))) (color-highlight grub-theme-color-highlight - (default '((fg . white) (bg . blue)))) + (default '((fg . yellow) (bg . black)))) (gfxmode grub-gfxmode (default '("auto")))) ;list of string -(define %background-image - (grub-image - (aspect-ratio 4/3) - (file (file-append %artwork-repository - "/grub/GuixSD-fully-black-4-3.svg")))) +(define %background-image (grub-image)) -(define %default-theme - ;; Default theme contributed by Felipe López. - (grub-theme - (images (list %background-image)) - (color-highlight '((fg . yellow) (bg . black))) - (color-normal '((fg . light-gray) (bg . black))))) ;XXX: #x303030 +(define %default-theme (grub-theme)) ^L ;;; @@ -117,32 +111,34 @@ denoting a file name." ;;; (define (bootloader-theme config) - "Return user defined theme in CONFIG if defined or %default-theme + "Return user defined theme in CONFIG if defined or a default theme otherwise." - (or (bootloader-configuration-theme config) %default-theme)) + (or (bootloader-configuration-theme config) (grub-theme))) (define* (svg->png svg #:key width height) - "Build a PNG of HEIGHT x WIDTH from SVG." + "Build a PNG of HEIGHT x WIDTH from SVG if its file suffix is \".svg\". +Otherwise the picture in SVG is just copied." (computed-file "grub-image.png" (with-imported-modules '((gnu build svg)) (with-extensions (list guile-rsvg guile-cairo) - #~(begin - (use-modules (gnu build svg)) - (svg->png #+svg #$output - #:width #$width - #:height #$height)))))) - -(define* (grub-background-image config #:key (width 1024) (height 768)) - "Return the GRUB background image defined in CONFIG with a ratio of -WIDTH/HEIGHT, or #f if none was found." - (let* ((ratio (/ width height)) - (image (find (lambda (image) - (= (grub-image-aspect-ratio image) ratio)) - (grub-theme-images - (bootloader-theme config))))) + #~(if (string-suffix? ".svg" #+svg) + (begin + (use-modules (gnu build svg)) + (svg->png #+svg #$output + #:width #$width + #:height #$height)) + (copy-file #+svg #$output)))))) + +(define* (grub-background-image config) + "Return the GRUB background image defined in CONFIG or #f if none was found. +If the suffix of the image file is \".svg\", then it is converted into a PNG +file with the resolution provided in CONFIG." + (let* ((image (grub-theme-image (bootloader-theme config)))) (and image - (svg->png (grub-image-file image) - #:width width #:height height)))) + (let ((resolution (grub-image-resolution image))) + (svg->png (grub-image-file image) + #:width (car resolution) + #:height (cdr resolution)))))) (define* (eye-candy config store-device store-mount-point #:key port)