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)