概要
最近出てきた概念。
APIリファレンスないじゃんと思ったら普通にNixOS WiKi Flakesにあったのでまとめる。
基本的にnix CLIで参照するための変数。読んだら本当にプロジェクトのテンプレートだった。
- Flakesは
- プロジェクトのテンプレートを提供する
- 実行可能なプログラムであることを定義する
- 外部のgitリポジトリから依存関係を取り組むことができる
- パッケージのビルドと環境構築を同じリポジトリで管理できる
- nixpkgs、NixOSの拡張を簡単にできる
以下の3つで構成される。
- description: 何をするリポジトリか
- inupts: 依存関係
- outputs: 生成物をどうやって作るか
- packages: for
nix build & nix shell?
- checks: for
nix check
- apps: for
nix run
- devShells: for 'nix develop'
- overlays: for overlays of nixpkgs
- nixosModules & nixosConfiguration: for NixOS
- packages: for
InputSchema
inputs.nixpkgs.url = {
type = "github";
owner = "NixOS";
repo = "nixpkgs";
ref = "nixos-unstable";
};
# 上記は下と同義(こっちを主に使う)
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
# home-managerで使うnixpkgsを継承によって指定する
homemanager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
# flake.nixを含まないリポジトリもflake=falseにすることで使える
inputs.grcov = {
url = "github:github/mozilla/grconf";
flake = false;
};
OutputSchema
inputs @ { self, nixpkgs, home-manager, grcov}:
{
# nix flake checkで使用されるチェックコマンドを定義する
checks."<system>"."<name>" = derivation;
# nix flake build .#<name>でのビルドコマンドの定義。中身は各言語のビルドコマンド。
packages."<system>"."<name>" = derivation;
# nix flake buildでビルドされるデフォルトターゲットの定義
packages."<system>".default = derivation;
# nix run .#<name>で実行されるバイナリの定義
apps."<system>"."<name>" = {
type = "app";
program = "<store-path>";
};
# nix runで実行されるデフォルトターゲットの定義
apps."<system>".default = { type = "app"; program = "..."; };
# ここで定義したnixpkgsはnix build .#<name>でもビルドできる
legacyPackages."<system>"."<name>" = derivation;
# overlaysの定義。nixpkgsの拡張などに使う
overlays."<name>" = final: prev: { };
# デフォルトのoverlay。overlay=は廃止になったので注意
overlays.default = {};
# flakesで定義されたnixosModules
nixosModules."<name>" = { config }: { options = {}; config = {}; };
# デフォルトのnixosModules
nixosModules.default = {};
# nixos-rebuild --flake .#<hostname>でのコンフィグの定義
# nixosConfigurations."<hostname>".config.system.build.toplevel must be a derivation
nixosConfigurations."<hostname>" = {};
# nix-develop .#<name>で入る環境の定義
devShells."<system>"."<name>" = derivation;
# nix-developで入るデフォルトの環境
devShells."<system>".default = derivation;
# Hydra build jobs
hydraJobs."<attr>"."<