Wayfire 0.3

It has been a relatively long time since the last time I have written in this blog. That doesn’t mean work on Wayfire has stopped! In fact, I’m happy to announce the release of Wayfire 0.3. There are quite a few improvements, which I’d like to share.

Improved output configuration support

Now you can:

  1. Configure outputs via the config file, as usual. Each output has its own config section, and aside from the resolution, you can also set off and mirror <output-name> as modes, like this:
mode = 1920x1080

mode = mirror eDP-1 # External monitor has the same content as the internal eDP-1

mode = off # turn off output
  1. Configure outputs with external tools like wlr-randr, wdisplays or kanshi using the wlr-output-management-unstable-v1 protocol.

Kanshi can be helpful for people who often change their monitor configuration (for example between home and work) and need to define different layouts depending on which monitors are connected.

  1. Use Idle plugin for DPMS

DPMS is handled entirely by the Idle plugin. It has two options:

dpms_timeout = 300 # timeout in seconds, -1 to disable
toggle = <super> <shift> KEY_I # Toggle dpms timeout

After the configured amount of time without any input events, the outputs will be automatically turned off. In certain situations like playing a video however the screen should continue to work. Sadly not all clients support the necessary protocols, so I have added a keybinding to temporarily disable idleness. In the future, this will automatically happen if a fullscreen window is currently focused.

Tiling plugin - demo

The tiling plugin has been inspired by i3/Sway, however it provides only basic tiling capabilities. It has several options:

tile_by_default = 1
keep_fullscreen_on_adjacent = 1

button_move = <super> BTN_LEFT
button_resize = <super> BTN_RIGHT
key_toggle = <super> KEY_T
key_toggle_fullscreen = <super> KEY_M

key_focus_left  = <super> KEY_H
key_focus_right = <super> KEY_L
key_focus_above = <super> KEY_K
key_focus_below = <super> KEY_J

tile_by_default controls whether each opened window is automatically tiled or left floating. button_move and button_resize are the bindings used to initiate resizing or changing the tiling layout. The key_toggle binding is used to toggle whether a window is tiled or floating. The key_toggle_fullscreen binding is used to make a tiled window fullscreen and vice-versa.

The key_focus_* bindings change the focus to the next tiled window in the indicated direction, and keep_fullscreen_on_adjacent determines what happens to the current window if it is fullscreen but the user tries to focus an adjacent window with a keybinding.

Vswipe plugin by myfreeweb - demo

This is a plugin very similar to Vswitch, it lets the user change the active workspace by using touchpad gestures, like MacOS.

It has multiple options related to swipe speed, threshold, number of fingers used, etc, which can be found in the example config file or in WCM.

Miscellaneous improvements

  1. A lot of internal restructuring, and documentation of public APIs
  2. Improvements for games - relative-pointers and pointer-constraints protocols
  3. Much better support for virtual keyboards and touch devices (including Stylus/Tablet tool support)
  4. Multiple bug and crash fixes in core and the plugins, check the closed issues for more details.

There are also substantial changes outside of Wayfire itself:

  1. Migration of desktop clients towards layer-shell, so that they can also work on other compositors like Sway. This includes wf-background, wf-panel, wf-dock and wf-osk.
  2. Support for the command and autostart plugins in WCM (Wayfire Config Manager), added by soreau.
  3. Icons in WCM were updated by coz_.
  4. Wayfire is being packaged for multiple distros like Fedora, Void Linux and Arch Linux.

All in all, Wayfire has been progressing pretty well in the last few months. Thanks to all people who have contributed time and effort into the project!