Skip to content

Instantly share code, notes, and snippets.

@haruki7049
Last active October 26, 2024 05:42
Show Gist options
  • Save haruki7049/a972aaa4c9d3120885ca0fd129cceb2d to your computer and use it in GitHub Desktop.
Save haruki7049/a972aaa4c9d3120885ca0fd129cceb2d to your computer and use it in GitHub Desktop.
10月26日のスライド。Marp-cliを使用。
marp footer
true

NixでのOverlayの作成の仕方

Author: haruki7049


自己紹介

  • 名前: はるき

  • しがない専門学校生

  • 新卒での就職先を探している

  • Nix/NixOSを高校二年生くらいから好きになった(弊害として、それ以外のOSを受け付けなくなってしまったが…)

  • 最近はnixpkgsへのコントリビュートもしていたりする

  • このスライドへの技術的なまさかりを募集している


本題

Nix Overlayとは?


Nix Overlayはどんなもの?

二つの引数を取って、一つのアトリビュートセットを返す、一つの関数。

self: super: { }

Nix Overlayを提供しているリポジトリ


Nix Overlayの二つの引数の役目

英語が読めるなら、NixOS Wikiを読んだ方がわかりやすいかもしれない。

こちらです: https://wiki.nixos.org/wiki/Overlays

第一引数、self

Overlay自身の定義によるDerivation作成後のnixpkgs。

第二引数、super

参照元のnixpkgs

ここの認識が怪しいので、皆さんぜひまさかりを投げてください。


コード例

# overlay.nix

self: super: {
  myLlvm = super.llvm_12.override ({
    version = "19.1.1";
  });
  myLlvm-result = self.myLlvm;
}

Overlayの使用方法

# default.nix

{
  pkgs ? import <nixpkgs> {
    inherit overlays;
  },
  overlays ? [
    (import ./overlay.nix)
  ],
}:

pkgs.myLlvm-result

Overlay、どう活用する?

  1. 自分用のパッケージを一つのOverlayにまとめる。
  2. プロジェクト用に一つのOverlayを定義して、使用するツールのバージョンをまとめる。
  3. コンパイラの全てのバージョンを一つのOverlayにまとめて、バージョン固定などに使用する。個人的なおすすめ!!

https://github.com/haruki7049/deno-overlay Denoのバージョン固定用Overlay。


最後にまとめてみる

  1. Overlayは二つの引数を取り、一つのアトリビュートセットを返す一つの関数。
  2. Overlayは、意外と簡単に作れる…はず!!
  3. コンパイラのバージョン固定に使用するのが個人的なおすすめ!!

Q&A、そしてまさかりを投げる時間。

皆さん、このスライドに質問やまさかりを投げる時間です。 https://github.com/haruki7049/deno-overlay にもぜひまさかり代わりのイシューやプルリクエストを投げてみてください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment