Emela 用の Nix flake / overlay。
- 既定: GitHub Releases のプリビルドバイナリを取得して
emelaとして提供(Rust ツールチェイン不要)。 - フラグ:
fromSourceを立てると、main HEAD をソースからビルド(rust-toolchain.tomlにピン留めした Rust 環境を使用)。
対応プラットフォーム:
| system | プリビルドバイナリ | ソースビルド |
|---|---|---|
aarch64-darwin |
✅ | ✅ |
x86_64-linux |
✅ | ✅ |
aarch64-linux / x86_64-darwin |
❌(未公開) | ✅ |
# プリビルドバイナリを実行
nix run github:emela-lang/emela.nix
# プロファイルに導入
nix profile install github:emela-lang/emela.nix#emela
# main HEAD をソースからビルドして実行
nix run github:emela-lang/emela.nix#emela-sourceoverlays.default は pkgs.emela(プリビルドバイナリ)と pkgs.emela-source(ソースビルド)を追加する。
{
inputs.emela.url = "github:emela-lang/emela.nix";
outputs = { nixpkgs, emela, ... }:
let
pkgs = import nixpkgs {
system = "aarch64-darwin";
overlays = [ emela.overlays.default ];
};
in {
# pkgs.emela … プリビルドバイナリ
# pkgs.emela-source … main HEAD のソースビルド
packages.aarch64-darwin.default = pkgs.emela;
};
}NixOS / home-manager では environment.systemPackages = [ pkgs.emela ]; のように使える。
emela を丸ごとソースビルドに差し替えたい場合は、以下のいずれか。
# 1) override フラグで切り替え(最も局所的)
pkgs.emela.override { fromSource = true; }
# 2) fromSource overlay を使う → pkgs.emela がソースビルドになる
overlays = [ emela.overlays.fromSource ];
overlays.fromSourceを「素の nixpkgs」に適用した場合、ソースビルドは nixpkgs 同梱のrustPlatformを使う。この flake 経由(nix build .#emela-source) ならrust-toolchain.toml(stable+ rustfmt + clippy)にピン留めした ツールチェインでビルドされる。
rust-toolchain.toml に一致する Rust ツールチェイン(stable + rustfmt + clippy)と
rust-analyzer を含む devShell。
nix develop github:emela-lang/emela.nix
# emela のソースツリー(main HEAD のピン留め)が表示される。手元でビルドする例:
# cargo build -p emela --releaseソースビルドは emela-src input(flake = false)が指す commit を使う。最新の
main に追随するには:
nix flake update emela-srcflake.lock の emela-src が更新され、emela-source / nix run .#emela-source
がその HEAD をビルドするようになる。
ピン留め済みのバージョンとハッシュは pkgs/emela/versions.json
に集約されている(latest が既定)。Nix は再現性のためにこの表をピン留めして
使うので、更新は「表を書き換える」形で行う。
更新スクリプトが最新(または指定)リリースのハッシュを取得して versions.json を
書き換える。GitHub API を使わないのでトークン不要・レート制限に当たらない。
nix run .#update # 最新の stable リリースに更新
nix run .#update -- 0.8.0 # 特定バージョンを追加してピン差分をコミットすればチームで再現性を保ったまま新バージョンを使える。
versions.json に載っているバージョンは即座に選べる:
pkgs.emela # 既定(latest)
pkgs.emela.override { version = "0.6.0"; } # 特定バージョンにピン
pkgs.emelaVersions."0.6.0" # 同上(overlay が公開する版別アトリビュート)# 常に main HEAD を追いたい場合はソースビルド側を更新
nix flake update emela-src| 出力 | 説明 |
|---|---|
packages.<system>.emela |
プリビルドリリースバイナリ(latest、対応 system のみ) |
packages.<system>.emela-source |
main HEAD のソースビルド |
packages.<system>.default |
バイナリがあれば emela、無ければ emela-source |
apps.<system>.default |
nix run 用の emela 実行エントリ |
apps.<system>.update |
versions.json を再ピンする更新スクリプト |
devShells.<system>.default |
Rust 開発環境 |
overlays.default |
emela / emela-source / emelaVersions.<v> を追加 |
overlays.fromSource |
emela をソースビルドに差し替え |