1
0
Fork
You've already forked fuzzel
0
forked from dnkl/fuzzel
App launcher and fuzzy finder for Wayland, inspired by rofi(1) and dmenu(1).
  • C 94.4%
  • Shell 3.8%
  • Meson 1.5%
  • Python 0.3%
Find a file
Daniel Eklöf 38e1c6ee0b
xdg: add support for TryExec
Handle similar to 'NoDisplay'. That is, keep the entry, but mark it as
not visible.
This ensures desktop file overrides, i.e.
 ~/.local/share/applications/foo.desktop
correctly overrides
 /usr/share/applications/foo.desktop
Closes #723 
2026年06月17日 15:13:45 +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 main: add --override=[section.]key=value command line option 2026年06月17日 13:01:25 +02:00
doc wayland: implement text-input-unstable-v3 for IME support 2026年06月17日 15:12:22 +02:00
external wayland: narrow use of transparent-first-frame hack 2026年03月03日 17:00:47 +01: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 🐛 Fix sort order regression from 1.14.0 2026年02月21日 09:20:38 +01:00
.editorconfig internal: Add .editorconfig for shared cross-editor settings 2025年08月24日 09:51:46 +02: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 launch-prefix: Pass more environment variables 2025年11月12日 11:52:12 +01:00
application.h launch-prefix: Pass more environment variables 2025年11月12日 11:52:12 +01:00
CHANGELOG.md xdg: add support for TryExec 2026年06月17日 15:13:45 +02:00
char32.c OpenBSD has UTF-32 2026年03月10日 23:11:25 +01: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 column: fix off-by-one when splitting input into columns 2025年08月23日 10:26:17 +02:00
column.h config: --nth-delimiter=CHR 2025年08月12日 07:39:31 +02:00
config.c config: add --mesg, --mesg-mode and --message-color command line options 2025年11月19日 08:20:19 +01:00
config.h config: add --mesg, --mesg-mode and --message-color command line options 2025年11月19日 08:20:19 +01: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: add support for --match-nth 2025年09月14日 07:53:01 +02:00
dmenu.h dmenu: add support for --match-nth 2025年09月14日 07:53:01 +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 docs: fuzzel.ini add auto-select default 2026年03月08日 18:05:12 +01:00
generate-version.sh generate-version: handle git repo not having any tags 2021年10月11日 20:22:58 +02:00
icon.c icon: skip non-existing theme directories as early as possible 2026年06月17日 11:26:48 +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 key-binding: fix crash in debug builds, if exiting early 2025年07月30日 15:43:07 +02:00
key-binding.h Add delete-line binding 2025年06月23日 11:56:36 -04: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 cache: fix incorrect cache write error message 2026年06月17日 14:11:35 +02:00
match.c 🐛 Fix sort order regression from 1.14.0 2026年02月21日 09:20:38 +01:00
match.h match: fzf: prioritize matches at word boundary, like fzf 2025年10月25日 18:41:38 -04:00
meson.build wayland: implement text-input-unstable-v3 for IME support 2026年06月17日 15:12:22 +02:00
meson_options.txt Add resvg as SVG render option. 2025年08月24日 09:44:52 +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.14.1 2026年03月03日 17:09:53 +01: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 render: scroll input to ensure cursor is always visible 2025年07月09日 08:01:25 +02: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 wayland: implement text-input-unstable-v3 for IME support 2026年06月17日 15:12:22 +02:00
render.c wayland: implement text-input-unstable-v3 for IME support 2026年06月17日 15:12:22 +02:00
render.h wayland: implement text-input-unstable-v3 for IME support 2026年06月17日 15:12:22 +02:00
shm.c shm: silence compiler warning 2026年06月17日 13:13:18 +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
timing.c timing: finish: use time_stamp() when stop == NULL 2025年09月12日 17:11:34 +02:00
timing.h timing: rename time_end() -> time_finish() 2025年09月12日 17:11:32 +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 wayland: implement text-input-unstable-v3 for IME support 2026年06月17日 15:12:22 +02:00
wayland.h wayland: implement text-input-unstable-v3 for IME support 2026年06月17日 15:12:22 +02:00
xdg.c xdg: add support for TryExec 2026年06月17日 15:13:45 +02: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 & touchscreen 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
  • IME support via the text-input-unstable-v3 protocol

For details, see man fuzzel

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 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. ↩︎