Hyprland 配套件

Hyprland 只管窗口,剩下的零件大多是标准搭配,皮肤全由 matugen 生成。逐个交代一句它们各管什么:

  • hyprlock 锁屏:hyprland 官方的锁屏,GPU 渲染、能放模糊壁纸/时钟/输入框,配置风格和 hyprland 一致。我让它显示当前各屏壁纸(见下)。
  • hyprpaper / waypaper:hyprpaper 是实际贴壁纸的后端(常驻、预加载到显存、按屏指定),waypaper 是给它(和其它后端)套的图形选择器,换图顺手触发 matugen 重算配色。
  • walker / fuzzel 启动器:fuzzel 轻、纯 dmenu 风格,我拿它做剪贴板历史选单(hyprland.luaSUPER+V 那条)和各种 --dmenu 管道;walker 更像全功能启动器(应用、计算、emoji 这些插件式模块)。
  • wlogout 电源菜单:锁屏/注销/重启/关机的一排大按钮,网格布局,样式吃 matugen 的色。
  • fcitx5 输入法:中英切换,皮肤由 matugen 生成,还和编辑器里的 im-select 接上——从桌面到 nvim,normal 模式自动回英文。

这些都没什么可深挖的,装上接进 matugen 就完事。真正非显然、踩过坑才会这么配的,是 hypridle 拆成两个实例⁠。

一开始锁屏和熄屏放一个实例里,结果挂着 Chrome 或 B 站时,屏幕锁了却永远不灭。原因是这类页面会不停发 Video Wake Lock 的 D-Bus 唤醒锁,把 idle 计时器一次次打断——它本意是"视频播放时别熄屏",但连带着把锁屏后的熄屏也给搅黄了。

解法是分家:主实例只管锁屏,熄屏(DPMS)单独跑第二个实例、无视唤醒锁。

# 主实例:只管锁
general { lock_cmd = ~/.config/hypr/hyprlock/lock.sh
          before_sleep_cmd = loginctl lock-session }
listener { timeout = 1800; on-timeout = loginctl lock-session }
# 熄屏在 hypridle-dpms.conf 里另起一个,各算各的

顺带一提,锁屏我走 loginctl lock-session 而不是直接调 hyprlock,这样 hypridle 的 lock_cmd(那个 lock.sh)能接管,锁屏前先把各屏当前壁纸同步进去,锁屏背景和桌面一致。输入法是 fcitx5,桌面这层和编辑器里的 im-select 接上,从桌面到 nvim 中英切换是连贯的。