フライさんです。Arch Linux + i3wmでIntelliJ + IdeaVimでコーディングするのが好きです。
💥 問題
さて、限界開発鯖の実体は Discord上のサーバー なので、僕らは普段Discord上で会話をしています。
会話をしているんですが、僕が使っているDiscordにはある問題があります。
一部の文字列だけが明朝体になっています。他の普通のテキストはゴシックなのに。
これをどうにかしたい。
🔎 原因を探る
Ctrl+Shift+Iで開発者モードを起動して、CSSを見てみることにしました。
font-family: inherit
をたどってみると、ここでフォントを指定してそうなのでここをいじってみます。
いろいろごにょごにょしていたら、ここに挙げられているフォントが最後まで見つからなかったときのフォールバックのフォントが明朝体になってることがわかりました。
これをシステムフォントの名前にしてやるとそのフォントがちゃんと反映されるらしい。
ということは、以下の2つのアプローチを取れば解決しそうです。
- フォールバックのフォントを使いたいフォントに設定する
- 👆で指定されているフォントのいずれかをインストールする
僕はNoto Sans CJK JPを使いたいので1つ目のアプローチで攻めることにしました。こちらならPCにインストールされているフォントなら自由に使えますからね。
👷 どうにかする
(少なくとも僕のArch)Linuxでは、フォントの優先順位は fontconfig
で管理されます。font-config
の設定は/etc/fonts/
に存在します。
$ tree -L 1 /etc/fonts
/etc/fonts
├── conf.avail
├── conf.d
└── fonts.conf
2 directories, 1 file
fonts.conf
は conf.d
の中身を読み込んでくれるので、ここに設定を書いていきます。
📝 設定ファイルを作る
/etc/fonts/conf.d
に設定ファイルを作ります。
cd /etc/fonts/conf.d
sudo touch 99-user-configuration.conf
user-configuration
の部分は何でもOKですが、99
の部分はこれにしないと設定ファイルが読み込まれる順番が狂って反映されなくなりそうなので99
にしておいて損はないと思います。
その後、何らかの手段で99-user-configuration.conf
に以下の内容を書き込んでください。
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
<fontconfig>
<description>Change default font for Discord</description>
<match>
<test name="prgname"><string>discord</string></test>
<test qual="any" name="family"><string>sans-serif</string></test>
<edit mode="prepend" name="family">
<string>Noto Sans CJK JP</string>
</edit>
</match>
</fontconfig>
Noto Sans CJK JPはお好みで。ここで設定した部分が明朝体の代わりになります。
Discordを再起動すると、明朝体だった部分がNoto Sans CJK JPに置き換わっています。
🔬 噛み砕く
上の設定ファイルを噛み砕いて日本語訳すると以下のようになります。
discord
という名前のアプリケーションで、sans-serif
というフォントファミリーのフォントを使うときは、Noto Sans CJK JPを一番最初に考慮してくれよな!
<test name="prgname"><string>discord</string></test>
で 対象のアプリケーションがDiscordかどうかを判断しています。[1]<test qual="any" name="family"><string>sans-serif</string></test>
で 使おうとしているフォントがsans-serif
かを確認します。[2]<edit mode="prepend" name="family">
...</edit>
で使いたいフォントを優先順位の一番最初に持ってきます。
💫 もっとカスタマイズをする
この方法を拡張すれば、コードブロックのフォントをお好みのフォントにするとかもできそうです。 というわけで、コードブロックのフォントをJetBrains Monoにしてみます。
上で作成したファイルの</fontconfig>
の前に、以下を追記します。
<match>
<test name="prgname"><string>discord</string></test>
<test qual="any" name="family"><string>Consolas</string></test>
<edit mode="assign" name="family" binding="same">
<string>JetBrainsMonoMedium Nerd Font Mono</string>
</edit>
</match>
Consolasを無理やり置き換えています。あまりクールじゃないですが。
無理やり置き換えるために<edit>
タグの属性をいじっていることに注意してください。[3]
- <edit mode="prepend" name="family">
+ <edit mode="assign" name="family" binding="same">
これをすると、コードブロックが以下のようなフォントに変わります。
いいですね。読みやすく、そしてなによりもエモいです。リガチャもしっかり効いています。[4]
すげぇ。 Discordでリガチャ使えるとはさすがに思いませんでした。
👋 おわりに
Linuxってホントに詳細までカスタマイズできてすごいなーと思いました。