使用nix管理科研开发实验环境

使用nix管理科研开发实验环境

前言

最近需要同时改三篇论文,就有三种不同的开发环境,并且由于每一篇论文的实验跑起来都要很久,这就让人不得不并发提效。最终的痛苦感受就是管理起来非常考验人类的大脑。并且我感觉通过人类大脑来完成“因环境变化引起上下文切换”非常的低效。

经过一番复盘,我发现我之前为了偷懒已经搞出了一套不错的组合:

  • uv 管理Python环境
  • tmux 管理后台任务
  • hermes AI助手
  • node AI助手的助手(管插件)
  • codex-cli/claude code Vibe coding

进一步调研后,我发现还有高手

  • nix 将复杂的开发环境转化为一份可确定的、版本化的代码,让“环境”成为项目中永不丢失、随时可复现的资产,而非人类大脑的沉重负担。

操作指南

实际上是备忘录,照顾健忘的人类,也就是我自己。
前情提要:刚刚创建了一个崭新的ubuntu24-server虚拟机。

安装nix

sh <(curl -L https://nixos.org/nix/install) --daemon

尽量使用默认的多用户安装。

安装完成后,你需要按照提示重启终端或者执行 source /etc/profile.d/nix.sh 才能生效。

配置清华源

编辑/etc/nix/nix.conf,添加以下内容:

# 替换二进制缓存地址
substituters = https://mirrors.tuna.tsinghua.edu.cn/nix-channels/store https://cache.nixos.org

# 信任镜像源的公钥(必须加上,否则无法验证下载包)
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=

# 开启并行下载(默认是1,改成你 CPU 核心数左右,比如 4 或 8)
max-jobs = auto

安装全局基本软件

git, vim, tmux, htop等

# 更新本地索引
nix-channel --update

# 安装基础软件 + 性能监控
nix-env -iA \
  nixpkgs.git \
  nixpkgs.vim \
  nixpkgs.tmux \
  nixpkgs.htop \
  nixpkgs.curl \
  nixpkgs.wget 

编写项目shell.nix

uv, cc, make, node等

在项目根目录创建shell.nix文件,下面是我一个项目的例子

{ pkgs ? import <nixpkgs> {} }:

pkgs.mkShell {
  # 1. 声明该项目需要的软件包
  buildInputs = with pkgs; [
    # 核心开发环境
    nodejs_24       # AI 助手的助手,管插件
    uv              # Python 环境管家
    
    # 编译环境 (Build Essential)
    stdenv.cc       # gcc, g++, libc
    gnumake         # make
    cmake
  ];

  # 2. 环境变量配置
  shellHook = ''
    # 告诉 uv 使用 Nix 提供的 python 解释器路径(可选)
    export UV_PYTHON_PREFERENCE=only-system
    
    echo "实验环境已就绪"
    echo "可用工具: node $(node -v), uv $(uv --version), gcc $(gcc -dumpversion)"
  '';
}

激活项目shell环境,只需要在项目目录下输入:nix-shell

也可以考虑direnv来自动激活,但是我更喜欢手动控制的感觉。有兴趣的可以自己研究。

使用效果示例:

$ nix-shell
these 4 paths will be fetched (665.2 KiB download, 2.5 MiB unpacked):
  /nix/store/zpi6wk9q1kk24nznhhkm1vb0hgb243dx-libevent-2.1.12
  /nix/store/nq665m2yhb7953kiv0pv9a3z2vpl8z9a-libutempter-1.2.3
  /nix/store/59psh322cyi562xszcj0xvqhrligax16-tmux-3.6a
  /nix/store/q8zhjkx9zqvpkg4fa9x21fwwh9x14wcq-utf8proc-2.11.3
copying path '/nix/store/zpi6wk9q1kk24nznhhkm1vb0hgb243dx-libevent-2.1.12' from 'https://mirrors.tuna.tsinghua.edu.cn/nix-channels/store'...
copying path '/nix/store/nq665m2yhb7953kiv0pv9a3z2vpl8z9a-libutempter-1.2.3' from 'https://mirrors.tuna.tsinghua.edu.cn/nix-channels/store'...
copying path '/nix/store/q8zhjkx9zqvpkg4fa9x21fwwh9x14wcq-utf8proc-2.11.3' from 'https://mirrors.tuna.tsinghua.edu.cn/nix-channels/store'...
copying path '/nix/store/59psh322cyi562xszcj0xvqhrligax16-tmux-3.6a' from 'https://mirrors.tuna.tsinghua.edu.cn/nix-channels/store'...
--- 虚拟机开发环境已就绪 ---
Node: v24.14.1
Python/uv: uv 0.11.7 (x86_64-unknown-linux-gnu)
GCC: gcc (GCC) 15.2.0

[nix-shell:~/gan-pes]$ uv --version
uv 0.11.7 (x86_64-unknown-linux-gnu)

[nix-shell:~/gan-pes]$ uv sync
Using CPython 3.12.3 interpreter at: /usr/bin/python3
Creating virtual environment at: .venv
Resolved 71 packages in 1ms
Prepared 67 packages in 2m 07s
Installed 67 packages in 62ms
 + annotated-types==0.7.0
 + anyio==4.13.0
 + certifi==2026.2.25
 + charset-normalizer==3.4.7
 + contourpy==1.3.3
 + coverage==7.13.5
 + cycler==0.12.1
...

进入nix-shell之后一切都齐全,并且也算美观。大善。

额外内容:安装AI助手

安装hermes

在CC越来越像10人团队但是9个上级频繁开会压榨1个程序员的情况下,Hermes无疑更加符合“少即是多”的哲学。

Hermes官仓

curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

目前Hermes的记忆管理还属于比较初级的高级,所以我还装了MemOS的记忆插件

插件官仓
2026年4月28日仍可用的中文文档

# 注意时效
curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/openclaw-local-plugin-20260408/apps/memos-local-plugin/install.sh | bash

安装codex-cli

你没有听错,codex-cli不需要泄露,一直都是开源的。虽然不像cc那样擅长完成重型项目规划,但是单步开发任务水平仍然是很高的。我将其作为Hermes的一个编程小弟。

Codex官仓

# Install using npm
npm install -g @openai/codex

至于怎么将模型换成自定义模型,那就需要自己上网学一下咯。

建议使用方法:

$ hermes
# 进入hermes界面后输入
> 我已经装好了codex,你以后自行判断什么时候使用它来完成编程任务。
# 然后就根据个人爱好调教咯
posted @ 2026-04-29 15:41  凉快李某  阅读(49)  评论(0)    收藏  举报