hyprland.md
866 tokens · o200k_base · 3,393 bytes
Hyprland Configuration
Read this before changing keybindings, monitors, window rules, or any other Hyprland (window manager) configuration.
Omarchy configures Hyprland in Lua. User files are loaded after Omarchy's defaults, so overrides go here:
~/.config/hypr/
├── hyprland.lua # Main config (loads Omarchy defaults, then user files)
├── bindings.lua # Keybindings
├── monitors.lua # Display configuration
├── input.lua # Keyboard/mouse settings
├── looknfeel.lua # Appearance (gaps, borders, animations)
├── autostart.lua # Startup applications
├── hyprsunset.conf # Night light / blue light filter
└── xdph.conf # Screen sharing / desktop portal
Key behaviors (the .lua files):
- Hyprland auto-reloads on config save (no restart needed for most changes)
- Use
hyprctl reloadto force reload - After ANY Hyprland Lua config change, validate with
hyprctl reloadfollowed byhyprctl configerrors - If
hyprctl configerrorsreports errors, address them and rerun validation until clean or until a real blocker is identified - Use
omarchy refresh hyprlandto reset the Lua config files to defaults
The two .conf files are read by separate processes, so hyprctl neither
applies nor validates them:
hyprsunset.conf(night light): apply changes withomarchy restart hyprsunset; reset withomarchy refresh hyprsunsetxdph.conf(screen-sharing portal): applies when the portal restarts, e.g. on next login
Keybindings
Edit ~/.config/hypr/bindings.lua. Format:
o.bind("SUPER + SHIFT + R", "SSH", "alacritty -e ssh your-server")
o.bind("SUPER + B", "Browser", { launch = "chromium" }) -- launch wraps with uwsm-app
View current bindings: omarchy menu keybindings --print
IMPORTANT: When re-binding an existing key:
- First check existing bindings:
omarchy menu keybindings --print - If the key is already bound, use
o.rebind(...)to remove the existing binding and add its replacement. It takes the same arguments aso.bind(...). - Inform the user what the key was previously bound to
Example - rebinding SUPER+F (which is bound to fullscreen by default):
-- Replace SUPER+F (was: fullscreen) with the file manager.
o.rebind("SUPER + F", "File manager", { launch = "nautilus" })
Tell the user which action was replaced. Use hl.unbind(...) to remove a binding without replacing it.
Display/Monitors
Edit ~/.config/hypr/monitors.lua. Format:
hl.monitor({ output = "eDP-1", mode = "1920x1080@60", position = "0x0", scale = 1 })
hl.monitor({ output = "HDMI-A-1", mode = "2560x1440@144", position = "1920x0", scale = 1 })
List monitors and supported modes: hyprctl monitors all
Window Rules
CRITICAL: Hyprland window rules syntax changes frequently between versions.
Before writing ANY window rules, you MUST fetch the current documentation from the official Hyprland wiki:
DO NOT rely on cached or memorized window rule syntax. The format has changed multiple times and using outdated syntax will cause errors or unexpected behavior.
Window rules go in ~/.config/hypr/hyprland.lua or a required Lua module. Prefer Omarchy's o.window(match, rules) helper — see examples in $OMARCHY_PATH/default/hypr/windows.lua.
Referenced from SKILL.md
Source excerpt starting at line 44.- [`hyprland.md`](hyprland.md) - keybindings, monitors, window rules, and other Hyprland config- [`plugins.md`](plugins.md) - the Omarchy shell: bar layout, widgets, plugins, idle behavior
Source excerpt starting at line 155.Hyprland config lives in `~/.config/hypr/` — see [`hyprland.md`](hyprland.md).The Omarchy shell (bar, notifications, plugins, idle) is configured in