Default GNOME: Functional But Missing a Lot
After a fresh Ubuntu install, GNOME Desktop looks fine — but if you’re a developer staring at a screen 8–10 hours a day, you’ll quickly notice what’s missing: no customizable app dock, no system monitor on the top bar, window snapping limited to two columns, minimize/maximize buttons hidden by default… I ran Ubuntu like this for 3 months before discovering GNOME Tweaks and Extensions.
The problem isn’t that GNOME is weak. Most of the good features are just hidden, or require additional packages to unlock. The three approaches below — from simplest to full control — will show you which one fits your use case.
Three Ways to Customize GNOME: A Practical Comparison
1. GNOME Tweaks — Unlocking Hidden Settings
Think of GNOME Tweaks as a key that unlocks a hidden drawer. GNOME Settings only shows what the average user needs — Tweaks opens up the rest: font rendering, titlebar buttons, startup applications, themes, icon packs…
- Pros: Simple interface, changes apply instantly, no risk of crashing
- Cons: Limited to adjusting what’s already in GNOME — can’t add entirely new features
2. GNOME Shell Extensions — Adding Entirely New Features
Shell Extensions are JavaScript plugins that embed directly into GNOME Shell. Unlike Tweaks, they don’t just adjust existing settings — they add brand-new features: panel widgets, system stats, workspace indicators, clipboard history…
- Pros: Extremely flexible, large community (1000+ extensions on extensions.gnome.org)
- Cons: Extensions incompatible with your current GNOME version can crash the Shell. Always check version compatibility before installing.
3. dconf/gsettings — For Power Users
What about dconf? It’s where GNOME stores its entire configuration — every keybinding, every toggle, everything you adjust through Tweaks or Extensions gets written here. You can change anything, including settings Tweaks doesn’t expose:
# List all settings for the GNOME desktop interface
gsettings list-recursively org.gnome.desktop.interface
# Example: toggle animations (helps older machines run smoother)
gsettings set org.gnome.desktop.interface enable-animations false
# Reset to default
gsettings reset org.gnome.desktop.interface enable-animations
- Pros: Full control, scriptable, easy backup and restore
- Cons: Requires knowing the correct key schema — setting the wrong data type can break your config
Which Approach Is Right for You?
After 2 years using Ubuntu as my primary machine, here’s how I break it down:
- New to Ubuntu: Start with GNOME Tweaks — safe, fast, no crash risk
- Want new features (persistent dock, system monitor, clipboard history…): Extensions are essential
- Automating setup across multiple machines (dev team onboarding, provisioning): dconf dump/load is the only right approach
My team runs Ubuntu 22.04 across the entire dev org. Instead of walking each person through the GUI, I dump the config with dconf dump, push it to a private git repo — anyone setting up a new machine just runs one command and they’re done, consistent from day one.
Installation Guide: Step by Step
Step 1: Install GNOME Tweaks
sudo apt update
sudo apt install gnome-tweaks -y
# Launch the app
gnome-tweaks
Things to adjust right after opening:
- Windows → Titlebar Buttons: Enable Minimize and Maximize — GNOME hides these by default, which is incredibly annoying
- Fonts → Scaling Factor: Increase to 1.1 or 1.2 for HiDPI displays (QHD/4K)
- Appearance → Themes: Select Adwaita-dark or install a third-party theme
- Startup Applications: Remove unnecessary apps from startup
Step 2: Install Extensions Manager
Installing extensions used to require a browser plus a host connector — pretty clunky. Now there’s an Extensions Manager app that handles everything directly from the desktop:
# Option 1: apt (available on Ubuntu 22.04+)
sudo apt install gnome-shell-extension-manager -y
# Option 2: Flatpak — always gets the latest version (recommended)
flatpak install flathub com.mattjakeman.ExtensionManager
Open the app, use the Browse tab to find and install extensions, and the Installed tab to enable or disable them.
Step 3: 5 Essential Extensions for Developers
Tested on Ubuntu 22.04 (GNOME 42) and Ubuntu 24.04 (GNOME 46):
Dash to Dock — Turns the Activities dash into a persistent dock on the edge of your screen, similar to macOS. Position (bottom/left/right), icon size, auto-hide — all configurable. This is the first extension I install on every new Ubuntu machine, and also the most popular in this category.
TopHat — CPU/RAM/Network usage right on the top panel. No need to open System Monitor separately — a quick glance at the top bar tells you which process is suddenly spiking RAM.
Clipboard Indicator — Keeps a clipboard history so you don’t lose text after each new copy. I use this the most when working with logs or copying multiple config snippets from a terminal at once.
Caffeine — One click to disable the screensaver and auto-suspend. Useful when running long builds or watching logs and you don’t want the screen turning off mid-session.
GSConnect — Connects Android to Linux over local WiFi (similar to KDE Connect). Get phone notifications on your desktop, share clipboard in both directions, and transfer files without a cable.
Step 4: Back Up Your Config with dconf
Once you’re set up, back it up immediately — don’t let that effort go to waste:
# Back up all GNOME settings to a file
dconf dump / > ~/gnome-settings-backup.conf
# Restore on a new machine — one command, fully restored
dconf load / < ~/gnome-settings-backup.conf
# Or back up only the extensions section (lighter, lower risk)
dconf dump /org/gnome/shell/extensions/ > ~/extensions-config.conf
dconf load /org/gnome/shell/extensions/ < ~/extensions-config.conf
I push this backup file to a private git repo alongside my dotfiles. Every time I set up a new machine or reinstall Ubuntu, one command restores everything — saving roughly 30 minutes of manual setup.
Practical Tips Most People Don’t Know
Restart GNOME Shell Without Logging Out (X11 Only)
# Send SIGUSR1 signal to reload GNOME Shell — session stays intact
killall -3 gnome-shell
# Check whether you're running X11 or Wayland
echo $XDG_SESSION_TYPE
# Returns "x11" or "wayland"
Wayland doesn’t support this trick — you have to log out to reload the Shell. This is a major downside of Wayland when you’re debugging a crashing extension.
Debugging a Crashing Extension
Extension crashes are usually silent — no popup, no warning. The fastest way to see what happened:
# Watch the GNOME Shell journal log in real time
journalctl -f _COMM=gnome-shell
# Filter by a specific extension UUID
journalctl -f [email protected]
Setting a Theme for Just One App
Useful when you want to force dark mode for a specific app while GNOME is in light mode:
# Force dark theme when launching an app
GTK_THEME=Adwaita:dark gedit &
# Or add to .bashrc as an alias
alias gedit-dark='GTK_THEME=Adwaita:dark gedit'
Workflow After a Fresh Ubuntu Install
After reinstalling more times than I can count, here’s the workflow I’ve settled on:
- Install GNOME Tweaks → enable minimize/maximize buttons, adjust font scaling, enable dark theme
- Install Extensions Manager → install the 5 extensions above, configure each one
- Fine-tune with
gsettingsfor anything Tweaks doesn’t cover (animations, keybindings…) dconf dumpto back up everything, commit to your dotfiles repo
The first time takes about 45 minutes. The second time? 5 minutes — just restore from backup. That’s the real reason dconf is worth learning beyond what it appears to be: it’s not just a power user tool, it’s the only way to avoid starting from scratch every time you reinstall.

