#notifications #eww #daemon #zbus #rust

app end-rs

Eww 通知守护进程(用 Rust 编写)

11 个版本

0.1.10 2024 年 7 月 4 日
0.1.9 2024 年 7 月 3 日
0.1.5 2024 年 6 月 26 日

#58GUI

Download history 386/week @ 2024-06-18 257/week @ 2024-06-25 648/week @ 2024-07-02 14/week @ 2024-07-09 73/week @ 2024-07-30

73 每月下载量

BSD-2-Clause

7.5MB
906

Eww 通知守护进程(Rust 版)

一个用 Rust 编写的 Linux 通知守护进程。受 end 启发。

周围有几个优秀的通知守护进程。不幸的是,它们都使用自己的配置语言。如果你已经使用了 eww 来配置你的小部件,那么能否只用它来配置通知会不是很好吗?

Example Eww Notifications

功能

  • 使用 eww 显示通知
  • 可自定义的通知外观
  • 可自定义的通知持续时间
  • 通知历史记录
  • 通知动作
  • 回复通知(不在 freedesktop 通知规范中)

入门

你可以自己构建项目,或者使用来自 crates.io 的预构建二进制文件。

从源代码构建

克隆仓库并运行以下命令进行构建。

git clone https://github.com/Dr-42/end-rs
cd end-rs
cargo build --release

这将创建在 target/release 下的可执行文件。将其复制到所需位置。

从 Crates.io 安装

cargo install end-rs

这将安装可执行文件到 ~/.cargo/bin。确保已将其添加到你的路径中。有关安装 Rust 和 Cargo 的更多详细信息,请参阅 rustup

使用方法

守护进程

要启动通知守护进程,请在你的 WM 的初始化文件中使用守护进程参数进行自动启动。

hyprland 的示例

exec-once = ~/.cargo/bin/end-rs daemon

有关配置的更多详细信息,可以在可执行文件中使用 -h 或 --help 参数。

Eww 配置

可以通过运行生成命令来生成默认的 yuck 和 scss 文件。

yuck

end-rs generate yuck

scss

end-rs generate scss

两者都生成

end-rs generate all

这将创建在 eww 配置目录下的 end.yuckend.scss 文件。

要使用它们,只需在 eww 配置文件中包含它们即可。

(include "end.yuck")
@import "end.scss";

命令

键入 end-rs 将显示包含所有可用命令的帮助信息。

$ end-rs --help
end-rs <version>
Usage: end-rs [OPTIONS] <COMMAND> <args>

Options:
  -h, --help - Print this help message
  -v, --version - Print version information
Commands:
  daemon - Start the notification daemon
  close <id> - Close a notification with the given ID
  history <open|close|toggle> - Open, close or toggle the notification history
  action <id> <action> - Perform an action on a notification with the given ID

  generate [css|yuck|all] - Generate the eww config files

除了生成命令外,所有命令都需要守护进程正在运行。

配置

检查结束 $XDG_CONFIG_HOME/end-rs(可能是 ~/.config/end-rs)中的 config.toml 文件。如果找不到文件,它将使用默认值创建一个。

所有字段都是必填的,与原始的end不同。

配置文件的结构如下。

### Path to the eww binary
eww_binary_path = "~/.local/bin/eww"
### Where to find the icons for the notifications
icon_dirs = [
    "/usr/share/icons",
    "/usr/share/pixmaps",
]
### The theme to use for the icons
icon_theme = "Adwaita"
### The default notification window
eww_notification_window = "notification-frame"
### The default notification widget
eww_notification_widget = "end-notification"
### The variable which contains the literal for the notifications
eww_notification_var = "end-notifications"

### The default history window
eww_history_window = "history-frame"
### The default history widget
eww_history_widget = "end-history"
### The variable which contains the literal for the history
eww_history_var = "end-histories"

### The default reply window
eww_reply_window = "reply-frame"
### The default reply widget
eww_reply_widget = "end-reply"
### The variable which contains the literal for the replies
eww_reply_var = "end-replies"
### The variable which contains content for the reply text
eww_reply_text = "end-reply-text"
### Max notifications to be preserved in history. In case of 0, all notifications will be preserved.
max_notifications = 10
### The orientation of the notifications. Can be either "v" or "h" or "vertical" or "horizontal" (Basically the eww orientation value)
notification_orientation = "v"

### The timeouts for different types of notifications in seconds. A value of 0 means that the notification will never timeout
[timeout]
low = 5
normal = 10
critical = 0

图片

自由桌面规范定义了3种在通知中包含图片的方法。

  1. image-path:图片文件的路径
  2. image-data:以base64格式的图片数据
  3. image_path:图片文件的路径(这已被弃用,但某些原因,一些应用程序仍在使用它)

End-rs支持所有3种方式。如果它检测到路径,它将从该路径显示图片。如果它检测到符合图标主题的有效图标,它将显示该图标。如果它检测到base64编码的图片,它将把图片写入临时文件,保存在/tmp/end-data/...中,并从该位置显示图片,因为eww不支持base64编码的图片。

在yuck中,它将设置通知的图片字段为图片文件的路径。

屏幕截图

简单通知

Simple Notification

历史记录

History

回复

Reply

许可

本项目采用BSD 2-Clause License许可 - 有关详细信息,请参阅LICENSE文件。

常见问题解答

为什么选择Rust?

Rust是一种非常适合系统编程的语言。它速度快,安全,并且有一个优秀的社区。它也是编写CLI工具的绝佳语言。而且,毕竟,谁不喜欢Rust呢?

为什么不直接使用end?

End是一个出色的通知守护进程。我基本上有两个原因要写这个。

  1. 自定义eww二进制路径 - 据说由于某种原因,hyprland没有从我的zshrs加载路径,所以我必须进入源代码,编译自己的版本,然后使用它。我想要能够在配置文件中设置eww二进制文件的路径。
  2. image_path - kdeconnect使用image_path而不是image-path。End不支持这一点。这让我陷入了困境,因为我不知道haskell。所以我想为什么不重写为RustTM呢。
  3. In-reply - 我想能够回复通知。我知道这不在freedesktop通知规范中,但我想有这个功能。我仅在kdeconnect通知上测试了它,并且它工作正常。如果您在其他通知上使用它,请让我知道是否有任何问题。

为什么不直接分叉end?

如我所说,我不知道haskell。我知道Rust。所以我把它重写为Rust。

为什么不直接使用dunst?

我使用eww来制作我的小部件。我想用它来制作我的通知。此外,我想让我的整个桌面都使用与壁纸相匹配的颜色,我使用一个python脚本来从颜色壁纸生成颜色,并将其馈送到eww。因此,这个设置。

我遇到了一个问题

请在github存储库中打开一个问题。我会尽力帮助你。

我想做出贡献

请在github存储库中打开一个PR。我会审查它,如果它很好,我会合并它。请在打开PR之前运行cargo fmt

我有功能请求

请在github存储库中打开一个问题。如果可行,我会尝试实现它。

致谢

  1. end - 如果我不知道这个,我就不会写这篇文档。这确实让我花掉了3周的时间来学习DBUS规范及其在Rust中的zbus实现。但我不曾窃取任何他的代码。说实话,我甚至不懂他的代码。我只是阅读了规范,并在Rust中实现了它。
  2. eww - 为我的Hyprland安装提供了出色的小部件。

依赖项

~13–25MB
~389K SLoC