From b31c7e527e1c1495e554ca453e129c310f6dd210 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Thu, 29 Aug 2019 04:16:34 +0200 Subject: nixos/fontconfig: Allow setting default emoji font MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In fontconfig’s 60-generic.conf, order of preference is estabilished for emoji font family. Because fontconfig parses the config files in lexicographic order, appending each from element to the family’s prefer list (to be prepended before the family) [1], our font family defaults stored in 52-nixos-default-fonts.conf will take precedence. That is, of course, unless the default „weak“ binding [2] is used. Emoji family binds strongly [3], so we need to set binding to “same” for our es to be considered before the ones from 60-generic.conf. By default, we will set the option to all emoji fonts supported by fontconfig, so that emoji works for user if they have at least one emoji font installed. If they have multiple emoji fonts installed, we will use the fontconfig’s order of preference [4]. [1]: https://github.com/bohoomil/fontconfig-ultimate/issues/51#issuecomment-64678322 [2]: https://www.freedesktop.org/software/fontconfig/fontconfig-user.html#AEN25 [3]: https://gitlab.freedesktop.org/fontconfig/fontconfig/commit/cc8442dec85e9d416436d19eeae1783f2d3008f0 [4]: https://gitlab.freedesktop.org/fontconfig/fontconfig/commit/c41c9220181b203d1cf1f6435f6e3735cb7c84ac --- nixos/modules/config/fonts/fontconfig.nix | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'nixos/modules/config') diff --git a/nixos/modules/config/fonts/fontconfig.nix b/nixos/modules/config/fonts/fontconfig.nix index fe0b88cf4c26..bcb86f11ead7 100644 --- a/nixos/modules/config/fonts/fontconfig.nix +++ b/nixos/modules/config/fonts/fontconfig.nix @@ -116,7 +116,7 @@ let defaultFontsConf = let genDefault = fonts: name: optionalString (fonts != []) '' - + ${name} ${concatStringsSep "" @@ -139,6 +139,8 @@ let ${genDefault cfg.defaultFonts.monospace "monospace"} + ${genDefault cfg.defaultFonts.emoji "emoji"} + ''; @@ -344,6 +346,21 @@ in in case multiple languages must be supported. ''; }; + + emoji = mkOption { + type = types.listOf types.str; + default = ["Noto Color Emoji"]; + description = '' + System-wide default emoji font(s). Multiple fonts may be listed + in case a font does not support all emoji. + + Note that fontconfig matches color emoji fonts preferentially, + so if you want to use a black and white font while having + a color font installed (eg. Noto Color Emoji installed alongside + Noto Emoji), fontconfig will still choose the color font even + when it is later in the list. + ''; + }; }; hinting = { -- cgit 1.4.1