2026-08-24 10:17:20 -05:00
|
|
|
-- Learn how to configure Hyprland: https://wiki.hypr.land/Configuring/Start/
|
|
|
|
|
|
|
|
|
|
-- Omarchy's bootstrap keeps path setup out of this user config.
|
|
|
|
|
dofile((os.getenv("OMARCHY_PATH") or "/usr/share/omarchy") .. "/default/hypr/bootstrap.lua")
|
|
|
|
|
|
|
|
|
|
-- Disable all Omarchy default bindings. Add your own in hypr/bindings.lua.
|
|
|
|
|
-- omarchy_default_bindings = false
|
|
|
|
|
--
|
|
|
|
|
-- Or disable only bindings for Omarchy's preinstalled apps/web apps while
|
|
|
|
|
-- keeping core window-manager bindings:
|
|
|
|
|
-- omarchy_preinstalled_bindings = false
|
|
|
|
|
|
|
|
|
|
-- Load Omarchy defaults.
|
|
|
|
|
require("default.hypr.omarchy")
|
|
|
|
|
|
|
|
|
|
-- Put your personal overrides in these files. They're loaded after Omarchy's
|
|
|
|
|
-- defaults so package updates can improve the defaults without rewriting your
|
|
|
|
|
-- ~/.config/hypr files.
|
|
|
|
|
require("hypr.monitors")
|
|
|
|
|
require("hypr.input")
|
|
|
|
|
require("hypr.bindings")
|
|
|
|
|
require("hypr.looknfeel")
|
|
|
|
|
require("hypr.autostart")
|
|
|
|
|
|
|
|
|
|
-- Toggle config flags dynamically.
|
|
|
|
|
require("default.hypr.toggles")
|
|
|
|
|
|
|
|
|
|
-- Add any other personal Hyprland configuration below.
|
|
|
|
|
-- o.window("qemu", { workspace = "5" })
|
2026-08-28 14:14:20 -04:00
|
|
|
|
|
|
|
|
-- Pin workspaces to monitors. Matched on EDID description for the external
|
|
|
|
|
-- display so it survives landing on a different DP connector after re-docking.
|
|
|
|
|
hl.workspace_rule({ workspace = "3", monitor = "desc:Apple Computer Inc StudioDisplay 0x984262A7" })
|
|
|
|
|
hl.workspace_rule({ workspace = "4", monitor = "eDP-1" })
|
2026-09-21 16:34:26 -04:00
|
|
|
hl.workspace_rule({ workspace = "5", monitor = "eDP-1" })
|
2026-08-28 14:14:20 -04:00
|
|
|
|
|
|
|
|
-- Always open these apps on a fixed workspace and follow them there. Classes
|
|
|
|
|
-- come from `hyprctl clients` -- the desktop files' StartupWMClass hints
|
|
|
|
|
-- disagree with reality for Beeper (claims BeeperTexts, actually reports
|
|
|
|
|
-- Beeper). Add " silent" to a workspace prop to place a window without
|
|
|
|
|
-- switching the view to it.
|
|
|
|
|
o.window([[^brave-www\.tldraw\.com__-Default$]], { workspace = "3" })
|
2026-08-29 17:40:52 -04:00
|
|
|
|
2026-09-21 16:34:26 -04:00
|
|
|
-- tldraw-offline gets workspace 5 to itself on the laptop panel, fullscreen.
|
|
|
|
|
o.window([[^tldraw-offline$]], { workspace = "5", fullscreen = true })
|
|
|
|
|
|
|
|
|
|
-- Scratch workspaces, toggled by ~/.local/bin/omarchy-toggle-scratch, which
|
|
|
|
|
-- also starts any resident that is missing and picks the monitor. Pinning
|
|
|
|
|
-- the residents here means they land on their workspace no matter who starts
|
|
|
|
|
-- them; "silent" leaves the reveal to the script. Under the master layout the
|
|
|
|
|
-- first window to appear takes the master slot; the rest stack beside it.
|
|
|
|
|
--
|
|
|
|
|
-- SUPER + A / SUPER + CTRL + S: Claude Desktop + kitty/herdr, Studio Display.
|
|
|
|
|
o.window([[^com\.anthropic\.Claude$]], { workspace = "special:scratchpad silent" })
|
2026-08-29 17:40:52 -04:00
|
|
|
o.window([[^kitty-herdr$]], { workspace = "special:scratchpad silent" })
|
2026-09-21 16:34:26 -04:00
|
|
|
-- SUPER + CTRL + ALT + E / M: Fastmail and Beeper, each alone on the
|
|
|
|
|
-- focused monitor.
|
|
|
|
|
o.window([[^com\.fastmail\.Fastmail$]], { workspace = "special:fastmail silent" })
|
|
|
|
|
o.window([[^Beeper$]], { workspace = "special:beeper silent" })
|
|
|
|
|
-- SUPER + CTRL + ALT + Y / SUPER + SHIFT + Y: the YouTube web app. Chromium
|
|
|
|
|
-- derives the class from the app URL and the host spelling has varied
|
|
|
|
|
-- (youtube.com vs www.youtube.com) once a video plays, so match the family.
|
|
|
|
|
-- Its picture-in-picture overlay shares the class; the "negative:" title
|
|
|
|
|
-- match keeps it out so Omarchy's pip rule (float + pin) still applies.
|
|
|
|
|
-- Rule regexes are RE2 full matches: no lookahead, and a pattern must cover
|
|
|
|
|
-- the whole string.
|
|
|
|
|
o.window(
|
|
|
|
|
{ class = [[brave-(www\.)?youtube\.com__.*]], title = [[negative:.*Picture.?in.?[Pp]icture.*]] },
|
|
|
|
|
{ workspace = "special:youtube silent" }
|
|
|
|
|
)
|