2017-06-01 63 views
2

我想要什么

https://nixos.org/nixpkgs/manual/#sec-pkg-overrideAttrs文件overrideAttrs,它可以与top-level/all-packages.nix使用。实现覆盖在我的仓库

所以我想能够在我自己的nixpkgs覆盖中使用overrideAttrs!

代码

rec { 
    frontend = pkgs.callPackage "${nixcloud-frontend}/release.nix" { 
    inherit nixcloud-editor; 
    }; 

    AAA = frontend.overrideAttrs (oldAttrs: rec { 
    API_HOST="wss://"; 
    }); 

    helloWithDebug = pkgs.hello.overrideAttrs (oldAttrs: rec { 
    separateDebugInfo = true; 
    }); 

} 

问题

但问题是评估AAA将无法​​正常工作:

nix-build nixcloud-pkgs.nix -A AAA 
error: attribute ‘overrideAttrs’ missing, at /home/joachim/Desktop/projects/nixcloud/nixcloud-webservices/nixcloud-pkgs.nix:17:9 
相比之下

,评估helloWithDebug作品:

nix-build nixcloud-pkgs.nix -A helloWithDebug 
these derivations will be built: 
    /nix/store/x01q7lfqbwlj08iknph37jxh2bk3il68-hello-2.10.drv 
these paths will be fetched (0.69 MiB download, 0.69 MiB unpacked): 
    /nix/store/3x7dwzq014bblazs7kq20p9hyzz0qh8g-hello-2.10.tar.gz 

提示

在nixpkgs我看到:

lib/customisation.nixlib/default.nix用于这我不能说在那里尚未注入。

黑客nixpkgs

查看堆栈我只是说断码到lib/customisation.nix

nix-build -I nixpkgs=../nixpkgs -A tests --show-trace                 ~/Desktop/projects/nixos/nixpkgs 
error: while evaluating anonymous function at /home/joachim/Desktop/projects/nixos/nixpkgs/pkgs/top-level/impure.nix:15:1, called from undefined position: 
while evaluating anonymous function at /home/joachim/Desktop/projects/nixos/nixpkgs/pkgs/top-level/default.nix:20:1, called from /home/joachim/Desktop/projects/nixos/nixpkgs/pkgs/top-level/impure.nix:64:1: 
while evaluating anonymous function at /home/joachim/Desktop/projects/nixos/nixpkgs/pkgs/stdenv/booter.nix:42:1, called from /home/joachim/Desktop/projects/nixos/nixpkgs/pkgs/top-level/default.nix:97:10: 
while evaluating ‘dfold’ at /home/joachim/Desktop/projects/nixos/nixpkgs/pkgs/stdenv/booter.nix:60:27, called from /home/joachim/Desktop/projects/nixos/nixpkgs/pkgs/stdenv/booter.nix:104:4: 
while evaluating ‘go’ at /home/joachim/Desktop/projects/nixos/nixpkgs/pkgs/stdenv/booter.nix:63:18, called from /home/joachim/Desktop/projects/nixos/nixpkgs/pkgs/stdenv/booter.nix:71:8: 
while evaluating the file ‘/home/joachim/Desktop/projects/nixos/nixpkgs/lib/default.nix’: 
syntax error, unexpected ID, expecting '.' or '=', at /home/joachim/Desktop/projects/nixos/nixpkgs/lib/customisation.nix:37:3 
+1

我或许应该使用https://nixos.org/nixpkgs/manual /#sec-overlays-install – qknight

+1

https://mailman.science.uu.nl/pipermail/nix-dev/2016-December/022386.html – qknight

回答

1

什么,我到底做了

cat nixcloud-pkgs.nix 
{ pkgs ? import <nixpkgs> {} 
, nixcloud-backend ? pkgs.stdenv.lib.cleanSource ../nixcloud-backend 
, nixcloud-frontend ? pkgs.stdenv.lib.cleanSource ../nixcloud-frontend 
, nixcloud-editor ? pkgs.stdenv.lib.cleanSource ../nixcloud-editor 
, nixcloud-container ? pkgs.stdenv.lib.cleanSource ../nixcloud-container 
, ... 
} @ args: 
let 
    nc-backend = nixcloud-backend; 
    nc-frontend = nixcloud-frontend; 

    newpkgs = import pkgs.path { overlays = [ (self: super: { 
    nixcloud-backend = super.callPackage nc-backend { inherit newpkgs; }; 
    nixcloud-frontend = super.callPackage "${nc-frontend}/release.nix" { 
     inherit nixcloud-editor; 
    }; 

    }) ]; }; 
in newpkgs 

nix-build nixcloud-pkgs.nix -A nixcloud-frontend 
评估此

使用覆盖

cat nixcloud-pkgs.nix 
{ pkgs ? import <nixpkgs> {} 
, nixcloud-backend ? pkgs.stdenv.lib.cleanSource ../nixcloud-backend 
, nixcloud-frontend ? pkgs.stdenv.lib.cleanSource ../nixcloud-frontend 
, nixcloud-editor ? pkgs.stdenv.lib.cleanSource ../nixcloud-editor 
, nixcloud-container ? pkgs.stdenv.lib.cleanSource ../nixcloud-container 
, ... 
} @ args: 
let 
    nc-backend = nixcloud-backend; 
    nc-frontend = nixcloud-frontend; 

    newpkgs = import pkgs.path { overlays = [ (self: super: { 
    nixcloud-backend = super.callPackage nc-backend { inherit newpkgs; }; 
    nixcloud-frontend = supber.callPackage "${nc-frontend}/release.nix" { 
     inherit nixcloud-editor; 
    }; 

    }) ]; }; 
in newpkgs.nixcloud-frontend.override (oldAttrs: rec { 
    API_HOST="wss://...."; 
}) 

评价这一具有

nix-build nixcloud-pkgs.nix 

文档

另请参见https://github.com/NixOS/nixpkgs/pull/26321这何处讨论