Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions nixos/modules/config/fonts/fontconfig.nix
Original file line number Diff line number Diff line change
Expand Up @@ -214,15 +214,7 @@ let
# fontconfig default config files
ln -s ${supportPkg.out}/etc/fonts/conf.d/*.conf \
$support_folder/
ln -s ${latestPkg.out}/etc/fonts/conf.d/*.conf \
$latest_folder/

# update latest 51-local.conf path to look at the latest local.conf
rm $latest_folder/51-local.conf

substitute ${latestPkg.out}/etc/fonts/conf.d/51-local.conf \
$latest_folder/51-local.conf \
--replace local.conf /etc/fonts/${latestVersion}/local.conf
# Latest fontconfig is configured to look for the upstream defaults inside the package.

# 00-nixos-cache.conf
ln -s ${cacheConfSupport} \
Expand All @@ -236,7 +228,11 @@ let
# 50-user.conf
${optionalString (!cfg.includeUserConf) ''
rm $support_folder/50-user.conf
rm $latest_folder/50-user.conf
''}
# Since latest fontconfig looks for default files inside the package,
# we had to move this one elsewhere to be able to exclude it here.
${optionalString cfg.includeUserConf ''
ln -s ${latestPkg.out}/etc/fonts/conf.d.bak/50-user.conf $latest_folder/50-user.conf
''}

# local.conf (indirect priority 51)
Expand Down
28 changes: 18 additions & 10 deletions pkgs/development/libraries/fontconfig/config-compat.patch
Original file line number Diff line number Diff line change
@@ -1,17 +1,22 @@
commit 05c6adf8104b4321d3a3716a7b9feb6bf223ed0c (HEAD, nixpkgs)
Author: Vladimír Čunát <vcunat@gmail.com>
Date: Tue Nov 4 12:24:25 2014 +0100
From 2ff9b53ce755be183ef9274f7dd3f9ac537173f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vladim=C3=ADr=20=C4=8Cun=C3=A1t?= <vcunat@gmail.com>
Date: Tue, 4 Nov 2014 12:24:25 +0100
Subject: [PATCH] add check for /etc/fonts/@configVersion@/fonts.conf

add check for /etc/fonts/@configVersion@/fonts.conf

It's checked between FONTCONFIG_FILE and the usual /etc/fonts/fonts.conf.
Also, hardcode /etc/fonts/fonts.conf to prevent accidental override.
It's checked between FONTCONFIG_FILE and the in-package etc/fonts/fonts.conf.
The latter is used so that on non-NixOS distributions, fontconfig works at least
with upstream defaults, even when the global config is incompatible.

Co-Authored-By: Jan Tojnar <jtojnar@gmail.com>
---
src/fccfg.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/fccfg.c b/src/fccfg.c
index 6377fd7..e9eb10a 100644
index 342c996..98a1324 100644
--- a/src/fccfg.c
+++ b/src/fccfg.c
@@ -2070,8 +2070,13 @@ FcConfigFilename (const FcChar8 *url)
@@ -2391,8 +2391,13 @@ FcConfigGetFilename (FcConfig *config,
if (!url || !*url)
{
url = (FcChar8 *) getenv ("FONTCONFIG_FILE");
Expand All @@ -22,7 +27,10 @@ index 6377fd7..e9eb10a 100644
+ }
if (!url)
- url = (FcChar8 *) FONTCONFIG_FILE;
+ url = (FcChar8 *) "/etc/fonts/fonts.conf";
+ url = (FcChar8 *) FONTCONFIG_PATH "/" FONTCONFIG_FILE;
}
file = 0;

--
2.26.2

82 changes: 71 additions & 11 deletions pkgs/development/libraries/fontconfig/default.nix
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
{ stdenv, substituteAll, fetchurl
, pkgconfig, freetype, expat, libxslt, gperf, dejavu_fonts
{ stdenv
, fetchpatch
, substituteAll
, fetchurl
, pkg-config
, freetype
, expat
, libxslt
, gperf
, dejavu_fonts
, autoreconfHook
}:

/** Font configuration scheme
- ./config-compat.patch makes fontconfig try the following root configs, in order:
$FONTCONFIG_FILE, /etc/fonts/${configVersion}/fonts.conf, /etc/fonts/fonts.conf
$FONTCONFIG_FILE, /etc/fonts/${configVersion}/fonts.conf, ${fontconfig.out}/etc/fonts/fonts.conf
This is done not to override config of pre-2.11 versions (which just blow up)
and still use *global* font configuration at both NixOS or non-NixOS.
and still use *global* font configuration at NixOS,
falling back to upstream defaults on non-NixOS.
- NixOS creates /etc/fonts/${configVersion}/fonts.conf link to $out/etc/fonts/fonts.conf,
and other modifications should go to /etc/fonts/${configVersion}/conf.d
- See ./make-fonts-conf.xsl for config details.
Expand All @@ -18,11 +28,11 @@ let
in
stdenv.mkDerivation rec {
pname = "fontconfig";
version = "2.12.6";
version = "2.13.92";

src = fetchurl {
url = "http://fontconfig.org/release/${pname}-${version}.tar.bz2";
sha256 = "05zh65zni11kgnhg726gjbrd55swspdvhqbcnj5a5xh8gn03036g";
url = "http://fontconfig.org/release/${pname}-${version}.tar.xz";
sha256 = "0kkfsvxcvcphm9zcgsh646gix3qn4spz555wa1jp5hbq70l62vjh";
};

patches = [
Expand All @@ -31,15 +41,56 @@ stdenv.mkDerivation rec {
inherit configVersion;
})

# Fix fonts not being loaded when missing included configs that have ignore_missing="yes".
# https://bugzilla.redhat.com/show_bug.cgi?id=1744377
(fetchpatch {
url = "https://gitlab.freedesktop.org/fontconfig/fontconfig/commit/fcada522913e5e07efa6367eff87ace9f06d24c8.patch";
sha256 = "1jbm3vw45b3qjnqrh2545v1k8vmb29c09v2wj07jnrq3lnchbvmn";
})

# Register JoyPixels as an emoji font.
# https://gitlab.freedesktop.org/fontconfig/fontconfig/merge_requests/67
./fix-joypixels.patch
(fetchpatch {
url = "https://gitlab.freedesktop.org/fontconfig/fontconfig/commit/65087ac7ce4cc5f2109967c1380b474955dcb590.patch";
sha256 = "1dkrbqx1c1d8yfnx0igvv516wanw2ksrpm3fbpm2h9nw0hccwqvm";
})

# Fix invalid DTD in reset-dirs.
# https://gitlab.freedesktop.org/fontconfig/fontconfig/merge_requests/78
(fetchpatch {
url = "https://gitlab.freedesktop.org/fontconfig/fontconfig/commit/a4aa66a858f1ecd375c5efe5916398281f73f794.patch";
sha256 = "1j4ky8jhpllfm1lh2if34xglh2hl79nsa0xxgzxpj9sx6h4v99j5";
})

# Do not include its tags, they are external now and only cause warnings with old fontconfig clients.
# https://gitlab.freedesktop.org/fontconfig/fontconfig/merge_requests/97
(fetchpatch {
url = "https://gitlab.freedesktop.org/fontconfig/fontconfig/commit/528b17b2837c3b102acd90cc7548d07bacaccb1f.patch";
sha256 = "1zf4wcd2xlprh805jalfy8ja5c2qzgkh4fwd1m9d638nl9gx932m";
})
# https://gitlab.freedesktop.org/fontconfig/fontconfig/merge_requests/100
(fetchpatch {
url = "https://gitlab.freedesktop.org/fontconfig/fontconfig/commit/37c7c748740bf6f2468d59e67951902710240b34.patch";
sha256 = "1rz5zrfwhpn9g49wrzzrmdglj78pbvpnw8ksgsw6bxq8l5d84jfr";
})
];

outputs = [ "bin" "dev" "lib" "out" ]; # $out contains all the config

propagatedBuildInputs = [ freetype ];
nativeBuildInputs = [ pkgconfig gperf libxslt ];
buildInputs = [ expat ];
nativeBuildInputs = [
gperf
libxslt
pkg-config
autoreconfHook
];

buildInputs = [
expat
];

propagatedBuildInputs = [
freetype
];

configureFlags = [
"--with-arch=${stdenv.hostPlatform.parsed.cpu.name}"
Expand All @@ -61,11 +112,20 @@ stdenv.mkDerivation rec {
postInstall = ''
cd "$out/etc/fonts"
xsltproc --stringparam fontDirectories "${dejavu_fonts.minimal}" \
--stringparam fontconfig "$out" \
--stringparam fontconfigConfigVersion "${configVersion}" \
--path $out/share/xml/fontconfig \
${./make-fonts-conf.xsl} $out/etc/fonts/fonts.conf \
> fonts.conf.tmp
mv fonts.conf.tmp $out/etc/fonts/fonts.conf

# Make it easier to remove user config in NixOS module.
mkdir -p $out/etc/fonts/conf.d.bak
mv $out/etc/fonts/conf.d/50-user.conf $out/etc/fonts/conf.d.bak

# update latest 51-local.conf path to look at the latest local.conf
substituteInPlace $out/etc/fonts/conf.d/51-local.conf \
--replace local.conf /etc/fonts/${configVersion}/local.conf
'';

passthru = {
Expand Down
23 changes: 0 additions & 23 deletions pkgs/development/libraries/fontconfig/fix-joypixels.patch

This file was deleted.

8 changes: 8 additions & 0 deletions pkgs/development/libraries/fontconfig/make-fonts-conf.xsl
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
<!-- 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>
Expand All @@ -40,6 +43,11 @@
<!-- 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>
Expand Down