Skip to content

Instantly share code, notes, and snippets.

@wedens
Last active January 20, 2019 13:38
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 wedens/ed9694027fe143ea4be8b2d159392d3e to your computer and use it in GitHub Desktop.
Save wedens/ed9694027fe143ea4be8b2d159392d3e to your computer and use it in GitHub Desktop.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!--
This config attempts to guarantee that colorful emojis from Twemoji will be displayed,
no matter how badly the apps and websites are written.
It uses a few different tricks, some of which introduce conflicts with other emoji fonts.
If you wish to simultaneously use multiple emoji fonts, make sure to adapt this config.
-->
<!--
This adds a generic family 'emoji',
aimed for apps that don't specify specific font family for rendering emojis.
-->
<match target="pattern">
<test qual="any" name="family"><string>emoji</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<!--
This adds Twemoji as a final fallback font for the default font families.
In this case, Twemoji will be selected if and only if no other font can provide a given symbol.
Note, usually other fonts will have some glyphs available (especilly Symbola font),
causing some emojis to be black&white and ugly.
-->
<match target="pattern">
<test name="family"><string>sans</string></test>
<edit name="family" mode="append"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test name="family"><string>serif</string></test>
<edit name="family" mode="append"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test name="family"><string>sans-serif</string></test>
<edit name="family" mode="append"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test name="family"><string>monospace</string></test>
<edit name="family" mode="append"><string>Twemoji</string></edit>
</match>
<!--
It seems Symbola is often selected as a fallback font before Twemoji.
This will try to remove Symbola from the list of fallback fonts.
-->
<selectfont>
<rejectfont>
<pattern>
<patelt name="family">
<string>Symbola</string>
</patelt>
</pattern>
</rejectfont>
</selectfont>
<!--
Recognize alternative ways of writing Twemoji family name.
-->
<match target="pattern">
<test qual="any" name="family"><string>Emoji One</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Twemoji Color</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Twemoji Mozilla</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<!--
Use Twemoji when other popular fonts are being specifically requested.
It is quite common that websites would only request Apple and Google emoji fonts, and then fallback to b&w Symbola.
These aliases will make Twemoji be selected in such cases to provide good-looking emojis.
-->
<match target="pattern">
<test qual="any" name="family"><string>Apple Color Emoji</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Segoe UI Emoji</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Segoe UI Symbol</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Noto Color Emoji</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>NotoColorEmoji</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Android Emoji</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Noto Emoji</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Twitter Color Emoji</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>EmojiOne</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Twemoji Mozilla</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>TwemojiMozilla</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>EmojiTwo</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Emoji Two</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>EmojiSymbols</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
<match target="pattern">
<test qual="any" name="family"><string>Symbola</string></test>
<edit name="family" mode="assign" binding="same"><string>Twemoji</string></edit>
</match>
</fontconfig>
{ stdenv, fetchurl, rpmextract }:
let
fedRel = "1.fc30";
in
stdenv.mkDerivation rec {
name = "twemoji-${version}";
version = "11.2.0";
src = fetchurl {
url = "https://archives.fedoraproject.org/pub/fedora/linux/development/rawhide/Everything/x86_64/os/Packages/t/twitter-twemoji-fonts-${version}-${fedRel}.noarch.rpm";
sha256 = "c6487c14f2e719019f539613267b70bca920afee1b06ce05bd062ee2af98dc2c";
};
buildInputs = [ rpmextract ];
unpackPhase = ''
rpmextract $src
'';
installPhase = ''
install -Dm644 usr/share/fonts/twemoji/Twemoji.ttf \
$out/share/fonts/truetype/twemoji.ttf
install -Dm644 ${./75-twemoji.conf} $out/etc/fonts/conf.d/75-twemoji.conf
install -Dm644 ${./75-twemoji.conf} $out/etc/fonts/2.11/conf.d/75-twemoji.conf
'';
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment