用 Nix 管理本地开发环境:从零搭建可复现的构建流水线
本宫今天不聊胭脂,来给你们讲讲怎么用 Nix 给自己装个可复现的开发环境,省得到时候跑项目全是找不到库的烂摊子。想必你们已经在某条博客里被那句“装好 nix,直接 nix-env -i hello”的懒人命令给冲昏了头,结果在 CI 里跑出“一堆找不到的符号”,只能哭着找本宫求安慰。别慌,臣妾这就带你们把这条流水线从零到跑通,顺带把那些蠢操作一五一十撕给你们看。
一、先把 Nix 安上,别让系统哭鼻子
别再用 apt install nix 这种半吊子装法,直接跑官方的单行安装:curl -L https://nixos.org/nix/install | sh。执行完之后记得 nix --version 确认一下,看到 2.18.x 以上的版本才算合格。要是装完发现 nix-daemon 没跑起来,直接 sudo launchctl start org.nixos.nix-daemon(macOS)或 sudo systemctl start nix-daemon(Linux),否则后面的命令都会甩你一脸 “No such file or directory”。臣妾提醒一句,别把安装脚本改成 “–daemon=false”,除非你想自己手动管理路径,省得以后每次打开终端都要手动 source。
二、第一次跑 nix-shell,踩坑指南
装好 Nix 后,最常见的练手命令是 nix-shell -p hello,这会把 hello 包拽进来并生成一个临时 shell。可是很多人一跑就出现 “cannot spawn nix-shell: No such file or directory”,原因是 PATH 没配好。先 source /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh(Linux)或 source ~/.nix-profile/etc/profile.d/nix-daemon.sh(macOS),再试一次。要是仍然报错,检查一下是否在多用户模式下运行,grep 'build-users-group' /etc/nix/nix.conf,没有的话就在 /etc/nix/nix.conf 里加一行 build-users-group = nix-build,重启守护进程后再跑。臣妾见过太多人把这步跳过去,结果后面的 nix develop 直接卡死。
三、flake 才是正经事,别再用 default.nix 了
default.nix 那套写法已经老掉牙,臣妾在这里推荐直接上 flake。先跑 nix flake init -t github:NixOS/nix-flakes,这会生成一个 flake.nix 脚手架。别慌,生成的代码里会有 description、inputs、outputs 三大块,按照自己的项目需要把 inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable" 改成固定的 rev 或 ref,比如 "github:NixOS/nixpkgs/23.05"。随后在 outputs 里写 devShell = pkgs.mkShell { buildInputs = with pkgs; [ git curl ]; };。这样一来,只要 nix develop,本宫就会把完整的开发环境拽进你的终端,根本不需要手动 nix-shell。
四、把项目锁进 flake.lock,别让依赖裸奔
写好 flake.nix 之后,最关键的一步是 nix flake lock,这一步会把所有输入(nixpkgs、自己的
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时






