Как использовать Nix niv для ссылки на проект github?

В настоящее время я использую следующее, чтобы закрепить 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

nix
person Chris Stryczynski    schedule 06.08.2019    source источник
comment
Кажется, вы правильно импортируете источники в свою sources переменную, но вы не ссылаетесь на sources, за исключением определения самого niv.   -  person Robert Hensing    schedule 07.08.2019
comment
Похоже, вам нужно создать набор пакетов, в который входят пакеты UraniumZuluGooseberry и platinumpitanga. platinumpitanga похожа на черепаху в github.com/Gabriel439/haskell-nix / blob / master / project1 /   -  person Robert Hensing    schedule 07.08.2019
comment
Хм, разве inherit (niv) pkgs; не ссылается pkgs на niv?   -  person Chris Stryczynski    schedule 08.08.2019
comment
Что касается определения platinumpitanga. Я знаю fetchGit и как переопределить пакет Haskell. Но согласно niv readme, кажется, он может справиться с этой зависимостью для меня? Я просто не знаю, как ссылаться на пакет, которым он управляет.   -  person Chris Stryczynski    schedule 08.08.2019


Ответы (2)


  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 - это название «репозитория».

person Chris Stryczynski    schedule 07.08.2019

Фактическое "происхождение nix" кажется, например, sources.PlatinumPitanga. Однако нужно import sources.PlatinumPitanga {} использовать его (создать экземпляр?) В качестве «пакета».

person Chris Stryczynski    schedule 28.12.2019