You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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,让系统自动构建并将包加入全局环境:

  1. 打开/etc/nixos/configuration.nix
  2. 添加如下配置(替换占位符为实际值):
{ 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 ];

  # 保留你原有的其他配置...
}
  1. 执行sudo nixos-rebuild switch,系统会自动构建该包并安装到全局环境。

方式二:通过import引入原default.nix文件

如果想保留default.nix的独立文件结构,可通过import引入:

  1. 调整原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
    '';
}
  1. 在configuration.nix中引入该文件(假设default.nix放在/etc/nixos/my-packages/目录下):
{ config, pkgs, ... }:

let
  myCustomPkg = import ./my-packages/default.nix { inherit pkgs; };
in {
  environment.systemPackages = [ myCustomPkg ];

  # 保留你原有的其他配置...
}
  1. 执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:37:34