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.nixとflake.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コマンドを使う必要があることは覚えておかなければなりません。
記事をランダムに読む