summaryrefslogtreecommitdiff
path: root/suweren/home/services/fontutils.scm
blob: e6534c6664d1bba6e0863249fba3add7e6b26f6a (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
;;; SPDX-FileCopyrightText: 2024 Marek Paśnikowski <marek@marekpasnikowski.pl>
;;; SPDX-License-Identifier: GPL-3.0-or-later

(define-module (suweren home services fontutils)
               #:use-module ((gnu home services fontutils)
                             #:prefix gnu:home:services:fontutils:)
               #:use-module ((gnu services)
                             #:prefix gnu:services:))

(define antialias
        '(match (@ (target "font"))
                (edit (@ (mode "assign")
                         (name "antialias"))
                      (bool "false"))))

(define hinting
        '(match (@ (target "font"))
                (edit (@ (mode "assign")
                         (name "hinting"))
                      (bool "true"))))

(define hintstyle
        '(match (@ (target "font"))
                (edit (@ (mode "assign")
                         (name "hintstyle"))
                      (const "hintfull"))))

(define rgba
        '(match (@ (target "font"))
                (edit (@ (mode "assign")
                         (name "rgba"))
                      (const "rgb"))))

(define monospace
        '(alias (family "monospace")
                (prefer (family "Unifont"))))

(define sans-serif
        '(alias (family "sans-serif")
                (prefer (family "Unifont"))))

(define serif
        '(alias (family "serif")
                (prefer (family "Unifont"))))

(define (indent-xml level)
        (let* ((depth (* level
                         2))
               (indentation (make-string depth
                                         #\space)))
              (string-append "\n"
                             indentation)))

(define rules
        (list antialias
              hinting
              hintstyle
              rgba
              monospace
              sans-serif
              serif
              #f))

(define indent-one-level
        (indent-xml 1))

(define (indent-rule rule)
        (if rule
            (list indent-one-level
                  rule)
            (list #\newline)))

(define formatted-rules
        (map-in-order indent-rule
                      rules))

(define-public suweren-home-fontconfig-service-type
               (gnu:services:simple-service 'suweren-fontconfig
                                            gnu:home:services:fontutils:home-fontconfig-service-type
                                            (list formatted-rules)))