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:

* {
  font-family: sans-serif;
  font-size: 13px;
  border: none;
  border-radius: 0;
  min-height: 0;
}

window#waybar {
  background: #1e2530;
  color: #f1f4f8;
}

#workspaces button {
  padding: 0 8px;
  color: #b8c3d2;
  background: transparent;
}

#workspaces button.active {
  color: #ffffff;
  background: #40516b;
}

#clock, #cpu, #memory {
  padding: 0 8px;
}

在 Hyprland 会话的终端中启动:

waybar -c ~/.config/waybar-lab/config.jsonc -s ~/.config/waybar-lab/style.css -l info

应看到工作区、时钟、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": [
    "~/.config/waybar/modules/workspaces.jsonc",
    "~/.config/waybar/modules/audio.jsonc",
    "~/.config/waybar/modules/network.jsonc"
  ]
}

这是主对象中的 include 部分,不是完整栏配置。模块文件各自保存完整 JSON 对象。避免在多个文件中重复定义相同选项并依赖不清楚的合并顺序;主布局只决定显示哪些模块,模块文件说明它们如何工作。

3. 工作区与多屏

在工作区模块中可加入:

{
  "hyprland/workspaces": {
    "format": "{name}",
    "on-click": "activate",
    "persistent-workspaces": { "*": 5 }
  }
}

持久显示的按钮不代表每个工作区都已有窗口。多屏环境中,工作区的归属、显示范围和切换行为需要配合 Hyprland 验证;先点击实际工作区,再决定是否加入滚轮切换。

如果增加图标后出现方框,检查图标字体与 fc-match,不要先改工作区逻辑。Hyprland workspaces 模块

4. 音量与点击操作

使用 PipeWire/WirePlumber 且 Waybar 构建包含对应模块时,可以新增:

{
  "wireplumber": {
    "format": "VOL {volume}%",
    "format-muted": "MUTE",
    "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
    "on-scroll-up": "wpctl set-volume -l 1.0 @DEFAULT_AUDIO_SINK@ 5%+",
    "on-scroll-down": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
  }
}

然后把 wireplumber 加入 modules-right。音量上调限制为 1.0,避免滚轮无意推到超过 100%。先在终端单独验证 wpctl 命令,再测试点击和滚轮,这样可以区分音频系统与模块事件问题。

既有配置也可能用 pulseaudio 模块访问 PipeWire 的 PulseAudio 兼容服务。选择与当前构建和系统相符的一种,不要为同一输出重复增加两套音量控制。

需要同时管理输入和输出时,可用 group/drawer 组合多个模块;先确认每个模块独立工作,再处理展开动画和鼠标区域。模块文档

5. 网络与外部控制面板

{
  "network": {
    "interval": 10,
    "format-ethernet": "LAN {ipaddr}",
    "format-wifi": "Wi-Fi {signalStrength}%",
    "format-disconnected": "Offline",
    "tooltip-format-wifi": "{essid}\n{ipaddr}/{cidr}"
  }
}

将 network 放入布局即可显示状态。若要点击打开 NetworkManager TUI 或图形面板,先确认相应程序安装,再添加 on-click。网络管理器、面板程序和 Waybar 是不同组件。

较复杂的个人配置可以让多个按钮共用面板开关脚本。脚本应明确窗口 class、重复点击行为和错误输出。进程存在不一定代表面板窗口可见,因此窗口检测要与实际应用行为对应,不能只用 pgrep 代替所有判断。

6. GTK CSS 与语义颜色

Waybar 样式使用 GTK CSS,其支持范围不同于网页 CSS。不要直接复制浏览器中的 grid、变量或动画写法。先用日志定位解析错误,再逐项加入装饰。

style.css 可只包含导入,并将 @import 放在其他规则之前:

@import "theme.css";
@import "styles/base.css";
@import "styles/modules.css";

theme.css 定义角色:

@define-color main-bg #1e2530;
@define-color main-fg #f1f4f8;
@define-color accent #9bbdf0;

业务样式引用 @main-bg、@main-fg 和 @accent,换主题时只替换角色值。警告、禁用、选中和 hover 状态仍需分别检查对比与可读性。

7. 可选的 Matugen 主题

先保留静态主题,完成模块与交互。需要跟随壁纸时,再让 Matugen生成同样的角色定义。

模板中的 .hex 是否包含 # 必须通过实际版本的临时输出确认;本系列核验的 Matugen 4.1.0 已包含它。生成成功后,检查 CSS,再重载明确的 Waybar 实例。不要把“模板文件更新”当成“当前栏已经刷新”。

8. 用户服务与回退

先用前台命令验证。决定长期启用后,检查已有服务而不是直接创建重复服务:

systemctl --user cat waybar.service
systemctl --user status waybar.service

服务不存在时,需要按实际会话 target 编写单元,参见会话排障。已有服务也要确认 ExecStart 指向期望配置,以及它是否在图形会话结束时停止。

临时测试可启动已有服务,结束后停止:

systemctl --user start waybar.service

确认界面、日志和与主外壳的分工后,才决定是否 enable。回到备用状态时,先停止服务,再按实际自启动来源取消启用;如果还有 Hyprland 自启动命令,只 disable systemd 服务仍可能在下次登录启动。

9. 排错顺序

  1. 使用 -l trace 读取 JSONC、模块和 CSS 错误。
  2. 确认显式 -c / -s 指向预期文件,include 路径存在。
  3. 去掉新增模块,验证最小栏是否仍可运行。
  4. 单独运行点击命令,确认依赖和 PATH。
  5. 字体、图标和 CSS 单独检查;避免把显示错误归因到数据模块。
  6. 前台正常而服务失败时,检查用户服务日志与会话环境。

最终应做到:去掉外观装饰后,模块仍能独立显示和操作;停用备用栏后,主桌面能够继续使用。