109 lines
3.5 KiB
Lua
109 lines
3.5 KiB
Lua
local workspace_map = {
|
|
'Home',
|
|
'Dev',
|
|
'Art',
|
|
'Gaming',
|
|
'Writing',
|
|
}
|
|
|
|
local function setup_monitors()
|
|
local monitors = hl.get_monitors()
|
|
local monitor_count = #monitors
|
|
|
|
-- Move active window to a workspace with SUPER + SHIFT + [1-5]
|
|
for i = 1, #workspace_map do
|
|
for j = monitor_count, 1, -1 do
|
|
local monitor = monitors[j]
|
|
-- local workspace_id = "name:" .. workspace_map[i] .. "_" .. j
|
|
local workspace_id = (i - 1) * monitor_count + j
|
|
local workspace_name = workspace_map[i] .. '_' .. j
|
|
hl.workspace_rule {
|
|
-- workspace = (i - 1) * monitor_count + j,
|
|
-- default_name = workspace_name,
|
|
workspace = 'name:' .. workspace_name,
|
|
monitor = monitor.name,
|
|
default = i == 1,
|
|
}
|
|
|
|
hl.bind(
|
|
'SUPER + code:1' .. (i - 1),
|
|
hl.dsp.focus { workspace = 'name:' .. workspace_name },
|
|
{ description = 'Switch to workspace ' .. workspace_map[i] }
|
|
)
|
|
end
|
|
|
|
hl.bind('SUPER + SHIFT + code:1' .. (i - 1), function()
|
|
local active_window = hl.get_active_window()
|
|
local active_workspace = active_window.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
|
|
-- local new_workspace = (i - 1) * monitor_count + active_workspace.id
|
|
hl.dispatch(hl.dsp.window.move { workspace = new_workspace, window = active_window, follow = false })
|
|
end, { description = 'Move window to workspace ' .. workspace_map[i] })
|
|
end
|
|
|
|
-- A hack to move to the Home workspace when Hyprland first loads
|
|
for j = monitor_count, 1, -1 do
|
|
if hl.get_workspaces()[j].id > 0 and monitor_count == 2 then
|
|
hl.dispatch(hl.dsp.focus { workspace = 'name:Home_' .. j })
|
|
end
|
|
for k, window in pairs(hl.get_windows { workspace = j }) do
|
|
hl.dispatch(hl.dsp.window.move { window = window, workspace = 'name:Home_1', follow = true })
|
|
end
|
|
end
|
|
end
|
|
|
|
hl.on('monitor.added', setup_monitors)
|
|
hl.on('monitor.removed', setup_monitors)
|
|
hl.on('config.reloaded', setup_monitors)
|
|
|
|
hl.bind('switch:off:Lid Switch', function()
|
|
hl.monitor {
|
|
output = 'desc:BOE NE160QDM-NZ6',
|
|
disabled = false,
|
|
}
|
|
setup_monitors()
|
|
end)
|
|
|
|
hl.bind('switch:on:Lid Switch', function()
|
|
hl.monitor {
|
|
output = 'desc:BOE NE160QDM-NZ6',
|
|
disabled = true,
|
|
}
|
|
setup_monitors()
|
|
end)
|
|
|
|
hl.on('monitor.focused', function()
|
|
local workspace = hl.get_active_workspace()
|
|
if hl.get_active_special_workspace() then
|
|
workspace = hl.get_active_special_workspace()
|
|
end
|
|
if not workspace then
|
|
return
|
|
end
|
|
|
|
local monitor = hl.get_active_monitor()
|
|
|
|
if monitor.description == 'BOE NE160QDM-NZ6' then
|
|
hl.workspace_rule { workspace = 'name:' .. tostring(workspace.name), layout = 'monocle' }
|
|
end
|
|
end)
|
|
|
|
hl.on('config.reloaded', function()
|
|
local workspace = hl.get_active_workspace()
|
|
if hl.get_active_special_workspace() then
|
|
workspace = hl.get_active_special_workspace()
|
|
end
|
|
if not workspace then
|
|
return
|
|
end
|
|
|
|
local monitor = hl.get_active_monitor()
|
|
|
|
if monitor.description == 'BOE NE160QDM-NZ6' then
|
|
hl.workspace_rule { workspace = 'name:' .. tostring(workspace.name), layout = 'monocle' }
|
|
end
|
|
end)
|
|
|