使用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无疑更加符合“少即是多”的哲学。
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
目前Hermes的记忆管理还属于比较初级的高级,所以我还装了MemOS的记忆插件
# 注意时效
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的一个编程小弟。
# Install using npm
npm install -g @openai/codex
至于怎么将模型换成自定义模型,那就需要自己上网学一下咯。
建议使用方法:
$ hermes
# 进入hermes界面后输入
> 我已经装好了codex,你以后自行判断什么时候使用它来完成编程任务。
# 然后就根据个人爱好调教咯

浙公网安备 33010602011771号