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:

  1. All running windows shrink into thumbnails (Exposé-style)
  2. A search bar appears at the top — searches apps, files, settings, and even does math
  3. 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 false

Extensions

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:

ExtensionPurpose
Just PerfectionResize panel, hide/show elements, adjust padding
Blur My ShellBlur effects on panel and overview background
AppIndicatorShows legacy tray icons (Slack, Discord) in the panel
VitalsCPU, memory, temperature, network stats in the panel
Arc MenuReplaces Activities with a traditional app launcher dropdown
CaffeinePrevents screen sleep/lock

Extensions are managed via:

  • gnome-extensions CLI: 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-editor

Keyboard Shortcuts

ShortcutAction
SuperActivities overview
Super + AApp grid
Super + HHide (minimize) window
Super + ↑Maximize window
Super + ←/→Snap window to half screen
Super + LLock screen
Alt + F4Close window
Super + TabSwitch between apps
`Super + “Switch between windows of same app