diff --git a/nixos/modules/config/fonts/fontconfig.nix b/nixos/modules/config/fonts/fontconfig.nix index ac2a024eaa8..52d284f739b 100644 --- a/nixos/modules/config/fonts/fontconfig.nix +++ b/nixos/modules/config/fonts/fontconfig.nix @@ -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} \ @@ -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) diff --git a/pkgs/development/libraries/fontconfig/config-compat.patch b/pkgs/development/libraries/fontconfig/config-compat.patch index e86f08fb553..ddf7bc78180 100644 --- a/pkgs/development/libraries/fontconfig/config-compat.patch +++ b/pkgs/development/libraries/fontconfig/config-compat.patch @@ -1,17 +1,22 @@ -commit 05c6adf8104b4321d3a3716a7b9feb6bf223ed0c (HEAD, nixpkgs) -Author: Vladimír Čunát -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?= +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 +--- + 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"); @@ -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 + diff --git a/pkgs/development/libraries/fontconfig/default.nix b/pkgs/development/libraries/fontconfig/default.nix index 0518cb257ab..29d9e3289c1 100644 --- a/pkgs/development/libraries/fontconfig/default.nix +++ b/pkgs/development/libraries/fontconfig/default.nix @@ -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. @@ -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 = [ @@ -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}" @@ -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 = { diff --git a/pkgs/development/libraries/fontconfig/fix-joypixels.patch b/pkgs/development/libraries/fontconfig/fix-joypixels.patch deleted file mode 100644 index d5654063fe8..00000000000 --- a/pkgs/development/libraries/fontconfig/fix-joypixels.patch +++ /dev/null @@ -1,23 +0,0 @@ ---- a/conf.d/45-generic.conf -+++ b/conf.d/45-generic.conf -@@ -5,6 +5,10 @@ - - - -+ -+ JoyPixels -+ emoji -+ - - Emoji Two - emoji ---- a/conf.d/60-generic.conf -+++ b/conf.d/60-generic.conf -@@ -29,6 +29,7 @@ - - emoji - -+ JoyPixels - Emoji Two - Emoji One - diff --git a/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl b/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl index dddbbe9e516..6ec2e7ab515 100644 --- a/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl +++ b/pkgs/development/libraries/fontconfig/make-fonts-conf.xsl @@ -31,6 +31,9 @@ /etc/fonts//conf.d + + /etc/fonts/conf.d + fonts @@ -40,6 +43,11 @@ ~/.nix-profile/lib/X11/fonts ~/.nix-profile/share/fonts + + + /usr/share/fonts + /usr/local/share/fonts + /nix/var/nix/profiles/default/lib/X11/fonts /nix/var/nix/profiles/default/share/fonts