diff options
author | Ludovic Courtès <ludo@gnu.org> | 2016-10-25 00:58:26 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2016-10-25 01:21:28 +0200 |
commit | ffde82c9ecf99524220e463055f4f18c8c9e7a81 (patch) | |
tree | 79542b7085068a0f206e68a194acd53c8810b4a0 /gnu/system/grub.scm | |
parent | d91025e3d0f7a30b38798bc4ef9c0f96d3f85db7 (diff) | |
download | guix-ffde82c9ecf99524220e463055f4f18c8c9e7a81.tar guix-ffde82c9ecf99524220e463055f4f18c8c9e7a81.tar.gz |
system: grub: Use Guile-{RSVG,Cairo} instead of Inkscape + ImageMagick.
Based on a suggestion by Andy Wingo at
<https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00753.html>.
* gnu/build/svg.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
* gnu/system/grub.scm (svg->png): Add #:width and #:height. Rewrite to
use (gnu build svg).
(resize-image): Remove.
(grub-background-image): Adjust accordingly.
Diffstat (limited to 'gnu/system/grub.scm')
-rw-r--r-- | gnu/system/grub.scm | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/gnu/system/grub.scm b/gnu/system/grub.scm index ead48f0e32..249b415ab4 100644 --- a/gnu/system/grub.scm +++ b/gnu/system/grub.scm @@ -27,9 +27,8 @@ #:use-module (gnu artwork) #:use-module (gnu system file-systems) #:autoload (gnu packages grub) (grub) - #:autoload (gnu packages inkscape) (inkscape) - #:autoload (gnu packages imagemagick) (imagemagick) #:autoload (gnu packages compression) (gzip) + #:autoload (gnu packages gtk) (guile-cairo guile-rsvg) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:use-module (srfi srfi-1) @@ -132,25 +131,23 @@ object denoting a file name." ;;; Background image & themes. ;;; -(define (svg->png svg) - "Build a PNG from SVG." - ;; Don't use #:local-build? so that it's substitutable. +(define* (svg->png svg #:key width height) + "Build a PNG of HEIGHT x WIDTH from SVG." (gexp->derivation "grub-image.png" - #~(zero? - (system* (string-append #$inkscape "/bin/inkscape") - "--without-gui" - (string-append "--export-png=" #$output) - #$svg)))) - -(define (resize-image image width height) - "Resize IMAGE to WIDTHxHEIGHT." - ;; Don't use #:local-build? so that it's substitutable. - (let ((size (string-append (number->string width) - "x" (number->string height)))) - (gexp->derivation "grub-image.resized.png" - #~(zero? - (system* (string-append #$imagemagick "/bin/convert") - "-resize" #$size #$image #$output))))) + (with-imported-modules '((gnu build svg)) + #~(begin + ;; We need these two libraries. + (add-to-load-path (string-append #$guile-rsvg + "/share/guile/site/" + (effective-version))) + (add-to-load-path (string-append #$guile-cairo + "/share/guile/site/" + (effective-version))) + + (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 @@ -160,8 +157,8 @@ WIDTH/HEIGHT, or #f if none was found." (= (grub-image-aspect-ratio image) ratio)) (grub-theme-images (grub-configuration-theme config))))) (if image - (mlet %store-monad ((png (svg->png (grub-image-file image)))) - (resize-image png width height)) + (svg->png (grub-image-file image) + #:width width #:height height) (with-monad %store-monad (return #f))))) |