如何使用 Nix niv 引用 github 项目?
How to use Nix niv to reference github project?
我目前正在使用以下方法固定 nixpkgs 以使项目可重现(https://github.com/nmattia/niv):
{
nixpkgs ? import <nixpkgs> {}
, compiler ? "default"
, doBenchmark ? false
, sources ? import ./nix/sources.nix
}:
let
niv = import sources.nixpkgs {
overlays = [
(_ : _ : { niv = import sources.niv {}; })
] ;
config = {};
};
inherit (niv) pkgs;
...
根据以上内容,我可以 nix-build
成功,但我不能 100% 确定它使用 niv
按预期固定包。
None少,我现在正在尝试引用一个github项目——但是我运行出错了(...called without required argument...
)?
我的尝试:
宁运行后niv add ...
:
nix-shell
error: 'f' at /home/chris/fromLaptopt/usbflash/Haskell/UraniumZuluGooseberry/shell.nix:18:7 called without required argument 'platinumpitanga', at /nix/store/j6spkp2a2sqd65db1sj9zzpgrfnkrwrp-source/pkgs/development/haskell-modules/make-package-set.nix:87:27
这是我正在使用的全部 shell.nix。请注意我确实意识到我仍然需要 'override' Haskell / GHC 包 - 请忽略这个 - 我只是希望我需要弄清楚如何引用外部 github现在打包。
{
nixpkgs ? import <nixpkgs> {}
, compiler ? "default"
, doBenchmark ? false
, sources ? import ./nix/sources.nix
}:
let
niv = import sources.nixpkgs {
overlays = [
(_ : _ : { niv = import sources.niv {}; })
] ;
config = {};
};
inherit (niv) pkgs;
f = { mkDerivation, aeson, base, bytestring, containers, hpack
, influxdb, lens, platinumpitanga, pretty-simple, split, stdenv
, stm, string-conversions, text, time, vector
}:
mkDerivation {
pname = "UraniumZuluGooseberry";
version = "0.1.0.0";
src = ./.;
isLibrary = false;
isExecutable = true;
libraryToolDepends = [ hpack ];
executableHaskellDepends = [
aeson base bytestring containers influxdb lens platinumpitanga
pretty-simple split stm string-conversions text time vector
];
preConfigure = "hpack";
license = stdenv.lib.licenses.bsd3;
};
haskellPackages = if compiler == "default"
then pkgs.haskellPackages
else pkgs.haskell.packages.${compiler};
variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;
drv = variant (haskellPackages.callPackage f {});
in
if pkgs.lib.inNixShell then drv.env else drv
niv = import sources.nixpkgs {
overlays = [
(_ : _ : {
niv = import sources.niv {};
platinumpitanga = niv.pkgs.haskellPackages.callCabal2nix "platinumpitanga"
(sources.PlatinumPitanga) {} ;
})
] ;
config = {};
};
inherit (niv) pkgs;
我认为以上就是所有需要的(至少我已经设法在 nix-build 上走得更远)。
本质上是 sources.PlatinumPitanga
- 这是 "repository" 的名称。
例如,实际的 "nix derivation" 似乎是 sources.PlatinumPitanga
。然而,仍然需要 import sources.PlatinumPitanga {}
来使用它(实例化它?)作为 "package".
我目前正在使用以下方法固定 nixpkgs 以使项目可重现(https://github.com/nmattia/niv):
{
nixpkgs ? import <nixpkgs> {}
, compiler ? "default"
, doBenchmark ? false
, sources ? import ./nix/sources.nix
}:
let
niv = import sources.nixpkgs {
overlays = [
(_ : _ : { niv = import sources.niv {}; })
] ;
config = {};
};
inherit (niv) pkgs;
...
根据以上内容,我可以 nix-build
成功,但我不能 100% 确定它使用 niv
按预期固定包。
None少,我现在正在尝试引用一个github项目——但是我运行出错了(...called without required argument...
)?
我的尝试:
宁运行后niv add ...
:
nix-shell
error: 'f' at /home/chris/fromLaptopt/usbflash/Haskell/UraniumZuluGooseberry/shell.nix:18:7 called without required argument 'platinumpitanga', at /nix/store/j6spkp2a2sqd65db1sj9zzpgrfnkrwrp-source/pkgs/development/haskell-modules/make-package-set.nix:87:27
这是我正在使用的全部 shell.nix。请注意我确实意识到我仍然需要 'override' Haskell / GHC 包 - 请忽略这个 - 我只是希望我需要弄清楚如何引用外部 github现在打包。
{
nixpkgs ? import <nixpkgs> {}
, compiler ? "default"
, doBenchmark ? false
, sources ? import ./nix/sources.nix
}:
let
niv = import sources.nixpkgs {
overlays = [
(_ : _ : { niv = import sources.niv {}; })
] ;
config = {};
};
inherit (niv) pkgs;
f = { mkDerivation, aeson, base, bytestring, containers, hpack
, influxdb, lens, platinumpitanga, pretty-simple, split, stdenv
, stm, string-conversions, text, time, vector
}:
mkDerivation {
pname = "UraniumZuluGooseberry";
version = "0.1.0.0";
src = ./.;
isLibrary = false;
isExecutable = true;
libraryToolDepends = [ hpack ];
executableHaskellDepends = [
aeson base bytestring containers influxdb lens platinumpitanga
pretty-simple split stm string-conversions text time vector
];
preConfigure = "hpack";
license = stdenv.lib.licenses.bsd3;
};
haskellPackages = if compiler == "default"
then pkgs.haskellPackages
else pkgs.haskell.packages.${compiler};
variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;
drv = variant (haskellPackages.callPackage f {});
in
if pkgs.lib.inNixShell then drv.env else drv
niv = import sources.nixpkgs {
overlays = [
(_ : _ : {
niv = import sources.niv {};
platinumpitanga = niv.pkgs.haskellPackages.callCabal2nix "platinumpitanga"
(sources.PlatinumPitanga) {} ;
})
] ;
config = {};
};
inherit (niv) pkgs;
我认为以上就是所有需要的(至少我已经设法在 nix-build 上走得更远)。
本质上是 sources.PlatinumPitanga
- 这是 "repository" 的名称。
例如,实际的 "nix derivation" 似乎是 sources.PlatinumPitanga
。然而,仍然需要 import sources.PlatinumPitanga {}
来使用它(实例化它?)作为 "package".