Если вам действительно не нужна git-версия, рассмотрите последние варианты в конце ниже горизонтальной линии.
Это несколько методов:
cabal2nix
pantry
- это пакет, который распространяется со стеком.Вероятно, вы можете запустить cabal2nix в его каталоге и вручную соединить выражения Nix.
stack
Простым решением может быть stack build stack
с использованием вашего предыдущего stack
.Хотя это простое решение, оно не является хорошим решением, поскольку не создает корни сборки мусора для зависимостей вашего stack
исполняемого файла.
stack2nix
Это немного более экспериментально, немного болееавтоматический, но все же требует небольшого вмешательства.
stack2nix --test --platform x86_64-linux --hackage-snapshot 2018-12-16T10:00:00Z . > stack-custom-snapshot.nix
Теперь у вас есть сгенерированный набор пакетов, аналогичный pkgs.haskell.packages.*
, включая пакеты в stack.yaml
.Вам придется отключить тесты для стека и кладовой.Это можно сделать с помощью оверлея (другая тема) или путем добавления doCheck = false;
к аргументам обоих пакетов в stack-custom-snapshot.nix
.Также нужно немного помочь, чтобы найти libyaml
:
nix-env -i -f stack-custom-snapshot.nix -A stack --arg pkgs 'import <nixpkgs> { overlays = [(self: super: { yaml = super.libyaml; })]; }'
overlay
Вы можете переопределить атрибут источника пакета стека, используя оверлей.Это требует некоторого опыта работы с оверлеями и работает хорошо, только если требования к стеку не изменились между упакованным стеком и версией git.
Nixpkgs unstable
Хотя не совсемОтвет на ваш оригинальный вопрос, является более простым и достаточным решением для получения последней версии стека.Ниже будут обсуждаться варианты установки из git.
Вы можете включить пакеты из любой версии Nixpkgs в свою конфигурацию NixOS или профиль пользователя.
По каналу
Сначала добавьтеканал
nix-channel --add https://nixos.org/channels/nixos-unstable nixos-unstable
nix-channel --update # actually fetch your channels
В вашей конфигурации NixOS
environment.systemPackages =
let
unstable = import <nixos-unstable> {};
in
[ pkgs.figlet unstable.stack pkgs.hello ];
nix-env
Для nix-env
создайте файл stack-from-unstable.nix
(import <nixos-unstable> {}).stack
а затем
nix-env -i -f `stack-from-unstable.nix`
Закрепленные nixpkgs
Вместо import <nixos-unstable>
вы можете использовать один из методов закрепления .Это гарантирует, что последующие попытки установить его приведут к тому же результату.Это означает, что вам придется обновить его вручную.