在home-manager/nix-darwin配置中使用外部flake的问题
问题解决:外部Flake二进制未出现在PATH中
你遇到的问题是因为传递给home.packages的是整个Flake对象,而非Flake构建出的具体包文件。以下是两种修复方案:
方案一:在Flake配置中直接传递构建好的包
修改你的flake.nix,将Flake的输出包(而非整个Flake)传入extraSpecialArgs:
# flake.nix dotenv.url = "github:pcasaretto/dotenv"; dotenv.inputs.nixpkgs.follows = "nixpkgs-unstable"; # ... home-manager.extraSpecialArgs = { dotenv = dotenv.defaultPackage.${system}; };
之后home.nix里的home.packages可以保持原来的写法不变。
方案二:在Home Manager配置中引用Flake的输出包
如果不想修改flake.nix,可以直接在home.nix里指定Flake的输出包路径:
# home.nix { config, pkgs, lib, dotenv, ... }: # ... home.packages = [ # ... dotenv.defaultPackage.${pkgs.system} ];
原因说明
你使用的外部Flake通过buildGoModule生成了默认输出包,但你之前传递的是整个Flake实例(包含所有输入、输出属性的对象),而home.packages需要的是具体的Nix包derivation。通过defaultPackage.${系统架构}就能获取到对应系统的二进制包,添加到PATH后就能正常调用。
内容的提问来源于stack exchange,提问作者Paulo Casaretto
相关产品推荐
相关产品推荐

