Hyprland 0.55 宣布将配置文件切换为 Lua

Hyprland 在 0.55 版中切换到基于 Lua 的配置,再次引发了关于是否应使用完整编程语言来配置窗口管理器的更广泛讨论。支持者欢迎 Lua 的速度、灵活性和一等可编程性——尤其适合复杂行为和布局——而批评者则指出其不稳定、频繁破坏性变更,以及图灵完备配置长期维护成本高的问题。讨论串将 Hyprland 与 i3、Sway、Niri、AwesomeWM 等替代方案进行了对比,凸显出在简单声明式格式与越来越强大、接近代码的配置系统之间反复摆动的“配置钟摆”现象。

发布背景与工具支持

  • 一些评论者指出 Lua 切换已经是“旧闻”,因为 Hyprland 0.56 已经发布了,但许多人仍然认为 Lua 迁移是 0.55 中最有意思的部分。
  • 用户提到已有多个将旧版 Hyprland 配置语言转换为 Lua 的工具(网页工具、Neovim 插件),并表示 LLM 也能有效翻译配置。
  • 也有人是在已经升级到 0.56 后才注意到这一变化,并计划等工具和示例更成熟后再迁移。

稳定性、破坏性变更与生态影响

  • 不少用户表示自己因为配置频繁破坏性变更而离开了 Hyprland(暂时或永久),尤其是语法和选项重排。
  • 也有人认为只要自己搭一个简单、能理解的配置,而不是照搬大型第三方方案,Hyprland 就很好用;他们说修复并不难,但也承认这是 0.x 软件。
  • 一位 NixOS 用户批评 Hyprland 生态大量分叉了 Sway 相关栈,并使用快速变动的包,导致交叉编译失效,称这种做法体现了“我们不在乎把你的东西弄坏”的心态。
  • 还有几个人因为感觉稳定性和简洁性更好而回退到 i3、Sway 或 Niri;Niri 的作者被形容为更“成熟”。

把编程语言用于配置:质疑

  • 许多人对图灵完备配置感到疲惫(如 Gradle Groovy、Nix、Lua 等),理由是复杂度高、推理更难、升级更脆弱。
  • 一些人认为配置应该是声明式、而且“笨”一点的(INI/TOML/KDL/OpenBSD 风格 DSL),真正的逻辑应放在插件或通过 IPC 调用的外部程序里。
  • 担忧包括“配置钟摆/摆钟”式循环:简单 → 分层覆盖 → 完整语言 → 最终重置。
  • 对 Lua 的具体抱怨包括数组从 1 开始、到处都是 table、缺少静态类型;也有人希望有一种现代、带类型、类似 Lua 且可嵌入的语言。

把编程语言用于配置:支持

  • 支持者认为复杂的窗口管理器、编辑器和终端会受益于可编程配置,因为它们需要回调、布局、按设备差异化行为,以及避免脆弱的 shell/模板技巧。
  • 他们指出,如果没有一种语言,用户最终还是会围绕 YAML/JSON 自行重新发明临时 DSL 或生成器。
  • Lua 被赞为体积小、可嵌入、最初就是为配置而设计,而且工具链完善(例如用于检查和补全的 LSP)。
  • 就窗口管理器而言,许多人认为内嵌 Lua 比每次事件都通过 IPC 调用 shell 更简洁、更快。

替代配置方式

  • 有些人更喜欢混合模式:简单的声明式配置加可选脚本层,或者由配套守护进程扩展一个最小化的 WM 配置。
  • 也有人提到 CUE、Dhall、Jsonnet、KDL 和 scfg 等替代方案,作为非图灵完备但表达力足够的配置语言,尤其在基础设施场景中很受欢迎。