2016-03-03 69 views
0

我想在我的NixOS中构建自己的nix-shell环境。我有2 .nix文件,default.nix和shell.nix,这里的配置:glpk和pcre找不到(NIXOS)

default.nix:

{ stdenv, haskellngPackages}: 

let 
    env = haskellngPackages (p: with p; [ 
     aeson 
     bytestring 
     conduit 
     snap 
     ghcjs 
     text 
     wai 
     warp 
     yaml 
     haskell.packages.lts-4_01.ghc 
     ]); 

in 
    stdenv.mkDerivation { 
    name = "RiziLab"; 

buildInputs = [ 
    glpk 
    pcre 
    env 
]; 

    STACK_IN_NIX_EXTRA_ARGS 
     = " --extra-lib-dirs=${glpk}/lib" 
     + " --extra-include-dirs=${pglpk}/include" 
     + " --extra-lib-dirs=${pcre}/lib" 
     + " --extra-include-dirs=${pcre}/include" 
    ; 
} 

shell.nix:

{ pkgs ? (import <nixpkgs> {}) }: 

(import ./default.nix) { 
    stdenv = pkgs.stdenv; 
    haskellngPackages = pkgs.haskellngPackages; 
} 

但是当我做尼克斯 - 壳,我得到这个错误:

error: undefined variable ‘glpk’ 

从我的理解,default.nix只是一个函数,将被调用的sh ell.nix,cmiiw。问题是:

  1. 在我的代码中是否有任何错误?
  2. 我已经使用{nixpkgs ? (import <nixpkgs> {}) }{pkgs ? (import <nixpkgs> {})}但仍然有相同的错误,这两者之间有什么不同吗?
  3. 可以排除ghcwithPackages吗?

回答

0

glpk未定义在default.nix是问题所在。
glpk路径为pkgs.glpk,但范围内没有pkgs,并且glpk未作为参数传递给函数。

而且,也没有必要有2个单独的文件,也可以组全在一个文件中:

{ nixpkgs ? import <nixpkgs> {}, compiler ? "lts-4_1" }: 
let 
    inherit (nixpkgs) pkgs; 
    ghc = pkgs.haskell.packages.${compiler}.ghcWithPackages (ps: with ps; [ 
      aeson 
      bytestring 
      conduit 
      snap 
      # ghcjs # not a package but a compiler 
      text 
      wai 
      warp 
      yaml 
     ]); 
in 
pkgs.stdenv.mkDerivation { 
    name = "RiziLab"; 
    buildInputs = with pkgs; [ ghc glpk pcre ]; 
    shellHook = "eval $(egrep ^export ${ghc}/bin/ghc)"; 
    STACK_IN_NIX_EXTRA_ARGS = with pkgs; 
     " --extra-lib-dirs=${glpk}/lib" 
    + " --extra-include-dirs=${glpk}/include" 
    + " --extra-lib-dirs=${pcre}/lib" 
    + " --extra-include-dirs=${pcre}/include" 
    ; 
} 

您可以了解更多关于在Nixpkgs manual在尼克斯使用哈斯克尔。

+0

嗨,感谢您的信息... – Rizary