Aral Balkan

Mastodon icon RSS feed icon

My three-month-long elementary OS 6 upgrade adventure in three parts. (Part 1: Catts)

Screenshot of Catts in action. The switcher contains three icons: Tasks, AppCenter, and Calculator. AppCenter is selected. The switcher is in dark mode. The wallpaper behind the switcher is an illustration of cats on a roof. One (pink) looks out into the distance, a tiny blue one is about to paw its tail playfully, and a green one watches the scene.

I just upgraded my operating system from elementary OS 5 to 6.

It only took me three months.

The journey begins

elementary OS 6 (Odin) was officially released on August 10th, 2021.

Since there is no auto-update tool, you have to back everything up, wipe your computer, and install the new operating system from scratch. It took me a few days to build up the courage to do so. On August 14th, after publicly documenting some of the things I was backing up, I took the plunge.

A bumpy start

I hit my first hurdle almost immediately when I realised that I’d been using a custom task switcher called gala-alt-tab-plus that hadn’t been updated for Odin. Speaking with Mark, the maintainer, it didn’t look like it was going to be a trivial update either.

So I decided to bite the nail on the head and make an Odin-only version called Calmer Alt-Tab Task Switcher (Catts).

’Mentary songs for ’mentary Catts

I wanted Catts to eventually become the default task manager in elementary OS, not languish as an option for a handful of technically-savvy people for over seven years, like its precursor.

One way of achieving that might have been to take part in endless bikeshedding in GitHub issues, etc. That’s really not what I’m built for. So, instead, I knew what I needed to do was to show not tell:

  1. Make it easy to install (and uninstall) so anyone, including the elementary team, could try it out easily.

    This way, even if it wasn’t immediately accepted, people could still install and use it and, if enough people did, it might be included as the default later on.

  2. Make the design case for why it is better than the default task switcher and do so visually in a manner that is difficult to ignore.

  3. Make it easy to adopt. Don’t create obstacles to it being incorporated into the OS (so, for example, adhere to coding conventions).

Fast forward a couple of days and I had a rudimentary version working and ready to test on elementary OS 6.

And this is how I announced it in the readme, to cover the points above:

Why Catts?

A quick visual demonstration should suffice (if it doesn’t, please read on for the various reasons outlined below.)

Elementary OS stock task switcher:

Screen recording of the default elementary OS task switcher: windows animate in and out while switching between apps and the dock is repurposed as the task switcher view and morphs from the dock icons to the >active app icons during the task switching process.

Catts:

Screen recording of the Catts task switcher for elementary OS. It resembles the task switchers found in other operating systems like macOS, Windows, and many other Linux flavours. The active apps are shown as >a row of icons and an indicator shows which app will be active when you release the alt key. The window title of the selected app is also shown. Nothing animates.

In other words, because:

In elementary OS, however, the task switcher:

Basically, the task switcher in elementary OS is unusable.

This one, despite its limitations, at least fixes the above issues.

Catts:

I feel elementary OS would be far more usable in general – not to mention more familiar for folks just coming over from macOS or Windows – if we were to replace the default task switcher with Catts.

In fact, I’ve opened a feature request on the elementary OS Gala to do just that. If you agree, please give it a thumbs up to show your support.

The happy ending?

To cut a long story short, Catts was brought into elementary OS as the default Window Switcher last week and should be in November’s operating system updates.

I want to take this opportunity to thank David M. Hewitt for taking the initiative and his hard work in making this happen. I also want to thank Cassidy and Dani for their support and input throughout the process.

And yet…

So is it time to put Catts to rest?

Not just yet.

While I’m very happy to see a version of Catts incorporated into elementary OS, there is one major outstanding issue. The version that is being added to elementary OS is inaccessible. I was able to cobble together some basic accessibility for the widget using whatever scant documentation and code I could find in the GNOME/Gtk/Vala/elementary OS world and the current release of Catts does have that implemented.

However, the version being merged into the OS will be entirely inaccessible.

So, if you need an (even if imperfectly) accessible task switcher, please still keep using Catts until the elementary folks manage to implement it properly in Gala.

I’ve opened an issue to track this here: https://github.com/elementary/gala/issues/1301

I’ve also opened a discussion in the elementary OS Human Interface Guidelines asking for accessibility/inclusivity to be adopted as a core tenet of the operating system and for both the operating system itself and the developer documentation to be updated accordingly. Please feel free to share your thoughts on that here: https://github.com/elementary/hig/discussions/51

Once the task switcher in Vala is accessible, I will most likely retire Catts.

But that’s not the end of the story

Three months? Surely, Catts didn’t take three months to build (it didn’t). Laura and I took about a month off after two years of the pandemic to go see our parents right after we got our vaccinations. It took me another few weeks1 to build out two other projects as the task switcher wasn’t the only thing that had issues.

You see, I had this little git commit message editor called Gnomit I wrote that I loved using everyday. With elementary OS 6, it stopped displaying correctly in dark mode. So, of course, this bugged me (because, hello, welcome to my life) so I decided to rewrite it specifically for elementary OS and to do so “properly” in Vala2 to get a feel for the recommended development process.

As I worked through the developer documentation, I saw there was a huge amount of boilerplate that needs to be implemented for every elementary OS app in order to adhere to the elementary OS Human Interface Guidelines.

So I decided to create a best-practices application template for elementary OS called Watson and to use that to create my new git commit message editor, Comet.3

I’ll cover Watson and Comet in Parts 2 and 3.

Like this? Fund us!

Small Technology Foundation is a tiny, independent not-for-profit.

We exist in part thanks to patronage by people like you. If you share our vision and want to support our work, please become a patron or donate to us today and help us continue to exist.


  1. And we were in the process of finding a new place to live and moving to a new city throughout all this so it did all take longer than it otherwise could have. But that’s just life, I guess. ↩︎

  2. I wrote the original in GJS. ↩︎

  3. This, kids, is what we call “yak shaving.” ↩︎