local workspace_map = { 'Home', 'Dev', 'Art', 'Gaming', 'Writing', } local function setup_monitors() toggle_laptop_monitor() 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 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', setup_monitors) hl.bind('switch:on:Lid Switch', setup_monitors) function set_laptop_workspace_to_monocle() local workspace = get_active_workspace() if not workspace then return end if is_laptop_screen_focused() then hl.workspace_rule { workspace = 'name:' .. tostring(workspace.name), layout = 'monocle' } end end hl.on('monitor.focused', set_laptop_workspace_to_monocle) hl.on('config.reloaded', set_laptop_workspace_to_monocle)