nix-env -qaP ".*emacs.*"
# output:
# ...
# emacsGcc emacs-gcc-20210627.0
# emacsGit emacs-git-20210627.0
# qemacs qemacs-0.3.3
# ...
# 如果已存在则会更新
nix-env -iA nixpkgs.emacsGcc
nix-env --install emacs-gcc-20210627.0
nix-env -q
# output:
# ...
# aria2-1.35.0
# bat-0.17.1
# bfg-repo-cleaner-1.13.0
# ...
nix-env --uninstall aria2-1.35.0
nix-env -e aria2
nix-shell -p python37Full
# 查询旧版本
# https://lazamar.co.uk/nix-versions/
# 锁定版本
nix-env -qaP ".*emacs.*" -f https://github.com/NixOS/nixpkgs/archive/e85975942742a3728226ac22a3415f2355bfc897.tar.gz
可用于启用一个含指定 pkg 的 shell 环境或构造一个含相应编译依赖的环境。
Summary
nix-shell \
[--arg name value] \
[--argstr name value] \
[ { --attr | -A } attrPath ] \
[--command cmd] [--run cmd] \
[--exclude regexp] \
[--pure] \
[--keep name] \
{ { --packages | -p } packages... | [path]}
# 启动一个包含 pkg 的 shell,pkg 为 nixpkgs 中的属性名。
nix-shell '<nixpkgs>' -p <pkg>
# --pure 的作用为不继承宿主机环境
nix-shell '<nixpkgs>' -p <pkg> --pure
# 启动一个包含 alacritty 所需编译环境的 shell
nix-shell -A alacritty '<nixpkgs>'
# pkg 为 nix 文件中定义的属性名/包名 paths 为 nix 文件路径,或者 url
nix-env -iA {pkg} -f {paths}
nix-env -iA nixpkgs.docker
# 安装一个文件中的所有包
nix-env -f ~/foo.nix -i '.*'
# --dry-run 不实际安装,仅查看安装内容
nix-env -iA emacsGcc -f ./emacs --dry-run
# 查询 pkg , 支持通配符
nix-env -qaP {pkg}
# 查询 nix 文件中的包
nix-env -qa -f {paths}
# To show installed packages
nix-env -q
# To show all packages with “firefox” or “chromium” in the name
nix-env -qa '.*(firefox|chromium).*'
nix-env --upgrade gcc
nix-env --uninstall gcc
# remove everything
nix-env -e '.*'
nix-env --list-generations
nix-env --rollback {generation}
# nix-env -u 里不会更新 firefox
nix-env --set-flag keep true firefox
# 保留旧版本 firefox 配置文件的情况下安装新的 firefox
# firefox-2.0.0.11 (the enabled one) firefox-2.0.0.9 (the disabled one)
nix-env --set-flag active false firefox
nix-env --preserve-installed -i firefox-2.0.0.11
nix-env -q
# 设置优先级,priority 越小优先级越高
nix-env --set-flag priority {priority} gcc
nix 安装的包有时会出现工具链或动态库原因造成一些奇怪的问题
以 libffi.so.6 为例,其它类似问题也可以同样处理,如果解决不了通过其它 途径安装
fd libffi.so /nix
# /nix/store/q6ifii7y5cm5m593rf3bj29pb1qgrg7i-libffi-3.3/lib/libffi.so
# /nix/store/q6ifii7y5cm5m593rf3bj29pb1qgrg7i-libffi-3.3/lib/libffi.so.7.1.0
# /nix/store/q6ifii7y5cm5m593rf3bj29pb1qgrg7i-libffi-3.3/lib/libffi.so.7
sudo cp /nix/store/q6ifii7y5cm5m593rf3bj29pb1qgrg7i-libffi-3.3/lib/libffi.so.7.1.0 /usr/local/lib
sudo ln -s /usr/local/lib/libffi.so.7.1.0 /usr/local/lib/libffi.so.6