GNOME (GNU Network Object Model Environment) is a desktop environment for Linux. It bundles a Compositor (Mutter), a shell (the panel and overview), and a suite of apps (Files, Settings, Calendar, etc.) into a cohesive desktop. See also KDE Plasma
Architecture
GNOME Shell (JS-based UI: panel, overview, notifications)
↑ runs on top of
Mutter (the Wayland compositor + window manager)
↑ sits above
Linux kernel / display drivers
Mutter itself is written in C. GNOME Shell is written in JavaScript (GJS) and runs as a plugin inside the Mutter process. This is why GNOME Shell extensions are also written in JavaScript — they run in the same JS context and can deeply modify the shell’s behavior.
Important
Mutter (the compositor) = C. GNOME Shell (the UI on top) = JavaScript. They run in the same process, but they are different layers.
The Panel
The top bar has three zones:
[Activities][App indicators] [Clock] [Wifi · Battery · Volume ▾]
LEFT CENTER RIGHT
- Left: Activities button, optional app menu, left-anchored extensions (e.g. Vitals)
- Center: Clock. Click it to open the notification panel and calendar.
- Right: System indicators. Click here for the power/restart menu.
Important
Restart and shutdown are in the top-right system menu, not the top-left. Click the right side of the panel to reveal the dropdown, then click the power icon.
Activities Overview
Pressing Super or clicking the Activities button opens the overview:
- All running windows shrink into thumbnails (Exposé-style)
- A search bar appears at the top — searches apps, files, settings, and even does math
- Scroll down (or press Super again) to reach the full app grid
Tip
The overview is not minimizing your windows. They are still running. It is just a way to see and switch between them.
The hot corner — moving the mouse to the top-left without clicking — also triggers the overview by default. It can be disabled:
gsettings set org.gnome.desktop.interface enable-hot-corners falseExtensions
GNOME Shell can be extended with JavaScript plugins that run inside the shell process. They can add panel widgets, change behaviors, restyle the UI, or intercept inputs.
Extensions are enabled per-user and tied to a specific GNOME version — they often break after GNOME updates.
Common extensions:
| Extension | Purpose |
|---|---|
| Just Perfection | Resize panel, hide/show elements, adjust padding |
| Blur My Shell | Blur effects on panel and overview background |
| AppIndicator | Shows legacy tray icons (Slack, Discord) in the panel |
| Vitals | CPU, memory, temperature, network stats in the panel |
| Arc Menu | Replaces Activities with a traditional app launcher dropdown |
| Caffeine | Prevents screen sleep/lock |
Extensions are managed via:
gnome-extensionsCLI:gnome-extensions list --enabled- GNOME Extensions app
- On NixOS: declaratively via dconf profiles
GSettings and dconf
All GNOME settings — themes, extension preferences, keyboard shortcuts, privacy settings — are stored in dconf, a binary key-value database. GSettings is the API used to read/write these values.
# Read a setting
gsettings get org.gnome.shell enabled-extensions
# Write a setting
gsettings set org.gnome.desktop.interface enable-hot-corners false
# Browse all settings interactively
dconf-editorKeyboard Shortcuts
| Shortcut | Action |
|---|---|
Super | Activities overview |
Super + A | App grid |
Super + H | Hide (minimize) window |
Super + ↑ | Maximize window |
Super + ←/→ | Snap window to half screen |
Super + L | Lock screen |
Alt + F4 | Close window |
Super + Tab | Switch between apps |
| `Super + “ | Switch between windows of same app |