Compare commits

..

3 Commits

Author SHA1 Message Date
sam_oneal 2d5a4e9f4c updated waybar power menu list 2026-09-07 20:13:04 -06:00
sam_oneal 8d2aa49668 updated to latest submodule 2026-09-07 20:01:50 -06:00
sam_oneal f60b7e263b hyprland: SUPER+Right creates a new workspace past the end of a monitor
m+1/m-1 only cycle existing workspaces on the active monitor and wrap at
the edges, so SUPER+Right never created a workspace. Replace them with a
Lua helper: advancing past the last workspace on the monitor now creates
a fresh (empty) workspace there; going before the first wraps to the
monitor's last workspace.
2026-09-07 18:26:27 -06:00
10 changed files with 95 additions and 83 deletions
+37 -5
View File
@@ -44,11 +44,43 @@ hl.bind(mainMod .. " + L", hl.dsp.focus({ direction = "r" }), { desc = "Focus ri
hl.bind(mainMod .. " + K", hl.dsp.focus({ direction = "u" }), { desc = "Focus up" })
hl.bind(mainMod .. " + J", hl.dsp.focus({ direction = "d" }), { desc = "Focus down" })
-- Cycle workspaces on the active monitor with mainMod + arrows (m+1/m-1 stay
-- on the current monitor; plain +1/-1 would follow the workspace if it moves
-- to another monitor). These only visit non-empty workspaces.
hl.bind(mainMod .. " + Left", hl.dsp.focus({ workspace = "m-1" }), { desc = "Previous workspace (active monitor)" })
hl.bind(mainMod .. " + Right", hl.dsp.focus({ workspace = "m+1" }), { desc = "Next workspace (active monitor)" })
-- Cycle workspaces on the active monitor with mainMod + arrows. Advancing past
-- the last workspace on the monitor creates a fresh (empty) workspace there;
-- going before the first wraps around to the last one on the monitor.
local function step_workspace(dir)
local mon = hl.get_active_monitor()
if not mon then return end
local current = mon.active_workspace.id
local mon_ids, all_max = {}, 0
for _, ws in ipairs(hl.get_workspaces()) do
if ws.id > all_max then all_max = ws.id end
if ws.monitor and ws.monitor.id == mon.id then
table.insert(mon_ids, ws.id)
end
end
table.sort(mon_ids)
local target
if dir > 0 then
for _, id in ipairs(mon_ids) do
if id > current then target = id break end
end
-- No next workspace on this monitor: create one right here.
if not target then target = all_max + 1 end
else
for i = #mon_ids, 1, -1 do
if mon_ids[i] < current then target = mon_ids[i] break end
end
-- No previous workspace on this monitor: wrap to the last one.
if not target and #mon_ids > 0 then target = mon_ids[#mon_ids] end
end
if target then hl.dispatch(hl.dsp.focus({ workspace = target })) end
end
hl.bind(mainMod .. " + Left", function() step_workspace(-1) end, { desc = "Previous workspace (active monitor)" })
hl.bind(mainMod .. " + Right", function() step_workspace(1) end, { desc = "Next workspace (active monitor); creates one past the end" })
-- Switch workspaces with mainMod + [0-9]
for i = 1, 10 do
+2 -2
View File
@@ -41,8 +41,8 @@ hl.config({
hl.config({
binds = {
-- Let SUPER+Left/Right (and scroll) wrap around instead of stopping at the
-- edge when cycling workspaces on the active monitor.
-- Let SUPER+scroll workspace cycling wrap around instead of stopping at
-- the edges. (SUPER+Left/Right wrapping is handled directly in binds.lua.)
allow_workspace_cycles = true,
},
})
+2 -27
View File
@@ -2,33 +2,8 @@
hl.monitor({
output = "desc:BOE 0x0BC9",
disabled = true,
})
hl.monitor({
output = "desc:Dell Inc. DELL U2515HX GMDK46C4053L",
mode = "2560x1440@59.951",
position = "5488x345",
scale = 1,
cm = "srgb",
sdr_min_luminance = 0.2,
sdr_max_luminance = 80,
})
hl.monitor({
output = "desc:Dell Inc. DELL U2518D 0WG2J9C5B3WL",
mode = "2560x1440@59.951",
position = "2928x345",
scale = 1,
cm = "srgb",
sdr_min_luminance = 0.2,
sdr_max_luminance = 80,
})
hl.monitor({
output = "desc:Viewteck Co. Ltd. GNV34DB",
mode = "3440x1440@50",
position = "3795x1785",
mode = "2560x1600@165",
position = "0x0",
scale = 1,
cm = "srgb",
sdr_min_luminance = 0.2,
-1
View File
@@ -43,7 +43,6 @@
actions: (
actions: [
lock_screen,
hibernate,
logout,
reboot,
shutdown,
+2 -2
View File
@@ -51,7 +51,7 @@
"reserved_bottom": 0,
"reserved_left": 0,
"reserved_right": 0,
"enabled": false,
"enabled": true,
"focus_at_startup": false
},
{
@@ -275,5 +275,5 @@
}
],
"workspace_rules": [],
"last_applied_time": 1788817484.835665
"last_applied_time": 1788832961.6364207
}
+35 -35
View File
@@ -1,7 +1,16 @@
{
"last_applied_time": 0.0,
"name": "laptop",
"monitors": [
{
"name": "eDP-2",
"description": "BOE 0x0BC9",
"make": "BOE",
"model": "0x0BC9",
"serial": "",
"width": 2560,
"height": 1600,
"refresh_rate": 165.0,
"resolution_mode": "explicit",
"available_modes": [
"2560x1600@165.00Hz",
"2560x1600@60.00Hz",
@@ -17,44 +26,35 @@
"800x600@165.00Hz",
"640x480@165.00Hz"
],
"bitdepth": 8,
"color_management": "srgb",
"description": "BOE 0x0BC9",
"enabled": true,
"focus_at_startup": false,
"height": 1600,
"icc_profile": "",
"make": "BOE",
"max_avg_luminance": 0.0,
"max_luminance": 0.0,
"min_luminance": 0.0,
"mirror_of": "",
"model": "0x0BC9",
"name": "eDP-2",
"x": 0,
"y": 0,
"position_mode": "explicit",
"refresh_rate": 165.0,
"scale": 1,
"scale_mode": "explicit",
"transform": 0,
"mirror_of": "",
"bitdepth": 8,
"vrr": 0,
"color_management": "srgb",
"icc_profile": "",
"sdr_brightness": 1,
"sdr_saturation": 1,
"sdr_eotf": 0,
"supports_hdr": 0,
"supports_wide_color": 0,
"sdr_min_luminance": 0.2,
"sdr_max_luminance": 80,
"min_luminance": 0.0,
"max_luminance": 0.0,
"max_avg_luminance": 0.0,
"reserved_top": 0,
"reserved_bottom": 0,
"reserved_left": 0,
"reserved_right": 0,
"reserved_top": 0,
"resolution_mode": "explicit",
"scale": 1,
"scale_mode": "explicit",
"sdr_brightness": 1,
"sdr_eotf": 0,
"sdr_max_luminance": 80,
"sdr_min_luminance": 0.2,
"sdr_saturation": 1,
"serial": "",
"supports_hdr": 0,
"supports_wide_color": 0,
"transform": 0,
"vrr": 0,
"width": 2560,
"x": 0,
"y": 0
"enabled": true,
"focus_at_startup": false
}
],
"name": "laptop",
"workspace_rules": []
"workspace_rules": [],
"last_applied_time": 1788832965.6726744
}
+1 -1
View File
@@ -2,5 +2,5 @@
"clamshell_mode": true,
"update_sddm": true,
"migrate_workspaces": true,
"active_profile": "desk"
"active_profile": "laptop"
}
+4 -3
View File
@@ -89,10 +89,11 @@
"menu": "on-click",
"menu-file": "~/.config/waybar/power_menu.xml",
"menu-actions": {
"shutdown": "shutdown",
"reboot": "reboot",
"suspend": "systemctl suspend",
"hibernate": "systemctl hibernate",
"lock": "hyprlock",
"logout": "hyprctl dispatch exit",
"reboot": "reboot",
"shutdown": "shutdown",
},
"escape": true
},
+11 -6
View File
@@ -7,21 +7,26 @@
</object>
</child>
<child>
<object class="GtkMenuItem" id="hibernate">
<property name="label">Hibernate</property>
<object class="GtkMenuItem" id="lock">
<property name="label">Lock</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="shutdown">
<property name="label">Shutdown</property>
<object class="GtkMenuItem" id="logout">
<property name="label">Logout</property>
</object>
</child>
<child>
<object class="GtkMenuItem" id="reboot">
<property name="label">Restart</property>
</object>
</child>
<child>
<object class="GtkSeparatorMenuItem" id="delimiter1" />
</child>
<child>
<object class="GtkMenuItem" id="reboot">
<property name="label">Reboot</property>
<object class="GtkMenuItem" id="shutdown">
<property name="label">Shutdown</property>
</object>
</child>
</object>