LoginSignup
1
0

More than 1 year has passed since last update.

nix Flakesについて

Last updated at Posted at 2022-10-30

概要

最近出てきた概念。
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

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>"."<
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0