install-nix-action 6大输入参数完全解析:Nix CI配置清单,一篇就够
install-nix-action 是一个用于 CI 流水线的 GitHub Actions,一条命令即可在 Linux 和 macOS 上安装 Nix。本文带你逐个解析它的 6 大输入参数,帮你一次性搞定 Nix CI 配置,无需反复踩坑 🚀
为什么选 install-nix-action 做 Nix CI
在解析参数之前,先了解它的核心优势(来源:README):
- ⚡ 安装极快:Linux 上约 4 秒,macOS 上约 20 秒
- 🛡️ 多用户安装:Linux 上默认启用沙箱(sandboxing)
- 🖥️ 支持自托管 Runner:self-hosted GitHub runner 也能跑
- 📦 配合 cachix-action:可共享
/nix/store二进制缓存,构建更快、团队共享 - 🐧 KVM 硬件加速:默认启用,方便运行 NixOS 测试和虚拟机
整个 Action 由三部分构成:
| 文件 | 作用 |
|---|---|
action.yml | 声明 6 个输入参数,并以 composite 方式执行安装脚本 |
install-nix.sh | 核心安装逻辑:写 nix.conf、下载并执行官方安装脚本 |
test.nix | 项目自测用:批量生成派生项,验证构建性能 |
6 大输入参数配置清单一览
所有参数都在工作流中通过 with: 传入,均非必填:
| 参数 | 作用 | 默认行为 |
|---|---|---|
extra_nix_config | 追加内容到 /etc/nix/nix.conf | 不追加 |
github_access_token | 用指定 token 从 GitHub 拉取,规避限流 | 自动使用默认 GITHUB_TOKEN |
install_url | 指定 Nix 安装脚本 URL(固定版本) | 官方最新发布版(2.25.2) |
install_options | 传给安装脚本的额外参数 | 无 |
nix_path | 设置 NIX_PATH 环境变量 | 不设置(需自行指定 nixpkgs) |
enable_kvm | 在 Linux 上启用 KVM 硬件加速 | true(可用时自动开启) |
参数一:extra_nix_config —— 追加 nix.conf 配置
对应 action.yml 中的 inputs.extra_nix_config,内容会被追加到 /etc/nix/nix.conf,是自定义 Nix 行为最灵活的参数。
典型用途:
- 添加二进制缓存(
substituters+trusted-public-keys) - 声明
system-features,让 Runner 可以跑 NixOS 测试
- uses: cachix/install-nix-action@v27
with:
extra_nix_config: |
system-features = nixos-test benchmark big-parallel kvm
📌 两个内置的 CI 优化(install-nix.sh 中实现):若你没有在 extra_nix_config 里显式覆盖,Action 会自动补上 experimental-features = nix-command flakes 和 always-allow-substitutes = true——也就是说 Flakes 开箱即用,且已缓存的派生项可直接替换、无需重新构建。
参数二:github_access_token —— 规避 GitHub 限流
Flakes 构建时需要从 GitHub 拉取仓库,匿名访问限流严格。传入 token 即可提速并避免 403 错误:
- uses: cachix/install-nix-action@v27
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
工作机制(见 install-nix.sh):
- 若提供了
github_access_token,写入access-tokens = github.com=<token> - 否则在 GitHub.com 上自动回退到默认的
GITHUB_TOKEN(Enterprise 实例上不生效) - 注意:如果你已在
extra_nix_config里手动写了access-tokens,则此参数不生效
参数三:install_url —— 固定 Nix 版本
默认安装的是官方最新发布版的安装脚本。为了构建可复现,建议固定版本:
- uses: cachix/install-nix-action@v27
with:
install_url: https://releases.nixos.org/nix/nix-2.3.7/install
- 最低支持版本为 2.3.5
- 也适合测试非稳定版(beta/rc)发布
- 下载失败时
install-nix.sh会自动重试最多 5 次,提升稳定性
参数四:install_options —— 额外安装脚本参数
把额外的命令行参数传给 Nix 官方安装脚本,空格分隔:
- uses: cachix/install-nix-action@v27
with:
install_options: --no-daemon
💡 背景知识:在 macOS 或带 systemd 的 Linux 上,Action 默认加 --daemon 参数走多用户守护进程模式,且构建用户数设为 2 倍 CPU 核心数;--no-daemon 则切换为单用户模式。你的 install_options 会被拼在安装参数最前面,优先级最高。
参数五:nix_path —— 设置 NIX_PATH 环境变量
⚠️ 最容易漏掉的一项:install-nix-action 默认不配置任何 nixpkgs,你需要告诉 Nix 从哪里取包。
两种方式:
# 方式 1:使用官方 channel(如 nixos-unstable)
- uses: cachix/install-nix-action@v27
with:
nix_path: nixpkgs=channel:nixos-unstable
# 方式 2(推荐):Flakes 模式,直接锁定仓库 commit,无需 nix_path
- uses: cachix/install-nix-action@v27
with:
github_access_token: ${{ secrets.GITHUB_TOKEN }}
- run: nix build
- run: nix flake check
该值会被写入 GITHUB_ENV,后续所有步骤都生效。验证 nixpkgs 版本可以跑:
nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version'
参数六:enable_kvm —— KVM 硬件加速(默认开启)
enable_kvm 默认值为 true。在 Linux Runner 上,install-nix.sh 会写入一条 udev 规则,把 /dev/kvm 权限设为 0666,让 VM 和 NixOS 测试获得完整硬件加速;如果 Runner 不支持 KVM,则自动跳过并输出提示,不会导致失败。
需要关闭时(例如在云厂商不允许嵌套虚拟化的 Runner 上):
- uses: cachix/install-nix-action@v27
with:
enable_kvm: false
最小完整工作流示例
把上面串起来,一个开箱即用的 Nix CI 配置:
name: "Test"
on:
pull_request:
push:
jobs:
tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v27
with:
nix_path: nixpkgs=channel:nixos-unstable
- run: nix-build
常见问题速查
- 如何添加二进制缓存? 用
extra_nix_config写入substituters与trusted-public-keys;如果用 Cachix 生态,则通过cachix-action的extraPullNames完成 nix develop里拿不到环境变量? Nix 默认运行在 pure mode,用--keep VAR保留指定变量,或--impure彻底关闭纯净模式- 临时目录报问题? Action 已自动把
TMPDIR指向$RUNNER_TEMP,无需额外处理
总结
| 你的场景 | 该用的参数 |
|---|---|
| Flakes 拉 GitHub 限流 | github_access_token |
| 固定 Nix 版本保证可复现 | install_url |
| 找不到 nixpkgs / 指定渠道 | nix_path |
| 加二进制缓存、system-features | extra_nix_config |
| 切换单用户安装模式 | install_options |
| 跑 NixOS 测试要硬件加速 | enable_kvm(保持默认即可) |
掌握这 6 个输入参数,你的 Nix CI 配置就完整了。源码层面想深入,直接读 action.yml 的参数声明和 install-nix.sh 的配置写入逻辑即可 🎯
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



