[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
01/12: gnu: home: services: fontutils: Add support for SXML fragments.
From: |
guix-commits |
Subject: |
01/12: gnu: home: services: fontutils: Add support for SXML fragments. |
Date: |
Thu, 11 May 2023 10:39:24 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit 8d442e8a53b8ef3727252425afe2cfb922f51368
Author: Andrew Patterson <andrewpatt7@gmail.com>
AuthorDate: Wed Apr 12 23:40:59 2023 -0400
gnu: home: services: fontutils: Add support for SXML fragments.
* gnu/home/services/fontutils.scm (add-fontconfig-config-file): Add
support for adding arbitrary SXML configuration into fonts.conf;
* doc/guix.texi (Fonts Services): Update the documentation.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
---
doc/guix.texi | 16 +++++++++++-----
gnu/home/services/fontutils.scm | 38 ++++++++++++++++++++++++++++++--------
2 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index ef2b78baeb..27fc3b1689 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -43084,8 +43084,10 @@ library is used by many applications to access fonts
on the system.
@defvar home-fontconfig-service-type
This is the service type for generating configurations for Fontconfig.
-Its associated value is a list of strings (or gexps) pointing to fonts
-locations.
+Its associated value is a list of either strings (or gexps) pointing to
+fonts locations, or SXML (@pxref{SXML,,, guile, GNU Guile Reference
+Manual}) fragments to be converted into XML and put inside the main
+@code{fontconfig} node.
Generally, it is better to extend this service than to directly
configure it, as its default value is the default Guix Home's profile
@@ -43093,13 +43095,17 @@ font installation path
(@file{~/.guix-home/profile/share/fonts}). If
you configure this service directly, be sure to include the above
directory.
-A typical extension for adding an additional font directory might look
-like this:
+A typical extension for adding an additional font directory and setting
+a font as the default monospace font might look like this:
@lisp
(simple-service 'additional-fonts-service
home-fontconfig-service-type
- (list "~/.nix-profile/share/fonts"))
+ (list "~/.nix-profile/share/fonts"
+ '(alias
+ (family "monospace")
+ (prefer
+ (family "Liberation Mono")))))
@end lisp
@end defvar
diff --git a/gnu/home/services/fontutils.scm b/gnu/home/services/fontutils.scm
index 3399cb7ec8..0e60bc2035 100644
--- a/gnu/home/services/fontutils.scm
+++ b/gnu/home/services/fontutils.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2023 Giacomo Leidi <goodoldpaul@autistici.org>
+;;; Copyright © 2023 Andrew Patterson <andrewpatt7@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -23,6 +24,8 @@
#:use-module (gnu packages fontutils)
#:use-module (guix gexp)
#:use-module (srfi srfi-1)
+ #:use-module (ice-9 match)
+ #:use-module (sxml simple)
#:export (home-fontconfig-service-type))
@@ -35,17 +38,36 @@
;;;
;;; Code:
-(define (add-fontconfig-config-file directories)
+(define (write-fontconfig-doctype)
+ "Prints fontconfig's DOCTYPE to current-output-port."
+ ;; This is necessary because SXML doesn't seem to have a way to represent a
doctype,
+ ;; but sxml->xml /does/ currently call any thunks in the SXML with the XML
output port
+ ;; as current-output-port, allowing the output to include arbitrary text
instead of
+ ;; just properly quoted XML.
+ (format #t "<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>"))
+
+(define (config->sxml config)
+ "Converts a <home-fontconfig-configuration> record into the SXML
representation
+of fontconfig's fonts.conf file."
+ (define (snippets->sxml snippet)
+ (match snippet
+ ((or (? string? dir)
+ (? gexp? dir))
+ `(dir ,dir))
+ ((? list?)
+ snippet)))
+ `(*TOP* (*PI* xml "version='1.0'")
+ ,write-fontconfig-doctype
+ (fontconfig
+ ,@(map snippets->sxml config))))
+
+(define (add-fontconfig-config-file config)
`(("fontconfig/fonts.conf"
,(mixed-text-file
"fonts.conf"
- (apply string-append
- `("<?xml version='1.0'?>
-<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
-<fontconfig>\n" ,@(map (lambda (directory)
- (string-append " <dir>" directory "</dir>\n"))
- directories)
- "</fontconfig>\n"))))))
+ (call-with-output-string
+ (lambda (port)
+ (sxml->xml (config->sxml config) port)))))))
(define (regenerate-font-cache-gexp _)
`(("profile/share/fonts"
- branch master updated (ef0aa7ff8b -> 1e4c45b0dc), guix-commits, 2023/05/11
- 02/12: services: dhcp-client-configuration: Add 'shepherd-requirement' field., guix-commits, 2023/05/11
- 01/12: gnu: home: services: fontutils: Add support for SXML fragments.,
guix-commits <=
- 10/12: services: Add vnstat-service-type., guix-commits, 2023/05/11
- 08/12: gnu: barrier: Include NULL compatibility., guix-commits, 2023/05/11
- 07/12: gnu: git: Update to 2.40.1 [security fixes]., guix-commits, 2023/05/11
- 09/12: doc: Update dicod-configuration example, guix-commits, 2023/05/11
- 05/12: gnu: laby: Make laby function in pure environments., guix-commits, 2023/05/11
- 12/12: tests: Add vnstat tests., guix-commits, 2023/05/11
- 03/12: doc: Clarify substitute* docstring with an example., guix-commits, 2023/05/11
- 06/12: gnu: laby: Add patch for being able to execute game code., guix-commits, 2023/05/11
- 04/12: gnu: laby: Use new package style., guix-commits, 2023/05/11
- 11/12: services: inetd: Export accessors., guix-commits, 2023/05/11