PSA/SOLVED: Flatpak GTK/libadwaita apps looked broken/unstyled because GTK_THEME was set to an empty value

I ran into a nasty theming issue where GTK3 themes still worked, but GTK4/libadwaita Flatpak apps looked broken/unstyled or half-themed. GNOME settings were correct:

gsettings get org.gnome.desktop.interface gtk-theme
# 'Adwaita'

gsettings get org.gnome.desktop.interface color-scheme
# 'prefer-dark'

A fresh user account worked perfectly, so the system themes were fine.

The actual culprit was a Flatpak override:

flatpak override --show --user

It showed:

[Environment]
GTK_THEME=

That looks harmless, but it is not. GTK_THEME was still set — just set to an empty string. GTK/libadwaita still sees that as an override, and it can break normal Adwaita/libadwaita styling.

The fix:

flatpak override --user --unset-env=GTK_THEME
flatpak override --user --unset-env=GTK2_RC_FILES
flatpak override --user --unset-env=QT_STYLE_OVERRIDE

Then verify:

flatpak override --show --user

There should be no [Environment] GTK_THEME= entry anymore.

You can also check inside a Flatpak app:

flatpak run --command=env org.gnome.TextEditor | grep GTK_THEME

Expected: no output.

After unsetting GTK_THEME, libadwaita/GTK4 Flatpak apps rendered correctly again.

Extra debugging trick that found it:

strace -f -e trace=mkdir,mkdirat,openat,openat2,statx,access,rename,unlink,unlinkat -s 300 \
  -o /tmp/flatpak-instance.trace \
  flatpak run -vv org.gnome.TextEditor

The verbose Flatpak output showed the sandbox being launched with:

--setenv
GTK_THEME
''

So the lesson is: empty env var is not the same as unset env var. If GTK/libadwaita apps look cursed, check Flatpak overrides before nuking themes, dconf, caches, or your whole user profile.

Disclaimer: Generated by GPT 5.5