• Biemx

    古法编程时代过来的程序员,用了快 2 个月 NixOS ,预感这就是 AIOS 的基座,记录下经验和感受

    原本以为在我 26 岁高龄的年纪不会再像小时候一样有心情捣鼓东西了,尤其是操作系统。但碍于出差、内存芯片暴涨和懒得清理 Windows 的原因,打算给笔记本重装个系统让它重获青春。

    由于日常工作 50% 的时间都在和 Kylin 打交道,而且之前还是小登的时候也捣鼓过不少发行版,因此第一时间考虑的就是 Linux ,第一是已经习惯了 Unix 的 Shell ,第二是 Windows 总是离非 C# 的开发更远更绕一些,不管是虚拟化还是各种工具链,总是不能直接像 Linux 一样一行命令或者几行命令就解决,第三是用 Windows 开发各种东西总有一种穿着雨衣冲锋的感觉(?

    经过一番调研,在 AI 时代下,想要通过文本来控制系统,且有秒级回滚机制的,相当于一个系统就是一个 git 仓库,到啥机器上都能一键回城,恢复自己熟悉的环境,自己要的软件直接自动下好,独特的配置也自动还原,开发环境也有机制隔离,根据项目自动切换环境,不用在 Docker 里面隔靴搔痒,基本就是 NixOS 是最成熟方案了,当然我是让 GPT 找的,在知道 NixOS 之前,我只知道 Debian/CentOS/Ubuntu/Lubuntu/Mint/Arch/Kylin/Deepin/Puppy 之类的主流发行版(话说现在Debian还叫答辩吗)。

    作为一名国学思想爱好者,配置文件即系统的思想,类似太极出乾坤的感觉,直接把我这种拖延症和懒癌晚期患者行动力拉满, 并很快就把大U盘狠狠的插入本子并灌满了NixOS,没给Windows留下一点余地

    于是:

    图片

    由于自己不打游戏,基本上只是办公和开发,所以软件比较少,微信飞书都能跑,该有的功能都完好,希望能够用到老。

    /btw 感慨死宅变牛马久了后连终端皮肤都懒得搞了

    图片

    有些国内应用绕不过 Windows ,懒得折腾各种容器和奇技淫巧,直接虚拟机了。经过 AI 伺候,相比 VMware 用起来也大差不差,共享剪贴板和拖拽文件都有了

    图片

    开发上,我习惯用 VSCode 了,NixOS 支持没什么问题,大部分插件都能用,环境主要靠 AI 写 devenv.nix 配置文件。

    图片

    问了下 电脑管家 我用了多长时间的 NixOS ,已经快两个月了。

    图片

    老笔记本装了 Linux 腰不酸了,腿不疼了,续航上去了,风扇不咆哮了,Windows 下真的风扇叫声大到出工伤。

    图片

    折腾过程

    最开始我是真的被各种环境弄烦了。

    刚上大学那会,CS 和 EE 躲不过 C 和 C艹 环境配置,SWE 躲不过 JS、 Jvav 和 C艹艹 甚至世界上最好的语言 的环境配置,以及基本都躲不过 Python 和 MySQL 环境配置。

    作为一名在丑陋旧世界会十几门语言 的环境配置和pirntf(“hell wrold”;) 的专业后端开发者,被窝囊费搞成了全栈的形状,是事物发展的必然趋势。

    于是,在沉默中爆发,全爆给了 GPT ,问有什么工具可以统一管理各种环境而且不是套层容器吗?GPT 冷血回复三个字母:Nix。

    能一直干程序员这行的,都是骨子里留了一堆好奇心的,见到新玩具,必然直接开启 Deep Research 模式,不了解还以为是个脚本工具,一看,这tm是个系统,还是发行了很久的 Linux 系统,为什么平时都没在社区见到过?

    了解了这个系统的特性后,我就想,既然系统配置都直接写成了文件,还支持回滚,这不利好 AI 吗?

    进一步调研了国内有 NixOS 的镜像站后,就放心大胆的开搞了。

    安装好系统后,直接听 AI 的建议, nix-shell 先把 node 环境拉了下来,让 codex 开始跑开荒。这次没有看任何开源的轮子,打算纯粹 Vibe 装一次系统,也是想试试这种长期的活 AI 能不能干好,就算是持续的 HITL 。

    时间线

    懒得打字,让 AI 用事实说话

    图片

    图片

    省流版:

    图片

    当前层次

    当时 Vibe 的时候也是持续受到当年刷 LeetCode 的思想,从时间和空间上考虑问题,于是平移到了考虑系统层级

    图片

    也是类似渐进式的思路,变得快的放外面,变得慢的放里面,所谓阴在阳之内。

    图片

    肯定会有更好的更完美的方案,但考虑到 ROI ,先做到可用,即不在阳之对的思路。

    图片

    最重要的还是落到开发环境上,最初让我接触到 NixOS 的那个问题自然也解决了,现在每次进入一个项目后,先 devenv shell 启动开发环境,要运行就 devenv up,再也不用管各种项目的环境了,统一扔给 Coding Agent + devenv 就好了。目前还没踩到啥坑,devenv 也是用的 Nix 语法来配置的,所以也给我一种 NixOS 的生态很规整的感觉,INTJ 狂喜

    图片

    图片

    当时选择 devenv 也是纠结了挺久,尤其是 direnv 确实是有种cd出env随的言出法随效果,但我不一定进文件夹就是为了开发,也可能是为了摸鱼或者纯手误。

    图片

    另外,也是为了能够减轻我认知负担,毕竟我不是来给自己找活干的,做这些事情就是为了后面能更持久的犯懒。

    图片

    以及留了个围栏,要求任何 Agent 都必须把环境伺候到位

    图片

    总而言之,对我来说好处大于坏处,于是认知负担就减少了,npm pnpm bun uv pip conda cargo go 之类的都 let it goNix 吧

    图片

    下步计划

    打算找到相对优雅的方案,把PC和移动端连通起来,目前在看 ZeroClaw 和 Hermes,还在调研中。

    PS:意外发现

    图片

    图片

    才疏学浅,看来 NixOS 用户不少啊,少见多怪了 ^-^

    后面会不会类似mihomo也出个Homos?


    闭门造车不可取,因此不只是记录,也是发出来给佬友们丢人现眼一下,请各位大神佬友多指教,除了打算去翻翻 L 站和社区的帖子和轮子,还想和佬友们讨论讨论有没有一样在捣鼓 NixOS 的,说不定可以一起玩耍,这次是真的 LinuxDo 了

    图片

    主楼
  • speedrun

    ai玩的真好,我开始用nixos的时候gpt还没问世,在google搜索都没多少资料,都是看别人配置学习的,真的很折磨

    现在nixos已经是我用过最久的发行版,已经4年没重装过,可以安心养老了

    #1
  • PJ568

    这个确实是有点意思啊。不过距离设想中围绕完善版 Computer Use 智能体搭建的用户环境还是有些距离。已加 Linux 。

    我用 Manjaro 还是用习惯了,得研究一下 NixOS。

    #2
  • Biemx

    好奇佬友的NixOS用这么久性能上有什么问题吗?还是说和最开始的时候差别不大?

    #3
  • laris

    我最近在研究怎么在macos上的orbstack跑nixos,然后nixos里跑zfs,把zfs增量数据远程备份。nixos是唯一是IAC风格的系统,的确是一个git commit搞定一切。

    起因是公司的macos有监控,觉得不爽的很,干脆跑到orb里,扫去吧哈哈

    #4
  • huo0

    秒级回滚机制的,相当于一个系统就是一个 git 仓库,到啥机器上都能一键回城,恢复自己熟悉的环境

    这个需求!你想让我把Ubuntu 扔掉就直接说

    #5
  • Biemx

    正好今天在一个朋友的MacMini上拉了自己的git仓库部署环境,用到了devenv,于是用到了Nix,佬友可以尝试下,Nix工具是无侵入的,可以跑官方安装工具,最终一切都在/nix下,用后不喜欢删了路径和环境变量就好。

    核查事实:

    图片

    图片

    #6
  • zzz-linuxdo

    用一个flake.nix就能控制这个项目用到的工具链和版本号还是挺方便的,不用考虑编译的时候被其他依赖污染了环境

    #7
  • Pdr

    我一直感觉nix就是个container,如果为了干净可控的系统,还不如直接跑个自定义的container。现在做研究写代码的dependencies更新好快,用nix赶不上趟。还是arch合适。

    #8
  • Jeremy_Chen

    真的在linux do社区学linux系列

    #9
  • cqrect

    曾经尝试过一次,当时资料很少,各种配置和兼容性问题很折磨,就放弃了,看来是时候找时间再试试了

    #10
  • 力O

    看完佬友写的, 感觉这个真挺有价值的 下一代AI操作系统, 有机会真的值得把玩一下

    #11
  • Edsger_W._Dijkstra

    站内好少见的正经linux讨论(

    #12
  • Edsger_W._Dijkstra

    现在是使用nixos最好的时候了, 配置文件什么的都可以让ai帮忙写了

    #13
  • laris

    nix真正的意义是对于操作系统底层的IAC形式化。

    IAC=Infra as Code。

    我研究了一阵子,一直思考IAC的本质,本质是用code的方式来构建OS。

    code是几乎类似于hardcode。

    程序是近乎死的,也就是你定义的东西都固化于code之中,不会轻易漂移变动,而一套可运行的系统,是从code开始构建的,构建以后,通过测试之后,便是可重现的。

    这种IAC方式其实是适合大规模部署的,把devops的工作转移到研发阶段,或者说未来可能只有研发,没有devops和运维的独立部分。

    举个例子,传统研发测试都需要在app做的差不多了,交给运维来维护,假设kernel发现一个bug,要升级,而升级kernel会导致一系列的依赖变更,从而导致整个os系统和app做变更,一般的手段是在container或者os这里做测试,然后再反馈到dev阶段重新走一遍流程,而且没办法控制具体已经部署的系统的漂移,比如某个研发或者运维直接做了patch。这一切就像一个庞大的分布部署的系统,没办法控制各节点的漂移情况。

    如果从源头开始,IAC从code级别控制,并且能控制漂移,那么就可以从源头开始控制整个系统的更新和控制漂移。

    其实对于自定义container也是一种IAC形式,但是它只能控制container一层,没办法控制整个流程。评论中提到了代码的dependencies更新好快就是一个典型的例子,比如nodejs更新很快,patch很多,那么针对container层面的修改,就会很频繁,但是对于dev阶段,是不知道container这边频繁的更新,如果能把app和container阶段的结合到一起,就会避免两个阶段更新不一致造成的问题。

    nix是我在研究IAC的时候,对于os和硬件的控制没想明白以后,然后突然回忆起对nix感兴趣,然后重新研究实践出来的结论。

    对于个人来讲,其实也差不多。一样有益。

    举个例子,我有两台mac,但是拿到一个新环境,我要重新开始部署homebrew,然后看看有什么包需要重新安装,偷懒一点用brew bundle来迁移,但是如果任何一边因为我临时的需求安装了某个cmdline,那么另一边是不知道的,于是回到另一边我想用的时候,还得重新装一遍。我的设想是可以自动同步(虽然现在还没实现)。

    做一个更极端的例子,比如我把本地mac环境做快捷开发环境,然后远端异构的linux是远端开发环境,如果我想让两端的开发环境同步,就会有点麻烦,远端的linux也不一定是有root,distro也不一定一致,但是nix是可以支持rootless,而且可以做到os的distro无关,那么这种情况更可以通过一套验证过的配置来快速同步(其实感觉挺慢的,但是至少不会去关心)

    目前计划的多实践的少,目前只是实践了,把几个不同机器的类型的vps/vm在原有的linux上直接重装成nixos。我用Rust实现了一套IAC系统,准备有时间继续实践到一个系统中来控制机器和os级别的环境统一配置。

    #14
  • Biemx

    当前层次

    当时 Vibe 的时候也是持续受到当年刷 LeetCode 的思想,从时间和空间上考虑问题,于是平移到了考虑系统层级

    图片

    我发现佬这个问题了,这个就是我换 nix 想要解决的痛点之一。 nix 的好处在于可以设置分层,比如系统层面可能我 Python 3.10 就够用了,专门的项目都用 devenv 隔离开了,该快的快,该慢的慢。

    #15
  • Pdr

    OK,可能大家理念不同,我一般是追逐最新技术然后尝试用最新的技术解决问题,所以我会觉得nix会拖后腿:)

    #16
  • Reisen

    我也是使用的NixOS,喜欢它的可复现性,配合agent现在能很方便地调查问题,挫败感小了很多

    #17

发表回复

登录后回复