# Fonts wrong or missing after an Omarchy update
Wrong monospace font, tofu boxes, or broken emoji after an Omarchy 4 update. Reset fontconfig with omarchy font set, rebuild the font cache, fix leftovers.
> **Short answer:** Run `omarchy font set "JetBrainsMono Nerd Font"`. That overwrites ~/.config/fontconfig/fonts.conf in full, which replaces any stale Omarchy 3 copy the Quattro upgrade left behind, then updates every terminal config and restarts the shell. Follow with `fc-cache -f` and restart Ghostty, Foot, and your browser by hand, because none of them pick up the change in place.
- Applies to Omarchy: 4.0.0 and later
- Status: workaround
- Last verified: 2026-09-16
- Canonical: https://omarchylinux.org/fix/fonts-wrong-or-missing-after-update/
_Unofficial community page. Not affiliated with 37signals or the Omacom Foundation. Omarchy is a registered trademark of 37signals LLC._

Fonts break after an Omarchy update in three distinct ways, and they have different causes. Either the monospace font is not the one you picked, or some characters render as empty boxes, or the icon glyphs in the bar and the terminal prompt look wrong. All of this was checked against the v4.0.0 through v4.0.4 trees, with v3.8.4 as the 3.x reference.

Start with `omarchy-version`. Everything below is for 4.0.0 and later. If you are still on 3.8.4 or earlier, see the note at the end.

## The fix

1. Ask what fontconfig actually resolved, not what your terminal shows: `omarchy font current`. It runs `fc-match monospace` and prints the first family. On a healthy 4.x install with no override that is `JetBrainsMono Nerd Font`.

2. Re-apply your font. `omarchy font list` shows what is installed, then `omarchy font set "JetBrainsMono Nerd Font"` (or your own choice, in quotes). This is the step that fixes most post-update font trouble, because `omarchy-font-set` does not patch your fontconfig file, it overwrites `~/.config/fontconfig/fonts.conf` in full. Any leftover from Omarchy 3 is gone afterwards. It also rewrites the Alacritty, Kitty, Ghostty and Foot configs and restarts the Omarchy shell.

3. If you get `Font '<name>' not found.`, the family really is not installed. Check with `fc-list | grep -i <name>`. The Quattro upgrader removes `ttf-jetbrains-mono` and `ttf-jetbrains-mono-nerd` before the main package transaction and installs `ttf-jetbrains-mono-nerd-basic` instead, so a family name that only the full package provided will not resolve any more. Which names the basic package drops is not documented anywhere I could find, so let `fc-list` be the judge. Pick a family that `omarchy font list` shows, or install a fresh one from _Install > Style > Font_ in the Omarchy menu (`Super + Space`), which installs the package and switches to it in one go.

4. Rebuild the font cache and restart the clients: `fc-cache -f`, then `omarchy restart shell`. Add `-r` (`fc-cache -f -r`) if you want the old cache files discarded rather than updated.

5. Close and reopen Ghostty, Foot and your browser. `omarchy-font-set` signals Kitty to reload and Alacritty watches its own config, so those two follow along; Ghostty and Foot do not. Omarchy is supposed to warn you about this with a toast, but the notification call in `omarchy-font-set` is malformed and the message is never delivered. That was reported in issue #7183 and PR #7370 is still open as of 4.0.4, so treat the manual restart as required.

6. If bold or italic text in Kitty still uses the old font, open `~/.config/kitty/kitty.conf` and look for `bold_font` and `italic_font` lines. `omarchy font set` only rewrites `font_family`, so an explicit `bold_font` from an earlier choice survives (issue #9167). Set them to `auto` or to your new family.

7. If the Omarchy icon glyphs in the bar look wrong or out of date, check for a leftover user copy of the icon font: `ls -l ~/.local/share/fonts/omarchy.ttf`. Migration 1788848726, which shipped in v4.0.3, removes that file, but only when its checksum matches the stock one, and it refuses to touch symlinks or a font you replaced yourself. If the file is still there and you did not put it there, move it aside and run `fc-cache -f`.

## Verify it worked

```
omarchy font current
fc-match monospace
fc-match sans-serif
fc-match serif
```

On a stock 4.0.x install those return your chosen monospace family, `Liberation Sans` and `Liberation Serif`. The two Liberation answers come from the package-owned `50-omarchy.conf`, not from anything in your home directory, so seeing them is a good sign that the package default is in charge again.

Then look at the desktop. The bar icons should be crisp and evenly sized, emoji should render as emoji rather than boxes, and any CJK or other non-Latin text you use should render as glyphs rather than boxes.

## Why it happens

Quattro moved the font defaults out of your home directory. On 3.8.4 the whole configuration was one user file, `~/.config/fontconfig/fonts.conf`, and `omarchy-font-set` edited the monospace entry inside it with `xmlstarlet`. On 4.x the defaults are package-owned, shipped as `50-omarchy.conf` and loaded from `/etc/fonts/conf.d`, and the user file only carries your override.

The upgrade handles that move by hash. It backs up each retired config file, then compares the backup against a list of checksums for every default Omarchy has ever shipped. A file that matches is deleted so the packaged one takes over. A file that does not match is copied back, on the assumption that you customized it deliberately. Five stock hashes for `fontconfig/fonts.conf` are on that list. If you ever changed your font on 3.x, your copy matches none of them, so it is restored and stays active alongside the new packaged file. Issue #10117 documents an upgrade where the removal pass never ran at all, leaving `fontconfig/fonts.conf` and an orphaned `omarchy.ttf` in `~/.config` behind while the upgrade still showed its completion screen.

The other half is the new fallback rules. `50-omarchy.conf` pins the three generic families with a strong `assign`, which cuts the alias chains that `noto-fonts` appends later in the load order. It then appends a single Arabic face to every pattern as a catch-all, because Chromium and Electron look up each missing character separately and never carry a language tag that the targeted rules could match. Both choices have visible side effects that are open as of 4.0.4.

## If that did not work

- **Empty boxes for Tamil, Devanagari, Thai and other non-Latin scripts in Chromium, Chrome, Brave or Electron apps.** The last-resort fallback only names an Arabic face, so every other script has nothing to fall back to. Issue #11002 has the analysis and a verified workaround: a file in `/etc/fonts/conf.d/` with a number above 50 that appends the Noto family for your script, then `fc-cache -f` and a full browser restart.
- **Digits rendering in a serif or calligraphic face in GTK4 apps such as Files.** Same last-resort rule, opposite failure. Issue #8928 has a user-level override that drops the Arabic face when it is the effective fallback.
- **An app asks for a specific font and gets the one you set globally.** Any family whose name contains "mono" is affected, because fontconfig's own `48-guessfamily.conf` widens such patterns before the Omarchy rule sees them. Issue #8404 has the full load order and the evidence.
- **Your font is installed but missing from _Style > Font_.** `omarchy-font-list` filters on `fc-list :spacing=100`, so dual-width fonts are excluded from the picker even though `omarchy font set` will accept them by name. Issue #7698.
- **Bar icons much smaller than before.** The "Nerd Font Mono" variants draw their icon glyphs at about half the em box, and the bar sizes each icon by font pixel size rather than by the ink it paints, so the icon shrinks. Issue #8608 has measurements per codepoint for Iosevka, and a commenter hit the same thing with CaskaydiaMono Nerd Font Mono. The fix that worked for both was choosing the same family without the trailing "Mono" in its name. PR #8830, which sizes icons by their painted bounds, is still open as of 4.0.4.
- **Ghostty ignores a font size you set by hand.** Ghostty processes `config-file` includes after the file that names them, so the theme include at the top of `~/.config/ghostty/config` wins over anything you write below it. In discussion #3555 a commenter left that line alone and added a second `config-file` include as the very last line, pointing at a personal file that holds the font settings. Another noted that Ghostty needs a config reload (right-click, Config, Reload Configuration) before a size change shows.
- **You are still on 3.x.** Discussion #4818 describes the 3.4.0 version of this problem, where an update reset Ghostty to the default font. The workaround was the same in spirit: pick your font again in _Style > Font_. A commenter there traced it to the strong `assign` rule in the 3.x user file, and the 4.0.0 release notes list a fix for that binding. None of the fontconfig detail above applies to 3.x, which has no packaged `50-omarchy.conf`.

If the update that broke your fonts also broke other things, the aborted-upgrade case in issue #10117 is worth ruling out before you spend time on fontconfig.

## Related

- The manual chapter is [Fonts](https://omarchy.org/manual/fonts/), and text size across the whole desktop is one knob, `omarchy display text size`.
- [Where did Waybar go](/fix/where-did-waybar-go/) covers the rest of the bar changes in Quattro.
- [Theme not applied to GTK4 apps](/fix/theme-not-applied-to-gtk4-apps/) for GTK styling that survived the update but looks wrong.
- [Fractional scaling blurry or huge apps](/fix/fractional-scaling-blurry-or-huge-apps/) if the problem is size rather than shape.
- [Upgrading 3 to 4](/upgrade/3-to-4-quattro/) for what the Quattro upgrader does to the rest of your config.

## Sources

- [Issue #11002: Last-resort fontconfig rule only covers Arabic, so other non-Latin scripts render as tofu boxes in Chromium/Electron](https://github.com/omacom/omarchy/issues/11002)
- [Issue #8928: Last-resort Noto Naskh Arabic rule renders Latin digits in GTK apps as serif](https://github.com/omacom/omarchy/issues/8928)
- [Issue #8404: omarchy font set redirects every family whose name contains mono, not just generic monospace](https://github.com/omacom/omarchy/issues/8404)
- [Issue #10117: omarchy-upgrade-to-quattro: retired user configs are backed up but never removed; the abort is reported as success](https://github.com/omacom/omarchy/issues/10117)
- [Issue #7698: Font picker excludes FC_DUAL monospace fonts (spacing=90)](https://github.com/omacom/omarchy/issues/7698)
- [Issue #8608: Bar icons render at ~half size with Iosevka Nerd Font Mono](https://github.com/omacom/omarchy/issues/8608)
- [Issue #9167: omarchy font set leaves bold_font/italic_font stale in kitty.conf](https://github.com/omacom/omarchy/issues/9167)
- [Issue #7183: omarchy-font-set: terminal restart notifications never fire](https://github.com/omacom/omarchy/issues/7183)
- [PR #7370: Fire the restart-terminal toast after a font change](https://github.com/omacom/omarchy/pull/7370)
- [Discussion #4818: ghostty falls back to default font after upgrade to 3.4.0](https://github.com/omacom/omarchy/discussions/4818)
- [Discussion #3555: ghostty font size change not taking effect](https://github.com/omacom/omarchy/discussions/3555)
- [Migration 1788848726: Retire the stock user icon font missed by the Quattro upgrade](https://github.com/omacom/omarchy/blob/v4.0.3/migrations/1788848726.sh)
- [Omarchy manual: Fonts](https://omarchy.org/manual/fonts/)
