All Projects → dudik → Herbe

dudik / Herbe

Licence: mit
Daemon-less notifications without D-Bus. Minimal and lightweight.

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Herbe

koochak
A minimal & lightweight CSS framework
Stars: ✭ 15 (-93.62%)
Mutual labels:  lightweight, minimal
Pine
A modern, native macOS markdown editor
Stars: ✭ 2,818 (+1099.15%)
Mutual labels:  lightweight, minimal
natick
natickOS - A minimal, lightweight, research Linux Distribution
Stars: ✭ 33 (-85.96%)
Mutual labels:  lightweight, minimal
tiny-framework
A light wight easy to use RESTful apis framework for education & demo purposes. stripped down framework to the fundamental components that that every one would essentially need to (learn / make a demo application).
Stars: ✭ 13 (-94.47%)
Mutual labels:  lightweight, minimal
Beedle
A tiny library inspired by Redux & Vuex to help you manage state in your JavaScript apps
Stars: ✭ 329 (+40%)
Mutual labels:  lightweight, minimal
Pico
Graceful & Minimal CSS design system in pure semantic HTML
Stars: ✭ 89 (-62.13%)
Mutual labels:  lightweight, minimal
Domvm
DOM ViewModel - A thin, fast, dependency-free vdom view layer
Stars: ✭ 581 (+147.23%)
Mutual labels:  lightweight, minimal
Bonsai
🌱 a tiny distro-independent package manager
Stars: ✭ 188 (-20%)
Mutual labels:  lightweight, minimal
Textosaurus
Cross-platform text editor based on Qt and Scintilla.
Stars: ✭ 224 (-4.68%)
Mutual labels:  lightweight
Imdn
Lightweight Image Super-Resolution with Information Multi-distillation Network (ACM MM 2019, Winner Award of ICCVW AIM 2019 Constrained SR Track1&Track2)
Stars: ✭ 229 (-2.55%)
Mutual labels:  lightweight
Apns2
⚡ HTTP/2 Apple Push Notification Service (APNs) push provider for Go — Send push notifications to iOS, tvOS, Safari and OSX apps, using the APNs HTTP/2 protocol.
Stars: ✭ 2,569 (+993.19%)
Mutual labels:  notifications
Flexml
🚀基于Litho的Android高性能动态业务容器。
Stars: ✭ 225 (-4.26%)
Mutual labels:  lightweight
Alert After
Get a desktop notification after a command finishes executing.
Stars: ✭ 230 (-2.13%)
Mutual labels:  notifications
Rspec Nc
🚦 RSpec formatter for OS X's Notification Center
Stars: ✭ 223 (-5.11%)
Mutual labels:  notifications
Minwiz
Minimal starter kit for under 2 KB sites
Stars: ✭ 228 (-2.98%)
Mutual labels:  minimal
Ombi
Want a Movie or TV Show on Plex/Emby/Jellyfin? Use Ombi!
Stars: ✭ 2,711 (+1053.62%)
Mutual labels:  notifications
Cargo
🚂🚋🚋 A browser with almost no UI.
Stars: ✭ 221 (-5.96%)
Mutual labels:  minimal
Homepage
A simple, standalone, self-hosted PHP page that is your window to your server and the web.
Stars: ✭ 234 (-0.43%)
Mutual labels:  minimal
Overlay support
a flutter toast and notification library
Stars: ✭ 232 (-1.28%)
Mutual labels:  notifications
Archie
A minimal Hugo Theme
Stars: ✭ 226 (-3.83%)
Mutual labels:  minimal

🌱 herbe

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

Features

  • Under 200 lines of code
  • Doesn't run in the background, just displays the notification and exits
  • No external dependencies except Xlib and Xft
  • Configurable through config.h or Xresources (using this patch)
  • Actions support
  • Extensible through patches

Table of contents

Usage

Patches

List of available patches

To create a new patch you'll have to open a pull request with your changes. Append .diff to the pull request URL to get a downloadable diff file. Don't forget to prefix the title with patch: and to apply the patch label to it. For inspiration, look at my Xresources patch. Thank you.

Note: This patching method was heavily inspired by dylan's sowm.

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

Dismissed notifications return exit code 2.

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 0. To specify an action:

$ herbe "Notification body" && echo "This is an action"

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

Newlines

Every command line argument gets printed on a separate line by default e.g.:

$ herbe "First line" "Second line" "Third line" ...

You can also use \n e.g. in bash:

$ herbe $'First line\nSecond line\nThird line'

But by default herbe prints \n literally:

$ herbe "First line\nStill the first line"

Output of other programs will get printed correctly, just make sure to escape it (so you don't end up with every word on a separate line):

$ herbe "$(ps axch -o cmd:15,%cpu --sort=-%cpu | head)"

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.

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.

Installation

Packages

Packaging status

OpenBSD patch

FreeBSD patch

Wayland port by muevoid

Only the herbe-git AUR package is maintained by me.

Dependencies

  • X11 (Xlib)
  • Xft

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.

Xresources patch

Contribute

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].