canoe-0.3.1 is not a library.
Canoe 🛶 - River Window Manager

A stacking window manager for the River Wayland compositor, written in Rust.
Features
- Stacking window management
- Server-side decorations with classic window borders & titlebars
- Titlebar/edge window movement and resizing (Super+Drag anywhere)
- Multihead support (focus/send windows across outputs)
- Window switcher (keyboard cycle + desktop right-click menu)
- Window focus follows click
- Optional forcing server-side decorations via per-window rules
- Optional "swallowing" of client-side decoration via per-window rules
Installation
Running
Building From Source
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Super+Shift+Return |
Open terminal (foot) |
Super+Space |
Open application launcher (fuzzel) |
Super+w |
Close focused window |
Super+Tab |
Focus next window |
Super+Shift+Tab |
Focus previous window |
Super+` |
Focus next window of the same application |
Super+Enter |
Toggle fullscreen |
Super+Down |
Unfullscreen/unmaximize, otherwise minimize focused window |
Super+Up |
Maximize focused window |
Super+h |
Minimize focused window |
Super+m |
Minimize focused window |
Super+Left |
Snap focused window to left half; restore if snapped right |
Super+Right |
Snap focused window to right half; restore if snapped left |
Super+Alt+Left |
Send focused window to previous output |
Super+Alt+Right |
Send focused window to next output |
Super+Alt+Up |
Send focused window to previous output |
Super+Alt+Down |
Send focused window to next output |
Mouse Actions
| Action | Result |
|---|---|
| Click on window | Focus window |
| Drag titlebar | Move window |
| Drag window edges | Resize window |
Super+Left Drag |
Move window (anywhere) |
Super+Right Drag |
Resize window (anywhere) |
Configuration
Canoe reads ~/.config/canoe/canoe.toml.
The main modifier defaults to super, but you can change it:
= "alt"
The launcher defaults to fuzzel. You can override it with a command or argv:
= "fuzzel"
# Or with arguments:
= ["fuzzel", "--dmenu"]
UI Settings
UI options live under the [ui] table and let you tune borders, titlebars, and menu colors.
Colors accept #RGB, #RRGGBB, or #RRGGBBAA.
[]
= 10
= { = "#FFD000", = "#000000", = "#FFD000" }
= { = "#000000", = "#000000", = "#000000" }
= "#000000"
= "#808080"
= "#FFD000"
= "#202020"
= "#000000"
= "#FFFFFF"
= "#FFD000"
= "#000000"
= "#202020"
= "#FFD000"
= "#000000"
= "Sans"
= 12.0
= "#101010"
Rule Matching
Rules live under [[rules]] in canoe.toml. App ID matching uses OR across the
app-id fields, and property matching uses AND across the listed properties.
[[]]
= ["foot", "kitty"] # exact match, any value matches
= "mate-" # prefix match (e.g. mate-calc)
= ["toplevel", "csd_only"] # all props must match
Supported match_props values:
toplevel(window has no parent)csd_only(client does not support SSD)
The matching windows can have parts of their content "swallowed". This removes the client-side decoration on my Firefox, for instance:
= "firefox-esr"
= "toplevel"
= true
= 48
Requirements
- River Wayland compositor
- foot terminal (for Super+Shift+Return)
- fuzzel (for Super+Space launcher)
License
MIT