Skip to content

Instantly share code, notes, and snippets.

@emilazy
Created August 3, 2020 21:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emilazy/a227e07d03650c4e1dafde637ac53597 to your computer and use it in GitHub Desktop.
Save emilazy/a227e07d03650c4e1dafde637ac53597 to your computer and use it in GitHub Desktop.
# TODO: investigate why https://fasterthanli.me/blog/2020/i-want-off-mr-golangs-wild-ride/
# has wrong weights for Merriweather
#
# https://thenewstack.io/open-source-hardware-the-rise-of-risc-v/ too
{ pkgs, lib, ... }:
{
fonts = {
enableDefaultFonts = false;
fonts = with pkgs; lib.mkForce [
noto-fonts
noto-fonts-extra
twitter-color-emoji
source-sans-pro
source-serif-pro
source-han-sans
source-han-serif
source-han-mono
# source-han-code-jp
# https://en.wikipedia.org/wiki/Help%3AMultilingual_support
# missing: Nüshu, Nyiakeng Puachue Hmong
# Nüshu is coming! https://github.com/LisaHuang2017/noto-sans-nushu
# only option for nyiakeng puachue hmong is unifont :(
# TODO: update signwriting package to 3.0.2 (except it doesn't work and sucks rip)
# for wider han coverage
# seems to have too high a performance impact for now :(
hanazono
babelstone-han
# for math characters
# noto sans math might be good enough
stix-two
# for Sutton SignWriting
signwriting
# for Siddham
# noto is good enough
#muktamsiddham
# consider packaging for coverage?
#quivira
# to replace Microsoft fonts
liberation_ttf
caladea
carlito
merriweather
merriweather-sans
# used widely by Google etc.
roboto
#roboto-mono
#roboto-slab
# monospace fonts
cascadia-code
inconsolata
#source-code-pro
#go-font
#iosevka
#input-fonts
#fira
#fira-mono
#fira-code
];
fontconfig = {
allowBitmaps = false;
hinting.enable = false;
subpixel.rgba = "none";
dpi = 96;
# we set these ourselves in localConf
defaultFonts = {
sansSerif = [];
serif = [];
monospace = [];
};
localConf = let
sourceHanDefault = lang: generic: families: ''
<match target="pattern">
<test name="lang" compare="contains">
<string>${lang}</string>
</test>
<test name="family">
<string>${generic}</string>
</test>'' + lib.concatMapStrings (family: ''
<edit name="family" mode="prepend" binding="strong">
<string>${family}</string>
</edit>'') families + ''
</match>
'';
sourceHanDefaults = lang: lib.concatStrings [
(sourceHanDefault lang "sans-serif" ["Source Han Sans"])
(sourceHanDefault lang "serif" ["Source Han Serif"])
# see generic default for explanation
(sourceHanDefault lang "monospace" ["Twitter Color Emoji" "Source Han Mono"])
];
in ''<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- fonts of last resort -->
<match>
<edit mode="append" name="family"><string>Twitter Color Emoji</string></edit>
<edit mode="append" name="family"><string>Noto Sans</string></edit>
<edit mode="append" name="family"><string>Source Han Sans</string></edit>
<!-- TODO: why does http://www.fileformat.info/info/unicode/block/sutton_signwriting/utf8test.htm use Filling? -->
<edit mode="append" name="family"><string>SignWriting 2010</string></edit>
</match>
<!-- System UI font aliases for web -->
${lib.concatMapStrings (family: ''
<alias binding="same">
<family>${family}</family>
<accept>
<family>Source Sans Pro</family>
</accept>
</alias>
'') [
"system-ui"
"-apple-system"
"BlinkMacSystemFont"
"San Francisco"
"Segoe UI"
# "Droid Sans"
"Cantarell"
"Oxygen"
"Ubuntu"
]}
${lib.concatMapStrings (family: ''
<alias binding="same">
<family>${family}</family>
<accept>
<family>Cascadia Code</family>
</accept>
</alias>
'') ["SFMono-Regular" "Consolas"]}
<!--
<alias binding="same">
<family>Merriweather</family>
<default>
<family>Georgia</family>
</default>
</alias>
-->
<alias binding="same">
<family>Georgia</family>
<accept>
<family>Merriweather</family>
</accept>
</alias>
<alias binding="same">
<family>Verdana</family>
<accept>
<family>Noto Sans</family>
</accept>
</alias>
${sourceHanDefaults "ja"}
${sourceHanDefaults "zh"}
${sourceHanDefaults "ko"}
<!-- multilingual defaults -->
<alias binding="same">
<family>sans-serif</family>
<prefer>
<family>Noto Sans</family>
<family>Twitter Color Emoji</family>
<family>Source Han Sans</family>
</prefer>
</alias>
<alias binding="same">
<family>serif</family>
<prefer>
<family>Noto Serif</family>
<family>Twitter Color Emoji</family>
<family>Source Han Serif</family>
</prefer>
</alias>
<alias binding="same">
<family>monospace</family>
<prefer>
<family>Cascadia Code</family>
<family>Twitter Color Emoji</family>
<family>Source Han Mono</family>
<family>Noto Sans Mono</family>
</prefer>
</alias>
<selectfont>
<rejectfont>
<pattern><patelt name="family"><string>DejaVu Sans</string></patelt></pattern>
<pattern><patelt name="family"><string>Arimo</string></patelt></pattern>
<pattern><patelt name="family"><string>Tinos</string></patelt></pattern>
<pattern><patelt name="family"><string>Cousine</string></patelt></pattern>
<pattern><patelt name="family"><string>Noto Mono</string></patelt></pattern>
<pattern><patelt name="family"><string>Noto Emoji</string></patelt></pattern>
</rejectfont>
</selectfont>
</fontconfig>
'';
};
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment