Estou construindo um projeto usando o sistema de pacotes nixOs. Eu tenho um repositório git remoto contendo diferentes arquivos de configuração. Quero acessar esses arquivos usando nix, sem editar o repositório remoto.
O projeto acessaria o repositório remoto com um hash de commit específico. Alguém poderia me ajudar, obrigado.
Responder1
Aqui está uma breve derivação que lê um arquivo de um repositório git remoto que não contém nenhuma configuração 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;
}
Se fosse salvo em um arquivo chamado count-remote-lines.nix
, o nix-build
comando colocaria a saída em uma pasta local chamada result
:
$ nix-build ./count-remote-lines.nix
...various log messages...
$ cat ./result/linecount
154 ./README.md
Como alternativa, para solucionar melhor o processo de construção da derivação percorrendo-o em um shell interativo, tente:
$ 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
Os comandos de construção restantes estão documentados em man nix-shell
Exemplos.Também em páginas wiki como esta.