A Pragmatic Place

Preston Carpenter’s technical blog

Way Cooler Alpha Update (2016 November)

Posted at — Nov 25, 2016

Hey everyone! It's been a while since we've posted an update about Way Cooler. There wasn't enough going on per week to do a "this week in Way Cooler" like so many other, more important projects are doing, but enough has finally changed to warrant an update.

Changing tracks on the top bar

First things first, after reviewing the reaction from the community about the bundled Electron bar, we have decided to scrap it in favor for a bar powered by Conrod and Lua. Conrod was chosen because it seems to be an easy to use framework, both for us as developers and potentially others as users/contributors, and Lua was chosen to match the init / configuration file.

The plan is to build a light framework where you can specify components using Lua, and decide how to place them on the bar. This will let the bar configuration stay high-level (no rooting around big, complicated source code), while at the same time keeping it as configurable as possible. Ultimately, because the bar is a client program to Way Cooler, if users don't like it they are free to roll their own using whatever language or GUI framework they want. Which leads me to our second biggest feature...

D-Bus IPC

We changed from an ad-hoc IPC to the much more standard D-Bus!

One of the biggest goals of Way Cooler is to have as many parts as swappable as possible, so we try to push as much functionality as we can out of Way Cooler into client programs. With D-Bus, we can code our client programs to a well defined interface, keeping our protocol open for both extension and replacement of clients (all they need to do is speak the interface). Most languages come with some sort of D-Bus library, so there will no longer be a need for us to make client libraries for different languages since that comes for free with D-Bus!

Currently, the sample tree display program has been the only thing ported to use this new D-Bus api, you can see it here.

The newly split up background program will eventually utilize the D-Bus api, which will allow different types of background programs to exist. You could use the simple one we have now, that basically does the minimum and just puts an image on the screen, or you could use a complicated one that swaps it out depending on the color scheme, or one that changes per day, or another that can be remotely controlled... the possiblities are endless, now that it exists as a separate program.

New distribution model

Since the background functionality is no longer built in the same binary as Way Cooler, this presents a problem that we were bound to hit sooner or later: installing Way Cooler from crates.io using cargo install way-cooler will no longer give you a fully working version of Way Cooler.

In general, distribution of Way Cooler through crates.io has proved to be a problem, not only for handling non-binary files (such as default configuration files or other assets), but also for users trying out the window manager. There have been a lot of people confused about the wlc dependency, and while it's easy to point them to the project page to show how to compile it, most potential users will be turned off for having to do so much work just to try an unproven window manager.

So, in order to fix both of these problems in one fell swoop, we will soon be introducing distributions that are self contained and statically linked to wlc. We will start simple, and just be distributing zipped versions through Github on each release. This doesn't give the benefit of easily updating Way Cooler unfortunately, but it is distro-independent and very easy to setup.

Eventually, we'll add official packages for both rpm and apt. If you are on Arch, feel free to continue using the AUR package. It will statically link to wlc and also install way-cooler-bg with all the necessary assets.

New tiling features

Finally, there have also been some additional features added to the tiling of Way Cooler.

We have added floating windows (alt+shift+space), which work just like the ones in i3 (they always sit on top of the tiled views)

We have also added tho ability to resize windows. There isn't yet a keybinding to resize the windows (it will probably be added later, it would require adding "modes" to the tiling system, which I want to put more thought into for extension), but you can resize windows today by using ctrl+right-click and dragging around. You can grab any part of the frame, and it will begin to resize the window. This works for tiled as well, and automatically ensures that windows stay the correct size they need to in order to remain visible.

You can see the entire changelog here.

Up Next

As for what we are going to work on next, here is a short list of things to expect in the near future from us, in no particular order:

  • A way-cooler-bar, with widgets expressed through Lua.
  • Server side decorations on windows.
  • Tabbed/Stacked Tiling.
  • Awesome-style tiling, using Lua to define window placement.
  • In-place restart of Way Cooler, allowing iterative configuration development.
  • Multi-head support.

Track the progress of these features on our issues page.