小屋装修#
趁着之前赶上,有了些动力,花了点时间给小屋狠狠装修了一下。
首先是把图片灯箱给换掉了。此前小屋使用的是非常轻量所以功能也很少的 MediumZoom,这个灯箱库在博文的图片里用用还行,但是遇到动态生成的图片和裁切过的图片就有点力不从心了,而我的 Fediverse 贴文展示页面 的图片都是动态生成和前端裁切过的,所以需要更换灯箱库。
PhotoSwipe 是一个更重一点的灯箱库,默认的效果很好,可自定义程度也更高。选择 PhotoSwipe 的主要原因是 GoToSocial 的前端也是用的这个库,兼容性不用多说。目前只实现了 Fediverse 的图片附件的灯箱效果,从 GoToSocial 的源码来看还可以实现视频附件的灯箱效果,不过我一是还没有发过带视频附件的贴文,二是 GoToSocial 的实现是 AGPL v3 的不能直接抄,所以暂且搁置到我真的发了带视频附件的公开贴文再说。
下一个重构的就是碎语页面。此前小屋的碎语页是基于 RSS 的,写起来非常简单的代价是功能也非常少,不支持敏感内容隐藏,每个贴文的图片在 RSS 里只会有第一张(所以我干脆没有展示)。
现在改为了基于调用 GoToSocial API 的方式来实现。默认情况下,GoToSocial 的绝大多数 API 端点都需要身份验证,而我不打算暴露多余的 API(比如可以设置公共时间线可以无认证访问,但是我还保留着这个实例未来加人的可能,不像公开整个时间线),所以我 Vibe Coding 了一层 Cloudflare Worker 套壳,用来把查询 API 暴露给前端。
接着又把代码块的美化给换掉了。在此之前我使用的是自己手搓的代码块美化,主题切换、复制、行号等都是靠 remark 插件 + shiki 插件实现的。现在我换成了更好看功能也更多的 Expressive Code,并更新了一下过往文章进行适配,结果还是不错的。
最后是换了一下配色方案,改成了 Catppuccin Latte/Macchiato,比自己之前搓的要好看一些。
新服务器#
Nix 的优势区就是管理多个主机的配置,所以在把笔记本换成 NixOS 系统以后,我便把目光看向了服务器。但是现有的服务器不能乱动――第一次配远程 NixOS,肯定是错误百出,要是直接在现有服务器上搞,跑着的服务多半要停上几周。正好我也对现在服务器的配置和续费价格不甚满意,很快就趁着主机商周年庆打折,入手了一个新的 2C4G 云服务器。
到手后 SSH 上去传一下公钥并开启仅密钥登录,然后就可以根据服务器的硬件配置写对应的 NixOS 配置,写完就可以准备推送过去了。主机商没有提供挂载任意镜像的功能,,可选的系统镜像里也没有 NixOS,所以需要自行安装。这里我参考的是 Lan Tian 的这篇文章,不过我的 VPS 内存足够大,所以就直接使用 nix-anywhere 来部署系统了。(PS:从 NixOS 的 TG 群里了解到还有个自动重装/更换系统的脚本,下次再远程部署 NixOS 就准备用这个了)
部署 NixOS 的过程里最大的错误是图省事,没有写一个最简系统配置,而是直接在我的现有配置基础上写了对应主机的配置,结果就是状况不断,排查起来相当麻烦。安装 NixOS 的时候,LLM 出力不少,让我这个对非 NixOS 的 Linux 系统两眼一抹黑的人能够快速开始编写主机的启动配置。中间三番五次使用 nix-anywhere 部署完毕后连不上 SSH,好在主机商提高了网页 VNC,我还能看到报错信息,不至于一直重装。
在成功连上部署好的 NixOS 的 SSH 之后,接下来就属于是重复性工作了。把原本 VPS 上的服务容器停掉,在 Nix 配置里启用对应的服务,把配置迁移到 Nix 上,再把数据也拉到服务器上,迁移就算完工了。迁移也有一些无伤大雅的小 Bug,比如 Forgejo 以前部署在容器里,存储的 Git 仓库的权限和 Nix 部署的不一样,chown 改了一下权限后所有仓库的文件修改时间都被刷新了;比如 Forgejo 的密钥发生变化,导致以前的 SSH 仓库镜像推送全炸了,但总的来说修起来都不难。
离开 GitHub#
8 月 11 日,一则重磅消息在开发者圈子里传开了:GitHub 的 CEO Thomas Dohmke 辞职了,而微软不打算找一个新的 CEO,而是让 GitHub 直接由微软的 CoreAI 部门管理,这意味着 GitHub 不再是微软的一个独立子公司,并且 GitHub 会更加注重 AI 的发展 意思就是 GitHub 可以改名叫 Microsoft 365 Copilot Version Control Platform 了。虽然我还在使用薅资本主义羊毛学生免费的 GitHub Copilot Pro,没啥底气喷 GitHub 的 AI 发展方向,但也得给自己留点后路了。
后路自然是 Codeberg 和自托管 Forgejo。在 Forgejo 的联邦功能基本可用之前,我选择暂时将 Codeberg 作为主要活动区域。完全脱离 GitHub 是不太现实的,我有不少东西是完全依赖于 GitHub 的,比如学生认证薅的 Copilot Pro,比如 Nix 整个生态都严重依赖于 GitHub,所以现在只是部分迁移。
Hello, Jujutsu#
Jujutsu 是一个兼容 Git1 的版本管理系统,非常适合喜欢干净漂亮的提交历史的人和喜欢 Vibe Coding 的人。我自己在 Fediverse 上刷到它以后,装上使用了 Jujutsu 半个月,就已经完全离不开它了。Jujutsu 到底好在哪里呢?我觉得是非常灵活的提交管理方式和稳定的快照机制。
你可以随心所欲地在任何一个你想在的提交上开始工作,可以随心所欲地去修改自己的提交历史,不管是拆分还是合并还是移动,Jujutsu 绝不会在你进行这些工作的时候跳出一堆冲突让你处理,或是让你手动处理分支的变基,不会打断工作的心流。合并和变基的冲突当然存在,但 Jujutsu 把他们放到后面去了,你可以在任何你想处理的时候去处理那些冲突,而不是每次操作都要马上处理冲突。
快照机制保存了每次操作时当前提交的快照,且每次修改追踪的文件都会创建一个快照――用 Git 的方式来形容的话,就是每改一次文件都新建一个分支提交。所以,你永远不用担心手滑/手贱的自己、LLM Agent、闯进你房间的亲戚家小孩、不悦的机魂等各路神仙把你的仓库改得乱七八糟无法挽回,只需一行 jj undo,仓库便会回到原来的状态。
例如我喜欢一次性修改许多功能,再通过暂存来拆分提交,有时候还会使用修补功能来小幅修改提交记录。使用 Git 时,一旦手滑把不该修补的东西加进去了,再想改回来就会很麻烦。而 Jujutsu 的 squash 和空提交功能,天生就是为我这种需求而生的。我可以在当前修改前面创建任意个空的提交,然后通过交互式的 squash 将各个不同的功能拆分到新建的提交中,并随时移动到拆分的提交中进行小修小补。
不过目前而言,Jujutsu 也有一些痛点。比如自带的 jj graph 在特定场合下可阅读性相当差,尤其是在我的博客的分支中:
看到这一堆竖线,很难忍住不笑。我也尝试过 Jujutsu 的 GUI 版本 GG,graph 也是一模一样,还是一大堆竖线堆成一座高山。只有 VSCode 插件 Jujutsu Kaizen 的图像没那么抽象。而 VSCode 的 Git Graph 插件给出的提交图(Jujutsu 与 Git 提交同步)就很简洁直观明了:
这个问题确实是影响我用 Jujutsu 用得舒服的一大弊病。
迈向封闭#
8 月 25 日,谷歌宣布了一个重磅的新政策:2026 年中起,被安装或侧载的应用的开发者必须进行实名认证。谷歌宣称此举是为「让 Android 更安全」及「保护 Android 的开放环境」,政策将于 2026 年九月在部分地区(巴西、印尼、新加坡、泰国等)生效;后续将覆盖更多地区。
结合此前 8 月 14 日一加宣布 ColorOS 16 系统将开始限制 Bootloader 解锁2,7 月 26 日三星在 One UI 8 中移除了 Bootloader 解锁选项,这种事在短短一个月的时间里就上演了三次,迈向封闭已成大势所趋。
我一个用着华为全家桶(除了电脑)的人,自是没有什么特别重的自由系统情结,换 Linux 系统也只是因为 Linux 的文件结构和开发体验更好。但看到所有大厂都在迈向封闭,还是有点不爽。之前 618 那会儿手机价格低的时候,有考虑过买个骁龙 8 Elite 处理器的一加安卓手机来折腾,但最后还是作罢;现在一看,8 Elite 这代怕不是安卓机最后的荣光了。8 Elite 还蹭到了高通 X Elite 的驱动和内核,或许过上两年,8 Elite 就会成为继 845 后又一个可以刷桌面系统的手机 CPU;过上五六年,还能看到不少 8 Elite 一代的「钉子户」。

