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