Nix で derivation を作成する際 src フィールドにソースコードやその他入力を指定する必要があります。通常これは公開されているエンドポイントを指定します。典型的には GitHub の公開(public)レポジトリです:
src = fetchFromGitHub {
owner = "ushitora-anqou";
repo = "logq";
rev = "0.1.3";
hash = "sha256-+fKi7vfE0CHagSOf9g9TRqIXrSQo35xjIWuQAk0RZoI=";
};
一方で非公開の Git repository を指定したい場合は一工夫必要です。一番簡単なのは SSH でそのレポジトリにアクセスできるようにしておいた上で builtins.fetchGit を使う方法です:
src = builtins.fetchGit {
url = "ssh://[email protected]/ushitora-anqou/logq.git";
ref = "0.1.3";
rev = "740b83be8d66165fabc5ad1e87b78ac9069e6130";
};
他に、fetchFromGitHub の private フラグを使う方法もあります:
src = fetchFromGitHub {
owner = "ushitora-anqou";
repo = "logq";
rev = "0.1.3";
hash = "sha256-+fKi7vfE0CHagSOf9g9TRqIXrSQo35xjIWuQAk0RZoI=";
private = true; # ☆
};
ただし private フラグを使う場合は nix-daemon が読める環境変数として NIX_GITHUB_PRIVATE_USERNAME と NIX_GITHUB_PRIVATE_PASSWORD を設定しておく必要があります(参考)。NixOS の場合、まず configuration.nix で以下のように EnvironmentFile を指定します:
systemd.services.nix-daemon.serviceConfig.EnvironmentFile = "/etc/nixos/nix-daemon-environment";
/etc/nixos/nix-daemon-environment には以下のように書いておきます[1]:
NIX_GITHUB_PRIVATE_USERNAME=ushitora-anqou
NIX_GITHUB_PRIVATE_PASSWORD=(gh auth token の出力)
なおインターネットには fetchgitPrivate を使う方法が散見されますが、これは古い仕組みで builtins.fetchGit の導入により削除されています(参考)。
注釈
-
このファイルを NixOS 側で管理したい場合は agenix を使うなどの工夫が必要そうです。 ↩