Как упаковать инструмент командной строки в Nix?

Предположим, у вас есть простая коллекция bash сценариев, составляющих инструмент командной строки, с основным сценарием в bin/ и некоторыми библиотечными сценариями в lib/, все они должны быть упакованы с помощью Nix с использованием tool.nix с default.nix для удобства:

scriptdir
 └─ bin/
     └─ tool
 └─ lib/
 └─ default.nix
 └─ tool.nix

Как должен выглядеть tool.nix, чтобы правильно упаковать этот инструмент, позволяющий выполнять tool в оболочке с tool <args>?


nix
person Ixxie    schedule 16.04.2017    source источник


Ответы (1)


После некоторой помощи IRC следующее tool.nix работает:

{ stdenv }:

let

    version = "0.0.1";

in stdenv.mkDerivation 
rec 
{

    name = "tool-${version}";

    src = ./.;

    installPhase =
        ''
            mkdir -p $out
            cp -R ./bin $out/bin
            cp -R ./lib $out/lib
        '';

}

Для полноты default.nix будет выглядеть как

{ pkgs ? import <nixpkgs> {} }:

pkgs.callPackage ./tool.nix {}

и может быть установлен, позвонив nix-env -f ./default.nix -i из scriptdir.

person Ixxie    schedule 17.04.2017