The scenario
You just installed Fedora Workstation. The default Adwaita theme looks clean, but you want a dark mode that actually persists across applications, a monospace font that does not blur at 125 percent scaling, and an icon set that matches your terminal. You open Settings, change the appearance, and notice half the apps ignore it. You try a random gsettings command from a forum post and suddenly your top bar vanishes. GNOME settings system is powerful, but it hides its structure behind a flat GUI. You need to know where the values live, how to change them safely, and how to recover when a theme breaks the shell.
How GNOME stores your preferences
GNOME does not use traditional configuration files in /etc/ for desktop preferences. It uses a centralized database called dconf. Every setting lives under a schema path like org.gnome.desktop.interface. The gsettings command is the official API to read and write that database. Think of dconf as a key-value store and gsettings as the type-safe wrapper that validates your input against the schema. When you change a font in the Settings app, the GUI calls gsettings set behind the scenes. When you run it manually, you skip the validation layer if you are not careful.
The database lives in ~/.config/dconf/user. It is a binary blob, not a text file. You cannot edit it with nano. If you corrupt it, GNOME falls back to compiled defaults. The system-wide overrides live in /etc/dconf/db/ and are managed by packages. Never edit files in /usr/lib/ or /etc/dconf/ directly. Use the package manager or gsettings to change values. Fedora ships with a curated set of defaults that match the release cycle. Manual edits drift, snapshots stay.
Changing appearance, fonts, and icons
Start by checking what themes and fonts are actually installed. GNOME will silently ignore a theme name that does not exist on disk. Run this to list available icon themes:
ls /usr/share/icons/ | grep -v index.theme
# Lists directories that contain valid icon sets
# Filters out the metadata file that confuses grep
# User themes go in ~/.local/share/icons/
Run this to list available GTK themes:
ls /usr/share/themes/
# Shows system-wide themes installed via dnf
# User themes go in ~/.local/share/themes/
# Flatpak apps ignore user themes by default
If you want to switch to a dark icon theme, set it explicitly. GNOME does not automatically pair dark mode with dark icons.
gsettings set org.gnome.desktop.interface icon-theme "Adwaita-dark"
# Applies the dark variant of the default icon set
# Takes effect immediately in most applications
# Requires a logout for some legacy GTK3 apps
Change the default font family and size. The value must follow the Pango font description format.
gsettings set org.gnome.desktop.interface font-name "Inter 11"
# Sets the primary UI font and base size
# Pango format is "FamilyName Size" without quotes around size
# GTK4 reads this key on application startup
Change the monospace font for terminals and code editors.
gsettings set org.gnome.desktop.interface monospace-font-name "JetBrains Mono 10"
# Overrides the default fixed-width font
# Many terminal emulators read this key directly
# Affects GNOME Terminal, Tilix, and code editors
If the font you want is not installed, gsettings will accept the string but the rendering will fall back to a system default. Install missing fonts through the package manager first.
sudo dnf install google-noto-sans-fonts
# Fetches the font package from Fedora repositories
# Updates the fontconfig cache automatically
# Provides comprehensive language coverage
Set the overall color scheme. GNOME 42+ uses a single key for both light and dark mode.
gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
# Forces dark mode across GTK3 and GTK4 apps
# Overrides the automatic system setting
# Requires a full logout to apply to the shell
Verify the changes took effect
Read the current value back from the database. This confirms the write succeeded and shows exactly what GNOME is using.
gsettings get org.gnome.desktop.interface font-name
# Returns the current Pango string
# Use this to confirm the exact family and size
# Empty output means the key was never set
Check the active icon theme.
gsettings get org.gnome.desktop.interface icon-theme
# Prints the directory name GNOME will load
# Empty string means it falls back to Adwaita
# Case sensitivity matters for theme directories
Open a new terminal or restart your shell session. GTK3 and GTK4 applications read these keys on startup. They do not hot-reload when you change the database. Log out and back in if the top bar or file manager still shows the old theme. Run journalctl -xe if you suspect a theme is causing crashes. Read the actual error before guessing.
Common pitfalls and broken themes
The most common error is setting a theme that lacks a GTK4 variant. GNOME 40+ uses GTK4 for the shell and many core apps. If you install a theme that only provides GTK3 CSS, the Settings app will switch, but Nautilus and the top bar will look broken. You will see mismatched window controls and missing hover states.
Another frequent issue is scaling. If you run a 4K display or a high-DPI laptop, changing the font size alone will not fix blurry text. GNOME uses fractional scaling. Set the scale factor before tweaking fonts.
gsettings set org.gnome.settings-daemon.plugins.xsettings overrides '{"Gdk/WindowScalingFactor": <2>}'
# Forces integer scaling when fractional scaling causes blur
# Requires a full logout to apply correctly
# Reverts to default if you remove the key
If you accidentally set a font that does not support your language, you will see tofu boxes or fallback to a completely different typeface. Check font coverage with fc-list.
fc-list :lang=en family | grep -i "inter"
# Verifies the font is registered with fontconfig
# Confirms it supports the requested language subset
# Run fc-cache -f if fonts appear missing
When a theme breaks the desktop entirely, GNOME provides a safe fallback. Press Alt+F2, type r, and press Enter. This restarts the shell without closing your windows. If the shell refuses to start, switch to a TTY with Ctrl+Alt+F3, log in, and reset the interface keys to their defaults.
gsettings reset org.gnome.desktop.interface icon-theme
# Clears the user override
# GNOME falls back to the compiled schema default
# Repeat for font-name and color-scheme if needed
If you see [FAILED] Failed to start gnome-shell.service during boot, your custom theme probably references a missing CSS file or an invalid JavaScript extension. Reset the interface keys from the TTY before rebooting. Trust the package manager. Manual file edits drift, snapshots stay.
GUI settings versus the command line
Use the Settings application when you are exploring options and want visual previews. Use gsettings when you are scripting a dotfile setup or applying changes across multiple machines. Use dconf-editor when you need to browse the entire schema tree and see hidden keys. Use gsettings list-schemas when you are looking for the exact namespace for a feature you want to change. Stay on the GUI for casual tweaks. Run gsettings from the terminal when you need reproducibility.