herbe

[fork] notifications
git clone https://hhvn.uk/herbe
git clone git://hhvn.uk/herbe
Log | Files | Refs | README | LICENSE

README.md (4863B)


      1 # 🌱 herbe
      2 > Daemon-less notifications without D-Bus. Minimal and lightweight.
      3 
      4 <p align="center">
      5   <img src="https://user-images.githubusercontent.com/24730635/90975811-cd62fd00-e537-11ea-9169-92e68a71d0a0.gif" />
      6 </p>
      7 
      8 ## Table of contents
      9 
     10 * [Usage](#usage)
     11   * [Patches](#patches)
     12   * [Dismiss a notification](#dismiss-a-notification)
     13   * [Actions](#actions)
     14   * [Newlines](#newlines)
     15   * [Multiple notifications](#multiple-notifications)
     16   * [Notifications don't show up](#notifications-dont-show-up)
     17 * [Installation](#installation)
     18   * [Packages](#packages)
     19   * [Dependencies](#dependencies)
     20   * [Build](#build)
     21 * [Configuration](#configuration)
     22 * [Contribute](#contribute)
     23 
     24 ## Usage
     25 
     26 ### Patches
     27 [List of available patches](https://github.com/dudik/herbe/pulls?q=is%3Aopen+is%3Apr+label%3Apatch)
     28 
     29 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](https://github.com/dudik/herbe/pull/11). Thank you.
     30 
     31 _Note: This patching method was heavily inspired by [dylan's sowm](https://github.com/dylanaraps/sowm)._
     32 
     33 ### Dismiss a notification
     34 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:
     35 ```shell
     36 $ pkill -SIGUSR1 herbe
     37 ```
     38 Dismissed notifications return exit code 2.
     39 
     40 ### Actions
     41 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.
     42 An accepted notification always returns exit code 0. To specify an action:
     43 ```shell
     44 $ herbe "Notification body" && echo "This is an action"
     45 ```
     46 Where everything after `&&` is the action and will get executed after the notification gets accepted.
     47 
     48 ### Newlines
     49 Every command line argument gets printed on a separate line by default e.g.:
     50 ```shell
     51 $ herbe "First line" "Second line" "Third line" ...
     52 ```
     53 You can also use `\n` e.g. in `bash`:
     54 ```shell
     55 $ herbe $'First line\nSecond line\nThird line'
     56 ```
     57 But by default `herbe` prints `\n` literally:
     58 ```shell
     59 $ herbe "First line\nStill the first line"
     60 ```
     61 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):
     62 ```shell
     63 $ herbe "$(ps axch -o cmd:15,%cpu --sort=-%cpu | head)"
     64 ```
     65 
     66 ### Multiple notifications
     67 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.
     68 
     69 ### Notifications don't show up
     70 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:
     71 ```shell
     72 $ pkill -SIGKILL herbe
     73 ```
     74 Then just call `herbe` without any arguments:
     75 ```shell
     76 $ herbe
     77 ```
     78 Notifications should now show up as expected.
     79 
     80 Don't ever send any signals to `herbe` except these:
     81 ```shell
     82 # same as pkill -SIGTERM herbe, terminates every running herbe process
     83 $ pkill herbe
     84 
     85 $ pkill -SIGUSR1 herbe
     86 $ pkill -SIGUSR2 herbe
     87 ```
     88 And you should be fine. That's all you really need to interact with `herbe`.
     89 
     90 ## Installation
     91 ### Packages
     92 [![Packaging status](https://repology.org/badge/vertical-allrepos/herbe.svg)](https://repology.org/project/herbe/versions)
     93 
     94 [OpenBSD patch](https://github.com/dudik/herbe/pull/4)
     95 
     96 **Only the [herbe-git AUR package](https://aur.archlinux.org/packages/herbe-git/) is maintained by me.**
     97 
     98 ### Dependencies
     99 * X11 (Xlib)
    100 * Xft
    101 * freetype2
    102 
    103 The names of packages are different depending on which distribution you use.
    104 For example, if you use [Void Linux](https://voidlinux.org/) you will have to install these dependencies:
    105 ```shell
    106 sudo xbps-install base-devel libX11-devel libXft-devel
    107 ```
    108 
    109 ### Build
    110 ```shell
    111 git clone https://github.com/dudik/herbe
    112 cd herbe
    113 sudo make install
    114 ```
    115 `make install` requires root privileges because it copies the resulting binary to `/usr/local/bin`. This makes `herbe` accessible globally.
    116 
    117 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.
    118 
    119 ## Configuration
    120 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.
    121 
    122 [Xresources patch](https://github.com/dudik/herbe/pull/11)
    123 
    124 ## Contribute
    125 If you want to report a bug or you have a feature request, feel free to [open an issue](https://github.com/dudik/herbe/issues).