最难折腾的linux发行版本NixOS 入门指南:不要怕,它只是比较“啰嗦”
想用NixOS的网友,最好有一定 Linux 基础(知道什么是终端、包管理器、分区),不然,请放弃,除非你是真爱折腾的人!听网友的话,折腾一会儿NixOS,很可能折腾不了多久就会被我格式化了,真真真的难折腾!这是一篇专为爱折腾的linux爱好者,对 NixOS 感到好奇又被其复杂性劝退的爱好者准备的入门教程。本文跳过复杂的 Nix 语言语法和函数式编程理论,直接从“怎么让系统跑起来”和“怎么装软件”开始。1. 核心观念:把你的系统当成代码
在 Ubuntu/Arch 里,你习惯了这样操作:- sudo systemctl restart ssh
你不记得你改了哪些文件,也不记得装了哪些依赖。如果系统挂了,你很难还原。在 NixOS 里,整个操作系统就是一个配置文件(通常是 /etc/nixos/configuration.nix)。唯一的真理:运行 nixos-rebuild switch,系统就会变成配置文件里描述的样子。2. 第一步:安装后的配置(活下来)
假设你已经安装好了 NixOS(如果没有,去官网下 ISO,它的安装脚本很傻瓜,主要是分区和挂载,选 KDE 或 GNOME 桌面即可)。开机后,你会发现网络可能连不上,或者没有图形界面。别慌,打开终端(Konsole 或 GNOME Terminal)。2.1 认识你的“圣旨”:configuration.nix
sudo nano /etc/nixos/configuration.nix你会看到一堆看不懂的代码,但别怕,我们只改关键的。2.2 场景一:连接 Wi-Fi
NixOS 不像 Ubuntu 有个网络图标点一下就连。在桌面环境下,通常用NetworkManager。在 configuration.nix 里找到或添加这几行:networking.networkmanager.enable = true;networking.hostName= "nix-pc";2.3 场景二:安装常用软件(浏览器、Vim、Git)
在 NixOS 里,不要用 nix-env -i 这种命令(那是命令式,不推荐)。我们要用声明式。在 configuration.nix 里找到 environment.systemPackages,修改它:environment.systemPackages= with pkgs; [vim git firefox wget unzip解释:pkgs 是一个巨大的软件包仓库,[ ] 里的就是你要装的软件列表。2.4 场景三:启用显卡驱动(Nvidia 示例)
services.xserver.videoDrivers = [ "nvidia" ];开启 OpenGL 支持hardware.opengl.enable = true;
# 如果是 Nvidia 独显,通常还需要下面这些(省流版)hardware.nvidia.modesetting.enable = true;
hardware.nvidia.powerManagement.enable = true;
hardware.nvidia.open = false;
# 如果是闭源驱动设为 false,开源驱动设为 truehardware.nvidia.nvidiaSettings = true;
hardware.nvidia.package = config.boot.kernelPackages.nvidiaPackages.stable;
如果你是 AMD 或 Intel 核显,通常不需要配置,内核自带驱动就能用。2.5 应用配置(核心操作)
sudo nixos-rebuild switch执行完后,我要安装的fcitx5输入法已安装上了!
如果报错了,别怕,NixOS 会自动回滚到上一次能用的状态,系统不会崩。3. 日常使用:怎么装软件?
3.1 临时用一下(用完即焚)
比如你只想临时用一下 cowsay 或者 htop,不想让它留在系统里占配置文件位置。运行后,你会进入一个子 Shell,里面有这两个命令。输入 exit 退出,它们就消失了,非常干净。3.2 永久安装(正规军)
回到 /etc/nixos/configuration.nix,加到 environment.systemPackages 列表里,然后 sudo nixos-rebuild switch。去哪里找软件?访问官网搜索:search.nixos.org搜索你要的软件(比如 vscode),它会告诉你怎么写(通常是 vscode 或者 vscodium)。4. 进阶一点:用户级配置(Home Manager)
configuration.nix 是系统级的(所有用户共用,需要 root 权限改)。 但你肯定想自己装点用户级的工具(比如你的 dotfiles、只有你用的小工具),不想麻烦管理员(也就是你自己)。1.启用 Home Manager(在 configuration.nix 里):programs.home-manager.enable = true;2.编辑用户配置(~/.config/nixpkgs/home.nix): 如果没有这个文件就新建一个。设置家目录的状态版本home.stateVersion = "23.11";# 这里装的软件只属于当前用户,不需要 sudohome.packages = with pkgs; [neovimripgrepfzfbottom # 好看的 htop 替代品];# 还可以管理配置文件!比如把你的 .bashrc 复制过去home.file.".bashrc".source = ./dotfiles/bashrc;# 甚至可以设置 Gitprograms.git = {enable = true;userName = "Your Name";userEmail = "your@email.com";};}
这样,你的个人配置就和系统配置解耦了。哪天你重装系统,只要把这个文件拷过去,你的环境瞬间恢复。5. 系统维护与回滚(NixOS 的杀手锏)
5.1 升级系统
不需要 apt upgrade。只需要更新频道并重建:sudo nix-channel --updatesudo nixos-rebuild switch --upgrade5.2 救命神器:回滚
假设你手贱改坏了配置文件,导致开不了机/进不去桌面。- 在 GRUB 启动菜单里,选择 "NixOS - Generation XX (Old)"。
甚至你可以在启动菜单按 e 编辑启动项,选择具体的 Generation 进入。5.3 清理垃圾
NixOS 会保留所有历史版本的软件和内核,方便回滚,但会占磁盘。删除所有未被当前系统引用的包nix-collect-garbage# 或者更激进一点(慎用)nix-store --gc
建议保留最近 3-5 个 Generation,可以在 configuration.nix 里设置:boot.loader.systemd-boot.configurationLimit = 5;6. 给新手的避坑指南(FAQ)
Q: 为什么装软件这么慢?还要编译?A: NixOS 默认从二进制缓存(Binary Cache)下载预编译好的包,很快。如果某个包缓存里没有(比如你改了参数),就会本地编译,很慢。尽量用官方缓存里的版本。Q: 为什么我用 sudo nix-env -i 装的软件重启后不见了?A: 因为 nixos-rebuild switch 会把系统恢复成 configuration.nix 里的状态,你手动装的不在配置文件里,就被“修正”掉了。永远不要用命令式装软件,要用声明式。Q: 我想用最新的 Nix 语言特性(Flakes),怎么办?A: 刚开始不要用 Flakes。先用传统的 configuration.nix 熟悉流程。等你觉得配置文件太乱了,再去研究 Flakes。Flakes 只是把配置文件模块化了,本质没变。Q: 找不到某个软件怎么办?A: 去 search.nixos.org 搜。如果搜不到,去 GitHub 的 NixOS/nixpkgs 仓库搜 Issue,通常都有人提过。最后吐槽一句:真麻烦!7. 总结:NixOS 的哲学
- 一切皆文件:你的整个系统环境可以用几个 .nix 文件完美复刻。
- 原子更新:要么更新成功,要么回滚,绝不会出现“更新到一半卡住导致系统损坏”的情况。
- 可复现性:把你的配置文件发给朋友,他在另一台电脑上运行一下,就能得到和你一模一样的环境。
刚开始会很痛苦,因为你要对抗过去十年的肌肉记忆。但一旦你习惯了“改文件 -> rebuild”的流程,你会发现这才是 Linux 发行版该有的样子。现在,去打开你的 configuration.nix,加上 neofetch,然后 sudo nixos-rebuild switch 吧!