Skip to content

Instantly share code, notes, and snippets.

@ShikiSuen
Last active March 10, 2023 19:27
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ShikiSuen/2489e06d994bb48e798005773953d4aa to your computer and use it in GitHub Desktop.
Save ShikiSuen/2489e06d994bb48e798005773953d4aa to your computer and use it in GitHub Desktop.
Apple Font Experience for Linux. You need to put this conf file in "/etc/fonts/conf.d" and manually install "Inter" and "Sarasa Gothic" to "/etc/fonts/opentype/". You can install PingFang if you wish. Install "noto-cjk" package from your Linux package manager for Noto Serif CJK support.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- -->
<fontconfig>
<!-- Basic CJK Font Fallback Rule Redifined -->
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-TW</string>
</test>
<test qual="any" name="lang" compare="contains">
<string>zh-Hant</string>
</test>
<test qual="any" name="lang" compare="contains">
<string>zh-Hant-TW</string>
</test>
<match target="pattern">
<test qual="any" name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-sans-tw</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-serif-tw</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>monospace</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-mono-tw</string>
</edit>
</match>
</match>
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-HK</string>
</test>
<test qual="any" name="lang" compare="contains">
<string>zh-Hant-HK</string>
</test>
<match target="pattern">
<test qual="any" name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-sans-hk</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-serif-hk</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>monospace</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-mono-hk</string>
</edit>
</match>
</match>
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>zh-CN</string>
</test>
<test qual="any" name="lang" compare="contains">
<string>zh-Hans</string>
</test>
<test qual="any" name="lang" compare="contains">
<string>zh-Hans-CN</string>
</test>
<match target="pattern">
<test qual="any" name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-sans-cn</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-serif-cn</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>monospace</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-mono-cn</string>
</edit>
</match>
</match>
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>ja</string>
</test>
<test qual="any" name="lang" compare="contains">
<string>ja-JP</string>
</test>
<match target="pattern">
<test qual="any" name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-sans-jp</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-serif-jp</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>monospace</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-mono-jp</string>
</edit>
</match>
</match>
<match target="pattern">
<test qual="any" name="lang" compare="contains">
<string>ko</string>
</test>
<test qual="any" name="lang" compare="contains">
<string>ko-KR</string>
</test>
<match target="pattern">
<test qual="any" name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-sans-kr</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-serif-kr</string>
</edit>
</match>
<match target="pattern">
<test qual="any" name="family">
<string>monospace</string>
</test>
<edit name="family" mode="assign">
<string>fallback-cjk-mono-kr</string>
</edit>
</match>
</match>
<!-- Inter Font Resize -->
<match target="font">
<test name="family">
<string>Inter</string>
</test>
<edit name="pixelsize" mode="assign">
<times><name>pixelsize</name>, <double>.95</double></times>
</edit>
</match>
<!-- Fallback fonts preference order -->
<match target="pattern">
<test name="family">
<string>sans-serif</string>
</test>
<edit name="family" mode="assign">
<string>Inter</string>
</edit>
</match>
<match target="pattern">
<test name="family">
<string>serif</string>
</test>
<edit name="family" mode="assign">
<string>Noto Serif</string>
</edit>
</match>
<match target="pattern">
<test name="family">
<string>monospace</string>
</test>
<edit name="family" mode="assign">
<string>Iosevka Term</string>
</edit>
</match>
<!-- Fallback fonts preference order - CJK -->
<alias>
<family>fallback-cjk-sans-tw</family>
<prefer>
<family>Inter</family>
<family>PingFang TC</family>
<family>PingFang SC</family>
<family>Sarasa Gothic TC</family>
<family>Noto Sans CJK TC</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-serif-tw</family>
<prefer>
<family>Noto Serif CJK TC</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-mono-tw</family>
<prefer>
<family>Sarasa Term TC</family>
<family>Noto Sans Mono CJK TC</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-sans-hk</family>
<prefer>
<family>Inter</family>
<family>PingFang HK</family>
<family>PingFang SC</family>
<family>Sarasa Gothic CL</family>
<family>Noto Sans CJK HK</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-serif-hk</family>
<prefer>
<family>Noto Serif CJK TC</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-mono-hk</family>
<prefer>
<family>Sarasa Term CL</family>
<family>Noto Sans Mono CJK HK</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-sans-cn</family>
<prefer>
<family>Inter</family>
<family>PingFang SC</family>
<family>Sarasa Gothic SC</family>
<family>Noto Sans CJK SC</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-serif-cn</family>
<prefer>
<family>Noto Serif CJK SC</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-mono-cn</family>
<prefer>
<family>Sarasa Term SC</family>
<family>Noto Sans Mono CJK SC</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-sans-jp</family>
<prefer>
<family>Inter</family>
<family>Sarasa Gothic J</family>
<family>Noto Sans CJK JP</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-serif-jp</family>
<prefer>
<family>Noto Serif CJK JP</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-mono-jp</family>
<prefer>
<family>Sarasa Term J</family>
<family>Noto Sans Mono CJK JP</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-sans-kr</family>
<prefer>
<family>Inter</family>
<family>Sarasa Gothic HC</family>
<family>Noto Sans CJK KR</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-serif-kr</family>
<prefer>
<family>Noto Serif CJK KR</family>
</prefer>
</alias>
<alias>
<family>fallback-cjk-sans-kr</family>
<prefer>
<family>Sarasa Term HC</family>
<family>Noto Sans Mono CJK KR</family>
</prefer>
</alias>
<!-- Extra Western Font Fallback -->
<alias>
<family>Helvetica Neue</family>
<prefer>
<family>Inter</family>
</prefer>
</alias>
<alias>
<family>Helvetica</family>
<prefer>
<family>Inter</family>
</prefer>
</alias>
<alias>
<family>Arial</family>
<prefer>
<family>Inter</family>
</prefer>
</alias>
<alias>
<family>Tahoma</family>
<prefer>
<family>Inter</family>
</prefer>
</alias>
<alias>
<family>Verdana</family>
<prefer>
<family>Inter</family>
</prefer>
</alias>
</fontconfig>
@ShikiSuen
Copy link
Author

This patch requires not only noto-CJK (for Noto Serif CJK support) but also the following fonts:
https://github.com/rsms/inter
https://github.com/be5invis/Sarasa-Gothic

(Sarasa Gothic is an enhanced version of Noto Sans CJK + embeded Iosevka terminal font support.)
(You may install PingFang if you wish, and this patch will read PingFang as the most prioritized Chinese fallback fonts.)
(Inter font can be treated as an open-source alternative of "Apple San Francisco Pro Display".)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment