nix包管理器
参考: 使用nix包管理器解决 glibc 兼容问题
https://www.v2ex.com/t/892346#reply0
优势
当软件包依赖版本不一致时,nix 包管理可以兼容较新版本,且安装软件包时是无需 root 权限
例如,安装 mongodb 时,mongodb 使用的 glibc 版本较高
而 glibc 又是系统基础组件,不能随便升级(系统上已安装其他应用依赖旧的 glibc)
视频教程: 【如何在Ubuntu或者在非NixOS上使用Nix】 https://www.bilibili.com/video/BV1rk4y1V7ai/?share_source=copy_web&vd_source=d667d02f8e613e3abbe8796cd937c035
安装nix
# 安装 nix
sh <(curl -L https://nixos.org/nix/install) --daemon
检查nix是否正常工作
# nix-shell: 启动Nix的交互式shell环境,下载并运行neofetch
# -p neofetch:
# -p 是 --packages 的缩写,指定要在shell环境中临时安装的软件包
# neofetch 是要安装的软件包名称(一个显示系统信息的工具)
# --run neofetch:
# --run 表示在进入shell后立即执行指定的命令
# neofetch 是要运行的命令,执行后会显示系统信息并立即退出shell环境
nix-shell -p neofetch --run neofetch
nix包管理器添加国内源
# 添加镜像源
## 将 交大 镜像站 和NixOS官方缓存 作为二进制包的下载源
sudo bash -c "echo substituters = https://mirror.sjtu.edu.cn/nix-channels/store https://cache.nixos.org/ >> /etc/nix/nix.conf"
# 更新添加包订阅
# nix-channel --add https://nixos.org/channels/nixpkgs-unstable
# 更新添加--国内 包订阅
nix-channel --add https://mirrors.ustc.edu.cn/nix-channels/nixpkgs-unstable nixpkgs
# 会将源地址 写入到~/.nix-channels文件中
# 重启 Nix 守护进程
sudo systemctl restart nix-daemon.service
# 刷新源
nix-channel --update
搜索软件包
加以到这里去搜索: https://search.nixos.org/
# 永久启用nix实验性特性
echo "experimental-features = nix-command flakes" | sudo tee -a /etc/nix/nix.conf
# 允许安装非自由软件
export NIXPKGS_ALLOW_UNFREE=1
# 重启 Nix 守护进程
systemctl restart nix-daemon
# 常用的软件搜索
nix search nixpkgs font
# 有很多内容,缩小一下范围:
nix search nixpkgs font chinese
# 知道具体名称的,正则表达式:
nix search nixpkgs ^qq$
# 使用 Nix 包管理器从 nixpkgs 仓库中搜索包含 "tmux" 关键字的软件包
nix search nixpkgs <包名>
nix search nixpkgs tmux
nix搜索软件包资源会严重飙升,甚至CPU和内存100%
.
# 使用预构建的二进制缓存,秒搜到到
nix-env -qaP | grep tmux
nix run
临时运行一次性工具
.
nix run
通过 /nix/store
直接调用预构建的二进制文件
立即运行软件,而且无需 sudo 权限,非常方便。
它实际上就是下载了二进制包到 /nix/store 然后执行,由于 nix 是沙箱、无状态,所以等于没安装,这个软件不在你的系统环境里,再次运行 yafetch、cbonsai 会提示找不到软件。
之后软件比较常用就加入配置,不好用也不用管它,下次垃圾回收直接带走。
nix run nixpkgs#cli名称
# 使用Nix运行nixpkgs仓库中的yafetch程序
# yafetch是一个轻量级的系统信息工具,类似neofetch但更简洁
# 这条命令会:
# 1. 自动下载nixpkgs仓库中的yafetch包
# 2. 临时安装并运行它
# 3. 运行后不会在系统中永久安装
nix run nixpkgs#yafetch
# 使用Nix运行nixpkgs仓库中的cbonsai程序并传递参数
# cbonsai是一个在终端中生成ASCII艺术盆景的程序
# 这条命令会:
# 1. 自动下载nixpkgs仓库中的cbonsai包
# 2. 临时安装并运行它
# 3. 将-l参数传递给cbonsai程序(-l表示"活着"模式,盆景会缓慢生长)
# 注意: --用于分隔nix run的参数和要传递给程序的参数
nix run nixpkgs#cbonsai -- -l
nix run nixpkgs#vim -- --help
nix-shell
nix-shell 会构建完整的依赖闭包并生成临时环境,用户手动退出当前shell
.
# 运行 mongo
nix-shell -p mongodb-5 --run "mongo --version"
# 退出当前shell
exit
运行redis
# 运行redis
nix shell nixpkgs#redis
nix profile
这个基本就等价于传统发行版的包管理 apt/dnf/pacman
安装软件包到用户环境
,会持久化
,即使重登系统,软件也能继续调用.
一般在 nixos 里很少使用,因为常用的软件就直接加入配置固定了,不常用的直接 nix run
或者 nix shell
不过在其它环境,比如其它发行版里的 nix,比如 wsl,懒得配置
就用 nix profile
安装到用户环境
# 持久化安装mycli到用户环境
nix profile install nixpkgs#<包名>@<版本号>
# 示例
nix profile install nixpkgs#yafetch
# 示例
nix profile inistall nixpkgs#mycli
查看profile安装列表
nix profile list
获取到list的编号.
删除
# nix profile remove <包名>
nix profile remove yafetch
# nix remove <list编号>
nix remove 0
nix develop—未完待续
nix的精华部分,待深入学习
nix flake—未完待续
更新 flake.lock
文件中的依赖项版本
# 更新所有输入
nix flake update
# 仅更新特定输入
nix flake lock --update-input nixpkgs
Home manager—未完待续
# 通过 `nix run` 直接运行 home-manager 的初始化命令
# `home-manager/master` 表示从 master 分支获取最新版本
nix run home-manager/master -- init --switch
Enable home-manager
# 使用 Nix Flakes 动态加载并激活指定用户的 home-manager 配置
# 1. 无需永久安装即可运行 home-manager 最新稳定版
# 2. 要求目标目录已存在符合规范的 flake.nix 配置文件
# 3. 支持原子化切换配置,失败自动回滚
## nix run - Nix 的动态执行命令,创建隔离环境临时运行程序
## nixpkgs#home-manager - 从官方仓库获取指定版本的 home-manager
## -- - 参数分隔符,后续参数传递给 home-manager 主程序
## switch - 激活配置并创建新一代环境(支持回滚)
## --flake - 启用 Flakes 特性进行声明式配置管理
## <flake-file-path> - Flake 配置文件路径:
### 支持相对/绝对路径(如 ./nix 或 ~/nix-config)
### 必须包含 outputs 中定义的 homeConfigurations
## #<USERNAME> - 指定要配置的系统用户名:
### 需与 flake.nix 中 homeConfigurations 键名匹配
### 支持 ${USER} 环境变量自动替换
nix run nixpkgs#home-manager -- switch --flake <flake-file-path>#<USERNAME>
# 使用 Nix 临时运行 home-manager 并激活指定用户的 Flake 配置
# 此命令会动态加载 home-manager 而不需要永久安装
# 注意:需要提前配置好 nix/#$USER 目录下的 flake.nix 文件
## nix run - Nix 的动态执行命令,临时运行指定程序包
## nixpkgs#home-manager - 从官方 nixpkgs 仓库获取 home-manager 最新稳定版
## -- - 参数分隔符,后面的参数传递给 home-manager 程序
## switch - home-manager 子命令,表示激活并切换配置
## --flake - 指定使用 Flake 方式进行配置管理
## nix/#$USER - Flake 配置路径和用户名:
### nix/ - 本地包含 flake.nix 的目录路径
### #$USER - 对应 flake.nix 中 outputs 定义的用户配置名, $USER 会自动替换为当前系统用户名
nix run nixpkgs#home-manager -- switch --flake nix/#$USER
递归创建Nix配置目录结构
# 递归创建 Nix 配置目录结构
# 1. 创建多级目录用于存放 home-manager 应用配置
# 2. -p 参数自动创建父目录(不会因目录已存在报错)
# 3. 建议路径结构:~/nix/home-manager/apps/ 存放模块化应用配置
mkdir -p ~/nix/home-manager/apps
升级&垃圾回收
# 更新所有输入源到最新版本
nix flake update
# 执行Nix存储垃圾回收
nix store gc
其他
# 查询系统的环境:
nix info -m
查询 nix 的环境:
nix config show