App Launchers in KDE
App launchers. Do you use one?
My intuition says that few people do. Most of the people I know who use app launchers are programmers, I don’t think I’ve ever seen a “normal” person who does.
But maybe they should. App launchers are incredibly useful, and can save you loads of time. They provide a free form of automation: with a single key combination you can access loads of normally obscure features of your computer.
Sadly, app launchers are not all created equal. Particularly on Linux, where app quality tends to vary wildly. I was unsatisfied with my choice of app launcher until recently: let’s talk about why, and what I did to fix it.
Once Upon a Time… There Was Alfred #
Back when I used a Mac, I used Alfred. And it was wonderful.
Alfred is the standard by which I judge other app launchers, and it’s a tough one to beat. Alfred is fast but powerful. It has all sorts of power features built-in, and the ability to create your own workflows, using a powerful (albeit sometimes confusing) gui.
Alfred did everything I wanted, and more, and it’s a tough one to beat. If it supported Linux, I would probably still use it.
Not only is it an app launcher, but also a clipboard manager, a search engine, a media controller. It has numerous features that don’t even seem like extra features: they just make sense, like the ability to lock and logout of your user session.
But it doesn’t support Linux, so I’ve had to look elsewhere, and I’ve had varying success. Let’s first discuss ULauncher.
ULauncher #
ULauncher is, aesthetically at least, the most like Alfred that I’ve seen. It has a very similar UI, similar themes, and a similar plugin system. I used ULauncher on Pop_OS! for several years, and I was happy with it.
The best thing about ULauncher is how easy it is, at least on Ubuntu-like distros. You install it and you’re good to go! It has a gui that allows you to customize themes and plugins.
It’s not as feature rich as Alfred, even with plugins, there isn’t as much you can do with it. But it has a standard feature set, and it worked well for me.
Unfortunately when I switched to KDE I started having problems. On KDE ULauncher was often slow, sometimes plugins failed to work, and sometimes applications wouldn’t show up. I’m not sure what is to blame—KDE, Wayland, or NixOS—but ULauncher just isn’t stable on my particular setup.
ULauncher is built with GTK, a Gnome project, so it makes sense that it would work better on a Gnome system, such as Ubuntu or Pop. GTK apps do tend to feel a bit slower on KDE, I have noticed.
So I figured I’d try KDE’s solution: KRunner.
KRunner #
KRunner is neat. It’s not just an application switcher, as the name implies, it’s a task runner. And like Alfred, it comes with a ton of built-in plugins you can use for common tasks.
KRunner is solid, but it has some rough edges that I had trouble overcoming. It feels like beta software, not like a polished product. Let me explain:
The first problem is that it’s slow. Out of the box, with no customizations, it usually takes a second or two to show up after I press my hotkey. A second or two doesn’t sound like a big deal, but with an app launcher it is disruptive.
Second, it doesn’t support a few obvious features. App launchers commonly keep a history of the commands you’ve run on them, and show your most frequently used commands at the top. Similarly, if you search for “Chrom” and select “Chromium”, then next time you search for “Chrom” Chromium should be at the top. These are small quality of life things, but the fact that KRunner doesn’t support them makes it feel half-baked. (Incidentally, this is also a problem with ULauncher)
Last but not least, plugins. One of the things I used frequently with both ULauncher and Alfred is a password workflow: a plugin that allows me to search for and copy any password from my password store. I found a plugin that was supposed to enable this for KRunner, but it was unmaintained and didn’t work.
That was a dealbreaker for me: I need to be able to quickly copy passwords, and I couldn’t find a way for KRunner to do that. So on to the next thing!
Dmenu and Alternatives #
Time to go off of the deepend: ULauncher and KRunner are nice “normal” app launchers. They are easy to install and use, and don’t require modifying obscure config files.
But with great ubiquity comes great impotency. When a tool is designed to work for everyone, you lose a lot of what could make it uniquely beneficial for you.
Enter Dmenu. Dmenu is a lightning fast task runner for X11, made by Suckless Software, with incredible extensibility. It’s essentially a visual interface for terminal commands, which means you can pipe any terminal output into it, and do with it what you like.
Sound scary enough for you? Yeah, me too. I’m not really looking to reinvent the wheel here: I want something that works well enough for my basic needs, but also allows me to add-on new features if I need it.
Dmenu is scary, and to be honest I didn’t even try it. It also only supports X11, and I typically use Wayland with KDE these days. So I went looking for an alternative, and found Rofi/Wofi.
Rofi #
Rofi is like Dmenu with some extra bells and whistles. It’s prettier out-of-the-box and comes with the basic features I need: app switching, theming, plugins, and even basic scripting ability.
You can also run it in “dmenu mode” which allows you to use shell scripts like Dmenu. Ultimate customizability.
My biggest issue with Rofi is that it doesn’t support Wayland. There are a few ways to get around this:
- Use Wofi, which is a Wayland fork. I tried it and it works: but apparently it’s no longer actively maintained, so I ultimately abandoned it.
- Use fuzzel. Kind of like Rofi for Wayland, but without as many features. Fuzzel is great out of the box, but it doesn’t support some of Rofi’s advanced features. Subjective, but it also feels a little less polished to me.
- Use the Wayland branch of Rofi. This is the method I ended up using. I think it’s still considered beta, but it’s working great for me. And on Nix it’s just called|
rofi-wayland.
After using Rofi for a month, I’m very happy with it. It requires more setup than any of the others we discussed, but it’s lightning fast and can do anything I want it to.
A Few Rofi Tips #
- You have to set up your own keyboard shortcuts. I wish I had a better way to do this, but I just added it in my KDE settings app.
- Look into plugins and themes. Both enable you to use other people’s work to get off the ground quickly.
- Don’t forget to enable icons!
On NixOS using Home Manager, installing rofi-wayland looks like this:
programs.rofi = {
enable = true;
package = pkgs.rofi-wayland.override { plugins = [ pkgs.rofi-obsidian ]; };
terminal = "${pkgs.kitty}/bin/kitty";
theme = ./config/rofi.rasi;
extraConfig = {
"combi-modes" = ["drun" "window" "obsidian"];
modes = [
"drun"
"run"
"obsidian:rofi-obsidian"
"combi"
];
};
};
Notice the override: that allows you to both use the rofi-wayland package and to add additional plugins. Naturally, I added an Obsidian plugin.
I also include a theme file, which I copied from a preset and tweaked as needed.
Conclusion #
Rofi is the best app launcher I’ve found on Linux so far. It has the perfect combination of speed and built-in features. It’s a little more technical to setup than some, but with that comes the ability to mold it into exactly the shape you want.
I suspect I’ll use Rofi for many years to come, and will continue to improve it as time goes on.
Changelog
- New post about app launchers