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

Thanks for this. I only use(d) hy3 for tabs as well, and now wondering if this is all I need now? I remember landing into hy3 back then because there were some missing features to the group feature, but cant recall... any issues you have so far?

@megum1n
Copy link
Author

megum1n commented Mar 5, 2026

@ajboni it seems that hyprland dev team improved tabs because I could not use them 2 years ago and now I don't really have any complains. It works just fine for me.
Binding is the only annoying thing since you have to do separate operations for tab and windows. But it is manageable IMO.

I also don't remember exact reason why 2 years ago tabs were unusable. IIRC you couldn't set bg color for tabs, so they were transparent and you couldn't set one key binding for tabs and windows.

@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