nix-env -u すると名前衝突の警告がでる


経緯

nix-env -uすると以下の警告がでる。

warning: name collision in input Nix expressions, skipping '/home/xxx/.nix-defexpr/channels_root/nixpkgs'

結論

nixはrootユーザのチャンネル引き継いでおり、ユーザがnixpkgsチャンネルを自ら追加すると複数の同じprefixのチャンネルが登録されている状態になるため、発生する。
解決方法としては nix-channel --remove nixpkgsすれば改善される。
注意点として、チャンネルを更新する場合は sudo nix-channel --updateとしなければチャンネルが更新されない点である。

もうちょっと詳しく

  • macOSで利用する場合nixのマルチユーザモードが利用される
  • マルチユーザモードの場合rootユーザのチャンネルを引き継ぐ
  • その状態は ~/.nix-defexpr/channels_rootに保持される
  • この状態のとき nix-channel --listを実行したときチャンネル一覧には現れない
  • このためchannelを登録していないと勘違いして nix-channel --add してしまうことでこの問題がおきる。
  • ただし、動作しないわけではない&ユーザのチャンネルが優先されると思われるので問題は起きないが警告が出る状態である

結論にはチャンネルを削除することで解決すると書いたが、あえて解決させないという選択肢もあるだろう。これならsudoを付与しなくてもchannelの更新が可能である。

参考リンク