Layout

wideriver is the layout engine that is the closest match to the behaviour I’m used to with awesomewm, and makes a great default:

riverctl default-layout wideriver

We’ll declare a layout mode to make it quicker — and easier on the hands — to cycle layout controls when trying to pin down a comfortable setup:

riverctl declare-mode layout
riverctl map normal Super L enter-mode layout
riverctl map layout None Escape enter-mode normal

Layout format manipulation bindings:

riverctl map layout None M send-layout-cmd wideriver "--layout monocle"
riverctl map layout None T send-layout-cmd wideriver "--layout left"
riverctl map layout Shift T send-layout-cmd wideriver "--layout wide"
riverctl map layout Control T send-layout-cmd wideriver "--layout right"
riverctl map layout None Space send-layout-cmd wideriver "--layout-toggle"

Layout style manipulation bindings:

riverctl map layout None E send-layout-cmd wideriver "--stack even"
riverctl map layout None W send-layout-cmd wideriver "--stack dwindle"
riverctl map layout None I send-layout-cmd wideriver "--stack diminish"

Main window ratio manipulation bindings:

riverctl map layout None Equal send-layout-cmd wideriver "--ratio 0.52"
riverctl map layout None H send-layout-cmd wideriver "--ratio +0.05"
riverctl map layout None L send-layout-cmd wideriver "--ratio -0.05"

Bindings to adjust the number of windows in main stack:

riverctl map layout Shift Equal send-layout-cmd wideriver "--count 1"
riverctl map layout Shift H send-layout-cmd wideriver "--count +1"
riverctl map layout Shift L send-layout-cmd wideriver "--count -1"

Add top level bindings for monocle and tile-left, as they’re my most common layouts that I want quick access to:

riverctl map normal Super M send-layout-cmd wideriver "--layout monocle"
riverctl map normal Super T send-layout-cmd wideriver "--layout left"

Configure initial per-tag layouts:

for n ({2..32..2}) {
    riverctl set-focused-tags $(tag_mask $n)
    riverctl send-layout-cmd wideriver "--layout monocle"
}
riverctl set-focused-tags $(tag_mask 1)

Note

This reflects — what is at this point — my decades-old tradition of defaulting to fullscreen on even tags. While it may not make sense, it is a deeply ingrained habit.