Wayfire 0.4.0 is here!

I am pleased to announce the next release of Wayfire. As usual, there has been a lot of work and many bug fixes. Here is a summary of the important changes.

Decoration buttons support

Wayfire’s decoration plugin finally got basic support for close/maximize/minimize buttons on Xwayland views and native wayland clients which request these via the xdg-decoration protocol. The focus has been on functionality, not on the looks so not everybody will find those beautiful. Regardless, should you need them, here are a few configuration options:

[decoration]
font = serif
title_height = 30
border_size = 4
button_order = minimize maximize close
active_color = #222222aa
inactive_color = #33333333dd

You can read more details about those here: https://github.com/WayfireWM/wayfire/wiki/Configuration#decoration

Animation support for context menus & tooltips

Up to now, context menus and tooltips (aka xdg_popup surfaces) have been treated the same as subsurfaces. This means they could not be animated separately from the main view. Now, they are completely separate and you can enable animations for them with the following:

[animate]
fade_enabled_for = (type is unmanaged || (type is x-or && focuseable is false))

The important bit here is type is unmanaged which is an expression which describes “unmanaged” views, which are currently exactly xdg_popups. The (type is x-or && focuseable is false) part matches Xwayland override-redirect views which are not focuseable - usually Xwayland popups, tooltips, etc. Make sure to add the matcher plugin before the animate plugin in the window list for this to work (This is a temporary solution, since matcher will soon be merged into core).

Improved dialogue handling

Transient windows (dialogues like file chooser) also got their fair share of attention. One important fix was that now dialogues do not cause freezes with the simple-tile plugin. You can also choose whether dialogues stick together with their parent (as in GNOME) or float separately. Note that in both cases the dialogue always stays on top of the parent window, as it should. Sticking windows together is made possible by the join-view plugin from wayfire-plugins-extra.

Installation scripts

Since Wayfire consists of multiple components, building it requires cloning, compiling and installing multiple components, as well as installing configuration files. To make the process easier, I have written a few scripts here, with the help of which installation of Wayfire should be as easy as writing a single command:

./install.sh --prefix /opt/wayfire --stream 0.4.0

and then running it with

./start_wayfire.sh

If the script encounters error along the way (for example, missing dependencies), you can restart it, and it will try to continue the build from where it stopped last time. In case you want to start from scratch, there is the --clean option.

This script may not work on non-standard distributions such as NixOS, but it should work on “common” ones like Fedora, Ubuntu, Arch, Debian and their derivatives.

Documentation

User alexherbo2 has volunteered to help with the documentation of Wayfire. You can find his excellent work at Wayfire wiki. It contains documentation for all options from the main Wayfire repository, along with screenshots and many tips on how to configure different third-party programs to work together with Wayfire.

wf-config changes

The small library which Wayfire uses for configuration has been rewritten. The syntax of the config file itself hasn’t changed, but the new wf-config can check option types when reading from the config file, and for integers and doubles in can also check whether the config value is between a specified minimum and maximum value. This information is used for displaying proper error messages when the option value is invalid. There is also support for setting custom default option values via a system configuration file.

WCM

Scott Moreau has continued working on WCM, our configuration GUI. Notable improvements are:

  1. Support for grabbing key- and button bindings directly. Instead of searching for the proper names in linux/input-event-codes.h, you can just press the combo and WCM will parse it for you.
  2. Long descriptions of config options. Hovering an option gives you a detailed description of what this option does.
  3. Support for gesture options.

Miscallaneous

  1. Expo plugin now supports different key bindings to directly go to a specific workspace instead of using the mouse
  2. window-rules plugin now supports set alpha command to automatically set transparency for apps as soon as they are started
  3. Performance optimizations for blur and other transformers.
  4. Mouse cursor is now drawn when mirroring outputs.
  5. There is an option in [idle] to disable DPMS when a fullscreen window is active.
  6. Bug/Crash fixes

All in all, Wayfire is steadily going towards a 1.0 release, although there will certainly be a few more alpha/beta releases before that.