byway is a Wayland compositor, inspired by cwm, based on wlroots, and written in Zig. It aims to be concise both visually and in its implementation. Ease of maintenance is also a goal; Zig, wlroots, and Wayland are all moving quickly, and the intent is for byway to keep pace. byway began life as a fork of TinyWL, and borrows significant code from sway.
byway is in the early stages of development, and bugs, including crashes, should be expected. However, byway is mostly feature-complete, and development is intended to consist of bug fixes, and adding support for Wayland protocols as needed. Additional features will be considered based on how much value they provide, and whether they can be implemented without significantly expanding the size or complexity of the codebase.
First ensure dependencies are installed, and then run zig build
with any desired
options, e.g.
zig build install -Drelease-safe -p ~/.local
- zig (0.10)
- wlroots (0.15)
- wayland
- wayland-protocols
- xkbcommon
- xcb
- libinput
- pixman
- xwayland
Behavior can be customized via $HOME/.config/byway/config.json
.
See config.json.example for a sample configuration.
tap_to_click
:true
orfalse
natural_scrolling
:true
orfalse
background_color
: array of values between 0 and 1 corresponding to RGBAborder_color
: array of values between 0 and 1 corresponding to RGBAfocused_color
: array of values between 0 and 1 corresponding to RGBAgrabbed_color
: array of values between 0 and 1 corresponding to RGBAactive_border_width
: pixelshotkeys
: array of{modifiers, key, action, arg}
; See belowmouse_move_modifiers
: modifier keys to move a toplevel view with the mousemouse_move_button
: button to move a toplevel view with the mousemouse_grow_modifiers
: modifier keys to grow or shrink a toplevel view with the mousemouse_grow_button
: button to grow or shrink a toplevel view with the mouseautostart
: array of commands to run on startupmove_pixels
: pixelsgrow_pixels
: pixelsdamage_tracking
: one of"minimal"
(redraws all outputs, but only on updates),"partial"
(redraws whole surfaces on updates), and"full"
(only redraws damaged areas),
Hotkey Actions:
Action | Description | arg value |
---|---|---|
"command" |
Executes the command as a child process | command to execute |
"toplevel_to_front" |
Raises the toplevel view with keyboard focus to the top of the stack | "" |
"toplevel_to_back" |
Lowers the toplevel view with keyboard focus to the bottom of the stack | "" |
"cycle_groups" |
Raises and focuses a window of the next application in the stack | "1" to cycle forward, '"-1" to cycle backward |
"cycle_toplevels" |
Raises and focuses the next window of the currently-focused application | "1" to cycle forward, '"-1" to cycle backward |
"move_toplevel" |
Moves the toplevel view with keyboard focus in the specified direction | One of "up" , "down" , "left" , "right" |
"grow_toplevel" |
Grows or shrinks the toplevel view with keyboard focus by moving the bottom or rightmost edge | "up" , "down" , "left" , "right" |
"close_toplevel" |
Closes the toplevel view with keyboard focus | "" |
"toggle_fullscreen" |
Toggles fullscreen for the toplevel view with keyboard focus | "" |
"toggle_spread_view" |
Toggles mode to display all toplevel views in a grid for selection | "" |
"toggle_hide_toplevels" |
Toggles hiding all toplevel views | "" |
"switch_to_workspace" |
Changes the currently visible workspace | character corresponding to workspace number, "0" to "9" |
"toplevel_to_workspace" |
Moves the toplevel view with keyboard focus to the specified workspace | character corresponding to workspace number, "0" to "9" |
"quit" |
Quits byway | "" |
"chvt" |
Changes to the specified virtual terminal | character corresponding to VT, e.g. "1" for tty1 |
"reload_config" |
Reloads the configuration from $HOME/.config/byway/config.json |
"" |
Issues are welcome as are bug fix PRs. New functionality will be considered on a case-by-case basis.