Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
A set of instructions on how to fix the harfbuzz + Infinality issue and restoring good-looking, Infinality-like font rendering.

Disclaimer: Please follow this guide being aware of the fact that I'm not an expert regarding the things outlined below, however I made my best attempt. A few people in IRC confirmed it worked for them and the results looked acceptable.

Attention: After following all the steps run gdk-pixbuf-query-loaders --update-cache as root, this prevents various gdk-related bugs that have been reported in the last few hours. Symptoms are varied, and for Cinnamon the DE fails to start entirely while for XFCE the icon theme seemingly can't be changed anymore etc.

Check the gist's comments for any further tips and instructions, especially if you are running into problems!

Screenshots

Results after following the guide as of 11.01.2017 13:08:

Changelog

  • 10.01.2017 23:22: Changed typo Windings to Wingdings in the /etc/fonts/local.conf template, users are advised to update their files.
  • 11.01.2017 00:42: Fixed another bug in /etc/fonts/local.conf, thank you edgard.
  • 11.01.2017 13:08: Instruct users to symlink configuration from /etc/fonts/conf.avail instead of setting interpreter instructions in /etc/fonts/local.conf. This prevents the overwriting of specialized fontconfig instructions in lower prefixes and might change the looks slightly. To restore the old behavior you can simply insert:
  <match target="font">
    <edit name="hintstyle" mode="assign">
      <const>hintslight</const>
    </edit>
  </match>

below <fontconfig> in /etc/fonts/local.conf. Here's the old look and the new look, I urge you to test it on more sites to get a feel for the differences. There are advantages and disadvantages to both, though in general I feel that the new look preserves more of the actual shape.

  • 11.01.2017 15:22: Added some screenshots at the very top of the gist.
  • 11.01.2017 21:44: Fixed typos in the symlink-creation part
  • 15.01.2017 22:06: Added alternative instructions on how to symlink the infinality-substitution snippet to /etc/fonts/conf.d, since it is now part of the fonts-meta-extended-lt package.
  • 23.01.2017 16:41: Added mirror links to missing optional fonts in step 2 in the "Creating an Infinality-like fontconfig Configuration"-section, since bohoomil's font repository seems to be offline now.

General

If you installed infinality-bundle or the patched freetype2-infinality(-ultimate) package, you'll most likely recently have run into an error relating to the harfbuzz package (>= 1.4.1-1), specifically something like: /usr/lib/libharfbuzz.so.0: undefined symbol: FT_Get_Var_Blend_Coordinates.

This is because the packages provided by the Infinality repositories or even the freetype2-infinality on AUR are and have been outdated for quite some time, since infinality-bundle's creator, bohoomil, has been missing/unresponsive for the past few months. freetype2 since has gotten new features and a changed ABI, one of which is a symbol named FT_Get_Var_Blend_Coordinates which the updated libharfbuzz tries to reference.

What this means for you is: you'll need a freetype2 version >= 2.7.1 where this change was initially introduced. Since the future of the infinality-bundle is uncertain this is a good time as any to bite the bullet and remove it completely from your system until more is known. The font rendering won't be exactly the same, but with a few tweaks it will at least be similar.

Removing the infinality-bundle

If you still have the infinality-bundle installed, specifically fontconfig-infinality-ultimate, run sudo fc-presets set, choose option 4) to reset and then 5) to quit fc-presets -- this will save you some work of removing dead symlinks in step 4) of the guide. If the package is already removed, that is no problem: removing broken symlinks isn't hard and there's only 4 of them.

A useful tool to remove all traces of the infinality-bundle will be pkgbrowser. To prevent problems with using pkgbrowser down the line, start by doing the most important thing first: replacing the various packages from the infinality-bundle repository which caused the problem in the first place. Replace all packages listed below (as long as they are installed on your system) with their original versions (make sure to replace the packages all in one go to prevent potential dependency errors: pacman -S <package1> <package2> ...):

  • freetype2-infinality-ultimate -> freetype2
  • lib32-freetype2-infinality-ultimate -> lib32-freetype2
  • fontconfig-infinality-ultimate -> fontconfig
  • lib32-fontconfig-infinality-ultimate -> lib32-fontconfig
  • cairo-infinality-ultimate -> cairo
  • lib32-cairo-infinality-ultimate -> lib32-cairo
  • jdk8-openjdk-infinality -> jdk8-openjdk
  • jre8-openjdk-infinality -> jre8-openjdk
  • jre8-openjdk-infinality -> jre8-openjdk-headless

If for some reason you don't want to install pkgbrowser, you can also use pacman -Sl <repository> and pacman -Sg <group> (for example: infinality-bundle, infinality-bundle-fonts etc.) to list packages belonging to repositories and groups (and their installed-state marked by [installed]) respectively. pacman -Qi <package> can be used to get more detailed information on an installed package, such as the "Conflicts with" field.

If you explicitly installed fonts or font groups (for example ibfonts-meta-extended) from the infinality-bundle-fonts repository it is advised that you remove these, since some of them were specifically patched to work with the modifications the infinality-bundle made to the various packages mentioned above. The pkgbrowser tool is useful during this process: mark the infinality-bundle-fonts in the sidebar and sort using the Status column, remove those that were explicitly installed using: pacman -Rns <package>. If you simply installed ibfonts-meta-extended or a similar group of fonts, pacman -Rns ibfonts-meta-extended will have the expected effect.

After doing this, refresh the view in pkgbrowser using F5 and sort again by status. It is quite possible that still some packages are left which are marked as dependencies: these are packages that were most likely installed as dependencies by other packages, before you started using the infinality-bundle and subsequently replaced by Infinality-specific versions. For these, select them and search for the fields "Conflicts with" which should give you a good idea which package they originally replaced. The goal is to replace the Infinality-specific versions (ending in -ibx) with the original ones. For example:

  • t1-urw-fonts-ib conflicts with gsfonts: pacman -S gsfonts (answer yes to replace)
  • ttf-dejavu-ib conflicts with ttf-dejavu: pacman -S ttf-dejavu (answer yes to replace)

After taking care of all packages, no packages should be installed anymore when you check infinality-bundle, infinality-bundle-multilib and infinality-bundle-fonts in the sidebar. Your system should now be in a pre-infinality-bundle state.

Creating an Infinality-like fontconfig Configuration

From this clean slate we can now create a similar fontconfig configuration to the infinality-bundle's without having to use the patched packages. Thanks to a few comments on previous versions of this article, it is now possible to easily get great-looking results with the default freetype2 truetype interpreter.

  1. Create the following symlinks using root to instruct freetype2 to use good-looking rendering defaults:
  • ln -s /etc/fonts/conf.avail/11-lcdfilter-default.conf /etc/fonts/conf.d
  • ln -s /etc/fonts/conf.avail/10-sub-pixel-rgb.conf /etc/fonts/conf.d
  • /etc/fonts/conf.avail/10-hinting-slight.conf should already be linked to /etc/fonts/conf.d

Modify (or create) /etc/fonts/local.conf to contain these contents. These are all font substitutions originally made by Infinality's fontconfig configuration. A big thanks to tylerswagar for creating the font substitution snippet! Alternatively run: ln -s /etc/fonts/conf.avail/30-infinality-aliases.conf /etc/fonts/conf.d after installing fonts-meta-extended-lt in step 2; DoctorJellyFace, the maintainer of the fonts-meta-extended-lt package, decided to make the substitution snippet part of the package.

  1. Now we need to actually make sure that we have all fonts on the system that were defined as substitutions earlier. Install the package fonts-meta-extended-lt from the AUR, which will help us install and keep track of which fonts are required to do this. Fonts that are defined as optional dependencies for this PKGBUILD are those that are not yet available in the AUR. A big thanks to DoctorJellyface for creating these AUR packages and maintaining them!

Install all optional dependencies of the fonts-meta-base and fonts-meta-extended-lt package. Do this by running pacman -Qi fonts-meta-base fonts-meta-extended-lt and noting the entries listed unter "Optional Deps". Then install them using pacman -S <optdep1> <optdep2> ... --asdeps. Currently missing optional font packages in the AUR are t1-cursor-ib and ttf-gelasio-ib. Mirrors to these packages (exactly as they were contained in the, now offline, infinality-bundle-fonts repository) are here:

You can install these using pacman -U <filename> --asdeps.

  1. Modify /etc/profile.d/jre.sh if you had the patched openjdk/openjre packages installed to look like this:
# Do not change this unless you want to completely by-pass Arch Linux' way
# of handling Java versions and vendors. Instead, please use script `archlinux-java`
export PATH=${PATH}:/usr/lib/jvm/default/bin

# https://wiki.archlinux.org/index.php/java#Better_font_rendering
export _JAVA_OPTIONS='-Dawt.useSystemAAFontSettings=on -Dswing.aatext=true'

This will enable font anti-aliasing for Java applications according to the instructions found here. Without these, fonts in Java applications will look completely aliased, unless a different provider for java-environment is used which might implement different font rendering.

  1. After having done all this, restarting the X-server by logging in and out should apply all changes. Try to get used to them, because the future of the infinality-bundle is unknown for now. Keep an eye on this and this and maybe this "guide" if you are curious about changes.

You should also consider checking /etc/fonts/conf.d/ for broken symlinks pointing to /etc/fonts/conf.avail.infinality/..., that might have been left by the fc-presets script if you ran it, and removing them to be thorough. Finally, you can remove the various infinality-bundle* repositories from your /etc/pacman.conf.

This is super helpful. Thanks for putting it together!

A couple notes that may be helpful to readers:

  • When replacing the infinality packages, make sure to do it all as one command to avoid dependency errors.
    For example: sudo pacman -S freetype2 lib32-freetype2 fontconfig cairo

  • The pkgbrowser tool was very helpful to get a visual idea of what's installed, but you can do checks in the command line if you prefer. For example, list installed infinality stuff with: pacman -Qqen | grep infinality and pacman -Qqen | grep ib. Though after trying out pkgbrowser, I think it's very useful!

  • Pay attention to the note about possible dead symlinks when removing fontconfig-infinality-ultimate. I had several broken infinality symlinks left over in /etc/fonts/conf.d/.

  • Infinality is no longer going to be part of your life - After you've completely purged your infinality stuff and confirmed everything is working, then go ahead and comment out the repos in your /etc/pacman.conf.

I'll miss Infinality, it was easy to set up and looked great. The standard font rendering simply isn't as good. But it was always a hack, so I knew this day would come. Hopefully we can look forward to some new guides and tools to improve font rendering in arch. For now I guess I'll be trying to wrap my head around the Font configuration wiki page.

Owner

cryzed commented Jan 8, 2017

Thank you @stevenbenner for the suggestions. I already added a few of them.

jurf commented Jan 8, 2017

Just a side note, for anyone looking to keep the Infinality font sets without the Infinality patches I create AUR packages: fonts-meta-base and fonts-meta-extended-lt.

Also, I am not sure about the auto-hint, Infinality only enabled it for fonts that weren’t properly hinted.

Owner

cryzed commented Jan 8, 2017 edited

@doctorjellyface thank you for the autohint suggestion, I've read this a few times now and made note of it in the guide. I commented it out on my end, and my fonts still look good.

zquestz commented Jan 9, 2017

So went through all the docs here, which were very complete, but now I am having a rather large issue with cinnamon not loading after reboot.

Now when I try to login, cinnamon core dumps and nothing loads. Even if I try to use gnome, after a few clicks that crashes as well. Is anyone else seeing this? Any tips?

The final error in journalctl shows

Gtk:ERROR:gtkicontheme.c:4258:gtk_icon_info_load_icon_finish: assertion failed: (icon_info_get_pixbuf_ready (icon_info))

I even tried creating a new user, and that also experiences the same issue.

Owner

cryzed commented Jan 9, 2017 edited

We had someone else on IRC report problems with Cinnamon afterwards, however this guide does absolutely nothing that should result in Cinnamon breaking -- so I'm really stumped as to the reasons why this could possibly happen. The only thing that was done was basically restoring the old packages (that should have been present anyways) and adjusting some fontconfig configuration files...

Could you install pacutils and run paccheck --md5sum --quiet (as root) and paste the output here? When googling around for your error, I found similar bug reports on Debian-based systems, and those were apparently repaired using "dpkgrepair", which I assumes does something like checking the MD5 sum for each tracked file and reinstalls the owning package if there's a mismatch.

zquestz commented Jan 9, 2017

K, well that command ran, but didn't actually list the correct package to reinstall! The magic package was gdk-pixbuf2 and lib32-gdk-pixbuf2. Once those were reinstalled cinnamon started working again... VERY STRANGE.

Owner

cryzed commented Jan 9, 2017

How did you figure out that you needed to install these packages? And the command was supposed to list corrupted files in packages, potential candidates for reinstallation.

zquestz commented Jan 9, 2017 edited

I just looked at the error, it was caused by icons no loading, so I figured it wouldn't hurt to reinstall gdk-pixbuf2, and magically my error went away. The scan didn't even say the hash was different. TBH I have no idea why it worked, as the previous install seemed fine.

Just for completeness my scan was:

dnscrypt-proxy: '/usr/lib/systemd/system/dnscrypt-proxy.socket' md5sum mismatch (expected 748b2ab7be7fe10ad6c474ab5164c699)
etherape: '/usr/share/applications/etherape.desktop' md5sum mismatch (expected f24f0418e7cf4baddbc53a20de5177ec)
gksu: '/usr/share/applications/gksu.desktop' read error (No such file or directory)
linux: '/usr/lib/modules/4.8.13-1-ARCH/modules.dep' md5sum mismatch (expected f5e13f9f1846ce8df05e63c8dea446a3)
linux: '/usr/lib/modules/4.8.13-1-ARCH/modules.dep.bin' md5sum mismatch (expected 8cc4ea08653065c31014bf997b9327d1)
linux: '/usr/lib/modules/4.8.13-1-ARCH/modules.symbols' md5sum mismatch (expected 840bb24637e439a24820d4cee31d6a95)
linux: '/usr/lib/modules/4.8.13-1-ARCH/modules.symbols.bin' md5sum mismatch (expected 232650d0dd52f30a7ff9a7269693a3d3)
vlc: '/usr/lib/vlc/plugins/plugins.dat' md5sum mismatch (expected 1736eda84de4612b0a1dac53bee698fb)

And all those are changes I made deliberately.

Owner

cryzed commented Jan 9, 2017

I added it to the guide, thank you. This honestly seems like a gdk-pixbuf2 issue then, this shouldn't happen.

For those like me who went through the process of removing the infinality repo, removing dead symlinks, and replicating its functionality in freetype, you may be wondering why sites in your web browser still don't look like you remember. This is because infinality applied a set of font aliases and replacements.

After going out and finding all the fonts needed (no small task as many were missing from the AUR; scour Google as needed, but special thanks to DoctorJellyface for providing a metapackage for the ones already in Arch), I combined the list of fonts from bohoomil's site with a guide I found on setting font defaults. This is now what my giant /etc/fonts/local.conf looks like:

http://pastebin.com/pKg2JeTT

Maybe there was an easier way to do this, but it feels like home again. No more squinting to read my Facebook feed. I didn't go through the extra effort of tracking down the infinality-bundle-fonts-extra group, so if you really need Baskerville, modify as needed.

easysid commented Jan 9, 2017

Quick question: Do the font settings necessarily have to go into /etc/fonts.d/local.conf ? I have them in ~/.config/fontconfig/conf.d/10-base-rendering.conf. Shouldn't that work as well?

As for the font substitution, I copied over the free preset files from bohoomil to my home conf.d directory, replacing Heuristica with Tinos from croscore. I think that should take care of everything for now.

Owner

cryzed commented Jan 9, 2017 edited

@easysid that should work as well, I just chose to use that path because it seemed easiest.
@tylerswagar I used your list and installed all the optional dependencies for the 2 meta packages (I used pacman's download flag with a specific cachedir to easily download all packages, and then commented the infinality-bundle-fonts again). The result is great, thank you so much -- that is indeed what was missing, just better fonts and the correct replacements for them.

@cryzed Yay, I did a good thing!

I just wish there was a reliable place to find direct links to the missing fonts so they can be added to the AUR. In many cases I can only find them on questionable font reupload sites. This forked PKGBUILD for example contains a dead link.

Owner

cryzed commented Jan 9, 2017

That would be ideal, I'm also not sure what the situation with simply rehosting them is (legally); if there are no concerns from that side, one could simply add the fonts as part of the git-repository and "host" it that way -- however I'm not sure if this is frowned upon.

theromi commented Jan 9, 2017 edited

Thanks for this Gist, super helpful!

Just a sidenote: I had to use "pacman -Sdd " because somehow "freetype2-infinality" depended on itself (?!) and pacman wouldn't delete it (?!).

avenita here, if even atfer the patch cinnamon refuses to change the theme and wallpaper, force reinstall of all cinnamon packages. that should do it

protist commented Jan 9, 2017

Thank you for the gist! However, (when you install fontconfig) we are warned Configuration via /etc/fonts/local.conf is still possible, but is no longer recommended for options available in conf.avail. I suspect that there is a cleaner way to configure instead of your addendum, although I haven't investigated how to do this.

Owner

cryzed commented Jan 9, 2017 edited

@protist yes, that is right. I recommended using local.conf for all instructions because it was the easiest at times. In reality there are some options (such as rgb subpixel hinting, autohinting etc. that you can enable by symlinking files from conf.avail to conf.d).

@lasnevadas (avenitas) Thank you for letting people know!

@theromi Please do all replacements in one big step, or you'll run into these dependency issues.

Owner

cryzed commented Jan 9, 2017 edited

Finally, my configuration ended up looking like this, which very closely resembles (really!) what I had with the full infinality-bundle:

First I added these base settings in /etc/fonts/local.conf (symlinking some of these settings from /etc/fonts/conf.avail somehow didn't work -- when I enabled the settings in locale.conf that I supposedly enabled by symlinking already, the font rendering clearly changed. Can someone explain this? Is it a priority issue?):

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <match target="font">
    <edit name="rgba" mode="assign">
      <const>rgb</const>
    </edit>
    
    <!-- Enabled by default -->
    <edit name="hinting" mode="assign">
      <bool>true</bool>
    </edit>

    <!-- Disabled by default
    <edit name="autohint" mode="assign">
      <bool>false</bool>
    </edit>-->

    <!-- Enabled by default -->
    <edit name="antialias" mode="assign">
      <bool>true</bool>
    </edit>

    <edit name="hintstyle" mode="assign">
      <const>hintslight</const>
    </edit>
    
    <edit name="lcdfilter" mode="assign">
      <const>lcddefault</const>
    </edit>
  </match>
</fontconfig>

(The entries that are annotated as "Enabled by default" should not be necessarily needed, but I let them stay for now. The configuration could stay basically empty after having created the symbolic links earlier).

Then installed the meta-package fonts-meta-extended-lt from the AUR and installed all optdepends from fonts-meta-base and fonts-meta-extended-lt, by enabling the infinality-bundle-fonts repository again shortly, and using pacaur -Sd --cachedir <path> <optdepend1> <optdepend2>...) to download all packages. Afterwards I installed them all with pacman -U <package> --asdeps (which are then marked as (optional) dependencies).

Finally, thanks to @tylerswagar I could simply copy/paste their snippet containing all font replacements originally applied by the infinality-bundle (up until ibfonts-meta-extended) into my /etc/fonts/local.conf, resulting in this. For the record, I also tried simply symlinking the old free-preset instructions (/etc/fonts/conf.avail.infinality/free) from the fontconfig-infinality-ultimate package, however using fc-match <family/font> for the various supposedly replaced fonts, always yielded the wrong results -- they were somehow not being applied.

smonff commented Jan 9, 2017

Super useful, thanks everybody.

lcpz commented Jan 9, 2017 edited

Wouldn't be better to use ~/.config/fontconfig/local.conf instead of /etc/fonts/local.conf?

183amir commented Jan 9, 2017 edited

Anybody can tell me how can I go to back to vanilla font configurations before infinality? I don't to make my machine look as close as infinality. I just want it to look like vanilla Gnome without any infinality patches or configs.

Owner

cryzed commented Jan 9, 2017

@183amir Just follow all the steps except 1) and 3) from above. If you already changed something in 1), make sure to comment out all lines in freetype2.sh. Also remove the local.conf if it exists.

easysid commented Jan 9, 2017 edited

here is how the fonts look after applying the local.conf changes mentioned in this gist
http://i.imgur.com/9ST7r1p.png

Left side is the one after applying the changes, right side is vanilla freetype. I have them in 10-base-rendering.conf in my home conf.d. (The right side browser is running as root, hence the difference in font rendering, although the fonts are also different, but you get my point)

LHS fonts are noto-sans (sans), liberation serif (serif), and liberation as replacement for Arial and Times. I used bohoomil's replacements from the free preset ( except Heuristica).

Owner

cryzed commented Jan 9, 2017 edited

My current font rendering. You can get this by following the steps outlined here. I feel this looks basically as good as the old infinality-bundle (Using the freetype2 interpreter version 40 in this screenshot).

tony-aln commented Jan 9, 2017

Thank you very much for the precious informations and tips, you helped me a lot. I was caught off guard even though I was aware that we had updates in freetype2, Java and some fonts and bohomill isn't keeping up with that. Maybe with the update to freetype2 2.7 we won't be needing the Infinality patchset anymore, with the implementation of a new subpixel hinting, and development of other improvements on rendering and hinting also coming from the Infinality patchset project, but who knows...

Being obsessive and all, I've added five of the missing fonts to the AUR for inclusion in the metapackage.

Do you suppose these configs should be in the wiki? I think it would be useful if there was a section on the Infinality page on migrating away from it, but I don't know whether that page will get deleted soon anyway.

Owner

cryzed commented Jan 10, 2017 edited

@tylerswagar Thank you (also yes, putting them in the wiki is probably a good idea). I also updated the guide yet again to instruct people from the beginning how to restore the good-looking font rendering using the substitutions.

Eriner commented Jan 10, 2017

Thanks for the gist, I was unaware that bohoomil had gone AWOL.

Another simple grep that some might find useful is pacman -Q | grep -- '-ibx'. This will list all packages that contain the -ibx suffix.

Thank you so much for putting this together!

When I try to install fonts-meta-extended-lt, I get an ssl certificate error when curl tries to download courier-prime.zip. Does anyone know how I get around this?

Owner

cryzed commented Jan 10, 2017 edited

@anthonybrice that is unfortunate, it worked earlier. I reported the problem. For now what you can do is this (assuming you use pacaur): pacaur -S ttf-courier-prime --edit --asdeps, then when your editor opens paste this below the sha256sums line:

DLAGENTS=('http::/usr/bin/curl --insecure -fLC - --retry 3 --retry-delay 3 -o %o %u'
          'https::/usr/bin/curl -fLC - --retry 3 --retry-delay 3 -o %o %u')

This temporarily instructs the http handler to ignore SSL certificate errors, and the download should go through. Alternatively, if you aren't using pacaur, simply download a snapshot of the PKGBUILD repository, unpack it, edit the PKGBUILD as instructed above and then run the following inside the directory containing the PKGBUILD:

makepkg -sic --asdeps

This should hopefully be fixed soon.

gcarq commented Jan 10, 2017

If you are on Arch and a lazy person, here is a workaround without removing infinality:
harfbuzz needs a rebuild, until this is fixed you can force a build with ABS:

$ abs extra/harfbuzz
$ cp -r /var/abs/extra/harfbuzz /tmp
$ # increase patch version in PKGBUILD
$ cd /tmp/harfbuzz
$ makepkg -si

I did everything explained as above and everything works so far - except for one issue: I'm using some icons from Font awesome in my i3 bar, and they aren't being shown anymore. To make it even more strangely some of them are working, while others arent't.

Many thanks to everyone who went through the hassle of figuring this crap out. I use Arch, but I'm nowhere near as experienced in all of The Library of Things.

Now begins the painful journey of determining whether I'm a victim of my own bias knowing it isn't Infinality.

jgonsior commented Jan 10, 2017 edited

And I could only get Java software like Intellij Idea to display fonts with anti aliasing after installing https://aur.archlinux.org/packages/jdk8-openjdk-infinality/

Owner

cryzed commented Jan 10, 2017 edited

@jgonsior Are you sure that you still have the ttf-font-awesome package installed? And how is i3 selecting the appropriate font, do you specify it by name? Regarding the Java software: that is unexpected, did you follow the last step in 4)? Meaning: logging in/out or restarting after having modified the files in /etc/profile.d/? These must be re-sourced!

@sclarki I'm glad that it was helpful.

funn commented Jan 10, 2017

@jgonsior You are supposed to install jdk8-openjdk package, not the jdk8-openjdk-infinality

Owner

cryzed commented Jan 10, 2017 edited

@funn I think they knew, but resorted to reinstalling the patched Java packages because the modifications to jre.sh seemingly didn't work (which they really should have).

Owner

cryzed commented Jan 10, 2017 edited

@jgonsior I think I discovered the problem, can you edit the /etc/fonts/locale.conf again and edit:

<test name="family"><string>Windings</string></test>

to say Wingdings instead of Windings? Please report back if it worked for you.

ianks commented Jan 10, 2017

What about using the ubuntu fontconfig patches?

Owner

cryzed commented Jan 10, 2017 edited

@ianks What about it? It's inviting the same problem to happen again, sooner or later; and for no reason as far as I can tell. The font rendering linked in the guide looks great (imho).

Any chance to get all this AUR packages into the official repo or a replacement for them in the official repo ?
I hate having too many packages from the AUR :(
Also: Will pacman/pacaur automatically replace those packages from the AUR with the official ones if they get added to the official repo?

You mentioned freetype2 interpreter 40... where to set that?

Owner

cryzed commented Jan 10, 2017 edited

@Utini2000, that depends entirely on the Arch Linux trusted users and the popularity of the AUR packages (vote for them). However AUR packages providing fonts should be connected with minimal maintenance and security risks.

The freetype2 interpreter version 40 is the default, you don't need to configure it. However you can change it if you want by editing /etc/profile.d/freetype2.sh.

@doctorjellyface I am getting an error when installing "ttf-courier-prime":

==> ERROR: Failure while downloading http://quoteunquoteapps.com/downloads/courier-prime.zip
Aborting...
:: failed to verify ttf-courier-prime integrity

edgard commented Jan 10, 2017

https://gist.github.com/cryzed/4f64bb79e80d619866ee0b18ba2d32fc#file-local-conf-L199

Where it reads Lucida Sans / Grande, it's actually two fonts: Lucida Sans and Lucida Grande.

nickmcummins commented Jan 10, 2017 edited

@Utini2000 There's a workaround for that issue described in the comments here -- I had the same issue earlier.

One thing that I have noticed is that previously, with infinality, the optimal rendering setting for anti-aliasing on my machine was Full. Now Full hinting looks pretty poor, but Slight hinting renders fonts comparable to how they looked with infinality, though still noticeably inferior. I'm wondering why my optimal setting changed, and whether understanding the reason behind it could provide some insight as to what I could do to improve rendering back to infinality-levels. Anyone have any ideas?

full hinting screenshot
slight hinting screenshot
infinality font rendering with full hinting screenshot

I saw that on GNOME the "GNOME Tweak Tool" also has some "font setting options". Will your configuration/guide overwrite those settings?
If not, is there a way to "force" your settings so any of the GNOME settings wont override?

Owner

cryzed commented Jan 10, 2017

@nickmcummins AFAIK rendering changed because Infinality made some specific patches to freetype2 that were not actually integrated into the upstream: it was simply different / better.

@Utini2000 the GNOME Tweak Tool will most likely make the font configuration changes somewhere in your home folder, which will override the system-wide configuration settings. If you can, simply don't select anything there, or, if the option exists: "System settings". Here is a list of places where local configuration changes might hide, try renaming/removing (make backups!) to make sure that no local user configuration overrides the system configuration.

Cryzed - huge thank you for putting this together. It took almost all day but I am finally free of infinality!
So far most fonts look pretty good. I have 1 windows app I use under Wine and its fonts like slightly crappier
but I can live with it.

Owner

cryzed commented Jan 11, 2017

@superfrogger I'm happy to hear everything has worked out for you. Regarding the WINE issue: try checking every single file and symlink in /etc/fonts/conf.d with pacman -Qo. If there's a file that is not owned by any package, remove it (unless you put it there yourself). I remember there being some file that was somehow left over for me, that made modifications to WINE-specific fonts, maybe it's the culprit.

mrlamud commented Jan 11, 2017

Are there any parameters in freetype2 like these?

export INFINALITY_FT_GAMMA_CORRECTION="0 100"
export INFINALITY_FT_BRIGHTNESS="0"
export INFINALITY_FT_CONTRAST="0"
Owner

cryzed commented Jan 11, 2017 edited

@mrlamud I don't think so, these were Infinality-specific AFAIK.

mrlamud commented Jan 11, 2017 edited

@cryzed Could we config font to look dark & heavy in local.conf.?
It's comfortable for eyesight on a large screen for me.

[Solved] - I adjusted -5 Green & Blue color level in my monitor and result came out satisfactory.

Your changelog dates are 1 month in the future:

10.02.2017 23:22: Changed typo Windings to Wingdings in the /etc/fonts/local.conf template, users are advised to update their files.
11.02.2017 00:42: Fixed another bug in /etc/fonts/local.conf, thank you edgard.

edgard commented Jan 11, 2017

if anyone is using "ttf-ms-win10" fonts, all you have to do is set the font default font aliases to the win10 counterpart, this will do:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <match target="font">
    <edit name="rgba" mode="assign">
      <const>rgb</const>
    </edit>
    
    <!-- Should be enabled by default -->
    <edit name="hinting" mode="assign">
      <bool>true</bool>
    </edit>

    <!-- Should be disabled by default
    <edit name="autohint" mode="assign">
      <bool>false</bool>
    </edit>-->

    <!-- Should be enabled by default -->
    <edit name="antialias" mode="assign">
      <bool>true</bool>
    </edit>

    <edit name="hintstyle" mode="assign">
      <const>hintslight</const>
    </edit>
    
    <edit name="lcdfilter" mode="assign">
      <const>lcddefault</const>
    </edit>
  </match>

  <!-- aliases -->
  <alias>
    <family>serif</family>
    <prefer><family>Times New Roman</family></prefer>
  </alias>
  <alias>
    <family>sans-serif</family>
    <prefer><family>Arial</family></prefer>
  </alias>
  <alias>
    <family>monospace</family>
    <prefer><family>Courier New</family></prefer>
  </alias>
</fontconfig>

Also, try using 'lcdlight' filter instead of 'lcddefault', for my eyes, they look better.

kokoko3k commented Jan 11, 2017 edited

patchset and pkgbuilds available for FT 2.7.1, please, test:
https://github.com/archfan/infinality_bundle/releases/tag/2.7.1

Owner

cryzed commented Jan 11, 2017 edited

@kokoko3k as cool as this is, I don't really want to test it on my system, since I'm happy with the current configuration. The following shouldn't be taken as an insult to archfan, but I don't know at all how possible it is for them to merge bigger changes from upstream once the patches can't simply be merged anymore without conflicts. This might also be something to consider regarding the longevity of the fork.

kokoko3k commented Jan 11, 2017 edited

I've "patched" the old patchset and made the pull request and despite the patchset is big and scary, it was failing in just one HUNK due to upstream changing a line for cosmetic/readability reasons.
This doesn't mean that things will remain so easy in the future, but still, i was using freetype2-infinality 2.6.3 (released almost one year ago) without troubles till yesterday, so i'm in the hope that 2.7.1 will last for another couple of months.
Sorry to have jumped here, but maybe some people are still not 100% satisfied of the font appearance provided by vanilla freetype.

Owner

cryzed commented Jan 11, 2017

@kokoko3k there's no need to be sorry at all, I'm glad and grateful that someone has taken it upon themselves to maintain the patchset, please don't misunderstand: thank you. Let's hope it is as you predict and the fork gains more traction, good luck :)!

Thanks all, this saved my @$$. Apparently, this infinality-related harfbuzz breakage reached all the way to my wifi config daemon (I use wicd on Arch Linux).

One thing: I feel like this was only mentioned briefly in comments: I got this working, but I was NOT able to simply "pacman -S" my way to downloading the dependencies to DoctorJellyFace's meta packages; that step involved many font downloads from the Arch AUR.. It was still "easy" to do, just not as quick as the tutorial seemed to imply.

i.e., this paragraph is misleading:

Getting these fonts is no issue, since they are still available in the infinality-bundle-fonts repository for now: Enable the infinality-bundle-fonts repository again and install all optional dependencies of the fonts-meta-base and fonts-meta-extended-lt package. Do this by running pacman -Qi fonts-meta-base fonts-meta-extended-lt and noting the entries listed unter "Optional Deps". Then install them using pacman -S ... --asdeps. Afterwards disable the repository again.

The deps for the font-meta-base and fonts-meta-extended-lt pkgs are largely in the AUR and require manual intervention.

Still, I appreciate all the hard work that went into putting this walkthrough together.

Owner

cryzed commented Jan 11, 2017

@masskonfuzion maybe I am misunderstanding, but installing the meta packages should be almost entirely automatic for you if you are using an AUR helper such as pacaur. After that, one only needs to install the missing fonts using pacman from the infinality-bundle-fonts repository.

edgard commented Jan 11, 2017

There are still a couple of issues with the meta package, but I'm sure he will be fixing soon.

I added a couple of missing fonts to aur that he hasn't updated yet the pkgbuild to reflect and courier-prime still broken.

alexozer commented Jan 11, 2017 edited

I was using ubuntu mono derivative powerline as my only terminal / coding font before and loved it, and now it looks pretty bad after following this (although web fonts looks fantastic!). Anybody else change / have recommendations for their terminal font?

Owner

cryzed commented Jan 11, 2017

@edgard I informed the courier-prime maintainer how to work around the issue, but he remains unresponsive.
@alexozer try ttf-mononoki-git from the AUR maybe.

edgard commented Jan 11, 2017

This document is getting crazy big now. :D Maybe a TL;DR on the top?

Owner

cryzed commented Jan 11, 2017

@edgard "A set of instructions on how to fix the harfbuzz + Infinality issue and restoring good-looking, Infinality-like font rendering." isn't okay?

edgard commented Jan 11, 2017

I mean just a quick way to apply the changes without reading the whole document, but maybe thats a bad idea.

beheh commented Jan 11, 2017

There's a typo in the #creating-an-infinality-like-fontconfig-configuration section: The second command (ln) should be symlinking from conf.avail, not conf.d.

Also, I suppose the last bullet in the first step of "Creating infinality-like configuration" should read

/etc/fonts/conf.d/10-hinting-slight.conf should already be linked

as the 10-sub-pixel-rgb.conf is being linked in bullet #2.

Owner

cryzed commented Jan 11, 2017

@beheh, @mrclayman those were mistakes I should have caught, sorry about that. They are hopefully fixed now.

kborkows commented Jan 11, 2017 edited

@alexozer Ubuntu Mono looks (imo) much better with autohinting enabled and without any hinting option set
ln -s /etc/fonts/conf.avail/10-autohint.conf /etc/fonts/conf.d/
rm /etc/fonts/conf.d/10-hinting-*

Owner

cryzed commented Jan 11, 2017

@smiechowy That would be a good solution if Ubuntu Mono is the only font being used on the entire system, elsewise this enables autohinting for all fonts -- even for those that have proper hinting instructions, which is a bad idea.

@cryzed -- AUR helper, you say? Heh, well I was working completely manually, but an AUR helper probably would make things a lot easier :-D

(* goes to install pacaur *)

You saved my ass OP.

I am still confused at how this + GNOME works.
As far as I understand this guide will not only improve font rendering but also replace or change the fonts that my system is using (e.g. instead of monospace to smth different that is better).

But for me I believe GNOME is simply blocking/overriding all that ?!

Owner

cryzed commented Jan 12, 2017 edited

@masskonfuzion haha, yes, that would make some things easier.
@redragonx glad to hear so 👍 .
@Utini2000 indeed, you are making system-wide changes to your font rendering and to the choice of some fonts. The font rendering changes are there to make them look better in general, the font substitutions are there to transparently switch out bad-looking fonts (due to missing hinting instructions etc.) with fonts that are supposed to have similar glyphs, i.e. they look like they belong to the same family.

You can override all these fontconfig settings as a local user, by creating certain dotfiles in your home-directory, so in theory GNOME has complete control over what the font rendering looks like (although I doubt it has effected the font substitutions at least, which is not as easy to override).

If you find a way to set the same changes locally that you made in /etc/ in GNOME you are good to go, or you'll need to find a way to instruct GNOME to simply use the system settings.

Someone replied to you with this link earlier, it looks like that's what you want to read.

lukehinds commented Jan 12, 2017 edited

Thanks for taking the time to write this up and all who contributed. It looks good for me now. The issue I have though, is when maximising / minimising windows using fullscreen toggle in i3 I see some graphical glitches. They are only seen for a spilt second, but posing this in case anyone else had the same experience.

@cryzed the link posted by @PlusMinus0 is to reset some of the GNOME font settings but I believe that the switch back to some "default" value after a reboot. Also I dont know how to be sure that the system wide settings are beeing used instead of the GNOME default settings.
Also it would be nice to tell GNOME to use the system wide settings for all users.

Last but not least GNOME uses a certain font-set and I have no idea if this font-set gets automatically replaced by the "better loooking" font-set ?

Owner

cryzed commented Jan 12, 2017 edited

@Utini2000 Sorry, I never used GNOME, so I can't really help you much regarding the font settings -- it seems to do a bit much without asking. As for the replacement: note the name of the default font set and check if there's any matching entry in the /etc/fonts/local.conf snippet.

sez11a commented Jan 12, 2017

Thank you, @cryzed! You saved my rear-end. I'm on Manjaro, and this harfbuzz update came through in their testing repository, breaking my Plasma 5. Expect more people to come here when this update hits Manjaro's stable repo on the weekend.

does ~/.config/fontconfig/fonts.conf exist by default?

Owner

cryzed commented Jan 13, 2017

@benwaffle I don't think so, it's most likely created by your desktop environment.

mrlamud commented Jan 14, 2017

@cryzed Would this tips be on ArchWiki?

Owner

cryzed commented Jan 14, 2017 edited

@mrlamud I think the wiki only links to the guide, the guide itself is not on the wiki.

cactail commented Jan 15, 2017 edited

Hi everyone, I followed all the tutorial in this gist. And here the result...
This is with Infinality WITH
And this without it WITHOUT

Why is not working for me?!

winny- commented Jan 15, 2017

To find broken symlinks in /etc/fonts/conf.d use find /etc/fonts/conf.d -xtype l (add -delete if you're confident you want to delete all the broken symlinks).

Hi everyone, after following the guide i encountered a problem and now i need help. I didnt install infinality so i didn't have to bother with the first part of the tutorial, but after I followed the second part and rebooted the computer all the programs (like urxvt and polybar for example) that were using terminus-font, lemon-font, siji-font and font-awesome now have weird fonts. I would appreciate some help.

P.S. Sorry for my english, I am Brazilian

Owner

cryzed commented Jan 15, 2017 edited

@cactail it looks to be working, that's just what the result looks like: it won't look identical.
@matfurla this is unrelated to the changes you made as part of this tutorial, check here, specifically:

PCF family names are made more colourful'; they now include the foundry and information whether they contain wide characters. For example, you no longer getFixed' but rather Sony Fixed' orMisc Fixed Wide'.

See this and this on how to fix it.

jurf commented Jan 15, 2017

Hey @cryzed, I added your config file to fonts-meta-extended-lt so now a simple sudo ln -s /etc/fonts/conf.avail/30-infinality-aliases.conf /etc/fonts/conf.d will suffice. Seems to work well so far!

Owner

cryzed commented Jan 15, 2017

@doctorjellyface thank you, this is great. I added a set of alternative instructions to the guide that reflects this; it is also noted in the changelog.

Thanks for this article but this is a long read and the comment section seem to add a lot of things too. What a mess, I can't even uninstall freetype2-infinality to replace it with freetype2 as it complains about packages depending on it. Is there no easy fix or do I really have to dive into this ?

Owner

cryzed commented Jan 15, 2017 edited

@fausterjames everything important in the comments was already added to the guide. You need to follow 5 steps and I ordered these to the best of my ability, I wouldn't call it a mess. Nowhere in the guide does it tell you to simply remove freetype2-infinality: you just need to read more closely. This is the easy fix and you'll have to "dive into it", yes (unless you find some updated fork of freetype2-infinality that you are willing to install).

Thanks a bunch, it worked!
Looks even better than with infinality.

LiranV commented Jan 16, 2017

Thank you! Good work!

BubuXP commented Jan 18, 2017

I'm leaving some useful tips here, probably you know some of them already but repetita iuvant.

If a certain font looks better with a rendering different than the system default, you can set each font rendering individually.
Example: someone above said Ubuntu Mono looks better with autohint enabled. So you can create a file /etc/fonts/conf.d/21-hint-ubuntu.conf with this content:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
  <!-- Ubuntu Mono -->
  <match target="font">
    <test name="family">
      <string>Ubuntu Mono</string>
    </test>
    <edit name="hintstyle">
      <const>hintslight</const>
    </edit>
    <edit name="autohint">
      <bool>true</bool>
    </edit>
  </match>
</fontconfig>

so, while the other fonts will be rendered with the system default, the font named "Ubuntu Mono" will be rendered with the settings indicated in the file.
Old Infinality and bohoomil, both used this method to make fonts looks good. Here's the link to bohoomil's repository of fonts settings:
https://github.com/bohoomil/fontconfig-ultimate/tree/master/fontconfig_patches/fonts-settings

Harfbuzz needs FreeType to be compiled. FreeType needs Harfbuzz to be compiled. It's a snake biting his tail.
But FreeType could be compiled without Harfbuzz support. So, one could compile FreeType 2.7.1 without Harfbuzz support before, then compile Harfbuzz (after installing the fresh compiled FT 2.7.1, to use the new API), and finally re-compile FreeType again but with Harfbuzz support enabled this time.
I'm writing this because in Debian, the default FreeType package have Harfbuzz support disabled.
In my GDrive there are both the new Harfbuzz and FreeType for Debian (and Ubuntu, if recompiled), with all features enabled:
https://drive.google.com/open?id=0B7AdLMiZn4FzdGZNV2FpLWhPTkk

When configuring system-wide settings in fontconfig, (i.e. in /etc/fonts/), please use mode="append". When instead you are configuring user settings (i.e. in ~/.config/fontconfig/) you should use mode="assign". More details in the fontconfig manpage: https://www.freedesktop.org/software/fontconfig/fontconfig-user.html

To get a better result with some applications, one should copy the current system default settings in /etc/X11/Xresources/x11-common and in ~/.Xresources, but in the Xft format:

Xft.antialias: 1
Xft.hinting: 1
Xft.hintstyle: hintslight
Xft.rgba: rgb
Xft.lcdfilter: lcddefault
!Xft.autohint: 0

and don't forget to change the font rendering settings of your desktop environment to the same values (they change those Xft values).

jaro3 commented Jan 18, 2017

Is there any alternative to the "fc-presets" command with the stock freetype2 ? The fonts in terminal are not as good looking as they used to be with the "ms" preset...

BubuXP commented Jan 18, 2017

@jaro3 try copying the five files from the following link in ~/.config/fontconfig/conf.d/
https://github.com/bohoomil/fontconfig-ultimate/tree/master/fontconfig_patches/ms
(obviously, you should have already installed the MS fonts).

jaro3 commented Jan 18, 2017

that looked uglier than ever before (very thin fonts)... But when I made a config based on the above advice of edgard (for ttf-ms-win10) it finally started resembling what it used to be before with infinality ms! Thanks!

jaro3 commented Jan 18, 2017

WPS-Office started complaining of missing fonts after the removal of infinality like before the fc-presets ... ms ...

Ghosthree3 commented Jan 21, 2017 edited

Followed the instructions and everything seems to have gone well except for a minor issue where in some elements (say tab titles in browser, the address bar, bookmark bar etc.) the text is too 'high' like it's raised and not centered. Looks pretty bad and clashes with objects slightly. Did I miss something or am I just going to have to live with it?

smdeep commented Jan 21, 2017 edited

@theromi,

"Thanks for this Gist, super helpful!

Just a sidenote: I had to use "pacman -Sdd " because somehow "freetype2-infinality" depended on itself (?!) and pacman wouldn't delete it (?!)."

You are a lifesaver!

Of course all thanks @cryzed :)

spijet commented Jan 22, 2017

It seems that bohoomil.com is unavailable (at least at the moment). :(

bastarch commented Jan 23, 2017 edited

Hey, thx for this great guide. But missing optional fonts cannot be achieved because the infinality-bundle-fonts repository is down.
Personnaly missing t1-cursor-ib & ttf-gelasio-ib optional fonts.

Owner

cryzed commented Jan 23, 2017 edited

@smdeep: I see that you have resolved the problem already, however the instructions clearly state to replace all infinality-packages at once, not step by step. If you had done so, you wouldn't have run into this issue.

@spijet, @bastarch: Mirrors to these packages (exactly as they were contained in the, now offline, infinality-bundle-fonts repository) are here:

You can install these using pacman -U <filename> --asdeps.

Instead of the giant local.conf with all the font aliases, you can get the conf files from https://github.com/bohoomil/fontconfig-ultimate/tree/master/fontconfig_patches/free — I stick these in my ~/.config/fontconfig/conf.d.

Owner

cryzed commented Jan 24, 2017

@auscompgeek are you 100% sure that these free aliases are a superset of all current aliases in the linked local.conf? Aren't there any aliases common to all presets that can't be found in the directory you linked?

DavidBuchanan314 commented Jan 24, 2017 edited

I followed this guide, and it seems like some fonts are invisible to some programs. I had Terminus set as my font in gedit, which got reset to "none", however I was able to set it back in the settings. i3wm doesn't seem to be able to find the font, despite the fact that it's specified in the config file, and it falls back to some default font. My font in HexChat also got reset, and Terminus does not show up in the font picker.

I've tried rebooting, reinstalling Terminus, and running gdk-pixbuf-query-loaders --update-cache. What else can I try? I assume some cache somewhere needs updating?

dotmagic commented Jan 24, 2017 edited

@DavidBuchanan314 Are you use you installed fonts-meta-extended-lt and fonts-meta-base packages?

One thing barely mentioned here is how to set the Subpixel hinting mode. This is done in /etc/profile.d/freetype2.sh.
Default is to use "truetype:interpreter-version=40" for the TrueType interpreter, however I got MUCH BETTER results using the infinality mode "truetype:interpreter-version=38":

export FREETYPE_PROPERTIES="truetype:interpreter-version=38"

fjfalcon commented Jan 25, 2017 edited

@emirinohdz
Some fonts were renamed since last freetype2 update.
For example terminus now called xos4 terminus.

Even after all upgrades and installing font bundles some fonts looks different and not so good as they were on infinality...
Still working to understand, how to fix it...

First, thanks for this guide. It's brilliant.

Second, I've got a few final errors that I can't quite diagnose. After getting everything installed and updating my system with pacman (pacman -Syyu), I get this output:

:: Replace ttf-courier-prime with infinality-bundle-fonts/ttf-courier-prime-ib? [Y/n] n
:: Replace ttf-merriweather with infinality-bundle-fonts/ttf-merriweather-ib? [Y/n] n
:: Replace ttf-merriweather-sans with infinality-bundle-fonts/ttf-merriweather-sans-ib? [Y/n] n

Of course I answer no, because I just removed infinality. I've also grep'ed and searched for deprecated symlinks to infinality in both /conf.avail and /conf.d, rebuilt the fontcache, and still the same errors appear.

Any help would be much appreciated!

@boxpress remove the infinality repository from /etc/pacman.conf.

@emerinohdz ah, silly mistake. I commented out the repo URL, but left the header.

Problem fixed, thanks!

Pilzbauer commented Jan 26, 2017 edited

Thank you guys for your hard work, this is awesome and works great with Apples San Francisco font.

First of all, thank you for the very helpful guide. The hard fact is though, that no matter what I do, I can't really get infinality's rendering quality back. Are there any patches that might enable that kind of rendering again? I'm already using lcdfilter-default and the 38 option in the sh file, as well as the aur font packages. Basically I have followed the guide to the letter. The contents of my /etc/fonts/conf.d/ are the following:
10-autohint.conf
10-hinting-full.conf
10-sub-pixel-rgb.conf
11-lcdfilter-default.conf
20-unhint-small-dejavu-sans-mono.conf
20-unhint-small-dejavu-sans.conf
20-unhint-small-dejavu-serif.conf
20-unhint-small-vera.conf
25-unhint-nonlatin.conf
30-caladea.conf
30-carlito.conf
30-infinality-aliases.conf
30-metric-aliases.conf
30-ttf-liberation-mono.conf
30-ttf-liberation-sans.conf
30-ttf-liberation-serif.conf
30-urw-aliases.conf
30-win32-aliases.conf
31-cantarell.conf
40-nonlatin.conf
45-latin.conf
49-sansserif.conf
50-user.conf
51-local.conf
57-dejavu-sans-mono.conf
57-dejavu-sans.conf
57-dejavu-serif.conf
60-latin.conf
60-ttf-droid-sans-mono-fontconfig.conf
65-fonts-persian.conf
65-khmer.conf
65-nonlatin.conf
65-ttf-droid-kufi-fontconfig.conf
65-ttf-droid-sans-fontconfig.conf
65-ttf-droid-serif-fontconfig.conf
69-unifont.conf
70-yes-bitmaps.conf
80-delicious.conf
81-ubuntu.conf
90-synthetic.conf

I'm getting Windows or better quality of font rendering, don't get me wrong, but still it's worse than infinality. Any ideas?

BTW: the 'infinality' packages kept archlinux AUR package 'ffmpeg0.10 0.10.16-3' from compiling.
Thanks for all this work.

bmatsuo commented Jan 29, 2017

The advise from @BubuXP really turned out to be the difference maker for me. Specifically, adding the content to ~/.Xresources

Xft.antialias: 1
Xft.hinting: 1
Xft.hintstyle: hintslight
Xft.rgba: rgb
Xft.lcdfilter: lcddefault
!Xft.autohint: 0

My terminal still looked terrible (using st) but after rebuilding that, it also looked good once again.

Thanks for the help of everyone in here. I would be hopelessly lost without this page.

@cryzed All the infinality-bundle-provided configs are in that repo. Aside from the webfont replacements, and a couple of very minimal aliases between similarly-named free fonts, which aren't included in the linked local.conf, all the aliases are in the presets.

duud commented Jan 30, 2017

No, this looks not as good as infinality.

This seems to broken for me: https://github.com/archfan/infinality_bundle/releases/tag/2.7.1
Are there any other updated infinality packages?

Thanks for the guide @cryzed, I got this done in like 15 minutes and my fonts are great now. Two things to point out though...

  1. If you uninstall your fonts and refresh the page everything appears as square boxes...so maybe put a warning in at the top so people don't do that 🤣.
  2. The ttf-heuristica SSL cert is expired or something and the curl is failing when installing fonts-meta-extended-lt. I added your snippet to the PKGBUILD to make curl bypass the cert verification but it wasn't complete - I had to add --insecure on the second line too.
DLAGENTS=('http::/usr/bin/curl --insecure -fLC - --retry 3 --retry-delay 3 -o %o %u'
          'https::/usr/bin/curl --insecure -fLC - --retry 3 --retry-delay 3 -o %o %u')

I also skipped using pkgbrowser and instead used some pacman -Qs | grep <package> commands to find the packages I needed to uninstall.

As for the quality, I really can't tell the difference. So far I've only looked at Github and my own console, and my swaybar (I'm on wayland/sway) is rendering pixel-for-pixel the same.

Owner

cryzed commented Jan 31, 2017 edited

@auscompgeek Then I might have to consider letting the AUR package maintainers know and hopefully get them to include the old preset files and adapt the instructions accordingly when they do so.

@duud I never claimed it would be, the guide says "infinality-like" if you read carefully. Infinality did exist for a reason, the thing is that the maintainer is missing. See the rest of the guide for more details.

@m1cr0man hm that's strange, the browser should fall back to whatever font is available -- which browser are you using? Regarding your second point, I hope that people will find this comment when searching for "heuristica", which they should if they follow the instructions ("if problems arise check the comments"). Regarding skipping pkgbrowser, yes I made that step optional in the guide at the behest of some people in the #archlinux channel on Freenode, the instructions can already be followed completely without it. I'm glad that you had success.

@cryzed the problem I had with the browser happened between removing all of infinality (including the fonts) and reinstalling everything following the instructions. I opened another tab to sort the heuristica problem and couldn't read a thing 😆 Luckily I could tell by the snippet outline what I needed to copy so I wasn't stuck.
I'd say the font cache Opera had was outdated between those steps so the font it tried to use returned null characters. I've seen this with GTK applications before.

duud commented Jan 31, 2017

@cryzed The 'no' was directed to people who say that rendering is now even better than it was with infinality. I noticed your 'infinality-like' statement which implies it's not equal. I never ment to criticize somebody, just pointing out my observation.

So whats with https://github.com/archfan/infinality_bundle/releases/tag/2.7.1? Does it work for somebody?

jaro3 commented Jan 31, 2017 edited

With all the help here I still got ugly Japanese fonts in some e-mails (evolution) and browser (Palemoon) compared to infinality... Then I tracked the problem down to a single config from infinality - just stick it into conf.d and problem solved!

82-no-embedded-bitmaps.conf

<match target="font" >
<edit name="embeddedbitmap" mode="assign">
<bool>false</bool>
</edit>
</match>

@cryzed, thanks for the guide.
I think fontconfig-enhanced-defaults package has good configs which can be used with your configs.

funn commented Feb 1, 2017

@morealaz
Looks like the only new thing that package introduces to this configuration is embeddedbitmap line, which was already mentioned by @jaro3:

<?xml version='1.0'?>
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
<fontconfig>
	<match target="font">
		<edit mode="assign" name="antialias">
			<bool>true</bool>
		</edit>
		<edit mode="assign" name="embeddedbitmap">
			<bool>false</bool>
		</edit>
		<edit mode="assign" name="hinting">
			<bool>true</bool>
		</edit>
		<edit mode="assign" name="hintstyle">
			<const>hintslight</const>
		</edit>
		<edit mode="assign" name="lcdfilter">
			<const>lcddefault</const>
		</edit>
		<edit mode="assign" name="rgba">
			<const>rgb</const>
		</edit>
	</match>
</fontconfig>

moralrecordings commented Feb 6, 2017 edited

Worth mentioning is that there's still a cairo-infinality package that's worth installing; I noticed this when monospaced fonts rendered in GNOME Terminal were hinted a pixel shorter than in GVIM. The reason for this is (of course!) a ten year old bug in Cairo's font hinting switcher that was fixable in 4 lines of code. Except someone well-meaning offered to rewrite the whole thing, guaranteeing that no-one would ever want to review it for fear of breaking every GTK app!

ctjhoa commented Feb 7, 2017

In addition, you also can delete bohoomil key with pacman-key -d 962DDE58 as there is no reason to keep an inactive key in your keyring.

exentio commented Feb 10, 2017

Hi, I tried following the guide, being sure to follow every single step, but my font rendering looks awful.
I tried a lot of fixes but nothing changed. Telegram, Transmission-qt and jDownloader look fine, instead. Also, my bitmap fonts are not being recognized. Can anyone help me?

Owner

cryzed commented Feb 11, 2017 edited

@exentio: Hey, it's possible that you have configuration files in /etc/fonts/conf.d activated that have strange effects. It might be interesting to check where the symlinks in that directory point to, and checking the owner of each symlink with pacman -Qo -- this might give you an idea where the problem lies.

However, to me it kind of looks like all or some of the settings are simply not activated. I would almost say that your /etc/fonts/conf.d directory is either completely missing or inaccessible -- is that possible?

exentio commented Feb 11, 2017

@cryzed I checked all the symlinks and it doesn't look like there are broken links. If you're curious, this is the output of ls -l /etc/fonts/conf.d and this of ls -l /etc/fonts/conf.avail. pacman -Qo's output on both folders doesn't look like something is broken, but in case, here it is

Owner

cryzed commented Feb 11, 2017 edited

@exentio yeah that looks fine... I'm a bit puzzled now too. Is your fontconfig at 2.12.1-4? Does a /etc/profile.d/freetype2.sh exist? If so, what are its contents (try removing the file)? This is a long shot, but maybe simply try reinstalling fontconfig: pacman -S fontconfig. Also is it possible that your DE/WM has created files that override the global fontconfig with a local one here: $XDG_CONFIG_HOME/fontconfig/? Also what are the directory permissions on /etc/fonts/conf.d and /etc/fonts/conf.avail -- you showed me their owners, but not the permissions like you did with their contents.

Sorry I'm just guessing wildly at this point. You made sure to restart X at some point, yes?

exentio commented Feb 12, 2017 edited

@cryzed fontconfig 2.12.1-4 is installed, and /etc/profile.d/freetype2.sh looks fine. There isn't any local variable for font config, neither any fontconfig folder in my .config or in .local/share. Permissions on both folders are rwx r-x r-x. I obviously restarted X, updated GTK cache (I assume this is a problem of GTK because Qt and Java apps work fine), also rebooted and updated the whole system. But, I noticed that LightDM with the GTK greeter looks fine (but with the wrong font because bitmaps are not being recognized), so maybe it could be just something in my config, but I don't really know what

EDIT: Ok, problem solved, apparently something in .Xresources was the problem. My bitmap fonts still aren't being recognized, but I can fix it

Owner

cryzed commented Feb 12, 2017

@exentio It's possible that your bitmap fonts aren't being recognized due to the update to the latest freetype2 version, which prefixes some fonts with their foundry name. Google "freetype2 xos4" for more information on this issue -- good luck!

which xwindow manager can do this better? My xfce4 still not great at terminal on Lenovo X61

roshhh commented Mar 13, 2017

Thanks for this article. Just switched to arch from Ubuntu and the fonts are horrible. Once I've installed this any fonts that are not listed in the folder come out with random spacing. Is there any way to configure other fonts to work?

t1-cursor-ib is no more an optional dependency. I don't know if this is okay, just for your information.

dbouras commented Apr 24, 2017

While playing around with openSuse Leap 42.2 for the past few days (zypp-upgrading from 13.1 was quite a journey :)) I also ran into issues with newer freetype releases and the absence of Infinality. For those of you who would rather not delve into the intricacies of font configuration files I suggest:

a) finding a freetype build with sub-pixel rendering enabled, and
b) installing the fontconfig-infinality scripts that exist as a stand-alone package

In my case, for (a) I switched fontconfig and freetype packages to the following (e.g. save as "/etc/zypp/repos.d/Subpixel_Repository.repo"):

[Subpixel_Repository]
name=Subpixel Repository
enabled=1
autorefresh=1
baseurl=http://download.opensuse.org/repositories/home:/gldickens3/openSUSE_Leap_42.2/
path=/
type=rpm-md
keeppackages=0

For (b) I installed fontconfig-infinality from (pick your distribution from the list):
https://software.opensuse.org/package/fontconfig-infinality

Don't forget to run infinality-ctl setstyle (as root) for choosing your preferred rendering "style".
With hopes that the above will help.

wonderful! I get great fonts in Debain)) Thanks!

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