ota

nix 真的 agent 时代的天选之子。

  •  
  •   ota · 1 day ago · 1519 views

    现在 vibe 全要经由 nix + flake ,甚至 nix profile 都不用。 单体项目,需要 vibe ,就起一个 flake.nix ,一顿乱搞,坏了不心疼,因为 nix 是声明式的,可以 diff ,避免 apt 这种黑箱。 同一个项目,flake 也可以有不同的 outputs ,不用分场景。这带来的便利谁知道啊。 devShells + packages + packages.image ,直接用 profile default 即可,也就是不用 npm -g 呢。 不同项目,多个场景,就 one folder one flake 。 像 oci 的 build ,直接用完即焚。我之前的做法是 incus 开一个 container 跑。也可以退休了。

    已经离不开 nix 了,mac 也是用 nix 管理配置文件。

    但 nixos 说实在的,真的不会用。复杂了。还是 debian 顺手。有点那个啥,类似浏览器开个隐私窗口一样。

    7 replies    2026-09-13 21:01:55 +08:00
    hingle
        1
    hingle  
       1 day ago
    NixOS 好用,写几个配置就搭建好了环境,但一些 nixpkgs 里没有的包就比较麻烦。
    ota
        2
    ota  
    OP
       1 day ago
    @hingle 大部分都有。channel 不同可能源稍微落后点。无伤大雅。没有的话自己做 derivation ,这活 agent 代劳,也不用自己写难懂的 nix 。人工审核就行了。比如 ABI 之类的依赖。
    nixos 我用了几天,有点复杂呢,虽然我不用默认 channel 了,只用 flake 。但对 rebuild 的概念实在搞不懂,这货原子化的太细了。
    其实我还是习惯 apt 系统级软件 + nix 局部隔离的方式比较容易点。全声明 os ,这容易让自己的运维能力下降的。反正用 nixos ,我几乎没自己装过软件,都是 agent 代劳。但好处式可以 diff ,可能需要适应。
    mjs00
        3
    mjs00  
       1 day ago
    没用过 nix ,有些地方没看懂。
    “坏了不心疼”,指的是系统坏了,还是项目坏了?
    如果指的是系统,为啥项目的 flake.nix 可以保护系统呢?
    如果指的是项目,nix 比 git 有什么优势呢?
    说“避免 apt 这种黑箱”,意思是项目开发要用 nix ,不用 apt 吗?为什么项目和 apt 有关呢?用到 npm 的 node 项目,依赖一般不是装在项目目录内,不需要 apt 吗?
    andyJado
        4
    andyJado  
       23h 44m ago
    @mjs00 哥们的这些问题要不试试问问 ai ?我是说,真的要拿来问人吗? appalling
    mjs00
        5
    mjs00  
       22h 36m ago
    @andyJado 问了以后还是不太清楚,AI 的回复意思大概是:
    1. 指项目坏了
    2. 用 nix 做版本管理依赖 git ,所以 nix 这里不和 git 在同一层级,而是和 npm 同一层级
    3. node 项目依赖管理一般不用 apt ,可能是 OP 写错了
    我感觉 AI 说的还是不太对吧,所以想确认下
    eccstartup
        6
    eccstartup  
       21h 26m ago
    同意
    ota
        7
    ota  
    OP
       12h 7m ago
    @mjs00 “坏了不心疼”指的是系统被污染了,依赖链污染,有洁癖的很难受。
    比如 apt 这种全局的,装点简单的 shell 工具,如 curl wget 这些当然没啥问题。一旦上很多依赖,都是写到/usr/local/bin 还有/etc ,我觉得就是挺污染眼球的。自然也有可能将系统弄坏,因为没有 lock 锁某个 commit rev ,所以今天你 apt 的东西,明天也许不一样了。昨天能跑的,一升级,完了。退回吧。也许覆盖了某些配置文件。虽然 dotfiles 一般程序不会覆盖只会增量。但保不齐一些软件乱来。
    因为都是系统级的,所以可能出现旧程序对新依赖的排斥。这就弄坏了。

    >如果指的是系统,为啥项目的 flake.nix 可以保护系统呢?
    不是保护系统,是一切配置都要声明,不是安装,是一个构建配方而已。cache.nixos.org 有快照,你直接拉预编译的,没快照可以根据 nix 配方本地编译一摸一样的。而且产物都进/nix/store ,格式是 hash-app ,并且是 444 只读保护。所以你每次对 app 修改,都会有一个新的 hash-app ,所以系统不会坏,这不是 flake 的能力,这是 nix 本身的能力,用 flake 主要是为了 lock 一个固定的 commit rev ,这样不会产生漂移,但这东西在 vibe 没啥用,坦诚说。但对 CI 交付很有用,几乎是标配。

    >如果指的是项目,nix 比 git 有什么优势呢?
    git 作为 agent 的 workspace ,以及管理 dotfiles ,这用不到 nix 。他们不是一类东西。nix 和 git 结合更方便。

    >说“避免 apt 这种黑箱”,意思是项目开发要用 nix ,不用 apt 吗?为什么项目和 apt 有关呢?
    vibe 不是纯代码,需要工具链的,apt 是全局安装。特别你一个宿主安装了很多 agent ,那么大家都在构建工具链对应不同的 task ,那么不是工具链依赖地狱嘛。nix 也有 apt 平替,比如 nix profile ,直接 add 安装也就是全局了。但他们都进了/nix/store ,你直接调用这些全局工具相比 apt 来的安全的多,他们的依赖都是独立一套的,互不干扰。
    项目开发最好能用 nix ,你用过一次就欲罢不能了,现在的问题就是如何让 agent 能乖乖的放弃 apt ,让他只能用 flake.nix 声明。靠 system.md 约定显然会逃逸的。所以 nix 也不是万能的,但至少 apt 下面的开发,系统就是个黑箱,天知道 agent 干了啥。不过 rm -rf */ 众生平等,nix 也得死。

    >用到 npm 的 node 项目,依赖一般不是装在项目目录内,不需要 apt 吗?
    但不是所有项目都是 js 啊,话说 nix 理解成 npm 的升级版就行了。他们的设计理念几乎一样,少数细节不同而已。你也说了,npm 依赖是装在 node_modules 的,nix 也借鉴了这个,依赖是安装在/nix/store 里的,然后每个 nix develop 都是通过符号连接到这个 store ,使用对应的依赖列表。

    最后总结:
    1. nix 我现在的用法是 profile 装所有 agent ,以前一个 agent 一个 lxc 来管理。
    比如 nix profile add github:numtide/llm-agents.nix#grok 搞个 grok 进来。
    删除也很简单,没有任何心智压力,因为你知道,/nix/store 里并不会 GC ,只是让包变成孤儿了。
    但你一个系统里装好多好多 agent ,你对他安装的依赖可以说是一无所知。
    2. git 管理的是 dotfiles ,这个所有 agent 都一样,nix 不会给你收益
    3. vibe 的时候一项目一个 flake 的设计方式,让 agent 强制用 flake 锁版本写,可以 ci 交付。而且 nix 支持 oci 打包,你要给不会用甚至不喜欢 nix 的也不用安装 docker ,自带了构建工具,所以 nix 是一个从包管理到 vibe 再到交付的完整解决方案。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4988 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 01:09 · PVG 09:09 · LAX 18:09 · JFK 21:09
    ♥ Do have faith in what you're doing.