如何将default.nix脚本加入configuration.nix实现nixos-rebuild自动构建
问题:将自定义default.nix整合进configuration.nix实现自动构建
我写了一个default.nix脚本,执行nix-build时能从GitHub下载并构建指定项目。现在想把这个脚本整合到configuration.nix里,让执行nixos-rebuild时自动完成项目构建,该怎么操作?
原default.nix代码:
buildGoModule rec{ name = "hhh"; version = "1.4"; src = fetchGit{ url = ""; rev = ""; allRefs = true; }; vendorSha256 = ""; proxyVendor = true; postInstall = '' cp -rf $src/template/ $out/bin ''; }
解决方案
以下是三种实用的整合方式,按需选择:
方式一:直接在configuration.nix中定义包并安装到系统环境
把你的构建逻辑直接嵌入configuration.nix,让系统自动构建并将包加入全局环境:
- 打开
/etc/nixos/configuration.nix - 添加如下配置(替换占位符为实际值):
{ config, pkgs, ... }: let myCustomPkg = pkgs.buildGoModule rec { name = "hhh"; version = "1.4"; src = pkgs.fetchGit { url = "你的GitHub仓库地址"; rev = "目标commit哈希值"; allRefs = true; }; vendorSha256 = "依赖包校验哈希"; # 可先填占位符,构建时会报错给出正确值 proxyVendor = true; postInstall = '' cp -rf $src/template/ $out/bin ''; }; in { environment.systemPackages = [ myCustomPkg ]; # 保留你原有的其他配置... }
- 执行
sudo nixos-rebuild switch,系统会自动构建该包并安装到全局环境。
方式二:通过import引入原default.nix文件
如果想保留default.nix的独立文件结构,可通过import引入:
- 调整原
default.nix,让它接受pkgs参数:
{ pkgs, ... }: pkgs.buildGoModule rec { name = "hhh"; version = "1.4"; src = pkgs.fetchGit { url = "你的GitHub仓库地址"; rev = "目标commit哈希值"; allRefs = true; }; vendorSha256 = "依赖包校验哈希"; proxyVendor = true; postInstall = '' cp -rf $src/template/ $out/bin ''; }
- 在
configuration.nix中引入该文件(假设default.nix放在/etc/nixos/my-packages/目录下):
{ config, pkgs, ... }: let myCustomPkg = import ./my-packages/default.nix { inherit pkgs; }; in { environment.systemPackages = [ myCustomPkg ]; # 保留你原有的其他配置... }
- 执行
sudo nixos-rebuild switch完成构建与安装。
方式三:仅构建不全局安装,自定义部署路径
如果不需要将包加入系统环境,只想在每次nixos-rebuild时自动构建并部署到指定位置:
{ config, pkgs, ... }: let myCustomPkg = pkgs.buildGoModule rec { name = "hhh"; version = "1.4"; src = pkgs.fetchGit { url = "你的GitHub仓库地址"; rev = "目标commit哈希值"; allRefs = true; }; vendorSha256 = "依赖包校验哈希"; proxyVendor = true; postInstall = '' cp -rf $src/template/ $out/bin ''; }; in { system.activationScripts.deployMyPkg = '' # 将构建好的二进制文件复制到自定义路径 cp -f ${myCustomPkg}/bin/hhh /usr/local/bin/ # 同步模板文件到指定目录 cp -rf ${myCustomPkg}/bin/template /usr/local/share/my-app-template/ ''; # 保留你原有的其他配置... }
执行sudo nixos-rebuild switch后,系统会自动完成构建与部署操作。
内容的提问来源于stack exchange,提问作者Sqler
相关产品推荐
相关产品推荐

