2 分•作者: aurellius•9 个月前
嗨,HN!
我一直很喜欢应用程序启动器,并且对 Raycast 团队采用的方法印象深刻——尤其是他们的扩展系统。大约六个月前,我开始为 Linux 构建类似的东西,目标是在操作系统层面进行深度集成,并赋予扩展强大的功能。
Vicinae 使用 C++ 和 Qt Widgets 编写。我选择了 Widgets 而不是 QML,以便更好地控制 UI,尤其是在扩展处理方面。到目前为止,效果很好——现代 C++ 非常棒。
为了支持我的目标,我构建了许多自定义的 widgets,包括一个完全虚拟化的列表,可以高效地渲染成千上万个项目。这让我对 Qt 肃然起敬——它是一个强大的框架,而且大部分时间都没有妨碍我。
一个关键特性是支持 Raycast 扩展(React + TypeScript),其中大部分可以直接在启动器中安装和使用(尽管并非所有功能都已实现)。还有一个原生 API 包(@vicinae/api),用于编写具有附加功能的 Vicinae 专用扩展。这需要编写一个自定义的 React reconciler——出乎意料地简单,尽管仍然不够完善。
与 Raycast 类似,Vicinae 附带了强大的内置模块,但目标不是做一个克隆。我希望它成长为一个更符合 FOSS 模式的独立项目,同时保持与 Raycast 生态系统的兼容性。我还计划最终将其移植到其他操作系统。
我很乐意收到关于技术方法的反馈,以及关于什么能让它对您有用的建议。非常欢迎贡献——我已经惊喜地发现人们开始提供帮助的速度有多快。
文档:[https://docs.vicinae.com](https://docs.vicinae.com)
代码库:[https://github.com/vicinaehq/vicinae](https://github.com/vicinaehq/vicinae)