<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Kokosa&apos;s Intensive Care Unit | Kokosa&apos;s Blog</title><description/><link>https://kokosa.icu/</link><language>zh-CN</language><item><title>Chill with You 的时区 Bug</title><link>https://kokosa.icu/zh-cn/blog/1-chill-with-you/</link><guid isPermaLink="true">https://kokosa.icu/zh-cn/blog/1-chill-with-you/</guid><description>Steam 上有个游戏（算游戏吗？实际番茄钟！）叫 Chill with You ~ Lofi Story，算是我很喜欢的一个游戏了，女主很可爱，给人的陪伴感也很足，设定是你和女主在不同的平行时空，所以我之前一直以为游戏里显示的时间和我本地时间有时差是设定的一部分，所以一直没去管它...

</description><pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h3 id=&quot;何意味&quot;&gt;何意味&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;Steam 上有个游戏（算游戏吗？实际番茄钟！）叫 &lt;strong&gt;Chill with You ~ Lofi Story&lt;/strong&gt;，算是我很喜欢的一个游戏了，女主很可爱，给人的陪伴感也很足&lt;/p&gt;
&lt;p&gt;设定是你和女主在不同的平行时空，所以我之前一直以为游戏里显示的时间和我本地时间有时差是设定的一部分，所以一直没去管它&lt;/p&gt;
&lt;p&gt;直到 1.2 版本更新（1 月 27 日）之后，我在 Steam 的讨论区看到了一条评论：大意是在 Linux 上用 Proton 运行这个游戏，游戏里显示的时间一直是 UTC+0&lt;/p&gt;
&lt;p&gt;关于 UTC（世界标准时间） 是什么，做个简单的比方，我这里是 UTC+8，实际时间是 8 点 00 的话，游戏里就会显示 0 点 00 分，差了 8 个小时&lt;/p&gt;
&lt;p&gt;呃呃啊？原来不是什么平行时空的设定，只是单纯的时区没读对，难怪正好差 8 个小时&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;问题分析&quot;&gt;问题分析&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;其实是很简单的一个问题，很快就发现了原因：Proton 运行的 Windows 程序没办法正确读取到 Linux 系统的时区信息。在 Linux 下，时区信息通常存放在 &lt;code dir=&quot;auto&quot;&gt;/usr/share/zoneinfo/&lt;/code&gt; 目录下，而在 NixOS 上则是在 &lt;code dir=&quot;auto&quot;&gt;/etc/zoneinfo/&lt;/code&gt; 下面&lt;/p&gt;
&lt;p&gt;解决办法很简单，在启动参数里手动指定时区就行了。在 Steam 的游戏属性 → 启动选项里加上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;TZ=Asia/Shanghai&lt;/code&gt;：指定时区为上海（北京时间）&lt;/li&gt;
&lt;li&gt;&lt;code dir=&quot;auto&quot;&gt;TZDIR=/etc/zoneinfo&lt;/code&gt;：指定时区文件的目录位置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最后大概是这样：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;TZDIR&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;/usr/share/zoneinfo&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;TZ&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Asia/Shanghai&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;%command%&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;加上这串启动参数之后再启动游戏，时间就正常了。9 点 31 分就是 9 点 31 分&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kokosa.icu/posts/1-chill-with-you/utcp8.avif&quot; alt=&quot;大概就是这样，本来是1：31&quot;&gt;&lt;figcaption&gt;大概就是这样，本来是1：31&lt;/figcaption&gt;&lt;/figure&gt;
&lt;div&gt;&lt;h3 id=&quot;后记&quot;&gt;后记&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;问题到这差不多也就解决了，我也去那条评论下面回复了一下解决方案。如果你也遇到了同样的问题，希望这篇文章能帮到你&lt;/p&gt;
&lt;p&gt;顺带一提我用的是 NixOS，正常情况应该使用 &lt;code dir=&quot;auto&quot;&gt;/etc/zoneinfo&lt;/code&gt; 而不是 &lt;code dir=&quot;auto&quot;&gt;/usr/share/zoneinfo&lt;/code&gt;，因为 NixOS 并没有 &lt;code dir=&quot;auto&quot;&gt;/usr/share/zoneinfo&lt;/code&gt; 这个目录，不过这样也能执行，因为 Steam 的环境会帮你处理好&lt;/p&gt;
&lt;p&gt;Belike:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt; $ steam-run ls /usr/share/zoneinfo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Africa&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Egypt&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;Hongkong&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Mexico&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;ROK&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;America&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Eire&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;HST&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;MST&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Singapore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Antarctica&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;EST&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;Iceland&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;MST7MDT&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;Turkey&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Arctic&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;EST5EDT&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Indian&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Navajo&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;tzdata.zi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Asia&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Etc&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;Iran&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;NZ&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;UCT&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Atlantic&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Europe&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;iso3166.tab&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;NZ-CHAT&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;Universal&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Australia&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;Factory&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Israel&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Pacific&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;US&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Brazil&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;GB&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;Jamaica&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Poland&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;UTC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Canada&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;GB-Eire&lt;/span&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;Japan&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Portugal&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;WET&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CET&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;GMT&lt;/span&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;Kwajalein&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;posix&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;W-SU&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Chile&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;GMT+0&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;leapseconds&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;PRC&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;zone1970.tab&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;CST6CDT&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;GMT-0&lt;/span&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;leap-seconds.list&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;PST8PDT&lt;/span&gt;&lt;span&gt;   &lt;/span&gt;&lt;span&gt;zonenow.tab&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Cuba&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;GMT0&lt;/span&gt;&lt;span&gt;       &lt;/span&gt;&lt;span&gt;Libya&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;right&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;zone.tab&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;EET&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Greenwich&lt;/span&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;MET&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;ROC&lt;/span&gt;&lt;span&gt;     &lt;/span&gt;&lt;span&gt;Zulu&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;~&lt;/span&gt;&lt;span&gt; $ ls /usr/share/zoneinfo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;lsd:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;/usr/share/zoneinfo:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;No&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;such&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;file&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;or&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;directory&lt;/span&gt;&lt;span&gt; (os &lt;/span&gt;&lt;span&gt;error&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;span&gt;).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;放在最后：这篇之后的文章都会在文件名前面加上数字，要不然会有些乱&lt;/p&gt;</content:encoded><category>Gaming</category><category>Proton</category></item><item><title>重构自己的 TG 转发 Bot</title><link>https://kokosa.icu/zh-cn/blog/tgbot/</link><guid isPermaLink="true">https://kokosa.icu/zh-cn/blog/tgbot/</guid><description>之前用的那个转发 Bot 一直收到很多广告，而且开发者一直没有加上屏蔽功能，再去看一眼发现项目早就停更了1年了。每天都要收到一堆什么 VPN 推销、色情引流、U盾之类的垃圾消息，实在受不了了，于是决定自己动手重写一下功能......

</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h3 id=&quot;缘起&quot;&gt;缘起&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;之前用的转发机器人是 &lt;a href=&quot;https://github.com/LloydAsp/nfd&quot;&gt;Node Forward Bot&lt;/a&gt;，用了挺长一段时间的，但是老是收到各种广告，不堪其扰，再去看一眼发现项目早就停更了 1 年了，NFD2 因为没有开源（好像是？没有找到仓库的样子）所以没有尝试，我也不知道它是不是有广告拦截的功能，于是我就打算再造一个轮子出来自己用&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;关键词过滤&quot;&gt;关键词过滤？&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;一开始尝试的是给它塞一大堆&lt;strong&gt;敏感词&lt;/strong&gt;，收到了自动屏蔽，然后就出现了屏蔽 &lt;code dir=&quot;auto&quot;&gt;x86_64&lt;/code&gt; (64)，&lt;code dir=&quot;auto&quot;&gt;Steam 平台独占&lt;/code&gt; (台独)，&lt;code dir=&quot;auto&quot;&gt;Python 脚本&lt;/code&gt; (外挂)，&lt;code dir=&quot;auto&quot;&gt;监听端口&lt;/code&gt; (监听) 之类的神必结果&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;那么用正则表达式&quot;&gt;那么用正则表达式？&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;谔谔…显然这条路行不通。于是我又听群友的尝试写了一堆&lt;strong&gt;正则表达式&lt;/strong&gt;，但是众所周知，中文广告都很神秘，&lt;code dir=&quot;auto&quot;&gt;丅子&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;微 P 嗯&lt;/code&gt;、&lt;code dir=&quot;auto&quot;&gt;神必 emoji 拼接&lt;/code&gt;…这些真的能用正则防下来吗？或许可以，但是显然我的脑子没这么强大（汗），所以最后决定用 LLM 来审核&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;gemini好&quot;&gt;Gemini！好！&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;我需要一个尽可能快，智商不用多高但是能理解语料的模型，然后当时并不知道 Google 又给 AI Studio 的限额缩水了，众所周知 Google 有个模型叫 &lt;code dir=&quot;auto&quot;&gt;gemini-flash-lite&lt;/code&gt;，感觉适合用来做审查内容的模型，于是就用上了，写了一段简单的 Prompt 过去让它判断用户输入，输出 &lt;code dir=&quot;auto&quot;&gt;SAFE&lt;/code&gt; 或是 &lt;code dir=&quot;auto&quot;&gt;UNSAFE&lt;/code&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;const &lt;/span&gt;&lt;span&gt;payload&lt;/span&gt;&lt;span&gt; = {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;contents:&lt;/span&gt;&lt;span&gt; [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;parts: [&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;text: &lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Role&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Content Moderator API. Output one word only.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Rules&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;UNSAFE if:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- Real human nudity/sex&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- QR codes/spam/ads&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- Real gore/shock content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- Illegal content promotion&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;SAFE if:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- 2D/Anime/Cartoon (even suggestive)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;- Normal photos/text/screenshots&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;# Output&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;One word: &quot;SAFE&quot; or &quot;UNSAFE&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Analyze: &lt;/span&gt;&lt;span&gt;${&lt;/span&gt;&lt;span&gt;JSON&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;stringify&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;text&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;`&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;虽然会有一点延迟，但是几乎可以忽略不计了，相比传统的规则匹配，LLM 能理解上下文和语义，误杀率低很多。缺点可能就是成本，不过Gemini 有免费额度，并不多就是了，接了三个 API 也就每天 60 次，广告拦截倒是勉强够用了&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;重构整个项目&quot;&gt;重构整个项目&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;既然都改了这么多了，干脆把整个项目重构一下吧。原来的代码架构很乱，所有逻辑都堆在一个文件里，维护起来比较痛苦（虽然这种项目几乎不需要怎么维护）&lt;/p&gt;
&lt;p&gt;于是和各路 LLM 苦战了一晚上，全降智了，操你妈 LLM 提供商，最终下了个 Antigravity 一口气把整个项目重构成了模块化的架构：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── src&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   ├── ai.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   ├── config.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   ├── handlers&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   │   ├── admin.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   │   └── guest.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   ├── index.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   ├── storage.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   └── telegram.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── wrangler.toml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;不得不说 Antigravity 是真的好，免费的 Claude Opus 4 爽用了，给的额度还多&lt;/p&gt;
&lt;p&gt;实现了这些：&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;功能&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;描述&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;AI 内容审核&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;基于 AI 的不良内容识别&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Ban List&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;查看所有被封禁的用户&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;统计系统&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;消息数、用户数、AI 拦截数&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;多 API Key 轮换&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;傻逼 Google&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;多 API Key 轮换这个功能是为了应对死妈 Google 的 Rate Limit，每天 20 次 API 调用够谁用啊，之前还每天 100 次调用，Gemini CLI 和 Antigravity 就量大管饱，API 就那么抠&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;整个项目跑在 Cloudflare Workers 上（原项目的小巧思，方便好用还免费），完全零成本的方案，LLM 用的也是免费的，整个项目就一堆 JavaScript&lt;/p&gt;
&lt;p&gt;最后把代码推到了 GitHub，以 BSD2 协议开源&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;link&quot;&gt;Link~&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/hatanokokosa/kokosa-forward-bot&quot;&gt;GitHub: kokosa-forward-bot&lt;/a&gt;&lt;br&gt;
&lt;a href=&quot;https://linux.do/t/topic/1340613&quot;&gt;LinuxDo: KFB — 一个带有 AI 审核的 Telegram 私聊转发机器人&lt;/a&gt;&lt;/p&gt;</content:encoded><category>Bot</category><category>AI</category></item><item><title>从 configuration.nix 到 Flake</title><link>https://kokosa.icu/zh-cn/blog/flake/</link><guid isPermaLink="true">https://kokosa.icu/zh-cn/blog/flake/</guid><description>因为距离高考还有不到240天左右了，时间很紧所以并没有什么时间写博客，但是因为被群友拷打了：再怎么也写一篇罢，要不然这个网站就要一直空空如也下去了，其实一直有写日记的习惯，但是过于私人所以就不放出来给各位品鉴了...

</description><pubDate>Sat, 04 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;div&gt;&lt;h3 id=&quot;近况&quot;&gt;近况&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;因为距离高考还有不到240天左右了，时间很紧所以并没有什么时间写博客，但是因为被群友拷打了：再怎么也写一篇罢，要不然这个网站就要一直空空如也下去了，其实一直有写日记的习惯，但是过于私人所以就不放出来给各位品鉴了&lt;/p&gt;
&lt;p&gt;其实百忙之中也干了一些事，就比如上周末我把之前一直想搞的 Flake 给搞上了，在 CodeX CLI 的帮助下并没有花费很多时间，让 AI Agent 帮我处理了最麻烦的几个地方，几乎算是一边过了，这是目前的目录结构：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── flake.lock&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── flake.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── home&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│   └── modules&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│       ├── dae.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│       ├── fzf.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;│       └── niri.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;├── Justfile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;└── nixos&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── configs&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│   ├── dae&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│   │   └── config.dae&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│   └── niri&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│       └── config.kdl&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── hosts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│   └── kokosa&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│       ├── default.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;│       └── hardware.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── modules&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── boot.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── desktop.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── locale.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── networking.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── nix-settings.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── packages.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── security.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;├── services.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;└── users.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Home Manager 管理的那几个软件其实只有 fzf 是正在使用的，剩下两个都是计划使用所以先把配置写上，在设置里还是关闭的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div&gt;&lt;h3 id=&quot;为什么要从-clannels-换到-flakes&quot;&gt;为什么要从 Clannels 换到 Flakes？&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;相比 &lt;code dir=&quot;auto&quot;&gt;configuration.nix&lt;/code&gt; 来说，Flake 解决了许多问题，他可以锁定所有软件包及依赖的版本，一份配置文件可以精确到版本号与 Commit 的还原整个系统，而 configuration 似乎做不到这一点，会跟随 Channel 的更新&lt;/p&gt;






























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;strong&gt;特性&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Channels&lt;/strong&gt;&lt;/th&gt;&lt;th&gt;&lt;strong&gt;Flakes&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;依赖&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;隐式 (channels)&lt;/td&gt;&lt;td&gt;显式 (inputs)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;重建&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;sudo nixos-rebuild switch&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;nh os switch .&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;复现&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;依赖各自的 channel 版本&lt;/td&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;flake.lock&lt;/code&gt; 保证一致&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;开发&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;nix-shell&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code dir=&quot;auto&quot;&gt;nix develop&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;nh是一个nixos帮助工具，但是对于configuration的支持很神秘，换到了 flake 之后发现这是个非常好用的工具，赞赏并推荐&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;同时，Flake 可以通过 Inputs 轻松的引用其他 Flakes，比如 &lt;code dir=&quot;auto&quot;&gt;sodiboo/niri-flake&lt;/code&gt; 之类的从而做到声明式的管理某些并不被官方支持的软件，我其实并不打算使用 HM 来管理 Niri&lt;/p&gt;
&lt;p&gt;还有开发环境方面，你或许会发现：GitHub/Codebreg 上的许多开源项目根目录下出现了一个叫做 &lt;code dir=&quot;auto&quot;&gt;flake.nix&lt;/code&gt; 的文件，有了这个文件你便可以使用 Nix 来轻松的还原整个开发环境，并且与主系统相互隔离————仅仅只需要一行 &lt;code dir=&quot;auto&quot;&gt;nix develop&lt;/code&gt;，大多数现代 Nix 项目（甚至不是 Nix 项目）都开始使用这些，毕竟确实好用&lt;/p&gt;
&lt;p&gt;当然它也有一些缺点，比如 API 不稳定（自 2019 年至今仍是 “experimental”）、强制依赖 Git之类的，其他坑也不少，&lt;em&gt;Determinate Nix&lt;/em&gt; 解决了不少，但是它是部分（如nixd）闭源的。虽然 Flake 有不少坑，但是它会比 Channels 要方便一些，况且现在有 AI 可以管理我的配置，迁移并没有多复杂&lt;/p&gt;
&lt;div&gt;&lt;h3 id=&quot;文件展示&quot;&gt;文件展示？&lt;/h3&gt;&lt;/div&gt;
&lt;p&gt;首先是 &lt;code dir=&quot;auto&quot;&gt;flake.nix&lt;/code&gt;：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;Kokosa&apos;s Nix Flake&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Nixpkgs &amp;#x26; NUR&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;nixpkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;github:NixOS/nixpkgs/nixos-unstable&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;nur&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;github:nix-community/NUR&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Flake-parts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;flake-parts&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;github:hercules-ci/flake-parts&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Home Manager&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;home-manager&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;github:nix-community/home-manager&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nixpkgs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;follows&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;nixpkgs&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;# Other&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;hid-bpf-uclogic&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;url&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;github:dramforever/hid-bpf-uclogic&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;outputs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt; @ {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;nixpkgs,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;flake-parts,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;}:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;flake-parts&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;lib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;span&gt;mkFlake&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;span&gt;inherit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;;} {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;systems&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;x86_64-linux&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;perSystem&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;span&gt;pkgs,&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;...&lt;/span&gt;&lt;span&gt;}: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;formatter&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;pkgs&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;span&gt;alejandra&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;      &lt;/span&gt;&lt;span&gt;flake&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;        &lt;/span&gt;&lt;span&gt;nixosConfigurations&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;kokosa&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nixpkgs&lt;/span&gt;&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;lib&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;&lt;span&gt;nixosSystem&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;system&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;x86_64-linux&lt;/span&gt;&lt;span&gt;&quot;&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;specialArgs&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;inherit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;modules&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;            &lt;/span&gt;&lt;span&gt;./nixos/hosts/kokosa/default.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;          &lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;};&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;导入的唯一一个文件 &lt;code dir=&quot;auto&quot;&gt;default.nix&lt;/code&gt; 是我这台设备原先的 &lt;code dir=&quot;auto&quot;&gt;configuration.nix&lt;/code&gt;，不过现在它被改的已经面目全非，原本超大的，现在切片成了许多不同的小文件并统一导入进 import 里面，除此之外这个文件里面只有 home-manager 的一些设置&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;imports&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;inputs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;home-manager&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;nixosModules&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;home-manager&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;../../modules/nix-settings.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;../../modules/networking.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;../../modules/security.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;../../modules/packages.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;../../modules/services.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;../../modules/desktop.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;../../modules/locale.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;../../modules/users.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;../../modules/boot.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;    &lt;/span&gt;&lt;span&gt;./hardware.nix&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;  &lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;其他的就和我原来的配置就没什么区别了，目前它们还没有被上传到 GitHub 托管，之后估计有时间就会去搞一下，最后就附带一张截图：&lt;/p&gt;
&lt;figure&gt;&lt;img src=&quot;https://kokosa.icu/posts/flake/rice.avif&quot; alt=&quot;情绪好&quot;&gt;&lt;figcaption&gt;情绪好&lt;/figcaption&gt;&lt;/figure&gt;</content:encoded><category>NixOS</category></item></channel></rss>