💭
続、flake.nixで Hello, World!! - inputs編
以下の続編。outputsを使ったので、前回書いたflex.nixを使ってinputsを使ってみる。
nix flakeのinputsを使ってみよう。inputsにはflake.nixを置いてあるディレクトリや含んでいるリポジトリ、アーカイブなどを指定することができる。
ということで、前回書いたflake.nixをhelloディレクトリへ移動して参照してみる。
- 前回書いた
flake.nixはhello/flake.nixへ移動 - 新規に
flake.nixを用意し、hello/flake.nixを読み込んで使う
こういう感じである。
$ tree
.
├── flake.nix
└── hello
└── flake.nix <-- 前回作ったやつ
hello/flake.nixの中身はこんな感じ。
{
description = "hello";
outputs = { self }: {
hello = "hello, world";
value = 1;
};
}
flake.nixはこんな感じ。
{
description = "hello2";
inputs = {
hello.url = "./hello";
};
outputs = { self, hello }: {
result = hello.hello;
};
}
ポイントはinputs.hello.urlに "./hello"とディレクトリを指定しているところである。
ここに書いたものがoutputs関数の引数helloに入ってくる。この名前はなんでもよくhelloである必要はない。具体的には goro.url = "./hello"; と書けば outputs = { self, goro }: {となる。
goroにはhello/flake.nixのoutputs関数に引数を適用した場合の値が入ってくる。
nix evalで取り出してみる。
$ nix eval .#result
"hello, world"
まとめ
- inputsにはflakeが指定できる
- inputsに指定したflakeは依存先のoutputsが評価され、結果が自分のoutputsの引数に届く
Discussion