(This uses my Fuzzel configuration, see below for more details)
Raffi is a launcher for the Fuzzel utility that uses a YAML configuration file to define the commands to be executed.
Visit the release page and download the archive or package for your platform.
Ensure you have Fuzzel installed.
brew tap chmouel/raffi https://github.com/chmouel/raffi
brew install raffi
cargo install raffi
Using your preferred AUR helper, for example, yay:
yay -S raffi-bin
NixOS / Nix (unstable)
nix-shell -p raffi
You can launch Raffi directly, and it will run the binary and arguments as defined in the configuration.
Use the -p/--print-only
option to only print the command to be executed.
Specify a custom configuration file with the -c/--configfile
option.
Icon paths are automatically searched on your system and cached. To refresh the cache, use the -r/--refresh-cache
option.
Here is an example of how to use Raffi with Sway:
// Set a variable that can be easily used later in the config file
// These variables are optional
set $menu raffi -p
// Mod4 is the Super key for me, but use whatever you want.
set $super Mod4
// Bind the Super+Space key to launch the launcher
bindsym $super+Space exec $menu | xargs swaymsg exec --
First, configure your Fuzzel appearance and behavior by editing the file ~/.config/fuzzel/fuzzel.ini
. See the manpages here. Below is my configuration, which matches the screenshot above:
dpi-aware=yes
font=RobotoMonoNerdFont-Thin:size=16
terminal=kitty
width=50
layer=overlay
exit-on-keyboard-focus-loss=no
inner-pad=15
fields=filename,name
[colors]
background=282a36ff
text=f8f8f2ff
match=8be9fdff
selection-match=8be9fdff
selection=44475add
selection-text=f8f8f2ff
border=bd93f9ff
The Raffi configuration file is located at $HOME/.config/raffi/raffi.yaml
and has the following structure:
firefox:
binary: firefox
args: [--marionette]
icon: firefox
description: Firefox browser with marionette enabled
- binary: The binary to be executed (if it does not exist in the PATH, it will be skipped).
- description: The description to be displayed in the launcher.
- args: The arguments to be passed to the binary as an array, e.g.,
[foo, bar]
(optional). - icon: The icon to be displayed in the launcher. If not specified, it will
try to use the binary name (optional). Icons are searched in
/usr/share/icons
,/usr/share/pixmaps
,$HOME/.local/share/icons
, or$XDG_DATA_HOME
if set and matched to the icon name. The icons paths are cached for optimisation, use the-r
option to refresh it. You can also specify a full path to the icon.
There is limited support for conditions, allowing you to run a command only if a specific condition is met. These conditions are optional and cannot be combined.
- ifexist: Display the entry if a binary exists in the PATH or if the full path is specified.
- ifenvset: Display the entry if the environment variable is set.
- ifenvnotset: Display the entry if the environment variable is not set.
- ifenveq: Display the entry if the environment variable equals a specified value.
Here is an example of how to use conditions, this will only display the entry
if the DESKTOP_SESSION
environment variable is set to GNOME
and the
WAYLAND_DISPLAY
environment variable is set and the firefox
binary exists
in the PATH:
ifenveq: [DESKTOP_SESSION, GNOME]
ifenvset: WAYLAND_DISPLAY
ifexist: firefox
See the file located in examples/raffi.yaml for a more comprehensive example.
- Chmouel Boudjnah https://github.com/chmouel
- Fediverse - <@[email protected]>
- Twitter - <@chmouel>
- Blog - <https://blog.chmouel.com>