Use a Nix Flake without Adding it to Git

Michael Lynch

Gitに追加せずにNix Flakeを使う

最近、自分のリポジトリで作業するときは、いつもNix flakeをリポジトリに追加しています。そうしておけば、どのシステムでも1つのコマンドを実行するだけで、動作する開発環境を立ち上げられるからです。

では、誰か別の人のリポジトリで作業していて、その人がNix flakeを導入したくない場合はどうすればよいでしょうか。

通常なら、リポジトリの自分のコピーにファイルを追加し、ローカルでgitignoreに追加します。そうすれば、自分専用のファイルをほかの変更と一緒にコミットせずに済みます。

ところが、Nix flakeには問題があります。リポジトリにgit add flake.nixしないと動作しないのです。そこで、Gitにコミットせずに自分のflake.nixファイルを使う方法を探しました。

方法1:ラッパーとなる親ディレクトリを作る

コメント欄で@kesorさんが、これまで見た中では最もシンプルな解決策を提案してくれました。親ディレクトリを作る方法です。

examplerepoというリポジトリで作業しているなら、ディレクトリ構成は次のようになります。

.
├── examplerepo/ << The actual git repo
├── flake.lock
└── flake.nix

このようにすると、flake.nixflake.lockはGitリポジトリの外側に置かれます。

あとは親ディレクトリからnix developを実行し、./examplerepoフォルダで作業します。

親ディレクトリはGitリポジトリでなくても構いません。必要ならGitリポジトリにしても構いません。

方法2:変更をGitから隠す

Silvan Mosbergerさんは次の解決策を提案しています

git add --intent-to-add flake.nix flake.lock && \
  git update-index --assume-unchanged flake.nix flake.lock

完全にうまくいくわけではありません。たとえばgit resetのようなコマンドを実行すると、この設定は元に戻ります。それでも、flakeファイルを変更セットから実質的に隠すことはできます。

方法3:Gitを無視するようNixに指示する

Serhii Khomaさんも、NixにGitリポジトリを無視させる回避策を紹介しています

nix develop path:.

この方法は、標準的なGitベースの方法より少し遅いようです。

そのうえで、次のコマンドを使えばflakeファイルをローカルだけで無視できます。

echo "flake.nix" >> .git/info/exclude && \
  echo "flake.lock" >> .git/info/exclude

この方法は、変更を隠す方法より堅牢です。ただし、普段使っているものとは異なるnix developコマンドを使う必要があることは覚えておかなければなりません。

原文は Michael Lynch により に公開されました。

この記事は「gpt-5.6-terra」を使用して翻訳されました。