🙆

flake.nixで Hello, World!!

2023/03/09に公開

nix flakes の flake.nix でHello,Worldをしてみよう。
以下のようなflake.nixファイルを用意する。

{
  description = "hello";
  
  outputs = { self }: {
    hello = "hello, world";
    value = 1;
  };
}

実行してみる。

$ nix eval .#hello
"hello, world"
$ nix eval .#value
1

flake.nixに記述した値を取り出すことができた。

nix evalの引数に渡したカレントディレクトリのflake.nix内のoutputs関数が評価されて #以降に取り出す値を指定していると言ってよいだろう。 inputsを記述するとoutputs関数の引数が増やせるのがデフォルトとしてselfが渡されるようになっている。 inputs`を使う小さなサンプルは別記事に書きたいと思う。

replで使う

flake.nixのあるディレクトリで .#helloをとすることで値を取り出すことができる。

replで値を取り出してみる。

$ nix repl .
> hello
"hello, world"
> value
1

outputs関数を呼び出し結果がトップレベル変数として定義されている状態になるので、取り出すことができる。

この記事では、~/.config/nix.conf
experimental-features = nix-command flakes repl-flake
を記述している環境で試しました。

つづく
https://zenn.dev/eiel/articles/337c3cb5630d0d

参考

https://nixos.org/manual/nix/stable/command-ref/new-cli/nix3-flake.html

Discussion