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:
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.
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-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.