大家好!最近我发现身边越来越多的人开始讨论 Nix 了。作为一个技术小白,虽然在写代码方面涉猎不多,但在日常使用中,我深深感受到 macOS 下 HomeBrew 作为 package manager 的种种不便。

于是,我决定尝试一下 Nix 来进行包管理!迈出了技术小白的一大步!

我使用的机器是 Mac mini M1,相信同类型苹果硅的机器也可以参考我的经验。网上关于 macOS 安装 Nix 的中文内容实在是太少了,所以我决定写一些自己的经验,希望能帮助到更多的小伙伴!

更换 zshbash

在 macOS 下,默认使用的是 zsh,这里我建议首先更换为bash,更换的方式有两种:

  • 在“终端(TERMINAL)”内执行 chsh -s /bin/bash,执行完成后关闭终端重新打开,就可以看到成功更改。
  • 打开“系统设置”-“用户与群组”-在“管理员”的用户上右键-“高级选项”-“登陆shell”,更换为/bin/bash

安装 Nix: the package manager

接下来,我们来安装 Nix: the package manager (MacOS)

sh <(curl -L https://nixos.org/nix/install)

在安装过程中,作为一个自动化脚本,它会详细告诉你它都做了些什么,非常贴心!如果你不放心自动化脚本,可以仔细看一下输出,来判断是否接受。

安装完毕后,请关闭终端再打开!

重新打开终端后,通过以下命令测试是否安装成功:

nix-shell --version

成功的话会返回版本号。

如果安装失败,或者你想重新安装 Nix,请重新执行安装脚本。根据它输出的内容,需要你删除/备份后删除 /etc/bashrc/etc/bashrc.backup-before-nix

rm /etc/bashrc /etc/bashrc.backup-before-nix

之后再重新执行安装脚本

那么,欢迎你正式进入到 Nix 的大家庭!

这里我简单介绍两种使用方式。

  • 如果你想将包安装到实际的当前用户使用环境中,请使用 nix-env,例如我要安装 python3:
nix-env -iA nixpkgs.python3
  • 如果你只是想在临时环境中测试一下要使用的包(退出 nix-shell 则无法使用),请使用nix-shell ,例如我要使用 python3 :
 nix-shell -p python3

成功的话会输出:

[nix-shell:~]$ 

一些常用命令:

  • 升级实际用户使用的包可以使用:
nix-env --upgrade
  • 清理不再需要的包(应该是会清理那些你在 nix-shell 里面拉的包):
nix-collect-garbage -d
  • 查看已经安装的包列表:
nix-env --query --installed
  • 卸载你不需要的包:
nix-env --uninstall <package-name>

使用 Nix Flakes

Nix Flakes 是 Nix 的一个新特性,它提供了一种更现代化和模块化的方式来管理 Nix 包。以下是启用和使用 Nix Flakes 的步骤:

启用 Nix Flakes

首先,需要在 Nix 配置中启用 Flakes 支持。编辑或创建 ~/.config/nix 文件,并添加以下内容:

mkdir ~/.config/nix
echo "experimental-features = nix-command flakes" > ~/.config/nix/nix.conf

使用 nix profile

启用 Flakes 后,可以使用 nix profile 命令来管理包。例如,安装 hello 包:

nix profile install nixpkgs#hello

这将 hello 包安装到当前用户的环境中。

要查看已安装的包,可以使用以下命令:

nix profile list

要卸载已安装的包,可以使用以下命令:

nix profile remove nixpkgs#hello

通过这些命令,你可以方便地管理使用 Nix Flakes 安装的包。

查找想要安装的包可以在 search.nixos.org 里找到你所需要的东西。

参考链接:

https://www.howtogeek.com/444596/how-to-change-the-default-shell-to-bash-in-macos-catalina/

https://nixos.org/download#nix-install-macos