nixpkgs/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl
Jan Tojnar 993deed7ab
fontconfig: Load fonts also from FHS paths
With previous patch, we no longer load non-versioned fonts.conf file to avoid incompatibilities
but this also means fontconfig will not load system-wide installed fonts on non-NixOS systems.

As a compromise, let's hardcode the FHS font paths to the built-in config so that the system
fonts work there. Unlike with the system config we do not need to worry about compatibility as
incompatible font files will be simply ignored.

Of course there will still be disparity if the system install fonts to some other location than
these two but I am afraid this is the best we can do.

See https://github.com/NixOS/nixpkgs/pull/73795#issuecomment-635771967 for discussion.
2020-07-11 17:05:13 +02:00

68 lines
2.2 KiB
XML

<?xml version="1.0"?>
<!--
This script copies the original fonts.conf from the fontconfig
distribution, but replaces all <dir> entries with the directories
specified in the $fontDirectories parameter.
-->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str"
>
<xsl:output method='xml' encoding="UTF-8" doctype-system="fonts.dtd" />
<xsl:param name="fontDirectories" />
<xsl:param name="fontconfig" />
<xsl:param name="fontconfigConfigVersion" />
<xsl:template match="/fontconfig">
<fontconfig>
<xsl:apply-templates select="child::node()[name() != 'dir' and name() != 'cachedir' and name() != 'include']" />
<!-- the first cachedir will be used to store the cache -->
<cachedir prefix="xdg">fontconfig</cachedir>
<!-- /var/cache/fontconfig is useful for non-nixos systems -->
<cachedir>/var/cache/fontconfig</cachedir>
<!-- versioned system-wide config -->
<include ignore_missing="yes">/etc/fonts/<xsl:value-of select="$fontconfigConfigVersion" />/conf.d</include>
<!-- upstream config -->
<include><xsl:value-of select="$fontconfig" />/etc/fonts/conf.d</include>
<dir prefix="xdg">fonts</dir>
<xsl:for-each select="str:tokenize($fontDirectories)">
<dir><xsl:value-of select="." /></dir>
<xsl:text>&#0010;</xsl:text>
</xsl:for-each>
<!-- nix user profile -->
<dir>~/.nix-profile/lib/X11/fonts</dir>
<dir>~/.nix-profile/share/fonts</dir>
<!-- FHS paths for non-NixOS platforms -->
<dir>/usr/share/fonts</dir>
<dir>/usr/local/share/fonts</dir>
<!-- nix default profile -->
<dir>/nix/var/nix/profiles/default/lib/X11/fonts</dir>
<dir>/nix/var/nix/profiles/default/share/fonts</dir>
</fontconfig>
</xsl:template>
<!-- New fontconfig >=2.11 doesn't like xml:space added by xsl:copy-of -->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*[name() != 'xml:space']"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>