给 Linux 桌面的日历补上农历和调休

这些年我的主力桌面换过好几个:Fedora、Debian、Deepin 都用过不短的时间,最近一年稳定在 Linux Mint。

每换一个系统都要重新适应一遍,大部分东西折腾几天就习惯了。唯独一个不起眼的小地方,别别扭扭用了一年:右下角那个日历。

之前用 Deepin 的时候,点开日历就有农历,节假日标得清清楚楚,用久了觉得这是理所当然。到了 Mint 才发现,系统日历只有公历。想知道今天农历几月初几?掏手机。想知道这周日到底上不上班?掏手机。国务院发个调休通知,得自己对着日历数哪天休、哪天补班,数错一次就是一次社死现场。

对中国人来说,这个日历只有一半功能。

Windows 上这不是问题,系统日历自带农历,第三方软件也一抓一大把。Linux 桌面总不至于没有吧?我把 Cinnamon 的官方插件市场翻了个底朝天,结果挺魔幻:日历类插件有世界时钟、有二进制时钟,甚至还有伊朗历和尼泊尔历——唯独没有农历。

GNOME 那边倒是有个做得很漂亮的扩展:tigertall/chinese-calendar,农历、节气、节日、调休角标一应俱全。可惜它是给 GNOME Shell 写的。Cinnamon 虽然祖上从 GNOME 分出来,但插件体系早就各走各的路,直接装是装不上的。

既然没有现成的,那就自己动手移植一个。

改完之后的日历长这样

日历效果

面板时钟后面直接跟着农历,今天几月初几,抬眼就有。点开日历弹窗,每个日期格子下面多了一行小字:平时是农历日期,初一显示月份,赶上节日直接显示节日名——十月一号那格写的就是"国庆节",不用你反应。

法定假日右上角一个红色的"休",调班日一个绿色的"班"。哪个周末要补班,扫一眼就清楚,不会再出现周日早上惊醒、疯狂回忆今天到底上不上班的情况。

节气、传统节日、干支生肖都在,大陆、香港、台湾的节日习惯按系统语言自动区分。

有一点我挺满意:调休数据不用每年手动维护。本地缺了当年的数据,它自己联网拉一份;到了 12 月还会提前把下一年的抓下来。数据来源在设置里可以换,想接自建镜像或者别的接口都行。

设置界面

系统日历原来的功能一个没动,日程、时间格式、快捷键都还在。外观上你几乎分不出它和原来那个日历的区别——只是信息多了。

安装很简单

Mint 22 上实测通过,三行命令:

git clone https://github.com/zhengmingliang/chinese-calendar-cinnamon.git
cd chinese-calendar-cinnamon
./install.sh

然后 Alt+F2 输入 r 回车重启 Cinnamon,任务栏右键 →「面板小工具」里找到「Chinese Calendar (农历)」添加,再把系统自带那个移除就行。完整说明在仓库 README 里。

理论上 Fedora、Debian、Arch 这些发行版的 Cinnamon 桌面也能用,我没逐个测试,遇到问题欢迎提 Issue。用 GNOME 的朋友不用折腾这个,直接装上游扩展就好。

几句实话

这个项目的核心算法——农历换算、节气计算、节日数据——全部来自上游的 tigertall/chinese-calendar。我做的事说到底是"翻译":把 GNOME Shell 那套注入逻辑换成 Cinnamon 能听懂的方式,顺手把节假日数据做成了自动更新。上游作者还用 GitHub Action 定期从政府网站抓最新放假安排,数据这块一直有人养着,这是我敢做自动更新的底气。

代码在 GitHub,MIT 协议,和上游一致:

https://github.com/zhengmingliang/chinese-calendar-cinnamon

如果你也是 Linux 桌面用户,也被"今天农历几号"烦过,欢迎拿走。觉得好用,点个 Star 就是对我最大的鼓励。

Q.E.D.


寻门而入,破门而出