diff options
-rw-r--r-- | nixos/modules/config/fonts/fontconfig.nix | 17 | ||||
-rw-r--r-- | pkgs/development/libraries/fontconfig/make-fonts-cache.nix | 27 | ||||
-rw-r--r-- | pkgs/development/libraries/fontconfig/make-fonts-conf.xsl | 10 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 5 |
4 files changed, 53 insertions, 6 deletions
diff --git a/nixos/modules/config/fonts/fontconfig.nix b/nixos/modules/config/fonts/fontconfig.nix index be6662decea..e078a75b295 100644 --- a/nixos/modules/config/fonts/fontconfig.nix +++ b/nixos/modules/config/fonts/fontconfig.nix @@ -129,6 +129,14 @@ with lib; }; + cache32Bit = mkOption { + default = false; + type = types.bool; + description = '' + Generate system fonts cache for 32-bit applications. + ''; + }; + }; }; @@ -231,12 +239,19 @@ with lib; "${pkgs.fontconfig}/etc/fonts/fonts.conf"; environment.etc."fonts/${pkgs.fontconfig.configVersion}/conf.d/00-nixos.conf".text = - '' + let + cache = fontconfig: pkgs.makeFontsCache { inherit fontconfig; fontDirectories = config.fonts.fonts; }; + in '' <?xml version='1.0'?> <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> <fontconfig> <!-- Font directories --> ${concatStringsSep "\n" (map (font: "<dir>${font}</dir>") config.fonts.fonts)} + <!-- Pre-generated font caches --> + <cachedir>${cache pkgs.fontconfig}</cachedir> + ${optionalString (pkgs.stdenv.isx86_64 && config.fonts.fontconfig.cache32Bit) '' + <cachedir>${cache pkgs.pkgsi686Linux.fontconfig}</cachedir> + ''} </fontconfig> ''; diff --git a/pkgs/development/libraries/fontconfig/make-fonts-cache.nix b/pkgs/development/libraries/fontconfig/make-fonts-cache.nix new file mode 100644 index 00000000000..1321948c3c8 --- /dev/null +++ b/pkgs/development/libraries/fontconfig/make-fonts-cache.nix @@ -0,0 +1,27 @@ +{ runCommand, lib, writeText, fontconfig, fontbhttf, fontDirectories }: + +runCommand "fc-cache" + rec { + buildInputs = [ fontconfig ]; + passAsFile = [ "fontDirs" ]; + fontDirs = '' + <!-- Font directories --> + ${lib.concatStringsSep "\n" (map (font: "<dir>${font}</dir>") fontDirectories)} + ''; + } + '' + export FONTCONFIG_FILE=$(pwd)/fonts.conf + + cat > fonts.conf << EOF + <?xml version='1.0'?> + <!DOCTYPE fontconfig SYSTEM 'fonts.dtd'> + <fontconfig> + <include>${fontconfig}/etc/fonts/fonts.conf</include> + <cachedir>$out</cachedir> + EOF + cat "$fontDirsPath" >> fonts.conf + echo "</fontconfig>" >> fonts.conf + + mkdir -p $out + fc-cache -sv + '' diff --git a/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl b/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl index 1b79834c894..b59fcd0187b 100644 --- a/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl +++ b/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl @@ -23,16 +23,16 @@ <fontconfig> <xsl:apply-templates select="child::node()[name() != 'dir' and name() != 'cachedir' and name() != 'include']" /> - <!-- fontconfig distribution conf.d --> - <include><xsl:value-of select="$fontconfig" />/etc/fonts/conf.d</include> - <!-- versioned system-wide config --> - <include ignore_missing="yes">/etc/fonts/<xsl:value-of select="$fontconfigConfigVersion" />/conf.d</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> + <!-- fontconfig distribution conf.d --> + <include><xsl:value-of select="$fontconfig" />/etc/fonts/conf.d</include> + <!-- versioned system-wide config --> + <include ignore_missing="yes">/etc/fonts/<xsl:value-of select="$fontconfigConfigVersion" />/conf.d</include> + <dir prefix="xdg">fonts</dir> <xsl:for-each select="str:tokenize($fontDirectories)"> <dir><xsl:value-of select="." /></dir> diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cfa474d5b1f..6e743e2d713 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -6520,6 +6520,11 @@ let inherit fontconfig fontDirectories; }; + makeFontsCache = let fontconfig_ = fontconfig; in {fontconfig ? fontconfig_, fontDirectories}: + callPackage ../development/libraries/fontconfig/make-fonts-cache.nix { + inherit fontconfig fontDirectories; + }; + freealut = callPackage ../development/libraries/freealut { }; freeglut = callPackage ../development/libraries/freeglut { }; |