From de178fa25a03c947ba165e8909bfd9ca279dbaec Mon Sep 17 00:00:00 2001 From: Chris Date: Sat, 27 Jun 2026 17:04:05 +0100 Subject: [PATCH] Figuring out workspaces --- .config/hypr/apps.lua | 20 ++++------- .config/hypr/workspaces.lua | 70 +++++++++++++++++++++++-------------- .config/waybar/config.jsonc | 16 +++++++-- 3 files changed, 62 insertions(+), 44 deletions(-) diff --git a/.config/hypr/apps.lua b/.config/hypr/apps.lua index 7bd829d..927d0c7 100644 --- a/.config/hypr/apps.lua +++ b/.config/hypr/apps.lua @@ -176,7 +176,7 @@ hl.window_rule({ hl.window_rule({ name = "retroarch-fullscreen", fullscreen = true, - workspace = 5, + workspace = "name:Gaming_1", tag = "-default-opacity", opacity = "1 1", idle_inhibit = "fullscreen", @@ -217,26 +217,18 @@ hl.window_rule({ -- Position drawing hl.window_rule({ name = "krita-drawing", - workspace = 5, + workspace = "name:Art_1", tag = "-default-opacity", opacity = "1 1", match = { class = "(krita)", }, }) --- Position TV -hl.window_rule({ - name = "tv-apps", - workspace = 7, - match = { - class = "(chrome-youtube.com__-Default|chrome-netflix.com__-Default)", - }, -}) -- Float Steam hl.window_rule({ name = "steam-float", float = true, - workspace = 7, + workspace = "name:Gaming_1", idle_inhibit = "fullscreen", match = { class = "steam", @@ -268,16 +260,16 @@ hl.window_rule({ }) -- Float Lunar Client hl.window_rule({ - name = "lunar-client-float", + name = "atlauncher-float", float = true, - workspace = 7, + workspace = "name:Gaming_1", center = true, size = { 1100, 700 }, tag = "-default-opacity", opacity = "1 1", idle_inhibit = "fullscreen", match = { - class = "lunarclient", + class = "atlauncher", }, }) -- Floating windows diff --git a/.config/hypr/workspaces.lua b/.config/hypr/workspaces.lua index 4e58081..8f88a8a 100644 --- a/.config/hypr/workspaces.lua +++ b/.config/hypr/workspaces.lua @@ -6,36 +6,52 @@ local workspace_map = { "Writing", } -local monitors = hl.get_monitors() +local monitor_binds = {} --- Move active window to a workspace with SUPER + SHIFT + [1-5] -for i = 1, 5 do - hl.workspace_rule({ - workspace = tostring((i * 2) - 1), - monitor = monitors[1].name, - }) +local function setup_monitors() + -- Clear old binds + for _, bind in ipairs(monitor_binds) do + hl.unbind(bind) + end + monitor_binds = {} - if monitors[2] then - hl.workspace_rule({ - workspace = tostring(i * 2), - monitor = monitors[2].name, - }) + local monitors = hl.get_monitors() + local monitor_count = #monitors - hl.bind( - "SUPER + code:1" .. (i - 1), - hl.dsp.focus({ workspace = tostring(i * 2) }), - { description = "Switch to workspace " .. workspace_map[i] } + -- Move active window to a workspace with SUPER + SHIFT + [1-5] + for i = 1, 5 do + for j = monitor_count, 1, -1 do + local monitor = monitors[j] + local workspace_id = "name:" .. workspace_map[i] .. "_" .. j + hl.notification.create({ text = workspace_id, duration = 2000 }) + hl.workspace_rule({ + workspace = tostring(workspace_id), + monitor = monitor.name, + }) + + table.insert( + monitor_binds, + hl.bind("SUPER + code:1" .. (i - 1), function() + hl.dsp.focus({ workspace = workspace_id }) + hl.notification.create({ text = workspace_id, duration = 2000 }) + end, { description = "Switch to workspace " .. workspace_map[i] }) + ) + end + + table.insert( + monitor_binds, + hl.bind("SUPER + SHIFT + code:1" .. (i - 1), function() + local active_workspace = hl.get_active_workspace() + local active_workspace_name = active_workspace.name + local monitor_suffix = active_workspace_name:match("_(%d+)$") or "1" + local new_workspace = "name:" .. workspace_map[i] .. "_" .. monitor_suffix + hl.notification.create({ text = new_workspace, duration = 2000 }) + hl.dispatch(hl.dsp.window.move({ workspace = new_workspace, follow = false })) + end, { description = "Move window to workspace " .. workspace_map[i] }) ) end - hl.bind( - "SUPER + code:1" .. (i - 1), - hl.dsp.focus({ workspace = tostring((i * 2) - 1) }), - { description = "Switch to workspace" .. i } - ) - - hl.bind("SUPER + SHIFT + code:1" .. (i - 1), function() - local active_workspace = hl.get_active_workspace() - local new_workspace = (i * 2) - (active_workspace.id % 2) - hl.dispatch(hl.dsp.window.move({ workspace = tostring(new_workspace), follow = false })) - end, { description = "Move window to workspace " .. workspace_map[i] }) end + +hl.on("monitor.added", setup_monitors) +hl.on("monitor.removed", setup_monitors) +hl.on("config.reloaded", setup_monitors) diff --git a/.config/waybar/config.jsonc b/.config/waybar/config.jsonc index 855f731..111acad 100644 --- a/.config/waybar/config.jsonc +++ b/.config/waybar/config.jsonc @@ -29,11 +29,21 @@ "8": "", "9": "󱚍", "10": "󱚍", + "name:Home_1": "", + "name:Dev_1": "", + "name:Art_1": "", + "name:Gaming_1": "", + "name:Writing_1": "󱚍", + "name:Home_2": "", + "name:Dev_2": "", + "name:Art_2": "", + "name:Gaming_2": "", + "name:Writing_2": "󱚍", }, "persistent-workspaces": { - "eDP-1": [1, 3, 5, 7, 9], - "DP-1": [1, 3, 5, 7, 9], - "DP-2": [2, 4, 6, 8, 10] + "eDP-1": ["name:Home_1", "name:Dev_1", "name:Art_1", "name:Gaming_1", "name:Writing_1"], + "DP-1": ["name:Home_1", "name:Dev_1", "name:Art_1", "name:Gaming_1", "name:Writing_1"], + "DP-2": ["name:Home_2", "name:Dev_2", "name:Art_2", "name:Gaming_2", "name:Writing_2"], } }, "custom/station": {