Keyboard driven and lightweight Wayland notification daemon for wlroots-based compositors.
Find a file
Daniel Eklöf 7d60235aea
All checks were successful
builds.sr.ht/alpine-x64 Job completed
builds.sr.ht/freebsd-x64 Job completed
ci/woodpecker/push/woodpecker Pipeline was successful
notification: free unused icon when max-size is 0
2025-04-14 12:43:26 +02:00
.builds builds (sr.ht): disable codespell, don't try to install wlroots 2025-04-14 12:30:37 +02:00
3rd-party/nanosvg nanosvg: update to ea6a6aca009422bba0dbad4c80df6e6ba0c82183 2025-01-24 07:04:42 +01:00
completions add pause/unpause commands 2024-01-27 21:36:32 +01:00
dbus meson: move fnott.service.in to dbus subdirectory 2024-04-30 07:57:31 +02:00
doc notification: max-icon-size=0 disables icons 2025-04-14 12:39:00 +02:00
external wayland: add support for the KDE idle protocol 2022-10-21 20:06:29 +02:00
nanosvg meson/nanosvg: support linking against a system library 2024-07-18 18:06:43 +02:00
subprojects subprojects: use meson wrap files for tllist+fcft 2020-12-25 11:58:06 +01:00
systemd meson: move fnott.service.in to systemd subdirectory 2024-04-30 08:00:22 +02:00
.gitignore gitignore: ignore compile_commands.json 2021-06-13 15:39:34 +02:00
.gitmodules update wlr-protocols url 2022-07-27 22:15:09 -05:00
.woodpecker.yaml ci: group -> depends_on 2024-04-17 09:48:35 +02:00
CHANGELOG.md notification: max-icon-size=0 disables icons 2025-04-14 12:39:00 +02:00
char32.c char32: mbsntoc32() returns a size_t, not a char32_t 2024-04-20 08:23:11 +02:00
char32.h fcft: adapt to API changes in fcft-3.x 2022-02-05 16:40:58 +01:00
config.c config: add anchor=center 2024-09-13 08:44:45 +02:00
config.h config: add anchor=center 2024-09-13 08:44:45 +02:00
ctrl-protocol.h add support for xdg activation 2024-07-25 16:05:59 +02:00
ctrl.c add support for xdg activation 2024-07-25 16:05:59 +02:00
ctrl.h ctrl: add a dbus member to the ctrl object 2019-10-18 23:27:53 +02:00
dbus.c dbus: dispatch initial messages immediately 2024-10-02 07:45:37 +02:00
dbus.h dbus: dispatch initial messages immediately 2024-10-02 07:45:37 +02:00
fdm.c tllist: is now an external "library", so use <> includes 2019-11-17 19:19:17 +01:00
fdm.h fdm: sync with latest FDM - fdm_del() now closes FD 2019-11-05 10:58:30 +01:00
fnott.desktop Add fnott.desktop 2019-10-12 20:12:41 +02:00
fnott.ini Added rounded corners on borders. 2024-07-18 09:15:46 +02:00
fnottctl.c add support for xdg activation 2024-07-25 16:05:59 +02:00
generate-version.sh generate-version: handle git repo not having any tags 2021-10-11 20:25:37 +02:00
icon.c meson/nanosvg: support linking against a system library 2024-07-18 18:06:43 +02:00
icon.h icon: performance and correctness fixes to icon lookup 2022-04-24 13:36:44 +02:00
LICENSE license: fix bad copy-paste: first commit was in 2019 2020-07-25 08:51:33 +02:00
log.c log: respect the NO_COLOR environment variable 2024-07-18 08:34:42 +02:00
log.h log: make syslog facility and level configurable, always log filename+lineno 2020-02-20 20:00:04 +01:00
main.c dbus: dispatch initial messages immediately 2024-10-02 07:45:37 +02:00
meson.build meson+pkgbuild: bump version to 1.7.1 2025-02-03 08:19:26 +01:00
meson_options.txt meson/nanosvg: support linking against a system library 2024-07-18 18:06:43 +02:00
nanosvg.c meson/nanosvg: support linking against a system library 2024-07-18 18:06:43 +02:00
nanosvgrast.c meson/nanosvg: support linking against a system library 2024-07-18 18:06:43 +02:00
notification.c notification: free unused icon when max-size is 0 2025-04-14 12:43:26 +02:00
notification.h add support for xdg activation 2024-07-25 16:05:59 +02:00
PKGBUILD meson+pkgbuild: bump version to 1.7.1 2025-02-03 08:19:26 +01:00
png-fnott.h png: loads PNG files into pixman images 2019-10-11 21:01:42 +02:00
png.c png: do alpha pre-multiplication manually 2024-04-18 15:52:13 +02:00
README.md readme: repology: use four columns 2024-08-20 09:11:58 +02:00
screenshot-2.png readme: add second screenshot, with multiple notifications 2022-10-28 11:03:06 +02:00
screenshot.png Revert "screenshot: reduce size" 2022-10-28 11:11:24 +02:00
shm.c shm: try with MFD_NOEXEC_SEAL first, then without 2023-10-13 16:37:31 +02:00
shm.h wip: inital frame rendering of notification box 2019-10-08 19:07:23 +02:00
spawn.c spawn: new utility functions to expand and spawn a command template 2021-06-13 15:40:24 +02:00
spawn.h spawn: new utility functions to expand and spawn a command template 2021-06-13 15:40:24 +02:00
stride.h playing around with libdbus - we can receive notifications 2019-10-06 18:43:29 +02:00
svg.c meson/nanosvg: support linking against a system library 2024-07-18 18:06:43 +02:00
svg.h icon: use nanosvg to rasterize SVG images 2019-10-12 17:12:23 +02:00
tokenize.c config: add ‘play-sound’ option to fnott.ini 2021-06-13 15:40:24 +02:00
tokenize.h config: add ‘play-sound’ option to fnott.ini 2021-06-13 15:40:24 +02:00
uri.c uri: deocoded_len is unused 2023-03-31 13:07:52 +02:00
uri.h dbus: parse file:// URIs in icon paths 2022-10-28 10:39:43 +02:00
wayland.c add support for xdg activation 2024-07-25 16:05:59 +02:00
wayland.h add support for xdg activation 2024-07-25 16:05:59 +02:00
xdg.c icon: performance and correctness fixes to icon lookup 2022-04-24 13:36:44 +02:00
xdg.h icon: performance and correctness fixes to icon lookup 2022-04-24 13:36:44 +02:00

CI status

Fnott

Fnott is a keyboard driven and lightweight notification daemon for wlroots-based Wayland compositors.

It implements (parts of) the Desktop Notifications Specification.

Packaging status

Supports styling and progress hints:

screenshot

Notifications are automatically sized (with the possibility of limiting their max width and height):

screenshot-2

Supported features

  • Summary
  • Body
  • Actions (requires a dmenu-like utility to display and let user select action)
  • Urgency
  • Icons
    • PNGs (using libpng)
    • SVGs (using bundled nanosvg)
  • Markup
  • Timeout

More documentation is available in the installed man pages:

Requirements

Running

  • fontconfig
  • freetype
  • pixman
  • libpng
  • wayland (client and cursor libraries)
  • wlroots*
  • dbus
  • fcft, unless built as a subproject

* Fnott must be run in a Wayland compositor that implements the wlroots protocols.

Building

In addition to the dev variant of the packages above, you need:

  • meson
  • ninja
  • scdoc
  • wayland-protocols
  • tllist, unless built as a subproject

Usage

Copy the example fnott.ini to ${HOME}/.config/fnott/fnott.ini and edit to your liking.

Start the daemon by running fnott. Keep in mind that your environment should start it automatically when a notification is emitted.

if your environment doesn't do it automatically, you need to start a dbus session yourself:

dbus-daemon --session --address=unix:path=$XDG_RUNTIME_DIR/bus

Test it with e.g. notify-send "this is the summary" "this is the body".

Use fnottctl dismiss to dismiss the highest priority notification (usually the oldest), fnottctl dismiss all to dismiss all notifications, or fnottctl dismiss <id> to dismiss a specific notification (use fnottctl list to list currently active notifications).

Use fnottctl pause to disable notifications. fnottctl unpause will re-enable notifications.

Additionally if you compositor implements either the KDE idle protocol, or the newer idle-notify protocol, fnott will not dismiss any notification if you are idle by the amount of time configured in fnott.ini

You can also click on a notification to dismiss it.

Note: you probably want to bind at least fnottctl dismiss to a keyboard shortcut in your Wayland compositor configuration.

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 ../..

Three, build it:

ninja

You can now run it directly from the build directory:

./fnott

Test that it works:

notify-send -a "MyApplicationName" "This Is The Summary" "hello world"

Optionally, install it:

ninja install

License

Fnott is released under the MIT license.

Fnott uses nanosvg, released under the Zlib license.