В настоящее время я использую следующее, чтобы закрепить 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
для закрепления пакетов, как задумано.
Тем не менее, сейчас я пытаюсь сослаться на проект 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, который я использую. Обратите внимание, я действительно понимаю, что мне все еще нужно «переопределить» пакет 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
sources
переменную, но вы не ссылаетесь наsources
, за исключением определения самогоniv
. - person Robert Hensing   schedule 07.08.2019inherit (niv) pkgs;
не ссылаетсяpkgs
наniv
? - person Chris Stryczynski   schedule 08.08.2019platinumpitanga
. Я знаюfetchGit
и как переопределить пакет Haskell. Но согласно niv readme, кажется, он может справиться с этой зависимостью для меня? Я просто не знаю, как ссылаться на пакет, которым он управляет. - person Chris Stryczynski   schedule 08.08.2019