Fork the desktop off Omarchy as a self-contained system
This commit is contained in:
@@ -0,0 +1 @@
|
||||
o.window("^(1[p|P]assword)$", { no_screen_share = true, tag = "+floating-window" })
|
||||
@@ -0,0 +1,16 @@
|
||||
-- Battle.net launches under Proton; all its windows share class steam_app_battlenet.
|
||||
|
||||
-- The actual launcher: float-centered.
|
||||
o.window({ class = "^steam_app_battlenet$", title = "^Battle\\.net$" }, {
|
||||
float = true,
|
||||
center = true,
|
||||
size = { 1280, 800 },
|
||||
})
|
||||
|
||||
-- Installer: drop decorations and backdrop blur/shadow so the Blizzard chrome
|
||||
-- isn't framed by the WM.
|
||||
o.window({ class = "^steam_app_battlenet$", title = "^Battle\\.net Setup$" }, {
|
||||
decorate = false,
|
||||
no_blur = true,
|
||||
no_shadow = true,
|
||||
})
|
||||
@@ -0,0 +1,6 @@
|
||||
o.window("^(Bitwarden)$", { no_screen_share = true, tag = "+floating-window" })
|
||||
|
||||
o.window("chrome-nngceckbapebfimnlniiiahkandclblb-Default", {
|
||||
no_screen_share = true,
|
||||
tag = "+floating-window",
|
||||
})
|
||||
@@ -0,0 +1,12 @@
|
||||
-- Browser tags and styling.
|
||||
o.window("((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)", { tag = "+chromium-based-browser" })
|
||||
o.window("([fF]irefox|zen|librewolf)", { tag = "+firefox-based-browser" })
|
||||
o.window({ tag = "chromium-based-browser" }, { tag = "-default-opacity", tile = true, opacity = "1.0 0.985" })
|
||||
o.window({ tag = "firefox-based-browser" }, { tag = "-default-opacity", opacity = "1.0 0.985" })
|
||||
|
||||
-- Video apps: remove chromium browser tag so they don't get opacity applied.
|
||||
o.window("(^.+-youtube\\.com__.*$|^.+-app\\.zoom\\.us__wc_home.*$)", { tag = "-chromium-based-browser" })
|
||||
o.window("(^.+-youtube\\.com__.*$|^.+-app\\.zoom\\.us__wc_home.*$)", { tag = "-default-opacity" })
|
||||
|
||||
-- Hide screen sharing notification windows.
|
||||
o.window({ title = ".*is sharing.*" }, { workspace = "special silent" })
|
||||
@@ -0,0 +1,11 @@
|
||||
-- DaVinci Resolve window focus handling. Kept fully opaque: the default
|
||||
-- translucency distorts colour-critical grading work.
|
||||
o.window(".*[Rr]esolve.*", {
|
||||
float = true,
|
||||
stay_focused = true,
|
||||
tag = "-default-opacity",
|
||||
opacity = "1 1",
|
||||
})
|
||||
|
||||
o.window({ class = ".*[Rr]esolve.*", title = "^DaVinci Resolve( Studio)? - .+$" }, { fullscreen = true })
|
||||
o.window({ class = ".*[Rr]esolve.*", title = "^(DaVinci Resolve( Studio)? - .+|Project Manager)$" }, { stay_focused = false })
|
||||
@@ -0,0 +1 @@
|
||||
o.window("GeForceNOW", { idle_inhibit = "fullscreen" })
|
||||
@@ -0,0 +1,7 @@
|
||||
-- Hermes Desktop's frameless HUD manages its own geometry.
|
||||
o.window({ class = "^Hermes$", title = "^Hermes HUD$" }, {
|
||||
tag = "-default-opacity",
|
||||
float = true,
|
||||
border_size = 0,
|
||||
opacity = "1 1",
|
||||
})
|
||||
@@ -0,0 +1,2 @@
|
||||
-- Disable mouse focus (see https://github.com/basecamp/omarchy/pull/5183#issuecomment-4189299971).
|
||||
o.window("^(jetbrains-.*)$", { no_follow_mouse = true })
|
||||
@@ -0,0 +1,3 @@
|
||||
-- Float LocalSend and fzf file picker.
|
||||
o.window("(Share|localsend)", { float = true, center = true })
|
||||
o.window("localsend", { size = { 1100, 700 } })
|
||||
@@ -0,0 +1 @@
|
||||
o.window("com.moonlight_stream.Moonlight", { fullscreen = true, idle_inhibit = "fullscreen" })
|
||||
@@ -0,0 +1,14 @@
|
||||
-- Window and layer rules for the Blob Quickshell surfaces. The
|
||||
-- shell-wide bar / menu / popouts are layer-shell.
|
||||
|
||||
-- Keep the bar instant: no layer-shell fade/slide animation.
|
||||
hl.layer_rule({ match = { namespace = "blob-bar" }, no_anim = true, animation = "none" })
|
||||
|
||||
-- Launcher, image selector, emojis, clipboard overlays, and keyboard-driven
|
||||
-- panels should pop without compositor layer fades. Panels keep their own
|
||||
-- QML opacity transition for normal open/close, and skip it for panel handoff.
|
||||
hl.layer_rule({ match = { namespace = "^(blob-menu|blob-image-selector|blob-emojis|blob-clipboard|blob-keyboard-panel)$" }, no_anim = true, animation = "none" })
|
||||
|
||||
-- Dev gallery is the main shell workbench; open it maximized like
|
||||
-- SUPER+ALT+F so component previews have the whole workspace.
|
||||
o.window({ class = "^org.quickshell$", title = "^Blob shell – dev gallery$" }, { maximize = true })
|
||||
@@ -0,0 +1,24 @@
|
||||
-- Picture-in-picture overlays.
|
||||
o.window({ title = "(Picture.?in.?[Pp]icture)" }, { tag = "+pip" })
|
||||
o.window({ tag = "pip" }, {
|
||||
tag = "-default-opacity",
|
||||
float = true,
|
||||
pin = true,
|
||||
size = { 600, 338 },
|
||||
keep_aspect_ratio = true,
|
||||
border_size = 0,
|
||||
opacity = "1 1",
|
||||
move = { "(monitor_w-window_w-40)", "(monitor_h*0.04)" },
|
||||
})
|
||||
|
||||
-- Google Meet PiP uses the meeting title instead of "Picture-in-Picture".
|
||||
o.window({ tag = "chromium-based-browser", title = "^Meet - .+" }, {
|
||||
tag = "-default-opacity",
|
||||
float = true,
|
||||
pin = true,
|
||||
size = { 600, 338 },
|
||||
keep_aspect_ratio = true,
|
||||
border_size = 0,
|
||||
opacity = "1 1",
|
||||
move = { "(monitor_w-window_w-40)", "(monitor_h-window_h-40)" },
|
||||
})
|
||||
@@ -0,0 +1 @@
|
||||
o.window("qemu", { tag = "-default-opacity", opacity = "1 1" })
|
||||
@@ -0,0 +1,6 @@
|
||||
o.window("com.libretro.RetroArch", {
|
||||
fullscreen = true,
|
||||
tag = "-default-opacity",
|
||||
opacity = "1 1",
|
||||
idle_inhibit = "fullscreen",
|
||||
})
|
||||
@@ -0,0 +1,2 @@
|
||||
-- Remove the 1px border around the slurp region selection used by screenshots.
|
||||
hl.layer_rule({ match = { namespace = "selection" }, no_anim = true, animation = "none" })
|
||||
@@ -0,0 +1,4 @@
|
||||
o.window("steam", { float = true, idle_inhibit = "fullscreen" })
|
||||
o.window({ class = "steam", title = "Steam" }, { center = true, size = { 1100, 700 } })
|
||||
o.window("steam.*", { tag = "-default-opacity", opacity = "1 1" })
|
||||
o.window({ class = "steam", title = "Friends List" }, { size = { 460, 800 } })
|
||||
@@ -0,0 +1,54 @@
|
||||
-- Floating windows.
|
||||
o.window({ tag = "floating-window" }, { float = true })
|
||||
o.window({ tag = "floating-window" }, { center = true })
|
||||
o.window({ tag = "floating-window" }, { size = { 875, 600 } })
|
||||
|
||||
o.window(
|
||||
"(org.blob.btop|org.blob.terminal|org.blob.bash|org.codeberg.dnkl.foot|org.gnome.NautilusPreviewer|org.gnome.Evince|Blob|About|TUI.float|imv|mpv)",
|
||||
{
|
||||
tag = "+floating-window",
|
||||
}
|
||||
)
|
||||
|
||||
-- The portal only ever shows dialogs — file pickers, screen shares, permission
|
||||
-- prompts — so every one of its windows belongs in the floating treatment,
|
||||
-- whatever the app that asked for it titled it.
|
||||
o.window("xdg-desktop-portal-gtk", { tag = "+floating-window" })
|
||||
o.window({
|
||||
class = "(sublime_text|DesktopEditors|org.gnome.Nautilus)",
|
||||
title = "^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)",
|
||||
}, { tag = "+floating-window" })
|
||||
|
||||
-- The About fastfetch layout needs more columns than the standard float provides.
|
||||
-- This size only covers the first launch: blob-launch-about measures the
|
||||
-- rendered content, remembers the size that hugs it, and applies that as its own
|
||||
-- rule before every later launch.
|
||||
o.window("org.blob.about", { float = true })
|
||||
o.window("org.blob.about", { center = true })
|
||||
o.window("org.blob.about", { size = { 920, 480 } })
|
||||
|
||||
|
||||
-- Fullscreen screensaver.
|
||||
o.window("org.blob.screensaver", { fullscreen = true })
|
||||
o.window("org.blob.screensaver", { float = true })
|
||||
o.window("org.blob.screensaver", { animation = "slide" })
|
||||
|
||||
-- No transparency on media windows.
|
||||
o.window(
|
||||
"^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$",
|
||||
{
|
||||
tag = "-default-opacity",
|
||||
}
|
||||
)
|
||||
o.window(
|
||||
"^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$",
|
||||
{
|
||||
opacity = "1 1",
|
||||
}
|
||||
)
|
||||
|
||||
-- Popped window rounding.
|
||||
o.window({ tag = "pop" }, { rounding = 8 })
|
||||
|
||||
-- Prevent idle while open.
|
||||
o.window({ tag = "noidle" }, { idle_inhibit = "always" })
|
||||
@@ -0,0 +1,2 @@
|
||||
-- Prevent Telegram from stealing focus on new messages.
|
||||
o.window("org.telegram.desktop", { focus_on_activate = false })
|
||||
@@ -0,0 +1,8 @@
|
||||
-- Define terminal tag so themes and bindings can single terminals out. Blob
|
||||
-- launches TUIs and its own terminal windows under dedicated app-ids
|
||||
-- (org.blob.btop, org.blob.terminal, TUI.float, ...), so match those too.
|
||||
-- The class is matched in full, so foot's other app-id needs spelling out.
|
||||
o.window(
|
||||
"(Alacritty|kitty|com.mitchellh.ghostty|foot|org\\.codeberg\\.dnkl\\.foot|wezterm|org\\.blob\\..*|TUI\\..*)",
|
||||
{ tag = "+terminal" }
|
||||
)
|
||||
@@ -0,0 +1,25 @@
|
||||
-- The 8:9 portrait presets scale from monitor height so they occupy the same
|
||||
-- share of anything from a 1080p monitor to a scaled 6K display.
|
||||
o.window("^WebcamOverlay-small$", {
|
||||
size = { "(monitor_h*4/25)", "(monitor_h*9/50)" },
|
||||
move = { "(monitor_w-monitor_h*4/25-40)", "(monitor_h-monitor_h*9/50-40)" },
|
||||
})
|
||||
o.window("^WebcamOverlay-medium$", {
|
||||
size = { "(monitor_h*2/9)", "(monitor_h/4)" },
|
||||
move = { "(monitor_w-monitor_h*2/9-40)", "(monitor_h-monitor_h/4-40)" },
|
||||
})
|
||||
o.window("^WebcamOverlay-large$", {
|
||||
size = { "(monitor_h*3/10)", "(monitor_h*27/80)" },
|
||||
move = { "(monitor_w-monitor_h*3/10-40)", "(monitor_h-monitor_h*27/80-40)" },
|
||||
})
|
||||
|
||||
-- The dedicated app id keeps this out of mpv's generic centered floating rules,
|
||||
-- so the camera appears at its final corner position.
|
||||
o.window({ class = "^WebcamOverlay-(small|medium|large)$", title = "^WebcamOverlay$" }, {
|
||||
tag = "-default-opacity",
|
||||
float = true,
|
||||
pin = true,
|
||||
no_initial_focus = true,
|
||||
no_dim = true,
|
||||
opacity = "1 1",
|
||||
})
|
||||
Reference in New Issue
Block a user