Я хочу запустить nix-shell со следующими установленными пакетами:
- заклинание
- aspellDicts.en
- Привет
Я не могу просто сделать: nix-shell -p aspell aspellDicts.en hello --pure
, так как это не приведет к правильной установке словарей aspell. Nix предоставляет aspellWithDict
функцию, которую можно использовать для построения aspell со словарями:
nix-build -E 'with import <nixpkgs> {}; aspellWithDicts (d: [d.en])'
Я хочу использовать результат этой сборки как зависимость в другом локальном пакете (foo). Вот как я в настоящее время добиваюсь этого:
./pkgs/aspell-with-dicts/default.nix:
with import <nixpkgs> {};
aspellWithDicts (d: [d.en])
./pkgs/foo/default.nix:
{stdenv, aspellWithDicts, hello}:
stdenv.mkDerivation rec {
name = "foo";
buildInputs = [ aspellWithDicts hello ];
}
./custom-packages.nix:
{ system ? builtins.currentSystem }:
let
pkgs = import <nixpkgs> { inherit system; };
in
rec {
aspellWithDicts = import ./pkgs/aspell-with-dicts;
foo = import ./pkgs/foo {
aspellWithDicts = aspellWithDicts;
hello = pkgs.hello;
stdenv = pkgs.stdenv;
};
}
Оболочка работает нормально: nix-shell ./custom-packages.nix -A foo --pure
Итак, мое решение работает, но можно ли достичь этого результата более лаконичным идиоматическим способом?
foo
пакет? Вы хотите разместить это в репозитории NixPkgs? Или это пакет, который вы хотите установить только локально? Может быть, вы хотите использовать его в своей компании? - person Robert Hensing   schedule 01.12.2017foo
- это то, что я просто хочу использовать локально. - person b73   schedule 01.12.2017