Nixはいいぞ
私は仕事用に Windows(会社支給), 普段使い用に MacBook Pro(友達から貰った), 実験用に Manjaro Linux(会社の先輩から貰った)を使っていますが、その全てでパッケージマネージャーには nix を使ってます。
(ただし、Windows では Ubuntu on WSL2 の中で Nix を使ってます)
なぜ大人しく apt や homebrew を使うのでなく、Nix を使うのかというと、
- 宣言的に環境を管理できるので環境の再現が容易
- カスタマイズ性が高い
- docker が要らない
- アンインストールしたときに予期せぬところにゴミが残ることがない
- 環境をいつでも戻すことができる
というところが嬉しいからです。
もっと Nix が普及してほしいので、Nix パッケージマネージャーのインストール方法と基本的なコマンドの使い方を紹介します。
Nix のインストール
Linux
$ sh <(curl -L https://nixos.org/nix/install)
ひとつ注意点があって、fish shell では実行できません。
macOS
$ sh <(curl -L https://nixos.org/nix/install) --darwin-use-unencrypted-nix-store-volume
.bashrc への追記
Linux でも Mac でも nix を使うための必要な環境変数の設定のために、 ~/.bashrc
に
if [ -e $HOME/.nix-profile/etc/profile.d/nix.sh ]; then
. $HOME/.nix-profile/etc/profile.d/nix.sh;
fi
を追記しておきましょう。
チャンネル登録
まず、使うためには、Nix パッケージのチャンネルを登録する必要があります。
チャンネルの操作にはnix-channel
コマンドを使ってください。
$ nix-channel --add https://nixos.org/channels/nixpkgs-unstable
$ nix-channel --update
nix-channel --update
は sudo apt update
みたいなものです。
パッケージ管理
パッケージ管理のためのメインのコマンドは nix-env
です 。
nix-env
を使って、パッケージのインストール、アップグレード、削除、検索などができます。
検索
nix-env -qa
でインストール可能なパッケージを全部閲覧できます。
nix-env --query --available
でも同じです。
$ nix-env -qa
aterm-2.2
bash-3.0
binutils-2.15
bison-1.875d
blackdown-1.4.2
bzip2-1.0.2
...
-qa
のあとにパッケージの名前を入れれば特定のパッケージを検索できます。
$ nix-env -qa firefox
firefox-68.11.0esr
firefox-78.1.0esr
firefox-79.0
検索には正規表現も使えます。
$ nix-env -qa 'firefox-.*'
パッケージのインストール
nix-env -i
またはnix-env --install
でパッケージのインストールができます。
ちなみに、 sudo
は要りません。インストールしたパッケージはシステムにではなく、ユーザーにインストールされます。システム全体への影響は(多分)ありません。
$ nix-env -i subversion
nix-env -q
でインストール済みのパッケージを全て確認することができます。
$ nix-env -q
nix-2.3.7
subversion-1.12.2
アップグレード
nix-env -u
またはnix-env --upgrade
で環境を更新できます。
特定のパッケージのみのアップグレードをするときは、
$ nix-env -u subversion
全てのインストール済みパッケージをアップグレードするときは、
$ nix-env -u
アンインストール
nix-env -e
またはnix-env --erase
でパッケージをアンインストールできます。
nix-env -e subversion
uninstalling 'subversion-1.12.2'
rollback
Nix では、パッケージを追加したり削除したりするたびに環境の generation が作成されます。
そして、いつでもそれらの generation にロールバックすることができます。
例えば、パッケージインストールしてバグがあったから、うまく動いてたインストール前に戻したいって時に便利です。
generation の確認は、 nix-env --list-generations
$ nix-env --list-generations
1 2020-08-03 23:36:12
2 2020-08-06 19:15:43
3 2020-08-06 19:55:13
4 2020-08-09 18:33:59
5 2020-08-09 18:34:46 (current)
(current)
が現在の環境です。
ひとつ前の環境に戻るには、 nix-env --rollback
をつかいます。
$ nix-env --rollback
switching from generation 5 to 4
$ nix-env --list-generations
1 2020-08-03 23:36:12
2 2020-08-06 19:15:43
3 2020-08-06 19:55:13
4 2020-08-09 18:33:59 (current)
5 2020-08-09 18:34:46
特定の generation に移動するには、 nix-env --switch-generation
をつかいます。
$ nix-env --switch-generation 2
switching from generation 4 to 2