Я создаю проект с использованием системы пакетов nixOs. У меня есть удаленный репозиторий git, содержащий различные файлы конфигурации. Я хочу получить доступ к этим файлам с помощью nix, не редактируя удаленный репозиторий.
Проект будет получать доступ к удаленному репозиторию с определенным хэшем коммита. Может ли кто-нибудь мне помочь, спасибо.
решение1
Вот краткий пример, который считывает файл из удаленного репозитория git, не содержащий конфигурации Nix:
with (import <nixpkgs> { });
let
repo = fetchFromGitHub {
owner = "nix-community";
repo = "awesome-nix";
rev = "c4adba38dc2ec33aa0f692cc5fcb9677b123087c";
sha256 = "cF9sh3vrDwTh64ZkgyEuJKmmA4UhbnXw8x4cnBMeGHk=";
};
in stdenv.mkDerivation {
name = "count-repo-lines";
src = repo;
buildPhase = ''
mkdir $out
wc -l ./README.md > linecount
'';
installPhase = ''
cp linecount $out/linecount
'';
system = builtins.currentSystem;
}
Если бы он был сохранен в файле с именем count-remote-lines.nix
, то nix-build
команда поместила бы вывод в локальную папку с именем result
:
$ nix-build ./count-remote-lines.nix
...various log messages...
$ cat ./result/linecount
154 ./README.md
В качестве альтернативы, чтобы лучше устранить неполадки в процессе сборки производной, пошагово пройдя его в интерактивной оболочке, попробуйте:
$ nix-shell ./count-repo-lines.nix --pure
$ unpackPhase
unpacking source archive /nix/store/xaff1yqipbpazhp9jz22rjp7izbglzr5-source
source root is source
$ cd source
$ ls
CONTRIBUTING.md LICENSE README.md
Остальные команды сборки описаны в man nix-shell
разделе Примеры.А также на вики-страницах, таких как эта.