NixOS 安装应用手册(max2-nixos,NixOS 26.05)
看手册先分清两个维度:作用域(系统 / 用户 / 临时)× 管理方式(声明式 / 命令式)。主线再加一条:Nix 二进制 vs 非 Nix 二进制——后者要过“桥梁”(第 5 节)才能跑。
0. 总览表
| 形态 | 查询 | 装法 | 备注 |
| nixpkgs 官方包 | 1.1 | 声明式 1.2–1.3 / 命令式 1.4 / 临时 1.5 | |
| Flatpak 仓库 | 第 2 节 | 声明式 / 命令式 | 沙箱 |
| GUI 商店前端 | 第 3 节 | 点装 | 只是壳,后端≈Flatpak |
| 通用二进制 / 文件包 | 第 4 节 | 手动摆 | AppImage / tar 直接跑;deb / rpm / .sh 要拆 + 过桥 |
| 兼容层与容器 | 第 5 节 | 按需套 | nix-ld / steam-run / distrobox |
| 卸载回滚清理 | 第 6 节 | 各有命令 |
1. Nix 包(nixpkgs 及 flake)
1.1 查询。search.nixos.org/packages 查包名和选项(programs. / services. 有没有模块先在这里看)。终端:nix search nixpkgs <关键词>(要 flakes:experimental-features = nix-command flakes;没开用老的 nix-env -qaP <关键词>)。版本钉死在 channel(本机 26.05),channel 没升就没有新版——要么等,要么第 4 节手动装。
1.2 声明式(改 /etc/nixos + rebuild,拒匿名世代)。改完统一:
/run/wrappers/bin/sudo -n nixos-rebuild switch --describe "装xxx:原因"
| 位置 | 写法 | 效果 |
| 全局级 | environment.systemPackages = with pkgs; [ vim git htop ]; | 所有用户 PATH 里都有;只管“装上” |
| 用户级 | users.users.cat.packages = with pkgs; [ xxx ]; | 只进该用户 |
| 集成包 | programs.firefox.enable = true; | 装软件 + 用户级集成;有模块时优先,别裸写包名 |
| 服务包 | services.openssh.enable = true; | 装软件 + 注册运行系统服务(监听、开机自启) |
| 用户环境 | home.nix 里 home.packages = with pkgs; [ xxx ]; | 个人工具 + dotfile,与系统解耦 |
programs 是“装 + 配”,services 是“装 + 跑”,别混。systemPackages 所有用户可见,home.packages 只进该用户 profile。
1.3 配置开关(三道门,装不上先看这里):nixpkgs.config.allowUnfree = true;(粗放);nixpkgs.config.allowUnfreePredicate(按名放行,更细);nixpkgs.config.permittedInsecurePackages = [ "名-版本" ];(有洞被拦的版本,名字跟派生名走,换版本 / GUI 类型同步改,例 ventoy-gtk3-1.1.12)。改包 / 加包用 nixpkgs.overlays。
1.4 命令式(当前用户空间,不动系统):nix profile install nixpkgs#rclone(Flake 语法;nixpkgs# 是简写,完整支持 github:owner/repo#pkg)。装进 ~/.nix-profile/bin(小 wrapper,真身在 /nix/store)。nix profile list / upgrade / remove;回滚 nix profile rollback,系统级 nixos-rebuild --rollback;清理 nix-collect-garbage -d。老方式 nix-env -iA 只用来查残留(nix-env -q)。
1.5 临时(不留痕):nix shell nixpkgs#ffmpeg -c ffmpeg -i a.mp4 b.mkv;nix run nixpkgs#ffmpeg -- -i a.mp4 b.mkv(直接执行);nix develop(项目 flake devShell,进开发壳,只用于开发)。
2. Flatpak 仓库(沙箱)
查询:flatpak search <关键词>,或 flathub.org / Bazaar 浏览。开后端:services.flatpak.enable = true;(不用它就手配 flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo)。NixOS 正确姿势是声明式 services.flatpak.packages = [ "org.mozilla.firefox" ];,手敲也行(flatpak install flathub <应用ID>,用户级加 --user)。应用数据在 ~/.var/app/<应用ID>/,权限用 Flatseal 或 override 管;Wayland / 输入法穿透偶有坑。卸载 + 清运行时:flatpak uninstall / flatpak uninstall --unused。
3. GUI 商店前端(Discover / Bazaar):只是壳
Discover 不是分发形态,是 GUI 前端。NixOS 上 PackageKit 后端基本装不了 nixpkgs 包,实际可用后端≈只剩 Flatpak——“Discover 装软件”约等于“第 2 节图形版”。浏览和看更新可以,大件回第 1 / 2 节走终端,出问题日志清楚。点安装前看清来源行,别装重。
4. 通用二进制与文件包
主线:Nix 二进制(第 1 节)开箱即用;下面这些非 Nix 二进制缺的多半是 FHS 路径(/lib64、/usr/lib、/bin/bash)和系统 so——靠第 5 节的桥跑起来,不是“装不上”。
4.1 AppImage(如 WeChatLinux_x86_64.AppImage):chmod +x;双击要先 programs.appimage.enable = true;(注册 binfmt)。缺库:nix shell nixpkgs#appimage-run -c appimage-run ./xxx.AppImage。长期用建 ~/.local/share/applications/xxx.desktop。
4.2 静态 tar 包(如 ventoy-1.1.18-linux.tar.gz):解到 ~/.local/opt/<名>-<版本>/,PATH 加到 ~/.profile 或 shell rc。升级 = 解新版改 PATH,回滚 = 改回去。动态链接的同样可能缺 so——过第 5 节的桥。
4.3 deb / rpm / .sh:提取 + 过桥(不是“无法安装”)。deb:apt 不可用,ar x xxx.deb(或 dpkg -x)解出 data 按 4.2 摆。rpm:rpm2cpio xxx.rpm | cpio -id 提取,同上。.sh 安装器:多半是 shebang / /usr/lib 路径不存在,用 buildFHSUserEnv 包一层,或 nix-shell -p 补依赖。原则:上游有 AppImage / tarball 就别拿 deb / rpm 版。
4.4 内核驱动:只能走 nixpkgs(dkms 式现编没门)。boot.kernelModules / boot.extraModulePackages;闭源驱动走 allowUnfree + 对应 hardware.* 模块。这是唯一“基本无法手动装”的一类。
5. 兼容层与容器
nix-ld(programs.nix-ld.enable = true; + nix-ld.libraries):给野二进制补 so 解析,本机 trilium-cn 就是这么活的。steam-run ./xxx.run:官方逃生舱,给假设 FHS 的二进制一个假根。buildFHSUserEnv / nix-shell -p:给 .sh 安装器搭一次性 FHS 笼子。distrobox / systemd-nspawn / nixos-container:整一个他发行版用户态,deb 生态软件进去随便装。重度依赖 deb 闭源软件时用这层。
6. 卸载、回滚与清理
| 方式 | 卸载 | 回滚 / 清理 |
| 系统包 | 配置删行 + rebuild | nixos-rebuild --rollback |
| profile | nix profile remove | nix profile rollback;查 nix profile list |
| nix-env | nix-env -e | 查残留 nix-env -q |
| Flatpak | flatpak uninstall | flatpak uninstall --unused |
| 手动摆 | 删文件 + 撤 PATH / desktop 条目 | — |
| 统清 | — | nix-collect-garbage -d |
原则:别混着装同一个软件(系统包 + profile + 手动三份),乱了先对一遍留一份。
7. 本机坑位(max2-nixos 实测)
提权用 /run/wrappers/bin/sudo -n(wheel 免密);裸 sudo 因 PATH 窄误报要密码。出网走代理 127.0.0.1:7890(约 170KB/s,大包挂后台)。nixpkgs 钉 channel;官网包验 SHA。GitHub release 直链偶发 504(走 downloads.sourceforge.net 镜像)。装完找不到命令:command -v;nix profile list;新开 shell;声明式确认 rebuild 成功。