用途:这是一份 Nix 最佳实践资料,适合在编写 flake.nix、shell.nix、overlays 时参考,帮助组织可复现的开发环境与包定义。
主要能力:
- Flake 结构:给出标准 flake.nix 骨架(description、inputs、outputs、flake-utils.lib.eachDefaultSystem、mkShell)。
- follows 复用:添加 overlay 输入时用 some-overlay.inputs.nixpkgs.follows = "nixpkgs" 等链式写法,避免重复下载多份 nixpkgs;并提醒所有 inputs 都必须列在 outputs 函数参数中。
- Overlays 应用:在 import nixpkgs 的 overlays 列表中引用 overlay.overlays.default 或内联函数。
- 非自由包处理:三种方式——numtide/nixpkgs-unfree(团队推荐,可链式 follows)、用户 ~/.config/nixpkgs/config.nix 中 allowUnfree = true、或 flake 内 config.allowUnfreePredicate 指定包名。注意 flake.nix 里的 config.allowUnfree 对 nix develop 无效。
- 二进制 overlay 仓库:当 nixpkgs 的社区版本缺少功能时,用 stdenv.mkDerivation + fetchurl 抓取官方各平台二进制,附 sources 表、sha256、installPhase 与 meta,并导出 packages 与 overlays.default。
- 获取哈希:nix-prefetch-url 及 nix hash to-sri --type sha256。
- 开发 shell:mkShell 基础写法、环境变量、C 库(openssl、postgresql)通过 C_INCLUDE_PATH、LIBRARY_PATH、PKG_CONFIG_PATH 暴露头文件与库;direnv 集成 .envrc(use flake,非自由包可 export NIXPKGS_ALLOW_UNFREE=1 与 use flake --impure)。
- 常用命令:nix flake update(可指定输入)、nix flake check、nix flake metadata、nix develop、nix develop -c <command>、nix build .#name、nix run .#name。
- 排错:unexpected argument(inputs 未列全)、nix develop 非自由包错误、重复下载 nixpkgs、overlay 未生效、哈希不匹配。
使用方式:按上述模式编写与调试 flake、overlay 和 devShell,出现问题时对照排错段落定位。
限制:资料未说明该技能的收费、价格、平台支持范围或实际效果;具体版本与依赖需自行确认。