-- 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" }) -- 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" }) hl.workspace_rule({ workspace = "5", monitor = "eDP-1" }) -- 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" }) -- 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" }) o.window([[^kitty-herdr$]], { workspace = "special:scratchpad silent" }) -- 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" } )