Fonts
Foreword
The bulk of Fedora software relies on OpenType compliance and was tested against compliant fonts.
Unfortunately, most font makers feel the OpenType specification is a document written by “software people” for “software people”. They spurn its recommendations. They can not be relied upon to release fonts in a software-friendly state, nor to fix the resulting problems, nor to provide useful advice.
To enable the packaging of fonts by non experts, Checklist provides a list of sanity rules. Most are short unambiguous one liners, easy to understand and apply. Do read this list, even if it feels long. Unless your upstream is a model of discipline, you WILL need it. Avoid Exceptions if you do not feel ambitious – here be dragons.
Once you sorted what to package using the checklist, the rpm-specific part of fonts packaging is simple:
-
take our spec templates,
-
fill in the blanks with descriptions and the file lists resulting from the sorting.
Fedora automation will do the rest.
Tooling provides in-depth documentation of those templates, and other operational tips. The operational tips are useful. The spec templates documentation, not so much. The templates are commented and will usually be self-explanatory.
Lastly, Rationale provides some help, in case a third party attempts to confuse you. A lot of upstreams are dead set against applying OpenType recommendations. They will provide elaborate argumentation, on why the common rule does not apply to them.
Checklist
Legal
-
Font files MUST comply with our https://docs.fedoraproject.org/en-US/legal/license-approval/#_licenses_allowed_for_fonts.
-
Trademark uses MUST be authorized by their owners,
-
trademarks may occur in font naming or font content (logos…).
-
-
Registered names or trademarks MUST NOT prevent downstream modifications,
-
requiring a rename on significant modification is acceptable.
-
Packaging unit: an ideal font family
Because fonts upstreams are, on average, extremely messy, a large part of packaging fonts involves sorting files and fixing font file metadata to produce the consistent and reliable font catalog expected by applications and users.
|
Font family
A font family is composed of font files, that share a single design, and differ ONLY in:
Those parameters correspond to the default axes of OpenType variable fonts. |
-
Packagers MUST apply the definition provided in this section to determine font family boundaries,
-
it takes precedence over application support concerns, over upstream and packager habits and practices.
-
See also the Fontconfig section.
Font file formats
|
OpenType: one standard, five formats
OpenType uses an SFNT container around bitmaps ( |
-
Other font formats MUST be converted to OpenType,
-
except for fonts, intended to be used in the console (NOT a terminal emulator): see Bitmap console fonts.
-
-
Font packages MUST NOT contain font files in non OpenType formats.
|
Font packages
A font package, is an installation (RPM) package, containing OpenType font files. It MAY be produced by a source (SRPM) package, that also produces other (font or non-font) packages. Other kinds of font packages are out of scope for this document. |
-
A font family MUST NOT be packaged in multiple or mixed OpenType formats,
-
except for variable font data,
-
except when mixing is required, to achieve full symbol (glyph) coverage,
-
except as an application workaround; see Packaging a font family in multiple OpenType formats; application support.
-
-
Both variable and non-variable OpenType font files, SHOULD be packaged, for a given font family.
-
OpenType format mixing SHOULD be justified in a comment within the
specfile. -
OpenType collection formats SHOULD be avoided.
Fontconfig
-
Font packages SHOULD include the fontconfig files, that define the selection and substitution rules applying to their font files,
-
written by the packager if upstream does not provide them.
-
-
Fontconfig rules MUST rewrite
familyandstylewhen they are not compliant with OpenType WWS rules:-
familyMUST NOT contain Weight, Width or Slope attributes (ideal WWS family name, Name ID 21), -
styleMUST contain only Weight, Width or Slope attributes (ideal WWS subfamily name, Name ID 22), -
Name ID 21 & 22 fields may exist or not in the packaged font files, and may be correct or not. The packager MUST set the correct value at the fontconfig level if the value fontconfig extracts from font files is incorrect.
-
-
Fontconfig rules MUST rewrite
familyto remove format attributes when they exist,-
for example:
OT,TT,Variable,Graphite,G, etc, -
except when Packaging a font family in multiple OpenType formats; application support; in that case the removal MUST only be done for the font package providing the default format.
-
-
Fontconfig rules MUST rewrite
familyto remove coverage attributes when they exist,-
for example:
Math,Emoji,Color Emoji,Hebrew,Arabic,Thai,LGC, etc, -
except when several font files provide the same coverage, requiring a qualifier to distinguish between them; in that case the removal MUST be done for the default file, and other files MUST be treated as parts of separate font families.
-
-
Fontconfig rules MUST rewrite
fullnameto<family> <style>if it has a different value,-
either natively or as a result of previous rewrites,
-
except for the default style, usually
Regular, for whichfullname=<family>.
-
-
Fontconfig rules MUST rewrite
fontversionwhen several font files provide the samefullnameand have overlapping coverage,-
either natively or as a result of previous rewrites,
-
fontconfig will merge the result, higher
fontversiontaking precedence over lower, -
therefore,
fontversionMUST be set by the packager, to define the correct ordering.
-
-
Fontconfig rules SHOULD define the generic family, a font contributes to,
-
a single generic family: the packager MUST choose,
-
using the correct priority: lower takes precedence over higher.
-
-
Fontconfig rules SHOULD list what other font families, the provided font family can substitute for.
-
typically, anterior namings, known forks, alternatives with the same font metrics…
-
also, the reused fonts families when Assembling different-family font packages: partial designs.
-
-
Fontconfig rules SHOULD define the font families, that can be used to complete the font family,
-
in all cases: at least the generic family and the substitutes defined before,
-
generic family last in completion order.
-
-
Packagers SHOULD attempt upstreaming those fixes,
-
make the font naming correct in the upstream font files,
-
contribute the other fontconfig rules upstream, so they are distributed with the font files.
-
-
Packagers SHOULD consult the fontconfig maintainer and mailing list when in doubt,
-
to get guidance and identify real-world tricky cases that call for fontconfig evolutions.
-
See also the Tooling section for fontconfig syntax guidance.
Source (SRPM) package break-up
-
Separate source archives MUST be packaged in separate
specfiles,-
except when those contain parts of the same font family and upstream coordinates their release.
-
-
specfiles SHOULD track a single font family,-
except when distinct font families are only released upstream in a common archive.
-
-
Packagers SHOULD ask upstream to split unrelated font families in separate versioned source archives,
-
and package font families from their actual respective upstreams when they are bundled with other material in a third party project.
-
Installation (RPM) package break-up: font packages
-
Packagers MUST ship each font family in a single dedicated font package,
-
all the files that, after fontconfig fixing,
-
share the same
familyvalue:family=<common family> -
or differ only in optical sizing:
family=<common family> <optical sizing attribute>,
-
-
except when released as un-coordinated sources, that are easier to track in separate
specfiles, -
except for huge families, that consume a lot of storage space; huge font families MAY be broken up in coverage-specific font packages,
-
-
Font packages MUST limit themsemselves to OpenType font files and their associated fontconfig, appstream, legal and documentation files,
-
for reasonable non-bulky interpretations of documentation files.
-
See also the Tooling section.
|
Other upstream files
Support for other font systems,
for specific applications,
non-OpenType font formats,
bulky documentation, TEX, CSS, or JSON files…
MUST be split in separate non-font packages,
that SHOULD install outside For compatibility reasons,
OpenType font files MAY be exposed outside |
Building
-
Packagers SHOULD build font files from sources,
-
whenever their prefered modification format is not the packaged OpenType format
-
and if the required toolchain is available as free software under Linux
-
Dependencies in font packages
-
Font packages MAY require or supplement other font packages, when they contain the same font family,
-
as defined in Assembling same-family font packages.
-
-
Font packages SHOULD recommend other font packages, when they contain a reused font family,
-
as defined in Assembling different-family font packages: partial designs.
-
-
Font packages SHOULD suggest other font packages, when they contain a better version of the same font family,
-
better: more complete coverage, later enhanced fork, canonical version of the design…
-
-
Font packages MAY suggest or enhance font packages, containing other font families,
-
this should be used sparsely, to avoid imposing packager preferences on users.
-
-
Font packages SHOULD depend on the basic font support package set, defined in the font packaging templates and macros.
-
Except for the preceding, font packages MUST NOT depend, in any form, on any other package.
Dependencies to font packages in other packages
-
Non-font packages MAY suggest or recommend font packages,
-
the weakest
Suggestsform is preferred overRecommends, except in presence of strong pre-existing user habits.
-
-
Non-font packages SHOULD use the
font()namespace to depend on font packages. -
Non-font packages SHOULD NOT require specific font packages, and leave font selection to end-users,
-
except when the packaged software actually relies on those specific font packages,
-
except for convenience font metapackages, as defined in Assembling different-family font packages: font metapackages.
-
-
Non-font packages SHOULD require
font(:lang=en)when they fail in the absence of system fonts,-
hardcoding specific font families is not future-proof.
-
-
Non-font packages MAY require font packages by name, when relying on specific on-disk font file paths,
-
ie when software is not
fontconfig-aware, -
however, there is no obligation for font packagers to keep those paths stable between releases. Font file formats are flexible, making any on-disk file layout temporary. Converting applications to fontconfig use is best.
-
Assembling different-family font packages: partial designs
|
Font reuse and font extension
Because font creation is hard work, font designers will often publish partial new designs:
|
When packaging such a partial design:
-
The font package containing the new font family SHOULD recommend the package containing the original font family,
-
only the core package of the original font family in case of Assembling same-family font packages.
-
-
Re-use recommendations SHOULD use the
font()namespace.
Assembling different-family font packages: font metapackages
-
Packagers MAY provide convenience font metapackages,
-
for example, when an upstream releases a collection of font families, intended to be used together,
-
a common case is matched serif, sans-serif and monospaced font families.
-
-
Font metapackages MUST NOT use the same naming conventions as actual font packages,
-
they MUST NOT be named
<something>-fonts, -
they MAY be named
<something>-fonts-all.
-
-
Font metapackages MUST require, recommend or suggest separate font packages, that conform to this document,
-
Font metapackages SHOULD use the
font()namespace to require, recommend or suggest actual font packages, -
Font metapackages SHOULD NOT contain any other file, except for documentation.
Exceptions
Bitmap console fonts
-
Bitmap console fonts MAY be packaged in a legacy font format, understood by kbd.
-
Bitmap console fonts MUST be installed in
/lib/kbd/consolefonts/not/usr/share/fonts. -
Bitmap console font packages SHOULD be named
<something>-fonts-consolenot<something>-fonts.
|
Console fonts
As long as kbd and systemd-vconsole can not use the same file formats as the rest of the system, bitmap console fonts are effectively private kbd resources. They will be ignored in the rest of this document. It does not apply to them. |
Assembling same-family font packages
-
A font family MUST NOT be split over several font packages, unless one of the exceptions listed above applies.
When a font family is split over a set of several font packages:
-
Involved packagers MUST choose a core font package.
-
This core package SHOULD contain the font files, necessary to provide a minimal scope of the font family.
-
This core package MAY contain fontconfig rules, for all the font files composinng the font family,
-
fontconfig ignores rules that do not match installed files.
-
-
This core package MUST be named as if it contained the whole font family.
-
This core package MUST NOT require any other package in the set.
-
The other packages of the set MUST require, directly or indirectly, this core package.
-
The other packages of the set MUST supplement, directly or indirectly, this core package.
-
The other packages of the set MUST NOT use the
font()namespace to require or supplement other parts of the set,-
Splitting a font family interacts badly with
font()auto-provides.
-
-
All the packages involved in an indirect require or supplement chain MUST be part of the set.
Packaging a font family in multiple OpenType formats; application support
-
Packagers MUST make a reasonable effort, to get applications that do not support all OpenType formats, fixed upstream.
-
If that fails, as a last ressort, packagers MAY request a FESCo exemption, to package a limited number of font families in multiple OpenType formats.
-
Packagers MUST ensure that the resulting additional font data, is separated in distinct font packages,
-
that the average Fedora user can install those font families in a single format,
-
that he is not left wondering, which package to install.
-
Tooling
Creating font packages by hand can be extremely repetitive, error-prone and labor-intensive. Therefore, fonts packaging is heavily automated. It relies on numerous macros and variables to define what goes where.
Those macros and variables are defined in the fonts-rpm-macros package.
The fonts-rpm-templates package contains spec and fontconfig templates,
corresponding to common fonts packaging needs.
Fontconfig
The fonts-rpm-templates package contains fontconfig templates,
corresponding to common fonts packaging needs.
Using fontconfig, you can help users and software make sense of broken font files.
|
On brokenness and interoperability
Fixing may imply behaviour differences, with entities that chose another mitigation strategy. The root cause of those differences is the upstream release of files in a broken state. Producing daring glyph shapes is the designer prerogative. That artistic license does not extend to flouting technical conventions, software relies on. Upstream should always be given the chance to fix its files. If it does not care about our needs, fixing downstream is second best. Inflicting intact breakage on our users is always worst. |
Some applications
-
The Foo project releases
Foo Narrow Oblique. Because the font maker remembers early font formats only allowed 4-style family grouping (Name ID 1 and 2), it declares it asfamily: Foo Narrowandstyle: Oblique. The fontconfig rules forFoo Narrow ObliqueMUST rewrite it to the recommended WWS-compliantfamily: Fooandstyle: Narrow Oblique(Name ID 16/17 or 21/22). -
The Foo project releases the
Universal Foowide-coverage font family. To allow installing only part of this family, it splits it inUniversal Foo,Universal Foo HebrewandUniversal Foo Thai. The fontconfig rules forUniversal FooMUST rewrite thefamily(and thereforefullname) for allUniversal Foo HebrewandUniversal Foo Thaifont files, so they declareUniversal Fooinstead. Fontconfig will present the result as a single wide-encoding family to applications, even if the files remain split on-disk, even if all of them are not installed. -
The Foo project releases
Foo Sans. The fontconfig rules forFoo SansSHOULD declare any missing glyph can be taken from thesans-serifgeneric font family. -
The GNOME project releases the
Bitstream Veraset of font families; later theDejaVuproject forks and extends those fonts. The fontconfig rules forDejaVu SansSHOULD declare it can be substituted forBitstream Vera Sans. -
Microsoft ships Windows with the
Arialfont family. Due to its long and wide availability,Arialis now used in many documents. However it can not be included in Free Desktop systems for licensing reasons. Red Hat commissions anArialsubstitute,Liberation Sans, for use on Linux. Google commissions anotherArialsubstiture,Arimo, for use on ChromeOS. The fontconfig rules forLiberation SansSHOULD declare it can be substituted for bothArialandArimo.
Style naming
The OpenType specification, the CSS specification and the fontconfig manual document the canonical mappings of style keywords.
Those mappings are not absolute. The addition of variable capabilities enabled the creation of new keywords and axes values, including in non variable font files.
Nevertheless, the OpenType specification requires correlating the new capabilities with the traditional keyword scale:
-
an axis step, with a value, close to one of the specification keywords, SHOULD be named with this keyword,
-
a slight deviation from the canonical keyword value, for design reasons, is expected and accepted.
-
-
an axis step, SHOULD NOT be named with a keyword, when its value differs greatly from the keyword canonical value,
-
font files that define new intermediary steps should also define new keywords.
-
Additionnally:
-
axis keywords SHOULD NOT use whitespace, due to software processing constraints,
-
SemiCondensedis a good keyword;Semi Condensed— not.
-
-
keywords SHOULD be assembled in
width weight slantorder in style names, for historical reasons,-
with the default
Regularommited except when alone.
-
Checking results
To verify the metadata of font files installed by a package named ${pkg}:
fc-scan -f \
"%{family[0]};%{style[0]};%{fullname[0]};%{width};%{weight};%{slant};%{fontversion};%{file}\n" \
/usr/share/fonts/${pkg} | sort -t ';' -k1,1d -k4,4n -k5,5n -k6,6n -k2,2d -k7,7dr \
| uniq | column --separator ';' -t
Accanthis ADF Std Regular AccanthisADFStd-Regular 100 80 0 131400 /usr/share/fonts/adf-accanthis-fonts/AccanthisADFStd-Regular.otf Accanthis ADF Std Italic AccanthisADFStd-Italic 100 80 100 131400 /usr/share/fonts/adf-accanthis-fonts/AccanthisADFStd-Italic.otf Accanthis ADF Std Bold AccanthisADFStd-Bold 100 200 0 131400 /usr/share/fonts/adf-accanthis-fonts/AccanthisADFStd-Bold.otf Accanthis ADF Std Bold Italic AccanthisADFStd-BoldItalic 100 200 100 131400 /usr/share/fonts/adf-accanthis-fonts/AccanthisADFStd-BoldItalic.otf Dai Banna SIL Book Regular Dai Banna SIL Book 100 80 0 144179 /usr/share/fonts/sil-dai-banna-fonts/DBSILBR.ttf Dai Banna SIL Book Italic Dai Banna SIL Book Italic 100 80 100 144179 /usr/share/fonts/sil-dai-banna-fonts/DBSILBO.ttf Dai Banna SIL Book Bold Dai Banna SIL Book Bold 100 200 0 144179 /usr/share/fonts/sil-dai-banna-fonts/DBSILBB.ttf Dai Banna SIL Book Bold Italic Dai Banna SIL Book Bold Italic 100 200 100 144179 /usr/share/fonts/sil-dai-banna-fonts/DBSILBC.ttf Dai Banna SIL Light Regular Dai Banna SIL Light 100 80 0 144179 /usr/share/fonts/sil-dai-banna-fonts/DBSILLR.ttf Dai Banna SIL Light Italic Dai Banna SIL Light Italic 100 80 100 144179 /usr/share/fonts/sil-dai-banna-fonts/DBSILLO.ttf Dai Banna SIL Light Bold Dai Banna SIL Light Bold 100 200 0 144179 /usr/share/fonts/sil-dai-banna-fonts/DBSILLB.ttf Dai Banna SIL Light Bold Italic Dai Banna SIL Light Bold Italic 100 200 100 144179 /usr/share/fonts/sil-dai-banna-fonts/DBSILLC.ttf IBM Plex Sans Thin IBM Plex Sans Thin 100 0 0 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-Thin.otf IBM Plex Sans Thin Italic IBM Plex Sans Thin Italic 100 0 100 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-ThinItalic.otf IBM Plex Sans ExtraLight IBM Plex Sans ExtraLight 100 40 0 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-ExtraLight.otf IBM Plex Sans ExtraLight Italic IBM Plex Sans ExtraLight Italic 100 40 100 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-ExtraLightItalic.otf IBM Plex Sans Light IBM Plex Sans Light 100 50 0 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-Light.otf IBM Plex Sans Light Italic IBM Plex Sans Light Italic 100 50 100 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-LightItalic.otf IBM Plex Sans Regular IBM Plex Sans 100 80 0 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-Regular.otf IBM Plex Sans Italic IBM Plex Sans Italic 100 80 100 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-Italic.otf IBM Plex Sans Text IBM Plex Sans Text 100 90 0 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-Text.otf IBM Plex Sans Text Italic IBM Plex Sans Text Italic 100 90 100 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-TextItalic.otf IBM Plex Sans Medium IBM Plex Sans Medium 100 100 0 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-Medium.otf IBM Plex Sans Medium Italic IBM Plex Sans Medium Italic 100 100 100 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-MediumItalic.otf IBM Plex Sans SemiBold IBM Plex Sans SemiBold 100 180 0 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-SemiBold.otf IBM Plex Sans SemiBold Italic IBM Plex Sans SemiBold Italic 100 180 100 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-SemiBoldItalic.otf IBM Plex Sans Bold IBM Plex Sans Bold 100 200 0 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-Bold.otf IBM Plex Sans Bold Italic IBM Plex Sans Bold Italic 100 200 100 196673 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSans-BoldItalic.otf IBM Plex Sans Arabic Thin IBM Plex Sans Arabic Thin 100 0 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansArabic-Thin.otf IBM Plex Sans Arabic ExtraLight IBM Plex Sans Arabic ExtraLight 100 40 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansArabic-ExtraLight.otf IBM Plex Sans Arabic Light IBM Plex Sans Arabic Light 100 50 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansArabic-Light.otf IBM Plex Sans Arabic Regular IBM Plex Sans Arabic 100 80 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansArabic-Regular.otf IBM Plex Sans Arabic Text IBM Plex Sans Arabic Text 100 90 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansArabic-Text.otf IBM Plex Sans Arabic Medium IBM Plex Sans Arabic Medium 100 100 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansArabic-Medium.otf IBM Plex Sans Arabic SemiBold IBM Plex Sans Arabic SemiBold 100 180 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansArabic-SemiBold.otf IBM Plex Sans Arabic Bold IBM Plex Sans Arabic Bold 100 200 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansArabic-Bold.otf IBM Plex Sans Condensed Thin IBM Plex Sans Condensed Thin 75 0 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-Thin.otf IBM Plex Sans Condensed Thin Italic IBM Plex Sans Condensed Thin Italic 75 0 100 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-ThinItalic.otf IBM Plex Sans Condensed ExtraLight IBM Plex Sans Condensed ExtraLight 75 40 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-ExtraLight.otf IBM Plex Sans Condensed ExtraLight Italic IBM Plex Sans Condensed ExtraLight Italic 75 40 100 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-ExtraLightItalic.otf IBM Plex Sans Condensed Light IBM Plex Sans Condensed Light 75 50 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-Light.otf IBM Plex Sans Condensed Light Italic IBM Plex Sans Condensed Light Italic 75 50 100 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-LightItalic.otf IBM Plex Sans Condensed Regular IBM Plex Sans Condensed 75 80 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-Regular.otf IBM Plex Sans Condensed Italic IBM Plex Sans Condensed Italic 75 80 100 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-Italic.otf IBM Plex Sans Condensed Text IBM Plex Sans Condensed Text 75 90 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-Text.otf IBM Plex Sans Condensed Text Italic IBM Plex Sans Condensed Text Italic 75 90 100 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-TextItalic.otf IBM Plex Sans Condensed Medium IBM Plex Sans Condensed Medium 75 100 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-Medium.otf IBM Plex Sans Condensed Medium Italic IBM Plex Sans Condensed Medium Italic 75 100 100 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-MediumItalic.otf IBM Plex Sans Condensed SemiBold IBM Plex Sans Condensed SemiBold 75 180 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-SemiBold.otf IBM Plex Sans Condensed SemiBold Italic IBM Plex Sans Condensed SemiBold Italic 75 180 100 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-SemiBoldItalic.otf IBM Plex Sans Condensed Bold IBM Plex Sans Condensed Bold 75 200 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-Bold.otf IBM Plex Sans Condensed Bold Italic IBM Plex Sans Condensed Bold Italic 75 200 100 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansCondensed-BoldItalic.otf IBM Plex Sans Devanagari Thin IBM Plex Sans Devanagari Thin 100 0 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansDevanagari-Thin.otf IBM Plex Sans Devanagari ExtraLight IBM Plex Sans Devanagari ExtraLight 100 40 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansDevanagari-ExtraLight.otf IBM Plex Sans Devanagari Light IBM Plex Sans Devanagari Light 100 50 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansDevanagari-Light.otf IBM Plex Sans Devanagari Regular IBM Plex Sans Devanagari 100 80 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansDevanagari-Regular.otf IBM Plex Sans Devanagari Text IBM Plex Sans Devanagari Text 100 90 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansDevanagari-Text.otf IBM Plex Sans Devanagari Medium IBM Plex Sans Devanagari Medium 100 100 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansDevanagari-Medium.otf IBM Plex Sans Devanagari SemiBold IBM Plex Sans Devanagari SemiBold 100 180 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansDevanagari-SemiBold.otf IBM Plex Sans Devanagari Bold IBM Plex Sans Devanagari Bold 100 200 0 65601 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansDevanagari-Bold.otf IBM Plex Sans Hebrew Thin IBM Plex Sans Hebrew Thin 100 0 0 65667 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansHebrew-Thin.otf IBM Plex Sans Hebrew ExtraLight IBM Plex Sans Hebrew ExtraLight 100 40 0 65667 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansHebrew-ExtraLight.otf IBM Plex Sans Hebrew Light IBM Plex Sans Hebrew Light 100 50 0 65667 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansHebrew-Light.otf IBM Plex Sans Hebrew Regular IBM Plex Sans Hebrew 100 80 0 65667 /usr/share/fonts/ibm-plex-sans-fonts/IBMPlexSansHebrew-Regular.otf IBM Plex Sans