Add “System UI” as a generic font family in KDE System Settings

In System Settings → Appearance → Fonts, KDE currently provides font roles such as:

  • General

  • Fixed width

  • Small

  • Toolbar

  • Menu

  • Window title

The font selector offers generic families such as Sans Serif, Serif, and Monospace, but there is no System UI generic family.

I would like to suggest adding System UI as a generic family alongside Sans Serif, Serif, and Monospace.

Motivation

A generic Sans Serif font is not necessarily the same thing as a font designed specifically for user interfaces.

This becomes particularly important for multilingual systems. Different scripts can have significantly different vertical metrics and typographic requirements. A font that works well for Latin UI text may not have suitable metrics when the same family is used for Arabic or other complex scripts.

For example, the Noto project provides dedicated UI fonts such as Noto Sans Arabic UI, Noto Sans Bengali UI, Noto Sans Devanagari UI, Noto Sans Thai UI, etc. These variants are specifically intended for interface text rather than general text typography.

Noto’s documentation also describes scripts as having different typographic characteristics and explains that many scripts use dedicated fonts engineered for their specific requirements:

Why a separate System UI role would be useful

A System UI generic family would allow KDE to distinguish between:

  • Sans Serif — a general-purpose sans-serif font

  • Serif — a general-purpose serif font

  • Monospace — a fixed-width font

  • System UI — a generic family representing the font intended specifically for interface elements

This would also make it possible for font configuration and fallback mechanisms to treat UI typography differently from document typography.

For example, on an Arabic desktop, a user might prefer:

  1. Latin UI → Noto Sans

  2. Arabic UI → Noto Sans Arabic UI

  3. Documents → Noto Sans (Latin) / Noto Sans Arabic (Arabic) [Sans Serif fallback]

The important point is that the UI font should not necessarily be determined solely by the generic Sans Serif category.

Bad

Good

Expected benefit

This would improve KDE’s typography for multilingual environments and provide a clearer distinction between text fonts and interface fonts.

It would also make KDE’s font configuration better aligned with the way modern font families are actually designed, where a family can contain dedicated UI variants with different metrics and spacing.

This would be especially valuable for Arabic and other scripts where using a general-purpose font as the UI font can result in different vertical metrics, spacing, and overall UI density.

Thank you for considering this feature.

2 Likes

having a separate category of fonts for “system” does not tell you if the fonts are monospace, serif or not.

to your point about a fonts being optimized for the GUI then, you can just limit your search to font names with UI , display, or system in the name as those fonts are generally designed for your needs.

what you can do right now with the tools you have is to go into font management and create a group named “System” or “UI” and add in all the fonts you feel are appropriate for use as a system font.

that way you are not relying on anyone else’s opinion on that score.

  1. system-ui is a web and desktop standard: It is an official generic family defined in W3C CSS specifications and implemented across major operating systems. It is not a new or redundant classification.

  2. Fontconfig already maintains upstream support: The upstream Fontconfig team actively maintains fallback and mapping rules for system-ui across both Latin and non-Latin scripts (as seen in Fontconfig’s conf.d configuration rules).

  3. system-ui and sans-serif serve different roles: Generic sans-serif fonts (like Noto Sans Arabic) are optimized for long-form document legibility. system-ui explicitly points to fonts designed with UI metrics—higher x-heights, compact spacing, and distinct glyphs for small interface elements. Relying solely on sans-serif for interface elements ignores this distinction.

  4. No impact on fixed-width or monospace fonts: system-ui is strictly for proportional interface text. Monospace and code-related font categories operate on separate alias trees (monospace, fixed) and remain completely untouched.

Exposing system-ui in KDE System Settings simply allows users to leverage the existing, hard work done by Fontconfig maintainers to deliver a proper native UI text experience.

1 Like

Indeed. On most distros you should be able to do:

fc-list :genericfamily=system-ui family

which shows the font families classified as system-ui.

Yes. It was added recently in version v2.18.3 .

Before, in v2.17.x it wasn’t there so if I choose font from Latin list for System-UI (Adwaita Sans, Cantarell), FontConfig will choose right fallback from non-latin list System-UI.
But. In the recent version, they changed the way it works; if he finds the preferred Latin font UI, it will be preferred.

It means. In Arch Linux (fontconfig v2.18.3) Noto Sans is not System UI preferred and Adwaita Sans font added in dependency of plymouth package (Canterell font is default font but Arch made patch to make Adwaita Sans and Adwaita Mono default font), so I will get right fallback from system-ui if I switch to Adwaita Sans font ONLY.

In Fedora, Cantarell font is prefered System-UI, look to fontconfig Cantarell font fedora source. so I will get right fallback from System-UI if I switch to Cantarell font ONLY.

I tested in Fedora Rawhide and Arch. Also, it’s the same issue in GNOME, with little difference. If I choose a font from the Refine App for changing the interface from the list, I will get System-ui. In KDE only Sans, Serif, Monospace and other fonts.

Bash script to check preferred font for Sans, Serif, Monospace and System-UI:

#!/usr/bin/env bash

# Print fc-cache version and update font cache
fc-cache --version
fc-cache

# Function to check font matches for a specific language
check_fonts() {
    local lang="$1"
    echo -e "\n=== Matching fonts for language: $lang ==="
    
    echo -n "Sans-serif: "
    fc-match "sans:lang=$lang"

    echo -n "Serif:      "
    fc-match "serif:lang=$lang"

    echo -n "Monospace:  "
    fc-match "monospace:lang=$lang"

    echo -n "System-UI:  "
    fc-match 'system\-ui':lang=$lang
}

# Run checks for Arabic and English
check_fonts "ar"
check_fonts "en"
1 Like

Note: in Fedora, Noto Sans Arabic UI font isn’t installed by default.

Cool. I agree it would make sense to add it alongside the other generic families (Sans Serif, Serif and Monospace) like you propose - with a bit of defensive coding so there’s no problem for distros that don’t have the relevant version of fontconfig yet.

1 Like

It has to do with the same topic