Wayfire 0.9.0 announcement

Hello everyone! I am happy to announce the release of Wayfire 0.9.0. In the (relatively) long time since the last announcement, the focus has been on continually improving the stability of Wayfire and its plugins after the big API refactor which was finished last year. Nonetheless, there are still many cool additions in this latest release. In the following I will attempt a summary of the important changes and will go into more detail on one of Wayfire’s newest and most powerful features: the IPC socket.

Features

First, let us take a look at the user-facing changes and new features that were added in this release:

session-lock-v1 protocol PR #2237

The session-lock-v1 protocol is a new protocol used for locking a Wayland compositor session. Support for it has been added as a plugin named session-lock and can be enabled in the wayfire.ini file. With it, newer versions of Swaylock work on Wayfire, as well as other similar screenlockers.

Bindings following the current layout PR #2247

By using the xkb-bindings plugin, it is possible to extend the bindings that Wayfire’s plugins provide so that they are based on xkb keysyms instead of hardware keycodes. Why this matters: hardware keycodes depend on whatever signals the kernel detects when a key is pressed on the keyboard. These do not change when you change the keyboard layout. Keysyms, on the other hand, are interpreted with the xkbcommon library and follow the current layout. This feature has been frequently requested. An example configuration:

[core]
plugins = xkb-bindings expo ...

[expo]
toggle = Mod4+e

This way, expo will always be triggered when Mod4 is pressed together with the key mapped to e, depending on the current layout.

Animation easings PR #2202

Most animations in Wayfire have a configurable duration. They are also equipped with an easing function which makes animation appear smoother to the user. However, the hard-coded default circle easing is not the best in all cases. Thus, in this new release of Wayfire it is possible to specify the desired animation easing function usually use the hard-coded default circle easing for smoother animations. Now, some people might prefer to use a linear or sigmoid smoothing, which are also available in the backend:

[expo]
duration = 0.2s sigmoid

For testing purposes, the easeOutElastic easing is also available. Feel free to send a PR if you would like to have even more easing functions :)

IPC

A lot of effort in this release went into improving the IPC socket support added in Wayfire 0.8.0. There are many new IPC methods available: managing headless outputs, setting configuration options, manipulating views, workspaces and workspace sets and getting notifications for various events. Of particular interest is the new Python package on PyPi which was started by @killown. The package which allows easier use of the IPC socket from user-made scripts. Check out the examples in scripts/ in the GitHub repository. And in case Python is not your thing, you might be interested in projects like DFL IPC (C++/Qt), the work-in-progress wayfire-rs and the wiki page documenting the IPC socket that Wayfire provides.

CSS theming in wf-shell

A new contributor on GitHub (@trigg, huge thanks!) has made it possible to control many aspects of wf-panel’s appearance via custom CSS files. They are stored in ~/.config/wf-shell/css/*.css. The directory may contain any number of CSS files, which are hot-reloaded when added, removed or edited from there. Check out the wiki page and the examples to get a feel for what is possible.

Warning: CSS theming has required many changes to the panel and some of the options’ meaning has changed. Despite the efforts to make the panel look the same as the old one out-of-the-box (with the provided default.css), some options may need adjustment, like launchers_size.

wayfire-plugins-extra

Scott Moreau (@soreau) has been improving and adding even more plugins to the wayfire-plugins-extra repository. Some of the new highlights include the filters and pixdecor plugins, available as optional subprojects of wayfire-plugins-extra or as standalone plugins. Another great plugin is obs (opacity-brightness-saturation), which among other things makes it possible to implement Compiz’ trailfocus plugin as an IPC script.

Bug Fixing

There were many, many bug fixes in this release, a huge chunk of which were discovered from @killown’s fuzz tests for Wayfire. The rest of our automated test suite was also expanded, covering even more use-cases. These two approaches have helped uncover many rarely-occuring and hard-to-debug bugs.

Conclusion

That is all for now, thank you for reading this blog post until the end, and huge thanks to everyone who contributed to the project in one way or another! Try out the new Wayfire 0.9.0 release and let us know what you think.