#status-command #i3 #sway #status

bin+lib i3stat

i3 和 sway 的轻量级且包含电池的 status_command

12 个版本 (5 个破坏性版本)

0.13.1 2024 年 4 月 18 日
0.13.0 2024 年 4 月 16 日
0.12.0 2024 年 1 月 8 日
0.11.0 2023 年 12 月 28 日
0.8.0 2023 年 11 月 4 日

#262 in 配置

GPL-3.0-only

380KB
8K SLoC

i3stat: i3 (或 sway) 的状态命令

请注意 这之前被称为 istat被重命名

我之前使用 i3blocks 来为 i3 的状态命令,但我发现将所有配置放在单独的脚本中有点繁琐。

此外,我也找不到一个好的音量控制块,它既不笨拙也不慢。

因此,我决定编写自己的状态命令生成器,而用什么语言来写它呢?当然是 Rust!

功能

  • ⚡ 完全单线程(更少的资源使用)
    • 🔎 它是状态命令,它不应该很重
  • ⏩ Powerline 主题和可定制性
  • 🎮 IPC 控制
    • 🖱️ 通过命令发送点击事件
    • 📜 通过命令刷新项目
    • 📜 为某些集成提供自定义事件(例如,控制 PulseAudio/PipeWire 等)
    • 🤯 运行时更新 - 无需重启
  • 🖇️ 许多不同的条形图项目(继续阅读以获取截图)

每个条形图项目都是可配置的,请参阅 示例配置 以获取选项。

截图

这是一张 i3 中条形的图片

screenshot of i3bar

另一张启用 powerline 模式的图片

screenshot of i3bar with powerline

此表包含一些条形图的截图

项目 描述 截图
电池 百分比、充电等。支持多个电池。
cpu 百分比表示的使用情况
磁盘 使用情况,显示可用磁盘空间。支持多个挂载点。
dunst 显示“请勿打扰”状态(如果它已暂停或未暂停) off (invisible)
kbd 显示 CapsLock/Numlock 等 state
krb 检查是否存在有效的 kerberos 令牌(例如,klist -s
内存 以字节或百分比显示空闲内存
net_usage 上传和下载统计信息
网络接口 网络接口状态 - 连接状态和 ip 地址
脉冲 输入/输出音量状态,全面控制和当前扬声器类型(插孔,蓝牙等)
脚本 运行任意脚本并显示其输出
传感器 温度传感器
时间 显示当前日期和时间

安装

从 GitHub 下载最新版本

链接到最新版本

使用 Rust (通过 cargo)

cargo install i3stat
# Make sure to look at the `sample_config.toml` file for configuration options!

通过 AUR (Arch Linux)

# just download the latest release and install it
paru -S i3stat-bin
# build the latest release with cargo
paru -S i3stat
# build the latest commit on `next`
paru -S i3stat-git

使用方法

设置

首先,为i3stat创建一个配置文件。查看示例配置以了解可用功能。此文件应放置在

  • $XDG_CONFIG_HOME/i3stat/<这里>,或
  • $HOME/.config/i3stat/<这里>

尽管示例配置文件是TOML文件,但也支持YAML和JSON。

然后,更新您的i3/sway配置以使用i3stat作为status_command

bar {
        status_command i3stat
        # ... other config
}

i3stat 交互

i3stat提供了多种与其交互的方式

  • i3/sway的标准点击事件
  • 实时信号
  • 它自己的ipc

信号

考虑以下条目,它输出CapsLock和NumLock键的状态

type = "kbd"
show = ["caps_lock", "num_lock"]
interval = "30s"

它每30秒刷新一次,或者每次条目收到点击事件时都会刷新。这很好,但我们可以通过信号做得更好。将signal = 8添加到配置中,并删除interval,我们得到

type = "kbd"
show = ["caps_lock", "num_lock"]
signal = 8

现在,每当i3stat收到SIGRTMIN+8信号时,条目将会刷新。与以下i3/sway中的配置配对,您将有一个始终反映您按键状态的条目

bindsym --release Caps_Lock exec --no-startup-id pkill -RTMIN+8 i3stat
bindsym --release Num_Lock  exec --no-startup-id pkill -RTMIN+8 i3stat

Linux提供了许多实时信号,要查看您的机器支持哪些,请使用i3stat-signals命令

$ i3stat-signals
{"count":30,"sigrtmax":64,"sigrtmin":34}

可以为多个条目配置相同的信号,因此可以使用相同的信号刷新许多条目!

自定义 IPC 事件

提供了i3stat-ipc命令来与i3stat接口。它支持

  • 获取所有当前运行条目的名称和索引
  • 同时刷新所有条目
  • 向每个条目发送click事件
  • 向条目发送自定义事件
    • 某些条目(如pulse)公开了高级API,可以通过这些事件访问

同时刷新所有条目:

i3stat-ipc refresh-all

向条目发送点击事件 - 而不实际点击它!:

# emulate a left click on the disk item:
i3stat-ipc click disk left

通过自定义ipc事件控制PulseAudio/Pipewire:

# see all the custom events that pulse has to offer:
i3stat-ipc custom pulse

# Some examples:

# turn the output (speakers) volume up
i3stat-ipc custom pulse volume-down sink
# turn the input (microphone) volume down
i3stat-ipc custom pulse volume-up   source
# mute or unmute the output
i3stat-ipc custom pulse mute-toggle sink

开发

查看justfile

还要阅读IDEAS.md

依赖关系

~18–51MB
~812K SLoC