💭
続、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