Fuzzel: A great dmenu and rofi alternative for Wayland

Fuzzel is a versatile app and utility launcher for Wayland. If you are familiar with dmenu and rofi, fuzzel is largely compatible with them.
Version 1.8.0 of Fuzzel has recently been released with many upgrades.

Screenshots

What's Fuzzel good for?

Besides launching applications, as a dmenu alternative Fuzzel can be used for many utility tasks. These include:

Fuzzel's features

  • Fuzzel can filter and launch GUI apps with a fuzzy search. It has support for for choosing which fields in the XDG .desktop files. For faster performance, fuzzel is written in C and uses the "nanosvg" parser.
  • File-based configuration. Store your preferences in ~/.config/fuzzel/fuzzel.ini
  • Design customization. The look of fuzzel can be customized, including rounded corners and a semi-transparent background.
  • Emoji support. Fuzzel has good support for using Emojis in both prompts and items.
  • Fuzzel supports some Rofi features including custom keybindings and icons.
  • Caches recent/frequent app selections to build a smarter menu for future launches.

Example Fuzzel Config

Here's my Fuzzel config from ~/.config/fuzzel/fuzzel.ini:

dpi-aware=no
icon-theme=Papirus-Dark
width=25
font=Hack:weight=bold:size=36
line-height=50
fields=name,generic,comment,categories,filename,keywords
terminal=foot -e
prompt="❯   " 
layer=overlay
[colors]
background=282a36fa
selection=3d4474fa
border=fffffffa

[border]
radius=20

[dmenu]
exit-immediately-if-empty=yes

Example swayr config for fuzzel

Here's a swayr config from ~/.config/swayr/config.toml that can be used with swayr switch-window. It demonstrates using an emoji in a prompt and also use's Fuzzel's new support for icons in dmenu mode:

[menu]
executable = 'fuzzel'
args = [
    '--dmenu',
     '--prompt=🪟❯ ',
     '--width=100',
     '--font=Hack Nerd Font Mono:style=Bold:size=18',
     '--line-height=28',
]

[format]
window_format = "{app_name:{:<11.11}} “{title:{:<60.60}...}” {id:{:<3.3}} on {workspace_name:{:<13.13}}\u0000icon\u001f{app_icon}"
indent = '    '

If you are interested in how Fuzzel compares to some alternatives, read on!

Fuzzel vs Rofi's Wayland Fork

There's a fork of Rofi that supports Wayland. I used to use that. Then at some point, an upgrade to Rofi broke my theme, and it was just as easy to look for alternatives as it was try to figure out why the Rofi theme broke and how to fix it.

Rofi supports showing multiple modes at once and has some compiled plugins that push the limit of what can be done with a simple filtering interface. This could be considered advanced, but it's also more complex.

Rofi has code to support both X11 and Wayland and old and new theme syntax. Fuzzel works well on Wayland without the complexity of Rofi.

If you don't need the advanced features or X11 support, Fuzzel is a good choice.

Fuzzel vs Wofi

wofi first impression: rendering glitch and icon cut off in the middle.

Fuzzel and Wofi both have similar project goals to be Wayland-native Rofi alternatives that can both launch apps and provide an alternative to dmenu as well.

Wofi has more complex set of dependences, using GTK, CSS and Pango to render the output, while Fuzzel uses the simpler "fcft" project for font rendering and some simple configuration instead of CSS.

Some benefits of Wofi that are that it suports Pango (HTML) markup for the entries that that menu items can be selected with a mouse.

fuzzel is a little more user-friendly to get started with: If you just run fuzzel it does something useful: launch the application picker. If you just run wofi, it tells you needs a mode, but then doesn't tell you want the possible modes are:

$ wofi
I need a mode, please give me a mode, that's what --show is for

If you follow the advice and use --show, it still doesn't tell you want the possible modes are:

❯ wofi --show
wofi: option '--show' requires an argument
I need a mode, please give me a mode, that's what --show is for

OK, you try man wofi to find the possible modes, but they aren't there. It tells you read man 7 wofi.

It turns out there are just three modes, "run", "drun" and dmenu". If Wofi wanted to provide a better use experience, it could have mentioned this up front, or just started the drun mode by default. This would have been better:

$ wofi
Missing --show with one of: drun, run, dmenu

Also, when I tried to run wofi to get a screenshot for this post, there was a rendering error, as seen here.

So, I prefer the experience with Fuzzel!

Fuzzel vs Yofi

yofi first impression: no icons, odd font choice and an app title overruns right margin

Yofi is a minimalistic menu for Wayland as well, written in Rust. It also supports launching desktop applications, binaries and has a dmenu mode as well, which it calls "dialog". Like Fuzzel, it does not yet support selecting items with the keyboard.

Yofi has very little documentation in the README, no "man" page, and sparse documentation with "yofi help" as well. While it supports icons, they are not enabled by default. There is some documentation in the wiki pages.

Unlike Wofi, Fuzzel and Rofi, Yofi does not support support showing icons in dmenu ("dialog") mode. However, yofi does offer a feature to exclude certain apps from the app launcher, something I haven't noticed with the others.

A primary feature of Yofi seems to be that it's written in Rust. While it's certainly minimaal

For me, with icon support and better docs, Fuzzel wins.

Fuzzel vs Bemenu

Bemenu is a dmenu-inspired tool that can run on Ncurses, X11 or Wayland. Bemenu does not have a built in app launcher and does not support icons so it's a "no" vote for me.

A curious feature of bemenu though is that it supports both Vim bindings in addition to conventional bindings.

Notable mention: dmenu-wl

Fuzzel only supports vertical lists and a horizontal "dmenu" type display.

For a Wayland-native dmenu replacement for horizontal input selection, try dmenu-wl

There's a fork of dmenu-wl called wmenu. Wmenu doesn't attempt to document any advantages it has over dmenu-wl and it's documentation shows that has fewer options. So unless you have a problem with dmenu-wl, I see no reason to recommend wmenu.