Skip to content

Instantly share code, notes, and snippets.

@megum1n
Created March 4, 2026 18:35
Show Gist options
  • Select an option

  • Save megum1n/89ee3bb58b4105fbcba49a0a869b66e6 to your computer and use it in GitHub Desktop.

Select an option

Save megum1n/89ee3bb58b4105fbcba49a0a869b66e6 to your computer and use it in GitHub Desktop.
Hyprland config
general {
layout = hy3
}
plugin {
hy3 {
tabs {
height = 6
padding = 4
render_text = false
}
autotile {
enable = true
}
}
}
bind = $mainMod, h, hy3:movefocus, l
bind = $mainMod, l, hy3:movefocus, r
bind = $mainMod, k, hy3:movefocus, u
bind = $mainMod, j, hy3:movefocus, d
bind = $mainMod SHIFT, h, hy3:movewindow, l
bind = $mainMod SHIFT, l, hy3:movewindow, r
bind = $mainMod SHIFT, k, hy3:movewindow, u
bind = $mainMod SHIFT, j, hy3:movewindow, d
bindn = , mouse:272, hy3:focustab, mouse
bindn = , mouse_down, hy3:focustab, l, require_hovered
bindn = , mouse_up, hy3:focustab, r, require_hovered
bind = $mainMod, tab, hy3:focustab, r, wrap
bind = $mainMod, W, hy3:changegroup, toggletab
bind = $mainMod, S, togglefloating
dwindle {
pseudotile = true
preserve_split = true
force_split = 2
}
group {
col.border_active = rgba(33ccffee) rgba(00ff99ee) 45deg
col.border_inactive = rgba(595959aa)
col.border_locked_active = -1
col.border_locked_inactive = -1
groupbar {
font_size = 13
font_family = Source Code Pro
font_weight_active = bold
font_weight_inactive = normal
indicator_height = 0
indicator_gap = 5
height = 20
gaps_in = 5
gaps_out = 0
scrolling = false
text_color = rgb(000000)
text_color_inactive = rgba(ffffff90)
col.active = rgba(33ccffcc)
col.inactive = rgba(303030cc)
gradients = true
gradient_rounding = 6
gradient_round_only_edges = false
blur = true
}
}
bind = $mainMod, h, exec, ~/.config/hypr/scripts/movefocus.sh l
bind = $mainMod, l, exec, ~/.config/hypr/scripts/movefocus.sh r
bind = $mainMod, k, movefocus, u
bind = $mainMod, j, movefocus, d
bind = $mainMod SHIFT, h, movewindow, l
bind = $mainMod SHIFT, l, movewindow, r
bind = $mainMod SHIFT, k, movewindow, u
bind = $mainMod SHIFT, j, movewindow, d
bind = $mainMod, tab, changegroupactive
bind = $mainMod, W, togglegroup
bind = $mainMod, S, moveoutofgroup
bind = $mainMod, S, togglefloating
#!/usr/bin/env bash
direction=$1
in_group=$(hyprctl activewindow -j | jq -e '.grouped[1]')
if [[ $in_group != "null" ]]; then
next="f"
if [[ $direction == "l" ]]; then
next="b"
fi
hyprctl dispatch changegroupactive $next
else
next=""
if [[ $direction == "l" ]]; then
next="prev"
fi
hyprctl dispatch cyclenext $next
fi
@ajboni
Copy link

ajboni commented Mar 5, 2026

been using it for a few hs, and its good! main pain points (didn't do a full research yet):

  • super + drag a grouped window into another group for example: drags the whole group and merge it with the other group.

  • super + drag the tab header only moves that tab, which is great, but a bit annoying to click on that area specifically!
    merge_groups_on_groupbar / merge_groups_on_drag controls this but I'd like to be able to pop a single tab onto another group by dragging. (movewindoworgroup maybe?)

  • group new windows by default?

  • moving tabs inside a group (reorder) can be done with movegroupwindow:

bind = $mainMod SHIFT, left, movegroupwindow, b
bind = $mainMod SHIFT, right, movegroupwindow, f
  • does not play nice with virtual-desktop plugin because it moves the whole "window" (the group) instead of the single tab. need to ungroup that tab first

I think, as you said, the main issue is the distinction between tabs and windows.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment