The late-night glare
You just finished a late-night debugging session. The terminal glare is giving you a headache. You open Settings, flip the switch to Dark, and half your apps instantly comply. The rest stubbornly stay bright white. You try the terminal command. You try Tweaks. Nothing sticks. The theme system is actually doing exactly what you told it to do. You just need to understand which apps listen to which signals.
What is actually happening
GNOME 42 changed how theming works. Before that release, dark mode was a separate theme you applied globally. Now it is a preference signal. GTK 4 applications read the color-scheme setting directly from the D-Bus session. GTK 3 applications still rely on the older gtk-theme property. The system sends both signals when you toggle the switch, but older or poorly configured applications only listen to one. Qt applications use a completely separate translation layer that does not automatically follow GNOME preferences.
Think of the desktop environment as a broadcast tower. It sends out a frequency change. Modern apps have the right receiver. Legacy apps are tuned to an older band. Qt apps are listening to a different station entirely. You need to adjust the receiver on each device, not just change the broadcast.
Run gsettings get org.gnome.desktop.interface color-scheme to see what the system is currently broadcasting. Trust the output before guessing which app is misbehaving.
Apply the system-wide preference
The Settings application writes to the org.gnome.desktop.interface schema. The terminal achieves the exact same result without opening a window. Use the command line when you are provisioning a machine remotely or scripting a fresh install.
Here is how to set the dark preference directly through the session configuration system.
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
# Writes the preference to the user's dconf database
# The D-Bus session broadcasts the change immediately
# GTK 4 apps and modern GNOME shell components update instantly
To revert to the light theme, run the inverse command.
gsettings set org.gnome.desktop.interface color-scheme 'default'
# Resets the preference to the system baseline
# Clears the dark signal from the session bus
# Applications that were waiting for a theme change will switch back
The gsettings tool is a thin wrapper around dconf. It validates keys against the installed schemas before writing. Always prefer gsettings over raw dconf write commands. Schema validation prevents silent corruption of your desktop configuration.
Check the active value before moving to legacy applications. Half the time the setting already applied correctly.
Handle legacy GTK 3 applications
GTK 3 does not understand color-scheme. It only knows about gtk-theme. When you enable dark mode in Settings, GNOME automatically maps prefer-dark to the Adwaita-dark theme for GTK 3 apps. Some older applications ignore the automatic mapping and stick to the light variant. You need to force the legacy theme explicitly.
Here is how to override the GTK 3 theme setting for stubborn applications.
gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'
# Forces the legacy theme engine to load the dark variant
# Bypasses the automatic mapping that some apps ignore
# Affects GTK 3 apps that do not respect the color-scheme signal
If you need finer control over icons, fonts, and window borders, install the Tweaks utility. It provides a graphical interface to the same gsettings keys.
sudo dnf install gnome-tweaks
# Pulls the package from the default Fedora repository
# Installs the GUI wrapper for advanced desktop configuration
# Requires root privileges only for the initial package transaction
Open Tweaks, navigate to Appearance, and set Legacy Applications to Adwaita-dark. The change applies to the next launched GTK 3 window. Restart your file manager and text editor to see the effect.
Never edit theme files in /usr/share/themes/. Package updates will overwrite them. Configure preferences through gsettings or Tweaks instead.
Translate the signal for Qt applications
Qt applications do not read GNOME settings. They use their own configuration system. Fedora provides a bridge that tells Qt to mimic the active GTK theme. The bridge relies on environment variables and a small configuration file.
Here is how to configure the Qt theme translation layer for your session.
mkdir -p ~/.config/qt5ct
# Creates the configuration directory if it does not exist
# Stores user-level overrides without touching system paths
# Prevents permission errors when writing configuration files
Create or edit ~/.config/qt5ct/qt5ct.conf and add the following lines.
[Appearance]
style=kvantum
icon_theme=breeze-dark
color_scheme_hint=dark
# Tells the Qt5 configuration tool to use a dark-aware style
# Sets the icon theme to match the dark preference
# Hints to Qt applications that a dark color palette is active
Qt 6 uses a separate configuration path. Copy the same file to ~/.config/qt6ct/qt6ct.conf if you run modern Qt 6 applications. The kvantum style is the most reliable dark theme engine for Qt on Fedora. Install it with sudo dnf install kvantum if your applications still render with light backgrounds.
Log out and log back in after changing Qt configuration. The environment variables need to load with your session.
Verify the configuration
You need to confirm that the desktop environment is broadcasting the correct signals and that applications are reading them. The dconf database stores the actual values. The gsettings command reads them through the schema layer. Both should match.
Here is how to audit your current theme configuration.
gsettings get org.gnome.desktop.interface color-scheme
# Returns the active GTK 4 / GNOME shell preference
# Should output 'prefer-dark' if the setting applied correctly
# Fails silently if the key is missing or corrupted
gsettings get org.gnome.desktop.interface gtk-theme
# Returns the active GTK 3 theme name
# Should output 'Adwaita-dark' for full legacy compatibility
# Shows 'Adwaita' if the dark mapping failed to trigger
If the output does not match your expectation, reset the keys to their defaults and reapply them.
gsettings reset org.gnome.desktop.interface color-scheme
# Clears the user override and falls back to the schema default
# Useful when a previous script left a malformed value behind
# Restores the baseline before attempting the fix again
Run the verification commands before opening a bug report. Most theme issues are configuration drift, not broken packages.
Common pitfalls and broken apps
Some applications hardcode their theme. Electron apps, Java Swing applications, and older GTK 2 programs ignore desktop preferences entirely. They require manual theme flags or internal settings. Check the application documentation before assuming the desktop environment is at fault.
Wayland compositors sometimes cache theme data. If you change the setting and the shell looks wrong, press Alt+F2, type r, and press Enter. The compositor reloads without killing your session. Xorg users do not need this step.
Extensions can override theme behavior. The User Themes extension allows custom CSS injection. If you installed a custom shell theme, it may conflict with the native dark mode toggle. Disable third-party shell themes when troubleshooting. The default GNOME shell handles dark mode correctly out of the box.
SELinux does not block theme changes. If you see permission errors when writing to ~/.config or ~/.local/share/glib-2.0, check your home directory permissions. Run ls -ld ~ and verify the ownership matches your user.
Restart the application after changing configuration. Do not guess why the UI looks wrong. Check the actual setting first.
Choose the right approach
Use the Settings application when you want a quick visual toggle without opening a terminal. Use the gsettings command when you are scripting a machine or working over SSH. Use gnome-tweaks when you need to adjust fonts, window borders, or legacy GTK 3 themes independently. Use the Qt configuration bridge when your development tools or system utilities render with light backgrounds despite the desktop preference. Stick to the native GNOME theme system if you only need standard dark mode and want zero maintenance.
Reboot before you debug. Half the time the symptom is gone.