No description
Find a file
2020-08-15 21:02:56 +02:00
.gitignore Don't unnecessarily call alarm when duration is zero 2020-08-13 17:37:40 +02:00
config.h Add support for 'actions' 2020-08-15 19:32:26 +02:00
herbe.c Add a way to unlink the semaphore 2020-08-15 20:16:31 +02:00
herbe.png Add screenshot 2020-08-08 18:05:06 +02:00
LICENSE Initial commit 2020-07-20 15:39:21 +02:00
makefile Notifications now wait in a 'queue' and get displayed one after another, add handling of 2 more signals for clean exit 2020-08-14 20:19:17 +02:00
README.md Update README.md 2020-08-15 21:02:56 +02:00

🌱 herbe

Daemon-less notifications without D-Bus. Minimal and lightweight.

herbe

Usage

$ herbe "herbe notifications" " " "Daemon-less notifications without D-Bus. Minimal and lightweight."

will display the notification shown above

Dismiss a notification

A notification can be dismissed either by clicking on it with DISMISS_BUTTON (set in config.h, defaults to left mouse button) or sending a SIGUSR1 signal to it:

$ pkill -SIGUSR1 herbe

Actions

Action is a piece of shell code that runs when a notification gets accepted. Accepting a notification is the same as dismissing it, but you have to use either ACTION_BUTTON (defaults to right mouse button) or the SIGUSR2 signal. An accepted notification always returns exit code 3. To specify an action:

$ herbe "Notificatio body" ; [ $? -eq 3 ] && echo "This is an action"

Where everything after && is the action and will get executed after the notification gets accepted.

Notifications don't show up

Most likely a running notification got terminated forcefully (SIGKILL or any uncaught signal) which caused the semaphore not getting unlocked. First, kill any herbe instance that is stuck:

$ pkill -SIGKILL herbe

Then just call herbe without any arguments:

$ herbe

Notifications should now show up as expected.

Don't ever send any signals to herbe except these:

# same as pkill -SIGTERM herbe, terminates every running herbe process
$ pkill herbe

$ pkill -SIGUSR1 herbe
$ pkill -SIGUSR2 herbe

And you should be fine. That's all you really need to interact with herbe.

Multiple notifications

Notifications are put in a queue and shown one after another in order of creation (first in, first out). They don't overlap and each one is shown for its entire duration.

Installation

Dependencies

  • X11 (Xlib)
  • Xft
  • freetype2

The names of packages are different depending on which distribution you use. For example, if you use Void Linux you will have to install these dependencies:

sudo xbps-install base-devel libX11-devel libXft-devel

Build

git clone https://github.com/dudik/herbe
cd herbe
sudo make install

make install requires root privileges because it copies the resulting binary to /usr/local/bin. This makes herbe accessible globally.

You can also use make clean to remove the binary from the build folder, sudo make uninstall to remove the binary from /usr/local/bin or just make to build the binary locally.

Configuration

herbe is configured at compile-time by editing config.h. Every option should be self-explanatory. There is no height option because height is determined by font size and text padding.

Contribute

If you want to report a bug or you have a feature request, feel free to open an issue.