Skip to content

Commit fbdf436

Browse files
feat(hyprland): adopt scrolling layout and niri-style navigation
Switch Hyprland to the scrolling layout as the default to improve window management ergonomics and consistency for daily navigation. Add layoutmsg-based keybindings and update docs so the chezmoi-managed setup reflects the new column workflow. Made-with: Cursor
1 parent c57624a commit fbdf436

4 files changed

Lines changed: 65 additions & 20 deletions

File tree

docs/Hyprland-Setup.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
HorneroConfig uses a Hyprland + Quickshell stack.
66
Quickshell is the primary shell surface for launcher, session menu, dashboard, notifications, and control center.
7+
The default tiling behavior is Hyprland `scrolling` layout (Niri-style column workflow).
78

89
## Installation
910

docs/wiki/Hyprland-Keybindings.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ Complete reference for all keybindings in HorneroConfig's Hyprland setup.
2626
| `Super+Shift+F` | Smart floating (toggle + center + resize) |
2727
| `Super+Shift+Space` | Focus toggle (floating ↔ tiled) |
2828
| `Super+Ctrl+C` | Center floating window |
29-
| `Super+T` | Toggle tiling/floating |
29+
| `Super+Space` | Toggle tiling/floating |
3030
| `Super+P` | Focus parent (group) |
3131
| `Super+C` | Focus child (group) |
32+
| `Super+U` | Promote focused window to its own column (scrolling layout) |
33+
| `Super+'` | Toggle focus fit mode (center ↔ fit) |
3234

3335
## Window Focus
3436

@@ -84,14 +86,18 @@ Complete reference for all keybindings in HorneroConfig's Hyprland setup.
8486
| `Super+Z` | Toggle scratchpad visibility |
8587
| `Super+Shift+Z` | Move window to scratchpad |
8688

87-
## Layouts and Splits
89+
## Scrolling Layout (Niri-style)
8890

8991
| Keybinding | Function |
9092
|------------|----------|
91-
| `Super+Alt+H` | Set horizontal split direction |
92-
| `Super+Alt+V` | Set vertical split direction |
93-
| `Super+W` | Toggle layout (dwindle/master) |
94-
| `Super+S` | Toggle split direction |
93+
| `Super+Alt+H` | Move layout viewport one column to the left |
94+
| `Super+Alt+L` | Move layout viewport one column to the right |
95+
| `Super+Alt+,` | Swap active column with left neighbor |
96+
| `Super+Alt+.` | Swap active column with right neighbor |
97+
| `Super+Alt+-` / `Super+Alt+=` | Decrease/increase column width preset |
98+
| `Super+Alt+Shift+-` / `Super+Alt+Shift+=` | Fine resize column width |
99+
| `Super+Alt+F` | Fit active column into view |
100+
| `Super+Alt+Shift+F` | Fit visible columns into view |
95101

96102
## Gaps Control
97103

home/dot_config/hypr/hyprland.conf

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ general {
3535
col.active_border = rgba(cba6f7ee) rgba(89b4faee) 45deg
3636
col.inactive_border = rgba(595959aa)
3737

38-
# Layout
39-
layout = dwindle
38+
# Layout (Niri-like horizontal tape)
39+
layout = scrolling
4040

4141
# Allow tearing for gaming
4242
allow_tearing = false
@@ -101,21 +101,37 @@ decoration {
101101
}
102102

103103
# ============================================================================
104-
# Dwindle Layout Settings
104+
# Scrolling Layout Settings (Niri-like)
105+
# ============================================================================
106+
107+
scrolling {
108+
# Keep one-column workspaces immersive (great for focused tasks)
109+
fullscreen_on_one_column = true
110+
111+
# Slightly wider default than 50/50 for better readability
112+
column_width = 0.62
113+
114+
# Fit keeps focused columns visible without over-centering jitter
115+
focus_fit_method = 1
116+
follow_focus = true
117+
follow_min_visible = 0.45
118+
119+
# Cycle presets with layoutmsg colresize +/-conf
120+
explicit_column_widths = 0.333, 0.5, 0.618, 0.75, 1.0
121+
122+
# New columns open to the right by default (Niri-style mental model)
123+
direction = right
124+
}
125+
126+
# ============================================================================
127+
# Dwindle Layout Settings (fallback if layout switched manually)
105128
# ============================================================================
106129

107130
dwindle {
108-
# Pseudotile (windows retain floating size when tiled)
109131
pseudotile = true
110132
preserve_split = true
111-
112-
# Splitting behavior
113133
force_split = 0
114-
115-
# Smart split
116134
smart_split = true
117-
118-
# Smart resizing
119135
smart_resizing = true
120136
}
121137

home/dot_config/hypr/hyprland.conf.d/keybindings.conf

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ bind = $mainMod, M, fullscreen, 0
6767
# Toggle maximize
6868
bind = $mainMod SHIFT, M, fullscreen, 1
6969

70-
# Toggle pseudo-tiling (dwindle)
71-
bind = $mainMod, U, pseudo
70+
# Promote focused window into its own column (scrolling)
71+
bind = $mainMod, U, layoutmsg, promote
7272

73-
# Toggle split direction (dwindle)
74-
bind = $mainMod, apostrophe, togglesplit
73+
# Toggle focus fit behavior (center <-> fit) for scrolling layout
74+
bind = $mainMod, apostrophe, layoutmsg, togglefit
7575

7676
# Pin window (keep on all workspaces)
7777
bind = $mainMod SHIFT, P, pin
@@ -109,6 +109,28 @@ bind = $mainMod, L, movefocus, r
109109
bind = $mainMod, K, movefocus, u
110110
bind = $mainMod, J, movefocus, d
111111

112+
# ============================================================================
113+
# Scrolling Layout Navigation (Niri-like)
114+
# ============================================================================
115+
116+
# Move viewport by columns
117+
bind = $mainMod ALT, H, layoutmsg, move -col
118+
bind = $mainMod ALT, L, layoutmsg, move +col
119+
120+
# Swap active column with neighbor
121+
bind = $mainMod ALT, comma, layoutmsg, swapcol l
122+
bind = $mainMod ALT, period, layoutmsg, swapcol r
123+
124+
# Column width controls
125+
bind = $mainMod ALT, minus, layoutmsg, colresize -conf
126+
bind = $mainMod ALT, equal, layoutmsg, colresize +conf
127+
binde = $mainMod ALT SHIFT, minus, layoutmsg, colresize -0.05
128+
binde = $mainMod ALT SHIFT, equal, layoutmsg, colresize +0.05
129+
130+
# Fit strategies
131+
bind = $mainMod ALT, F, layoutmsg, fit active
132+
bind = $mainMod ALT SHIFT, F, layoutmsg, fit visible
133+
112134
# ============================================================================
113135
# Window Movement
114136
# ============================================================================

0 commit comments

Comments
 (0)