What is, what is not & motivation
infinality-bundle is a collection of software utilizing the power of font rendering offered by infinality patches and fontconfig rules known as fontconfig-infinality-ultimate.
Even though the installation of separately distributed packages (i.e. freetype2-infinality, fontconfig-infinality-ultimate and cairo-ubuntu), as present in the AUR, is relatively simple, nevertheless it has been confusing which files should be added/removed to achieve the desired effect. That is why, for minimum fuss and maximum convenience, a one-shot installation solution was born in order to 1) integrate all four libraries in an easy to install software subgroup, 2) retain their mutual compatibility, as well as their compatibility with the rest of system resources, 3) minimize the risk of sloppy installation and maintenance, resulting in unsatisfactory or otherwise poor font rendering. See infinality-bundle components below for detailed description of the bundle.
infinality-bundle was not created to mimic font rendering known from Windows, Apple, Ubuntu or any other operating system or platform. Natively, they all offer a unique and distinct, high quality text representation. However, when “ported” to Linux, at least Windows and Apple models seem to be missing the feel of the original. Infinality patches offer something different and more than any of the available rendering solutions — even more than they do themselves out of the box. That is why the aim of infinality-bundle is to make use of the vast potential hidden in native Linux font rendering back-end that was brought to the entirely new level by the author of infinality patches.
Linux no more needs to reproduce well known solutions as it is capable of proposing new ones on its own, and creating new standards just like it has been successfully doing in other areas. Thus, the model to follow is not owned by any particular developer, company™ or method of electronic text representation, but the very traditional rules of typography and the text itself. However, when put in the digital domain, both, despite being deeply rooted in tradition, have somehow become new phenomena as well. As such, they require new tools and new sophisticated technologies to serve their purposes. infinality-bundle explores one of numerous possible territories that are still waiting to be discovered.
fontconfig-infinality-ultimate vs. fontconfig-infinality
Although infinality-bundle was entirely made possible by excellent infinality patches, it is not compatible with generic infinality settings in every respect.
As of version 2.10.92-10, fontconfig-infinality-ultimate entirely abandons the “nesting” configuration model known from fontconfig-infinality, and configuration templates found in /etc/fonts/conf.avail.infinality from now on mimic the layout of the generic /etc/fonts/conf.avail as close as possible.
There are quite a few benefits of reverting to a typical fontconfig style configuration:
The infinality configuration files are hardcoded into fontconfig source code, allowing for easier maintenance, building, rebuilding and porting fontconfig-infinality-ultimate to other compatible operating systems. A complete set of patches was made available, alongside modified PKGBUILD, making the process dramatically more straightforward.
Deploying fontconfig-infinality-ultimate in other Linux distributions should require as little as applying the patches and substituting the generic infinality-settings.sh with a custom one from the bundle.
Using a single fontconfig configuration tree should help avoid potential issues caused by injecting a complex set of additional config files into the primary structure. The latter approach has proved to be less reliable and more prone to problems, for instance due to accidental mutual overriding of settings by stock fontconfig and the ultimate plugin.
Here is a short list of further most substantial differences:
Multiple runtime settings that come with freetype2-infinality, including, among other things, a selection of Windows, Apple and Ubuntu schemes were replaced by a single new one, as needed by fontconfig-infinality-ultimate. /etc/profile.d/infinality-settings.sh should not be used in conjunction with any other similar file either supplied with infinality sources, or with other custom packages. Any previously installed runtime file can be safely removed once freetype2-infinality-ultimate has been installed.
/etc/fonts/infinality/infinality.conf was reverted to its original form. All the settings formerly found in infinality.conf are now located in separate config files available in /etc/fonts/conf.avail.infinality. They can be activated as needed via symbolic links in /etc/fonts/conf.d.
Per-user customizations should be located in
A few examples can be found in /usr/share/doc/fontconfig-infinality-ultimate/. Once activated, custom settings should be honored by applications.
Type1 fonts are enabled by default. In certain cases the use of T1 fonts instead of TTF is recommended (e.g. Lexi Mono). All Postscript fonts used for testing, available in Arch Linux official repositories, have proved to render correctly.
Several new fonts are supported by the bundle, and in a few cases the default fontconfig-infinality settings have been modified.
All in all, you may think of fontconfig-infinality-ultimate as a stock fontconfig package with a hard coded infinality functionality.
infinality-bundle consists of the following packages:
freetype2-infinality-ultimate (incl. most recent, officially released infinality patches and custom runtime settings)
fontconfig-infinality-ultimate (incl. custom fontconfig files as well as the entire generic fontconfig library). During installation of the package, the generic Arch Linux fontconfig package and fontconfig-infinality-ultimate-git from the AUR (if installed in the system) should be automatically removed and replaced by the single fontconfig-intinality-ultimate from the bundle.
If for some reason the substitution cannot be performed automatically, issue (as root):
# pacman -Rdd fontconfig fontconfig-infinality-ultimate # pacman -U/-S fontconfig-infinality-ultimate
This should be safe in majority of cases as the new fontconfig package will provide all the necessary dependencies for use with applications that require it.
cairo-infinality-ultimate (built with cairo-respect-fontconfig.patch, cairo-1.12.8-expose_snapshot-1.patch, as well as Ubuntu patches).
The source code is always the same as used for the official Arch Linux packages. Always, if possible… Arch is a bleeding edge distribution, so it may happen that the patches needed by infinality-bundle have not caught up yet with the version of a library used there. In such cases, the priority is granted to compatibility, so that the officially available package can be used instead of its patched version. However, it has not happened yet that the freetype2 libraries with updated patches were unavailable for a significantly longer period of time.
The libraries that come with infinality-bundle can be safely used as drop-in replacements for correspondng Arch Linux packages, providing fully compatible dependencies for other applications.
|The beta/development/git versions of the core libraries are not and will not be supported by the bundle.|
|fontconfig-infinality-ultimate distributed as a separate package via the AUR
offers exactly the same font configuration as fontconfig-infinality-ultimate
from infinality-bundle. However, they are not mutually compatible on a
package content level and therefore the AUR version cannot be used as a part
of infinality-bundle in its present state.
However, the git package will soon offer exactly the same functionality as the ultimate one.
The following naming convention is used throughout the bundle (for the initial release of every new version of a package):
For the best experience, it is recommended to use Microsoft font families (most recent ones as far as possible). Free fonts should be always automatically used as fallback ones when none of the major sets is detected. If you want to alter the default priorities set in 60-latin.conf and 65-non-latin.conf, you can do so on a user basis in your local fontconfig configuration files in $XDG_CONFIG_HOME/fontconfig (see examples in /usr/share/doc/fontconfig-infinality-ultimate/fontconfig). If necessary, you can modify global configuration: to do so, duplicate 60-latin.conf and 65-non-latin.conf as 61-latin.conf and 66-non-latin.conf respectively and save your changes in them (this should prevent them from being overwritten during update or re-installation). In order to activate your custom configuration, edit symbolic links in /etc/fonts/conf.d (as root):
# cd /etc/fonts/conf.d # ln -s -f ../conf.avail.infinality/61-latin.conf . # ln -s -f ../conf.avail.infinality/66-non-latin.conf .
If a font is available both in TTF and OTF format, the preferred one is usually OTF, as long as the OTF version is not in early development or experimental stage. OTF is a newer and easier to handle standard, and as a successor of the TrueType format it overcomes many of its limitations. For more information, see Further reading & references.
Installation of new fonts
In most cases, installation of font packages available in the official repositories should not require any extra post installation/upgrade user action. However, in a limited number of cases it may be necessary to verify manually that a newly added font package hasn’t installed additional fontconfig files that could interfere with fontconfig-infinality-ultimate. Arch font packaging guidelines do not force users to accept any but generic fontconfig settings, and since they are disabled in the bundle, the /etc/fonts/conf.d directory should remain free from interference introduced by additional fontconfig files. (This is usually not the case with fontconfig files installed by software packages—e.g. cups-filters, desktop environments, etc—as this kind of add ons are mostly harmless and won’t affect the rendering mechanism’s behaviour.)
Therefore, users are suggested that they pay attention mostly to unsuported font packages available via the AUR. If it is necessary to add fontconfig support for a font currently not handled by infinality-bundle, or if an already supported font is renderred incorrectly with default settings, it is best to report a bug and, as long as it is possible, changes should be made to the package, in order to preserve it unified for all users. See Reporting bugs below for further instructions.
User specific customizations
As already mentioned, users can alter the default fontconfig settings and introduce new ones on the individual basis via fontconfig XDG directory structure, specifically in the following locations:
It is still possible to use old locations,
However, since they are planned to be dropped in new fontconfig releases, it is best to adjust custom configs to new standards.
Before reporting a bug, please make sure that font prerequisites have been met and that infinality-bundle was properly installed in your system. If both answers are positive, read on.
The following are considered features
I don’t like it!
Don’t use it.
Fonts are too thin / too dark / not dark enough, etc.
/etc/profile.d/infinality-settings.sh offers three default brightness / darkness balance levels to choose from: it is enough to comment out the currently active set and uncomment a different one. If the presets are still not what you want, you can customize them to any extent you wish, on your own.
The rendering is not the same as in Windows (any version), Apple (any version), Any-Other-Platform (any version). I don’t like it!
Let me repeat it: The intention behind the ultimate package is not reproduction of existing solutions, but creating new, distinct ones that would offer high quality font rendering on the Linux platform, regardless of the native language. Period.
OTF vs. TTF fonts
If the OTF version of the font is freely available, or it is generaly more popular, or the quality of the OTF font is higher than of the TTF equivalent, always OTF version will be used in default fontconfig settings.
In certain cases, e.g. when you own a commercial TTF font, the support for it may be added if technically possible.
A font is buggy / badly coded.
While this is not really a “feature”, there are several fonts that are known to behave badly under Linux, with or without infinality patches. In certain cases, it is possible to introduce more or less successful workarounds (Helvetica, Luxi Mono), whilst sometimes a font will not render correctly regardless of tricks used (like FreeSans Regular 11px for instance).
To avoid problems, the most problematic fonts were substituted with equivalent faces that should work correctly and provide almost identical experience.
An updated version of a font is considered worse than its previous version(s).
In this case it is recommended to install the version that’s subjectively found better and provide changes to the fontconfig settings on a user basis if necessary (see User specific customizations).
The following are considered bugs (and how to handle them)
A font is not supported by the bundle and/or renders badly/incorrectly/insufficiently well with the default settings.
Please, report a font in question, preferably providing a copy of it (if possible) and a relevant description of the problem (as you can see it).
A font is supported by the bundle, but needs additional tweaking.
Please, report the font, providing a detailed description of the problem and the relevant technical information (i.e. font name, version — OTF/TTF/T1, its weight and sizes at which it does not render as expected, application it is used in, etc).
A font behaves correctly in application A, but misbehaves in application B.
If technically possible, the problem will be looked into and fixed. In such a case report the problematic font & application(s), providing all the relevant information that may help fix the bug.
Bear in mind, however, that there are known differences in font rendering between various web browser, text editors, word processors, image processing softwares, toolkits (Qt4) and so forth. In such cases it may be impossible to find a workaround or a fix as the problem may lie deep in the software’s concept (for example, the application may handle font rendering independently from fontconfig).
|If a software package is available in official Arch Linux repositories, it is always used as a reference when fixing bugs. Custom built packages, especially beta/development/git versions, may not work as expected and thus may not be fully supported by infinality-bundle. Please, make it clear in a bug report which is the exact version you are using.|
Something is wrong here, and I swear on my pet’s life this is not a PEBKAC.
If you are sure that you have done everything you are expected to, including putting your glasses on (if applicable) and being completely sober for at least 48 hours at the time of turning on the computer, describe your problem and I will look into it. After all, planes still crash even when they should not by any means.
Further reading & references
There are numerous resources available that cover various aspects of digital typography. Here is a short list of useful documents to start with:
general information on TTF/OTF/T1 font formats
freetype2 & fontconfig documentation
infinality home & forums
font configuration how-tos
Gentoo Forums :: Freetype subpixel font rendering - lcd monitors Pt 2 (and anything on the topic of fonts contributed by brebs)
popular fonts available in Arch Linux
fontconfig-infinality-bundle at GitHub is available here (branch infinality-bundle).
I truly appreciate all the encouragement I received from Arch Linux users (and not only). There are too many of you to mention. Thank you, guys.