The square markers, block meters and hard-cornered fills read as boxy next to the porthole. The desktop is now soft throughout: the porthole is the shape everything is built around and every smaller surface echoes it. - Theme gains radiusS / radiusM / radiusL. radiusL is frameRadius - padS, so anything inset padS inside one of the frame's curves is concentric with it. - P5Panel and Skew draw rounded rectangles (Geom.roundedRect) whenever they neither lean nor are chopped, which is always now; the polygon path is kept for shapes brought back on purpose. - Markers are dots; workspace pips, toggles, transport and media chips, notification actions and today's date are pills or discs; the slider handle is round. Meters are one continuous rounded line that glides to its level instead of a row of segments. - Album art is rounded with ClippingRectangle in the bar, the media popout and the dashboard. - Free-standing panels (launcher, ask) drop the corner brackets and take the frame radius. - Fix: a hovered notification's wash was a full-bleed square, so in the drawer's bottom corner it ran past the drawer's curve. It is inset by padS/2 and rounded by radiusL, which keeps it inside the curve. Hyprland: the discord special workspace and its window rule are gone, SUPER+S stays the only scratchpad, and SUPER+D now opens the dashboard (it was on SUPER+I). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
78 lines
3.4 KiB
Lua
78 lines
3.4 KiB
Lua
-- https://wiki.hypr.land/Configuring/Basics/Window-Rules/
|
|
--
|
|
-- Rules are evaluated top to bottom and the last match wins, so order matters.
|
|
-- Named rules are all evaluated before anonymous ones.
|
|
|
|
-- ==========================================
|
|
-- MATCHERS
|
|
-- ==========================================
|
|
-- Dialogs and utility apps that should float in the center
|
|
local DIALOG_TITLES = "^(Open Form|Open File|Select a File|Choose a file|Open Workspace|Choose Directory.*|Save As.*|Save File.*|branchdialog|pinentry-gtk-2|Confirm to replace files|File Operation Progress|Open Files.*|Anmelden.*|File Upload.*|TRuDI-Export laden)$"
|
|
-- pdfs-prompt is the Proton Drive search: io.narl.* is its GTK window, plain
|
|
-- pdfs-prompt the terminal `pdfs-prompt --fzf` spawns for itself. Every
|
|
-- terminal it knows how to start sets that same class, so this one rule holds
|
|
-- whichever is installed.
|
|
local DIALOG_CLASSES = "^(pavucontrol|blueman-manager|nm-connection-editor|org.pulseaudio.pavucontrol|io.narl.proton-drive-linux-prompt|pdfs-prompt)$"
|
|
|
|
local STEAM = "^(steam)$"
|
|
local GAMESCOPE = "^(gamescope)$"
|
|
|
|
-- ==========================================
|
|
-- GENERAL & FIXES
|
|
-- ==========================================
|
|
-- Ignore maximize requests from apps. You'll probably like this.
|
|
-- hl.window_rule({ match = { class = ".*" }, suppress_event = "maximize" })
|
|
|
|
-- Fix some dragging issues with XWayland
|
|
-- hl.window_rule({
|
|
-- match = { class = "^$", title = "^$", xwayland = true, float = true, fullscreen = false, pin = false },
|
|
-- no_focus = true,
|
|
-- })
|
|
hl.window_rule({ match = { class = "^$", title = "^$" }, no_blur = true })
|
|
|
|
-- ==========================================
|
|
-- FLOATING & CENTERED DIALOGS
|
|
-- ==========================================
|
|
-- Float, size, center, no blur — one rule per matcher instead of four.
|
|
for _, match in ipairs({ { title = DIALOG_TITLES }, { class = DIALOG_CLASSES } }) do
|
|
hl.window_rule({
|
|
match = match,
|
|
float = true,
|
|
size = { 800, 600 },
|
|
center = true,
|
|
no_blur = true,
|
|
})
|
|
end
|
|
|
|
-- ==========================================
|
|
-- WORKSPACE ASSIGNMENTS
|
|
-- ==========================================
|
|
-- hl.window_rule({ match = { class = "^(firefox)$" }, workspace = "1" })
|
|
-- hl.window_rule({ match = { class = "^(kitty)$" }, workspace = "2" })
|
|
-- hl.window_rule({ match = { class = "^(Code)$" }, workspace = "3" })
|
|
hl.window_rule({ match = { class = GAMESCOPE }, workspace = "1" })
|
|
|
|
-- Special workspaces
|
|
hl.window_rule({ match = { class = "^(Spotify|spotify)$" }, workspace = "special:virtual" })
|
|
|
|
-- ==========================================
|
|
-- STEAM & GAMING
|
|
-- ==========================================
|
|
-- hl.window_rule({ match = { class = STEAM, title = "^(Steam)$" }, workspace = "3 silent" })
|
|
|
|
-- Fixed sizes for specific Steam windows
|
|
hl.window_rule({ match = { class = STEAM, title = "^(Friends List)$" }, size = { 400, 800 } })
|
|
hl.window_rule({ match = { class = STEAM, title = "^(Steam Settings)$" }, size = { 1000, 800 } })
|
|
hl.window_rule({ match = { class = STEAM, title = "^(Add Non-Steam Game)$" }, size = { 1000, 800 } })
|
|
|
|
-- Float and disable blur for Steam windows that aren't the main window
|
|
hl.window_rule({
|
|
match = { class = STEAM, title = "negative:^(Steam)$" },
|
|
float = true,
|
|
no_blur = true,
|
|
-- center = true,
|
|
})
|
|
|
|
-- Allow tearing for games started with Gamescope
|
|
hl.window_rule({ match = { class = GAMESCOPE }, immediate = true })
|