Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and reproducible. It provides atomic upgrades and rollbacks, side-by-side installation of multiple versions of a package, multi-user package management and easy setup of build environments.
安装
$ curl https://nixos.org/nix/install | sh
使用
-
搜索包
$ nix-env -qa hello hello-2.10
如果不加关键字,则列出所有:
$ nix-env -qa | wc -l 14664
-
安装包
$ nix-env -i hello
-
更新包
# 所有 $ nix-channel --update nixpkgs $ nix-env -u '*' # 特定 $ nix-env -u 'hello'
-
删除包
$ nix-env -e hello
-
回收不用的包
$ nix-collect-garbage -d
-
添加源
$ nix-channel --add https://example.com/channels/nixpkgs-unstable $ nix-chanel --update
-
Generation
每一次安装/升级/删除都产生一个 generation,可以回滚(
--rollback
)至上一次操作,也可以切换(--switch-generation
)至任意次操作:# 回滚 $ nix-env --rollback switching from generation 3 to 2 $ nix-env --list-generations 1 2018-11-06 23:04:58 2 2018-11-06 23:04:59 (current) 3 2018-11-07 19:23:33 $ hello Unknown command 'hello' # 恢复 $ nix-env --switch-generation 3 switching from generation 2 to 3 $ nix-env --list-generations 1 2018-11-06 23:04:58 2 2018-11-06 23:04:59 3 2018-11-07 19:23:33 (current) $ hello Hello, world!
-
Profile
切换工作场景。假设单独设置一个开发相关的环境:
# create profile & install packages $ nix-env -p /nix/var/nix/profiles/per-user/<YOUR_NAME>/devel -i nix git gcc cmake ... # switch profile $ nix-env --switch-profile /nix/var/nix/profiles/per-user/<YOUR_NAME>/devel $ which git ~/.nix-profile/bin/git
这里我希望直接
--switch-profile <PROFILE_NAME>
,写绝对路径太麻烦。
使用起来感觉比 homebrew 复杂,一系列 nix-*
命令让我想到了 apt
。generation 和 profile 这两项功能是亮点,如果包多一点,用户自制包更方便一点,应该还是有机会的。