Hyprland is a tiling Wayland Compositor. Unlike GNOME which bundles a compositor with a full desktop environment, Hyprland is just the compositor — you assemble the rest (panel, launcher, wallpaper, notifications) yourself from standalone tools.

It is known for smooth animations, fine-grained configuration, and a strong aesthetic — but requires significant setup effort.

Core Concepts

Tiling Window Management

Instead of floating windows you drag around, Hyprland automatically arranges windows to fill the screen without overlap:

One window:          Two windows:         Three windows:
┌──────────────┐     ┌──────┬───────┐     ┌──────┬───┬───┐
│              │     │      │       │     │      │   │   │
│   Terminal   │     │ Term │  Vim  │     │ Term │ A │ B │
│              │     │      │       │     │      │   │   │
└──────────────┘     └──────┴───────┘     └──────┴───┴───┘

When you open a new window, it splits the available space. When you close one, the others expand to fill the gap. Everything is keyboard-driven by default.

Workspaces

Hyprland has 10 workspaces (virtual desktops). Each workspace is an independent tiling layout.

  • Super + 1-9 — switch to workspace N
  • Super + Shift + 1-9 — move focused window to workspace N
  • Super + Scroll — cycle through workspaces

Floating Windows

Specific windows can be set to float (behave like normal draggable windows) via window rules:

windowrulev2 = float, class:^(org.gnome.Nautilus)$
windowrulev2 = float, title:^(Picture-in-Picture)$

Configuration

Hyprland is configured entirely through ~/.config/hypr/hyprland.conf. There is no GUI settings panel.

Important

If you log into a Hyprland session without a config file, you get a completely blank screen — no panel, no launcher, no way to open a terminal. You would need to switch TTY (Ctrl + Alt + F2) to recover. Always create a minimal config before starting your first session.

Minimal Config Structure

# Monitor layout
monitor=,preferred,auto,1
 
# Autostart
exec-once = waybar
exec-once = hyprpaper
 
# Key bindings
bind = SUPER, Return, exec, kitty          # Open terminal
bind = SUPER, Q, killactive               # Close window
bind = SUPER, 1, workspace, 1             # Switch workspace
bind = SUPER SHIFT, 1, movetoworkspace, 1 # Move window
 
# Window layout
general {
  gaps_in = 5
  gaps_out = 10
  border_size = 2
}
 
animations {
  enabled = true
}

Key Binding Syntax

bind = MODIFIER, KEY, ACTION, ARGS
bind = SUPER, Return, exec, kitty
bind = SUPER SHIFT, Q, exit             # Exit Hyprland
bind = SUPER, F, fullscreen
bind = SUPER, V, togglefloating

Ecosystem

Since Hyprland ships with nothing except the compositor, you build your desktop from these tools:

ToolRole
WaybarPanel / status bar
Rofi / WofiApp launcher
Hyprpaper / SwaybgWallpaper
Hyprlock / SwaylockScreen lock
HypridleIdle daemon (triggers lock)
Mako / DunstNotifications
Kitty / Ghostty / FootTerminal

Hyprland vs GNOME

GNOMEHyprland
Setup timeWorks immediatelyHours of config
Mouse-friendlyYesPossible but not the point
Keyboard-centricPartiallyFully
Floating windowsDefaultOptional (window rules)
Panel, launcher, etc.IncludedYou choose and configure each
Config formatGUI + dconfSingle text file
Animation qualityGoodExceptional
App compatibilityExcellentGood (some XWayland issues)
Learning curveLowHigh

XDG Desktop Portal

On Wayland, apps that need to access the camera, share the screen, or open a file picker must go through the XDG Desktop Portal — a D-Bus service that mediates between sandboxed apps and the compositor.

Hyprland requires its own portal implementation. Two packages are needed:

  • xdg-desktop-portal-hyprland — handles screen sharing
  • xdg-desktop-portal-gtk — fallback for camera access and file pickers

Note

Without the GTK portal as a fallback, camera access in Chrome/Chromium may not work even with PipeWire correctly configured. See Linux Audio for the PipeWire stack.

NixOS

On NixOS, configure portals declaratively:

xdg.portal = {
  enable = true;
  extraPortals = [
    pkgs.xdg-desktop-portal-hyprland
    pkgs.xdg-desktop-portal-gtk
  ];
  configPackages = [ pkgs.hyprland ];
};