flakeのoutputsは何によって読まれるかで決まる
flakeのoutputs は ただのattribute setを返す関数で、「これを返しなさい」というのは一切決まっていない
{ banana = 1; } を返しても良い
それは、読む側が期待している値が決まっているから
暗黙的すぎるわmrsekut.icon
「読む側」は2種類ある
① nix CLI
nix build などのサブコマンド
② 他のflake
このflakeをinputsにするやつ
① nixのサブコマンドが期待する値が決まっている
nix CLIが「この名前を探す」とハードコードしている出力
名付けを間違えるとコマンドが動かない
table:_
出力名 読む側 構造
② 他のflake、慣習
CLIは何の挙動も持たないが、コミュニティが「ここに置く」と暗黙合意している名前
この辺はよく見る
outputs.overlays
outputs.nixosModules
outputs.lib
なぜ動くか?
コードが自分で読んでいるだけだから
慣習でわかるか、普通に元のflakeを読みにいくか
code:nix
# 提供側
outputs = { self, ... }: {
lib = { myHelper = x: x + 1; }; # ただ置いただけ
};
# 利用側
inputs.foo.lib.myHelper 3 # 自分で foo.lib を辿って読む