I have been raging about the font rendering on Linux for years. It just sucks. Font has jagged edges and it looks very weird. I dual-boot with windows and the font there is very nice. So, I asked Claude ai to help me and it did a great job and my font is now is actually better than windows. I wanted to share it with everyone in case you have the same issue with the font on Linux.
Here it is:
- First, install required packages:
sudo pacman -S freetype2 cairo fontconfig
2. Install better fonts:
sudo pacman -S ttf-dejavu ttf-liberation noto-fonts ttf-roboto ttf-roboto-mono ttf-droid ttf-opensans ttf-hack ttf-fira-code
I have also installed Segoe ui and Segoe UI Variable fonts and that is what I’m using now.
3. Create or edit the font configuration file:
sudo mkdir -p /etc/fonts/conf.d
sudo nano /etc/fonts/local.conf
4. Add this configuration to local.conf:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<edit name="antialias" mode="assign">
<bool>true</bool>
</edit>
<edit name="hinting" mode="assign">
<bool>true</bool>
</edit>
<edit name="hintstyle" mode="assign">
<const>hintslight</const>
</edit>
<edit name="rgba" mode="assign">
<const>rgb</const>
</edit>
<edit name="lcdfilter" mode="assign">
<const>lcddefault</const>
</edit>
<edit name="embeddedbitmap" mode="assign">
<bool>false</bool>
</edit>
<edit name="autohint" mode="assign">
<bool>true</bool>
</edit>
</match>
<!-- Increase contrast slightly for all fonts This is not mandatory and can be commented out-->
<match target="font">
<edit name="weight" mode="assign">
<const>medium</const>
</edit>
</match>
</fontconfig>
5. Create a file for FreeType settings:
sudo nano /etc/profile.d/freetype2.sh
6. Add these export commands (I found it there already, but it was commented out. Just removed the “#”):
export FREETYPE_PROPERTIES="truetype:interpreter-version=40"
7. Enable subpixel rendering: (You might get a message that says “File exist”, that’s ok. It means it was already there)
sudo ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d/
sudo ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d/
8. Clear and regenerate font cache:
fc-cache -fv
9. For better Java application fonts:
sudo pacman -S jre-openjdk fontconfig
10. Reboot
Additional optional steps: a. For better Firefox font rendering, in about:config: Set
gfx.font_rendering.cleartype_params.rendering_mode
to 5 (This doesn’t exist in FF. You create it, set it to “number” and give it a value of 5)
Set
gfx.webrender.all
to true
b. If you use VSCode, add to settings.json:
{
"editor.fontFamily": "'Fira Code, 'Droid Sans Mono', 'monospace'",
"editor.fontLigatures": true
}
Truly hope this helps someone. Share it with others if you think it will help them.
Thanks :)
The local.conf file should work on any distro. It’s an opinionated override and might not be ideal for everyone but you can use the settings as a starting point to research further. Don’t modify the other files in /etc/fonts as they will be updated by the distro. Claude’s other suggestions apart from selecting some better fonts generally do nothing as far as I can tell. I connected to one of my debian machines and the symbolic links Claude gave to /etc/conf.avail are a debianism as I suspected. If you don’t install or use bitmap fonts and you override the rgb aliasing in local.conf I don’t see the point of either of those symbolic links but whatever meatbag wrote them in a stackoverflow or reddit post intended them for a debian distro.