App launcher and fuzzy finder for Wayland, inspired by rofi(1) and dmenu(1).
Find a file
Daniel Eklöf 35ce4b595e
All checks were successful
builds.sr.ht/freebsd-x64 Job completed
ci/woodpecker/push/woodpecker Pipeline was successful
completions: add missing --launch-prefix
2025-05-26 12:50:55 +02:00
.builds ci: freebsd: 'wlroots' is not a package 2025-03-05 09:14:53 +01:00
.forgejo/issue_template docs: typo fix in issue template 2025-02-25 11:58:17 -05:00
3rd-party/nanosvg nanosvg: update to ea6a6aca009422bba0dbad4c80df6e6ba0c82183 2025-01-24 07:05:33 +01:00
completions completions: add missing --launch-prefix 2025-05-26 12:50:55 +02:00
doc config: change default icon theme from 'hicolor' to 'default' 2025-05-26 10:57:30 +02:00
external external: wlr-protocols: bump 2021-06-27 10:52:14 +02:00
nanosvg meson/nanosvg: add support for linking against system's nanosvg 2024-07-18 18:09:55 +02:00
subprojects subprojects: use meson *.wrap files for tllist+fcft 2020-12-24 13:26:02 +01:00
test test: Add test coverage for fzf mode sorting early-string matches higher 2024-10-02 09:38:33 -04:00
.gitignore gitignore: ignore .cache 2022-08-09 18:42:34 +02:00
.gitmodules fcft/tllist: remove git submodules 2020-01-11 14:47:47 +01:00
.woodpecker.yaml ci: "meson [options]" is deprecated (do "meson setup [options]" instead) 2025-01-04 12:40:11 +01:00
application.c dmenu: --with-nth: don't match "other" columns 2025-05-12 10:59:45 +02:00
application.h dmenu: --with-nth: don't match "other" columns 2025-05-12 10:59:45 +02:00
CHANGELOG.md completions: add missing --launch-prefix 2025-05-26 12:50:55 +02:00
char32.c macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
char32.h macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
clipboard.c clipboard: disable debug logging 2025-05-11 18:04:07 +02:00
clipboard.h Add support for pasting text 2024-08-24 08:34:51 +02:00
column.c Add --accept-nth command line option to select column to output 2025-03-09 11:48:31 +01:00
column.h Add --accept-nth command line option to select column to output 2025-03-09 11:48:31 +01:00
config.c config: change default icon theme from 'hicolor' to 'default' 2025-05-26 10:57:30 +02:00
config.h config: add scaling-filter option 2025-05-19 06:47:53 +02:00
debug.c render: render match list using multiple rendering threads 2024-08-14 09:50:24 +02:00
debug.h render: render match list using multiple rendering threads 2024-08-14 09:50:24 +02:00
dmenu.c dmenu: --with-nth: don't match "other" columns 2025-05-12 10:59:45 +02:00
dmenu.h dmenu: --with-nth: don't match "other" columns 2025-05-12 10:59:45 +02:00
event.c dmenu: start rendering input before STDIN has been closed 2024-08-20 08:08:04 +02:00
event.h dmenu: start rendering input before STDIN has been closed 2024-08-20 08:08:04 +02:00
fdm.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
fdm.h fdm: sync with latest FDM - fdm_del() now closes FD 2019-11-05 11:00:15 +01:00
fuzzel.ini config: change default icon theme from 'hicolor' to 'default' 2025-05-26 10:57:30 +02:00
generate-version.sh generate-version: handle git repo not having any tags 2021-10-11 20:22:58 +02:00
icon.c icon: fix theme lookup in ~/.icons and /usr/share/pixmaps 2025-05-26 11:10:01 +02:00
icon.h icon: in application mode (not dmenu), filter out non-application icon theme dirs 2025-05-16 17:19:10 +02:00
key-binding.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
key-binding.h Add support for pasting text 2024-08-24 08:34:51 +02:00
LICENSE license: fix bad copy-paste: first commit was in 2019 2020-07-25 08:51:51 +02:00
log.c macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
log.h macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
macros.h macros: replace direct use of __attribute__ with portable wrapper macros 2025-01-30 07:28:16 +00:00
main.c config: change default icon theme from 'hicolor' to 'default' 2025-05-26 10:57:30 +02:00
match.c match+render: log number of worker threads (at info level) 2025-05-16 09:27:05 +02:00
match.h Add --select-index=INDEX command line option 2025-02-03 08:15:37 +01:00
meson.build Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
meson_options.txt meson/nanosvg: add support for linking against system's nanosvg 2024-07-18 18:09:55 +02:00
nanosvg.c meson/nanosvg: add support for linking against system's nanosvg 2024-07-18 18:09:55 +02:00
nanosvgrast.c meson/nanosvg: add support for linking against system's nanosvg 2024-07-18 18:09:55 +02:00
path.c path/xdg/main: include errno(3) description in more LOG_WARN() messages 2025-01-28 17:55:07 +00:00
path.h Add --list-executables-in-path command line option 2024-01-05 11:14:36 +00:00
PKGBUILD meson+pkgbuild: bump version to 1.12.0 2025-04-10 12:22:21 +02:00
png-fuzzel.h Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
png.c Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
prompt.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
prompt.h Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
README.md readme: add liberapay donation button 2025-04-30 11:52:20 +02:00
render.c render: use the width of 'o' instead of 'W' when calculating window width 2025-05-22 11:01:51 +02:00
render.h Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
shm.c Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
shm.h Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
srgb.py Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
stride.h Add missing file 2019-09-29 13:00:03 +02:00
uri.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
uri.h Add support for pasting text 2024-08-24 08:34:51 +02:00
wayland.c debug: add a --print-timing-info command line option 2025-05-16 15:26:45 +02:00
wayland.h Implement gamma-correct blending 2025-05-11 18:04:09 +02:00
xdg.c xdg: don't double close .desktop FD 2025-03-26 14:57:23 +01:00
xdg.h config: new option filter-desktop 2023-06-06 09:31:32 -07:00
xmalloc.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
xmalloc.h Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
xsnprintf.c Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00
xsnprintf.h Add xmalloc.h and xsnprintf.h and use to improve/simplify error handling 2025-01-13 09:28:55 +01:00

CI status

Fuzzel

Fuzzel is a Wayland-native application launcher and fuzzy finder, inspired by rofi and dmenu.

Packaging status

Screenshot

Screenshot

Fuzzel, with transparency, on top of a browser window showing a diff of a fuzzel commit

Features

For app launching

  • Fuzzy-find applications from a list and launch them
  • Icon support
  • Remembers frequently launched applications
  • Customize which .desktop files are searched
  • Option to filter apps based on OnlyShowIn and NotShowIn
  • Startup notification support
  • Launch prefix option to customize how apps are launched
  • Display a large icon of current selection if there are only a few matches
  • Option to display executables in $PATH
  • Option to execute the input rather than return an app
  • Support for localized strings

For dmenu mode

  • dmenu mode where newline separated entries are read from STDIN
  • Support for Rofi's protocol to support icons
  • Optional cache with custom path
  • Password mode
  • Prompt-only mode
  • Exact-match option to support multi-stage menus
  • Option to return index of what's selected rather than what's selected
  • Some dmenu option compatibility. Invoking it as dmenu enables dmenu mode
  • Option for null-separated input

For all modes

  • Numerous customizable key bindings, based on Emacs
  • Mouse support
  • Paste support
  • Emoji support
  • A number of theming options, which can be set in a separate include file
  • fzf-style matching with ability to filter huge lists
  • Optimized for performance
  • Zsh and Fish completions
  • Support for true fractional scaling
  • Wayland native

For details, see man fuzzel and man fuzzel.ini

Requirements

Runtime

  • pixman
  • wayland (client and cursor libraries)
  • xkbcommon
  • cairo (optional, required by librsvg)
  • libpng (optional)
  • librsvg (optional, for enhanced SVG icon support)
  • fcft 1

Fuzzel uses the builtin nanosvg backend to render SVG icons by default. Since nanosvg is somewhat limited, we also offer a librsvg backend for SVG icons. Note that librsvg also requires cairo.

Building

  • meson
  • ninja
  • wayland protocols
  • scdoc
  • tllist 1

Installation

To build, first, create a build directory, and switch to it:

mkdir -p bld/release && cd bld/release

Second, configure the build (if you intend to install it globally, you might also want --prefix=/usr):

meson --buildtype=release \
    -Denable-cairo=disabled|enabled|auto \
    -Dpng-backend=none|libpng \
    -Dsvg-backend=none|librsvg|nanosvg \
    ../..

-D{png,svg}-backend can be used to force-enable or force-disable a specific png and/or svg backend. Note that nanosvg is builtin (i.e. it needs to external dependencies).

-Denable-cairo can be used to force-enable or force-disable cairo support. When disabled, fuzzel will not be able to draw rounded corners, nor will it support SVGs using the librsvg backend.

Three, build it:

ninja

You can now run it directly from the build directory:

./fuzzel

Use command line arguments to configure the look-and-feel:

./fuzzel --help

Optionally, install it:

ninja install

For more detailed configuration information, see the man pages:

man fuzzel
man fuzzel.ini

Testing

Fuzzel has some automated tests in test/. To run them, Fish shell and wtype are required. The test runner can be installed within Fish shell with:

fisher install jorgebucaran/fishtape

Once installed, the tests can be run with:

fishtape test/*.fish

License

Fuzzel is released under the MIT license.

Fuzzel uses nanosvg, released under the Zlib license.

Sponsoring/donations

Donate using Liberapay


  1. can also be built as subprojects, in which case they are statically linked. ↩︎