What's new in Fuzzel 1.10

What's new in Fuzzel 1.10

Fuzzel is a rofi alternative for Wayland. It's a versatile picker and launcher utility for desktop Linux.

The last time I gave an update on Fuzzel was when 1.8 released which compared it to some altenatives. Let's look at some recent feature additions since then.

New --dmenu0 option

Perhaps you have some input that multiple lines per option and you'd like to pick one of them. Now you send that input to Fuzzel null-separated with the --dmenu option. The input will appear on a single line, but Fuzzel will output the item you select with the newlines intact. (#197)

Launch apps in their own cgroups

Instead of launching apps directly, a --launch-prefix can be used. What's that's done, the FUZZEL_DESKTOP_FILE_ID will be set. In combination, then can be used to set --launch-prefix=wrapper.sh where the wrapper looks something like this:

#!/bin/bash
app=$1
shift
systemd-run --unit=${app}@${RANDOM} -- ${app} $@

Using systemd-run places applications in their own cgroup, which allows stuff like the Out of Memory Killer (oomd) to selectively kill applications instead of taking down the whole session. Using the executable as the "application id" is not ideal: it can change between distribution (in case of name conflicts) and it does not always map to the application name. The new environment variable being set fixes that. (#110)

New keybindings

Several new default keybindings were added, improving compatibility with dmenu and Rofi.

  • Now you can go to the first and last lines with Control+Home and Control+End by default. Set alternate bindings with [key-bindings].first and [key-bindings].last (#210)
  • Users of bemenu or the hamster-dmenu time tracker may appreciate that's there now That Control+Tab will now insert the selected item as the filter by default. This can help build more complex interfaces. Update the binding with [key-bindings].insert-selected (#212)
  • Improving compatibility with dmenu, you can now use Control+u by default to delete everything before the cursor. Update the keybinding with delete-line-backward. As part of this, the delete-line binding got renamed to delete-line-forward (#307).
  • Another dmenu feature, now Fuzzel now supports ignoring the selected options and executing the input with Shift+Enter. This allows users to pick an option that is "none of the above" and proceed. Keybinding name is execute-input. (#252).

Wayland features

  • Startup activation was improved for compositors that support it to launch apps on the correct work space in more cases.
  • Support for the cursor-shape-v1 Wayland protocol adds support for custom cursor shapes.
  • Support for wp_fractional_scale_v1 (i.e. true fractional scaling) (#320).

Improved theme support

The Fuzzel config file now supports an include=<path> syntax allowing you to include other config fragments. A great use-cause would be themes published as standalone config fragments.  (#205).

Only show you apps for your desktop

If you want to hide apps that don't apply to your desktop, you can add filter-desktop=yes to the main section of your fuzzel.ini

This toggles filtering of .desktop files based on whether the values of OnlyShowIn and NotShowIn keys match $XDG_CURRENT_DESKTOP.

Anchor the window position

Fuzzel can now anchor the window to different positions– a feature that some other launchers like wl-dmenu had. The new --anchor allows setting the window position anchor (i.e. where on the screen the window should generally be positioned), such as toptop-leftbottom-rightcenter, etc. Defaults to center This can be set in fuzzel.ini as well. (#130).

I use this feature to create a small input window to rename my current Sway workspace. I set a Sway keybinding to run this script:

#!/bin/fish
set num (swaymsg -t get_workspaces | jq -r "map(select(.focused))[0].num"); 
set newname (echo '' | fuzzel --dmenu --lines=0 --anchor bottom -p 'New name for this workspace: ');
swaymsg "rename workspace to $num:$newname"

Yes, it's weird to pipe in empty input and pass `--lines=0`. There's an open feature request to support --prompt-only like dmenu -po

Select a specific entry by default

A feature that Rofi has is rofi -menu -select to select a specific entry by default. Some examples of how this could be used include (#237).:

  • Maintaining context in nested menu script
  • Pre-selecting today's date when showing a list of dates
  • When returning several MIME types, pre-select the first plain-text one.

To support this, Fuzzel has added --select=STRING as a command line and config file option.

Pick a binary to run

Fuzzel now has an option to add all binaries in $PATH to the list. That's the new --list-executables-in-path option. (#284).

Improved CLI and debugging experience

  • Fish shell completion
  • Check your config syntax with --check-config command line option (#264).
  • The ID of the selected .desktop file, and executed command line are now logged, at info level (#302).