Stable v0.1.0

garnotify

FreeDesktop-compliant notification daemon with rules and history

garnotify is a notification daemon for the gardesk ecosystem that implements the FreeDesktop Desktop Notifications Specification 1.2. It features configurable popup positioning, per-urgency timeouts and colors, a powerful rule engine for filtering and modifying notifications, persistent history, Do Not Disturb modes, and smooth animations. Integrates with gar's Lua configuration for unified desktop setup.

🎯 RPM Available

Installation

garnotify is available as an RPM package for Fedora and RHEL-compatible distributions.

Using DNF (Recommended)

$sudo dnf config-manager --add-repo https://repos.musicsian.com/musicsian.repo
$sudo dnf install garnotify

Building from Source

$git clone https://github.com/espadon/gardesk
$cd gardesk/garnotify
$cargo build --release# builds garnotify and garnotifyctl
$sudo cp target/release/garnotify /usr/local/bin/
$sudo cp target/release/garnotifyctl /usr/local/bin/

Dependencies

  • gartk - gardesk UI toolkit for X11 rendering
  • cairo - 2D graphics library
  • pango - Text rendering with markup support
  • dbus - D-Bus session bus for FreeDesktop interface

Quick Start

Start the notification daemon and send a test notification.

Starting the Daemon

$garnotify daemon# start in background (default)
$garnotify daemon --foreground# start in foreground for debugging

Sending Test Notifications

$notify-send "Hello" "This is a test notification"
$notify-send -u critical "Alert" "Critical notification"
$notify-send -u low "Info" "Low priority notification"

Using garnotifyctl

$garnotifyctl status# check daemon status
$garnotifyctl count# get active notification count
$garnotifyctl list# list active notifications
$garnotifyctl close# close most recent notification

Autostart with gar

Add garnotify to your gar configuration to start automatically.

-- ~/.config/gar/init.lua
gar.exec_once("garnotify daemon")

systemd Service

Create a user service for automatic startup.

# ~/.config/systemd/user/garnotify.service
[Unit]
Description=garnotify notification daemon
PartOf=graphical-session.target

[Service]
Type=simple
ExecStart=/usr/bin/garnotify daemon --foreground
Restart=on-failure

[Install]
WantedBy=graphical-session.target
$systemctl --user daemon-reload
$systemctl --user enable --now garnotify.service

Replace Existing Daemon

Only one notification daemon can claim the D-Bus name. Stop existing daemons first.

$pkill dunst# stop dunst if running
$pkill mako# stop mako if running
$garnotify daemon