pkgs: patch ZED to support desktop notifications
This commit is contained in:
parent
44f5afdcb2
commit
3bc422b57e
|
@ -48,4 +48,8 @@ final: prev: {
|
||||||
|
|
||||||
lix-plugins = prev.callPackage ./pkgs/lix/lix-plugins {};
|
lix-plugins = prev.callPackage ./pkgs/lix/lix-plugins {};
|
||||||
nix-plugins = builtins.throw "nix-plugins is not supported. see pkgs.lix-plugins";
|
nix-plugins = builtins.throw "nix-plugins is not supported. see pkgs.lix-plugins";
|
||||||
|
|
||||||
|
zfs_2_2 = prev.zfs_2_2.overrideAttrs {
|
||||||
|
patches = [ ./pkgs/zfs/0001-ZED-add-support-for-desktop-notifications-D-Bus.patch ];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
lib,
|
||||||
fetchFromGitHub,
|
fetchFromGitHub,
|
||||||
stdenv,
|
stdenv,
|
||||||
meson,
|
meson,
|
||||||
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
From 4ec38cf16ad4cc5f7bb00b93c32cd8f1d313c14c Mon Sep 17 00:00:00 2001
|
||||||
|
From: xenia <xenia@awoo.systems>
|
||||||
|
Date: Mon, 3 Feb 2025 21:36:29 -0500
|
||||||
|
Subject: [PATCH] ZED: add support for desktop notifications (D-Bus)
|
||||||
|
|
||||||
|
---
|
||||||
|
cmd/zed/zed.d/zed-functions.sh | 85 ++++++++++++++++++++++++++++++++++
|
||||||
|
cmd/zed/zed.d/zed.rc | 7 +++
|
||||||
|
2 files changed, 92 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/cmd/zed/zed.d/zed-functions.sh b/cmd/zed/zed.d/zed-functions.sh
|
||||||
|
index 3a2519633..d47ef070b 100644
|
||||||
|
--- a/cmd/zed/zed.d/zed-functions.sh
|
||||||
|
+++ b/cmd/zed/zed.d/zed-functions.sh
|
||||||
|
@@ -209,6 +209,10 @@ zed_notify()
|
||||||
|
[ "${rv}" -eq 0 ] && num_success=$((num_success + 1))
|
||||||
|
[ "${rv}" -eq 1 ] && num_failure=$((num_failure + 1))
|
||||||
|
|
||||||
|
+ zed_notify_dbus "${subject}" "${pathname}"; rv=$?
|
||||||
|
+ [ "${rv}" -eq 0 ] && num_success=$((num_success + 1))
|
||||||
|
+ [ "${rv}" -eq 1 ] && num_failure=$((num_failure + 1))
|
||||||
|
+
|
||||||
|
[ "${num_success}" -gt 0 ] && return 0
|
||||||
|
[ "${num_failure}" -gt 0 ] && return 1
|
||||||
|
return 2
|
||||||
|
@@ -624,6 +628,87 @@ zed_notify_ntfy()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+# zed_notify_dbus (subject, pathname)
|
||||||
|
+#
|
||||||
|
+# Send a notification via D-Bus ...
|
||||||
|
+# The variable (ZED_USE_DBUS) defines whether to use D-Bus.
|
||||||
|
+#
|
||||||
|
+# Requires systemd (busctl) executables to be installed in the standard PATH.
|
||||||
|
+#
|
||||||
|
+# References
|
||||||
|
+# ...
|
||||||
|
+#
|
||||||
|
+# Arguments
|
||||||
|
+# subject: notification subject
|
||||||
|
+# pathname: pathname containing the notification message (OPTIONAL)
|
||||||
|
+#
|
||||||
|
+# Globals
|
||||||
|
+# ZED_USE_DBUS
|
||||||
|
+#
|
||||||
|
+# Return
|
||||||
|
+# 0: notification sent
|
||||||
|
+# 1: notification failed
|
||||||
|
+# 2: not configured
|
||||||
|
+#
|
||||||
|
+zed_notify_dbus()
|
||||||
|
+{
|
||||||
|
+ local subject="$1"
|
||||||
|
+ local pathname="${2:-"/dev/null"}"
|
||||||
|
+ local msg_body
|
||||||
|
+ local msg_out
|
||||||
|
+ local msg_err
|
||||||
|
+ local exit_status=0
|
||||||
|
+ local dir
|
||||||
|
+ local userid
|
||||||
|
+
|
||||||
|
+ [ -n "${ZED_USE_DBUS}" ] || return 2
|
||||||
|
+
|
||||||
|
+ if [ ! -r "${pathname}" ]; then
|
||||||
|
+ zed_log_err "dbus cannot read \"${pathname}\""
|
||||||
|
+ return 1
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+ zed_check_cmd "busctl" || return 1
|
||||||
|
+
|
||||||
|
+ # Read the message body in.
|
||||||
|
+ #
|
||||||
|
+ msg_body="$(cat "${pathname}")"
|
||||||
|
+
|
||||||
|
+ if [ -z "${msg_body}" ]
|
||||||
|
+ then
|
||||||
|
+ msg_body=$subject
|
||||||
|
+ subject=""
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+ # Send the notification to all users with a dbus session and check for
|
||||||
|
+ # errors.
|
||||||
|
+ # We use busctl(1) manually rather than eg notify-send(1) due to its
|
||||||
|
+ # ability to send D-Bus messages from root to a non-root user with the
|
||||||
|
+ # "--machine=<user>@.host" flag.
|
||||||
|
+ for dir in /run/user/*; do
|
||||||
|
+ if [ -S "$dir/bus" ]; then
|
||||||
|
+ userid="$(basename "$dir")"
|
||||||
|
+ msg_out="$( \
|
||||||
|
+ busctl --user --machine "$userid@.host" -- \
|
||||||
|
+ call org.freedesktop.Notifications \
|
||||||
|
+ /org/freedesktop/Notifications \
|
||||||
|
+ org.freedesktop.Notifications Notify \
|
||||||
|
+ "susssasa{sv}i" \
|
||||||
|
+ "ZFS" 0 "drive-harddisk-symbolic" \
|
||||||
|
+ "$subject" "$msg_body"
|
||||||
|
+ 0 2 urgency y 2 sender-pid x "$$" "-1" \
|
||||||
|
+ 2>/dev/null
|
||||||
|
+ )"; rv=$?
|
||||||
|
+
|
||||||
|
+ if [ "${rv}" -ne 0 ]; then
|
||||||
|
+ zed_log_err "busctl exit=${rv}"
|
||||||
|
+ exit_status=1
|
||||||
|
+ fi
|
||||||
|
+ fi
|
||||||
|
+ done
|
||||||
|
+ return $exit_status
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
# zed_rate_limit (tag, [interval])
|
||||||
|
#
|
||||||
|
diff --git a/cmd/zed/zed.d/zed.rc b/cmd/zed/zed.d/zed.rc
|
||||||
|
index 859c6f9cb..567cd556a 100644
|
||||||
|
--- a/cmd/zed/zed.d/zed.rc
|
||||||
|
+++ b/cmd/zed/zed.d/zed.rc
|
||||||
|
@@ -176,3 +176,10 @@ ZED_SYSLOG_SUBCLASS_EXCLUDE="history_event"
|
||||||
|
# <https://docs.ntfy.sh/install/>
|
||||||
|
# https://ntfy.sh by default; uncomment to enable an alternative service url.
|
||||||
|
#ZED_NTFY_URL="https://ntfy.sh"
|
||||||
|
+
|
||||||
|
+##
|
||||||
|
+# Whether to send desktop notifications via D-Bus
|
||||||
|
+# If defined, busctl(1) will be used to send desktop notifications via
|
||||||
|
+# the org.freedesktop.Notifications D-Bus interface
|
||||||
|
+# Disabled by default; uncomment to enable.
|
||||||
|
+#ZED_USE_DBUS=1
|
||||||
|
--
|
||||||
|
2.47.0
|
||||||
|
|
Loading…
Reference in New Issue