Hyprland Waybar 配置与主题
本页目录
Waybar 可以独立承担状态栏,也可以在主外壳维护期间作为备用。它读取 JSON/JSONC 配置与 GTK CSS,不要求安装完整 Quickshell 外壳。
本篇先建立一份不依赖个人脚本的最小状态栏,再解释如何扩展成模块化配置。已有主栏时,先选择不会冲突的测试位置;正式切换前停止同一边缘上的其他 bar,避免重复保留屏幕空间。
1. 建立独立测试配置
新建 ~/.config/waybar-lab/,将下面完整内容保存为 config.jsonc:
{
"layer": "top",
"position": "bottom",
"height": 32,
"spacing": 8,
"modules-left": ["hyprland/workspaces"],
"modules-center": ["clock"],
"modules-right": ["cpu", "memory"],
"hyprland/workspaces": {
"format": "{name}",
"on-click": "activate"
},
"clock": {
"format": "{:%H:%M}",
"tooltip-format": "{:%Y-%m-%d %A}"
},
"cpu": { "format": "CPU {usage}%" },
"memory": { "format": "RAM {percentage}%" }
}
使用文本而非图标,便于先排除字体缺失。底部测试栏仍可能与现有界面冲突,应按桌面实际布局选择位置。
同目录保存 style.css:
}
}
}
}
}
在 Hyprland 会话的终端中启动:
应看到工作区、时钟、CPU 和内存。保持前台运行便于查看日志,测试结束按 Ctrl+c 停止。此步骤不修改自启动配置。Waybar 配置说明
2. 再拆分文件
当基础栏正常后,可以使用以下组织:
waybar/
├── config.jsonc
├── modules/
│ ├── workspaces.jsonc
│ ├── audio.jsonc
│ └── network.jsonc
├── style.css
├── theme.css
└── styles/
├── base.css
└── modules.css
主配置保留模块顺序,并在对象中加入 include 数组:
这是主对象中的 include 部分,不是完整栏配置。模块文件各自保存完整 JSON 对象。避免在多个文件中重复定义相同选项并依赖不清楚的合并顺序;主布局只决定显示哪些模块,模块文件说明它们如何工作。
3. 工作区与多屏
在工作区模块中可加入:
持久显示的按钮不代表每个工作区都已有窗口。多屏环境中,工作区的归属、显示范围和切换行为需要配合 Hyprland 验证;先点击实际工作区,再决定是否加入滚轮切换。
如果增加图标后出现方框,检查图标字体与 fc-match,不要先改工作区逻辑。Hyprland workspaces 模块
4. 音量与点击操作
使用 PipeWire/WirePlumber 且 Waybar 构建包含对应模块时,可以新增:
然后把 wireplumber 加入 modules-right。音量上调限制为 1.0,避免滚轮无意推到超过 100%。先在终端单独验证 wpctl 命令,再测试点击和滚轮,这样可以区分音频系统与模块事件问题。
既有配置也可能用 pulseaudio 模块访问 PipeWire 的 PulseAudio 兼容服务。选择与当前构建和系统相符的一种,不要为同一输出重复增加两套音量控制。
需要同时管理输入和输出时,可用 group/drawer 组合多个模块;先确认每个模块独立工作,再处理展开动画和鼠标区域。模块文档
5. 网络与外部控制面板
将 network 放入布局即可显示状态。若要点击打开 NetworkManager TUI 或图形面板,先确认相应程序安装,再添加 on-click。网络管理器、面板程序和 Waybar 是不同组件。
较复杂的个人配置可以让多个按钮共用面板开关脚本。脚本应明确窗口 class、重复点击行为和错误输出。进程存在不一定代表面板窗口可见,因此窗口检测要与实际应用行为对应,不能只用 pgrep 代替所有判断。
6. GTK CSS 与语义颜色
Waybar 样式使用 GTK CSS,其支持范围不同于网页 CSS。不要直接复制浏览器中的 grid、变量或动画写法。先用日志定位解析错误,再逐项加入装饰。
style.css 可只包含导入,并将 @import 放在其他规则之前:
theme.css 定义角色:
@@@
业务样式引用 @main-bg、@main-fg 和 @accent,换主题时只替换角色值。警告、禁用、选中和 hover 状态仍需分别检查对比与可读性。
7. 可选的 Matugen 主题
先保留静态主题,完成模块与交互。需要跟随壁纸时,再让 Matugen生成同样的角色定义。
模板中的 .hex 是否包含 # 必须通过实际版本的临时输出确认;本系列核验的 Matugen 4.1.0 已包含它。生成成功后,检查 CSS,再重载明确的 Waybar 实例。不要把“模板文件更新”当成“当前栏已经刷新”。
8. 用户服务与回退
先用前台命令验证。决定长期启用后,检查已有服务而不是直接创建重复服务:
服务不存在时,需要按实际会话 target 编写单元,参见会话排障。已有服务也要确认 ExecStart 指向期望配置,以及它是否在图形会话结束时停止。
临时测试可启动已有服务,结束后停止:
确认界面、日志和与主外壳的分工后,才决定是否 enable。回到备用状态时,先停止服务,再按实际自启动来源取消启用;如果还有 Hyprland 自启动命令,只 disable systemd 服务仍可能在下次登录启动。
9. 排错顺序
- 使用
-l trace读取 JSONC、模块和 CSS 错误。 - 确认显式
-c/-s指向预期文件,include 路径存在。 - 去掉新增模块,验证最小栏是否仍可运行。
- 单独运行点击命令,确认依赖和 PATH。
- 字体、图标和 CSS 单独检查;避免把显示错误归因到数据模块。
- 前台正常而服务失败时,检查用户服务日志与会话环境。
最终应做到:去掉外观装饰后,模块仍能独立显示和操作;停用备用栏后,主桌面能够继续使用。