Hyprland Session
The cachy-hyprland and arch-hyprland variants ship Hyprland with a session built around it. Hyprland has no default desktop of its own, so cache22 supplies one: a bar, a launcher, a notification daemon, a lock screen, and a set of keybindings that work on first login. None of it is fixed in place. Everything below is a config file you can override from your home directory.
This page is about the parts cache22 chose. For what the options mean, the Hyprland wiki is the reference.
What is in the session
| Piece | Package | Notes |
|---|---|---|
| Compositor | hyprland |
Session entries for both plain Hyprland and uwsm. |
| Greeter | plasma-login-manager |
The same greeter the KDE variants use. |
| Bar | waybar |
Config in /etc/xdg/waybar/. |
| Launcher | rofi |
rofi -show drun, bound to SUPER+R. |
| Notifications | swaync |
Control center on SUPER+N. |
| Lock screen | hyprlock |
Driven by hypridle and loginctl lock-session. |
| Idle | hypridle |
Dim at 5 min, lock at 10, screen off at 15. |
| Wallpaper | hyprpaper |
Points at /usr/share/hypr/wall0.png. |
| Terminal | kitty |
SUPER+Q. |
| Files | thunar |
With gvfs, tumbler thumbnails, archive plugin. |
| Screenshots | hyprshot, grim, slurp, swappy |
SUPER+SHIFT+S for a region. |
| Clipboard history | cliphist, wl-clipboard |
SUPER+W. |
| Portals | xdg-desktop-portal-hyprland, -gtk |
Screen sharing and file dialogs. |
| Polkit agent | hyprpolkitagent |
Started as a systemd user service. |
| Tray | network-manager-applet, blueman |
Network and Bluetooth. |
| Displays | nwg-displays |
GUI monitor layout, writes Hyprland monitor lines. |
| Theming | nwg-look, qt5ct, qt6ct, kvantum |
GTK and Qt appearance. |
The gaming stack (Steam, Lutris, gamescope, MangoHud, Sunshine) and the NVIDIA driver are present, same as the other desktop variants. The SteamOS-style gamescope session switcher is not: it is coupled to KDE autologin. See Gamescope Mode.
Default keybindings
SUPER is the modifier.
| Keys | Action |
|---|---|
| SUPER+Q | Terminal |
| SUPER+E | File manager |
| SUPER+B | Browser |
| SUPER+R | Launcher |
| SUPER+C | Close window |
| SUPER+M | Exit Hyprland |
| SUPER+V | Toggle floating |
| SUPER+F | Fullscreen |
| SUPER+P | Pseudotile |
| SUPER+J | Toggle split direction |
| SUPER+L | Lock screen |
| SUPER+N | Notification center |
| SUPER+W | Clipboard history |
| SUPER+SHIFT+S | Screenshot a region to the clipboard |
| Screenshot the whole output | |
| SUPER+arrows | Move focus |
| SUPER+SHIFT+arrows | Move the window |
| SUPER+1..0 | Switch workspace |
| SUPER+SHIFT+1..0 | Send window to workspace |
| SUPER+S | Toggle the scratchpad workspace |
| SUPER+ALT+S | Send window to the scratchpad |
| SUPER+drag | Move (left button) or resize (right button) |
Volume, brightness, and media keys are bound to wpctl, brightnessctl, and playerctl.
Making it yours
/usr is read-only, but none of the session config lives there. Hyprland and its tools search $XDG_CONFIG_HOME/hypr/, then ~/.config/hypr/, then /etc/xdg/hypr/, and stop at the first file they find. cache22 ships the last one, so anything you put in your home directory wins:
mkdir -p ~/.config/hypr
cp /etc/xdg/hypr/hyprland.conf ~/.config/hypr/
Edit, then reload with hyprctl reload. The same applies to hypridle.conf, hyprlock.conf, and hyprpaper.conf.
Waybar works the same way, from /etc/xdg/waybar/ to ~/.config/waybar/:
mkdir -p ~/.config/waybar
cp /etc/xdg/waybar/config.jsonc /etc/xdg/waybar/style.css ~/.config/waybar/
Two things worth knowing:
- Hyprland reads
hyprland.luaas well ashyprland.conf, and a Lua config found anywhere in the search path beats a.conffound anywhere. cache22 ships.conf. If you write a Lua config, it takes over completely; do not expect the two to merge. - Hyprland does not run XDG autostart entries (
/etc/xdg/autostart/*.desktop). Anything that would normally start that way, including the tray applets and fcitx5, is launched byexec-oncelines inhyprland.conf. If you replace the file with your own, carry those lines across or those pieces will not start.
Whole dotfile collections (HyDE, end-4, ML4W and so on) install into ~/.config and work here as they do on any Arch system. They may expect packages the image does not carry; a Flatpak or a Distrobox container covers most of that. Baking extra packages into the image itself means forking.
Keyboard layout
The config sets kb_layout = us. Hyprland does not read the console or X11 keymap, so change it in your own copy of hyprland.conf:
input {
kb_layout = de
# or several, with a switch key:
# kb_layout = us,ru
# kb_options = grp:alt_shift_toggle
}
Session entries at the greeter
Two Hyprland entries appear in the greeter’s session list:
- Hyprland. The compositor started directly.
- Hyprland (uwsm-managed). Started through uwsm, which puts the session under the systemd user manager so
graphical-session.targetand user units behave the way they do on a full desktop environment.
Both use the same hyprland.conf. The plain entry is the tested default; uwsm is there for people who want the systemd integration.
Suspend
hypridle dims, locks, and blanks the screen, but does not suspend. cache22 runs on servers, laptops, and desktops from one image, and an unwanted suspend on a machine doing work is worse than a screen that stays on. Add it yourself in ~/.config/hypr/hypridle.conf:
listener {
timeout = 1800
on-timeout = systemctl suspend
}