1. 获取NixOS

NixOS的ISO镜像文件可以从https://nixos.org/download.html#nixos-iso处下载,
考虑到国内互联网现状,也可从https://mirrors.tuna.tsinghua.edu.cn/nixos-images/下载,
请注意版本号的差别。制作USB启动盘的方式很常规(Tip:推荐使用Ventory),详细的不再赘述。

注意:务必保证自己已经理解自己下载的是什么玩意,不然可能无法进行下一步或者进行到某一步便前功尽弃。

请注意,[latest-nixos]表示你下载的是最新的NixOS版本,[gnome]和[plasma5]分别表示你的livecd默认带有Gnome桌面和KDE桌面的版本(这只决定你的livecd默认的桌面环境,和新的系统无关),而[minimal]则表示是最小化安装版本,livecd没有桌面环境。

对于32位(i686)计算机,NixOS在这里仅提供最小化安装版本,如果你的计算机支持64位的操作系统,那么请下载x86_64的版本。

后缀为sha256的文件为校验文件,可以检查下载下来的镜像文件是否完整,一般情况来说,没有必要理会它们。

如果你使用不支持从USB设备启动的古老机器,你可以尝试将ISO镜像文件烧录入一张空的CD里来替代USB设备,但是NixOS可能并不能在这种古老机器上正常工作。

2. 安装NixOS

2.1 从安装介质中启动

Step 1. 插入你的安装介质,打开或者重启你的计算机。

Step 2. 通过按某些按键来进入BIOS的启动菜单(BOOT MENU)(Tip:不同的主板默认的按键可能不同),选择刻录好的安装介质,如果你不知道你的哪个是你的安装介质,那就一个一个地试。(Tip:如果你的PC支持UEFI,那么选择UEFI是更好的选择,如果你不知道什么是UEFI或者机器比较古老,那么可以忽略这一括号内的话)

Step 3. 选完启动介质后来到安装器菜单界面,如果你不懂,可以什么都不做乖巧地等着读秒结束后自动进入,如果你比较心急,按一下回车键就可以直接进入。

Step 4. 此时如果你在下载镜像时选择了带有桌面环境的版本,当你选择图形化(graphical)的安装器时可能需要等待一段时间才可进入桌面,安装过程见2.2。最小化安装版本会直接进入命令行,你接下来的所有操作都要在命令行下完成,安装过程见2.3

**2.2 图形化安装(自动)

Step 1. 在欢迎界面,可以选择安装器和将要安装的系统的语言。(为了方便,最好使用American English)

Step 2. 接下来,你应该选择你所在的地区以便正确设置你的时区,安装器会通过你的ip地址猜测你的位置,当然,你也可以点击地图选择地区。

Step 3. 接下来,你可以选择你的键盘布局,默认即可。

Step 4. 在用户界面,你必须设置一个普通用户的名和密,还有root用户的密码。

Step 5. 接下来,你可以选择一个你喜欢的桌面环境来做为新的系统的默认桌面环境,你有相当多的选择,或者你可以选择无桌面环境,值得一提的是,无论你选择了怎样的系统镜像,你都可以在这里重新决定你新系统的默认桌面环境。

Step 6. 接下来,你可以选择是否允许非自由的软件。

Step 7. 接下来是硬盘分区界面,谨慎操作,最简单的方法就是直接格式化整个硬盘当作NixOS的家,理所当然地你也可以手动分区,至少有一个根目录和ESP分区。(如果你是UEFI启动的话)如果你需要的话不要忘了swap分区,你也可以选择加密硬盘。

Step 8. 总结界面,在这可以检查一下你之前的选项是否有问题,没有问题,点击Install,nixos-install会为你做完一切。

Step 9. 安装结束后,重启并移除你的安装介质。

2.3 命令行安装(手动)

先切换到root用户,接下来的操作都在root下执行

1
sudo su root

2.3.1 连接网络

如果你需要连接WiFi,首先,打开wpa_supplicant服务,执行:

1
systemctl start wpa_supplicant

接下来,执行wpa_cli:

1
wpa_cli

接着,执行:

1
2
3
4
5
6
7
8
9
10
> add_network
0
> set_network 0 ssid "myhomenetwork"
OK
> set_network 0 psk "mypassword"
OK
> set_network 0 key_mgmt WPA-PSK
OK
> enable_network 0
OK

进入wpa_cli,其中myhomenetwork是你要连接的WiFi的SSID,mypassword是你要连接的WiFI的密钥,WPA-PSK是你要连接的WiFi的加密方式。

如果你成功连接,执行完如上的命令后你将得到类似下面的一条message:

1
<3>CTRL-EVENT-CONNECTED - Connection to 32:85:ab:ef:24:5c completed [id=0 id_str=]

这个时候你就可以通过quit命令来退出wpa_cli。

2.3.2 分区并格式化

我打算采用btrfs文件系统,btrfs 是用于 Linux 的现代写入复制 (CoW) 文件系统,旨在实现高级功能,同时还专注于容错、修复和易于管理。

注意: 以下示例适用于启用了 EFI 的系统。相应地调整 BIOS 安装的命令。

1
2
printf "label: gpt\n,550M,U\n,+8G,S\n,,L\n" | sfdisk /dev/sda

使用上面命令创建的分区结构:

  1. /dev/sda1: 550M 的 EFI 分区。
  2. /dev/sda2: 8G 的 Linux swap 分区。
  3. /dev/sda3: 剩余空间的 Linux filesystem 分区。

然后格式化并启用 swap 分区:

1
2
mkswap /dev/sda2
swapon /dev/sda2

最后,更新 /etc/fstab 文件以确保 swap 在重启时自动启用:

1
2
echo '/dev/sda2 none swap sw 0 0' | sudo tee -a /etc/fstab

在Nix 包管理器的系统中临时使用 btrfs-progs 软件包

1
nix-shell -p btrfs-progs

格式化分区并创建子卷

1
2
3
4
5
6
7
8
mkfs.fat -F 32 /dev/sda1  #在指定的分区 `/dev/sda1` 上创建一个 FAT32 文件系统
mkfs.btrfs /dev/sda3 #在指定的分区 `/dev/sda3` 上创建一个 Btrfs 文件系统
mkdir -p /mnt #创建一个挂载点 `/mnt`
mount /dev/sda3 /mnt #将 `/dev/sda3` 分区挂载到 `/mnt` 目录
btrfs subvolume create /mnt/@ #在 `/mnt` 目录中创建一个名为 `@` 的 Btrfs 子卷,对应于系统的根文件系统(`/`)
btrfs subvolume create /mnt/@home #在 `/mnt` 目录中创建一个名为 `@home` 的子卷,对应于 `/home` 目录,存放用户的个人数据
btrfs subvolume create /mnt/@nix #在 `/mnt` 目录中创建一个名为 `@nix` 的子卷,对应于 Nix 包管理器的存储位置
umount /mnt #卸载 `/mnt` 目录下的文件系统

挂载分区和子卷

1
2
3
4
5
6
7
mount -o compress=zstd,subvol=@ /dev/sda3 /mnt  #将 Btrfs 分区中的 `@` 子卷挂载到 `/mnt` 目录,并启用压缩。
mkdir /mnt/{home,nix} #创建两个目录 `/mnt/home` 和 `/mnt/nix`
mount -o compress=zstd,subvol=@home /dev/sda3 /mnt/home #将 Btrfs 分区中的 `@home` 子卷挂载到 `/mnt/home`,并启用 Zstandard 压缩
mount -o compress=zstd,noatime,subvol=@nix /dev/sda3 /mnt/nix #将 Btrfs 分区中的 `@nix` 子卷挂载到 `/mnt/nix`,并启用 Zstandard 压缩,同时禁用访问时间记录

mkdir /mnt/boot #创建 `boot` 目录,用于挂载引导分区
mount /dev/sda1 /mnt/boot #挂载引导分区

安装NixOS

1
2
3
4
nixos-generate-config --root /mnt
nano /mnt/etc/nixos/configuration.nix # manually add mount options
nano /mnt/etc/nixos/hardware-configuration.nix #添加一些挂在参数 比如 "compress=zstd" 和 "noatime"
nixos-install --show-trace

重置root密码,添加新用户并设置密码

1
2
3
4
nixos-enter  # 进入部署好的系统,类似 arch 的 chroot
passwd root # 重置 root 密码
useradd -m -G wheel loner # 添加普通用户,并加入 wheel 组
passwd loner # 设置普通账户密码

nixos-install 有时候有毒,最后一步的设置密码不生效,所以才会有上面重置 root 密码这步。
然后重启(最好断掉虚拟机的光驱),就能看到安装好的系统了!!!

刷新grub

1
sudo grub-mkconfig -o /boot/grub/grub.cfg

如果以后你决定删除 NixOS 系统,你需要做几个步骤来确保系统干净地卸载,并恢复到之前的状态。以下是逐步指南:

1. 删除 NixOS 文件系统

首先,你需要删除 NixOS 的文件系统和挂载的分区。假设你的 NixOS 系统安装在 /dev/nvme0n1p7(BTRFS 文件系统)上,并且你的 @@home@nix 等子卷已经创建。你可以按照以下步骤删除这些分区和子卷:

1.1. 删除 NixOS 的 BTRFS 子卷

在你删除整个分区之前,首先需要卸载并删除所有的 BTRFS 子卷。你已经在安装过程中创建了几个子卷(例如:@@home@nix),可以使用以下命令删除它们:

1
2
3
4
# 删除 BTRFS 子卷
sudo btrfs subvolume delete /mnt/@
sudo btrfs subvolume delete /mnt/@home
sudo btrfs subvolume delete /mnt/@nix

1.2. 卸载分区

确保分区不再挂载,如果你已经挂载了 NixOS 的分区(比如 /mnt/mnt/home/mnt/nix),可以使用以下命令卸载它们:

1
2
3
4
# 卸载挂载点
sudo umount /mnt
sudo umount /mnt/home
sudo umount /mnt/nix

1.3. 删除 NixOS 分区

删除分区的步骤可以通过 partedfdisk 工具来实现。使用 parted 删除 NixOS 分区(例如:/dev/nvme0n1p7):

1
2
# 使用 parted 删除分区
sudo parted /dev/nvme0n1 rm 7

这会删除 /dev/nvme0n1p7 分区。如果你需要删除其他 NixOS 使用的分区,也可以按照类似方式删除。

2. 删除引导项

如果你使用的是 systemd-boot,需要删除与 NixOS 相关的启动项。你可以使用以下命令列出所有 systemd-boot 启动项:

1
bootctl list

然后删除 NixOS 的启动项。启动项配置文件通常位于 /boot/efi/loader/entries 目录下。你可以使用以下命令删除 NixOS 的引导配置文件:

1
2
# 删除 NixOS 启动项
sudo rm /boot/efi/loader/entries/nixos-generation-1.conf

如果你使用的是 GRUB,你需要编辑 /etc/grub.d/ 中的配置文件,删除与 NixOS 相关的条目,然后重新生成 GRUB 配置:

1
2
# 删除 GRUB 配置中的 NixOS 条目
sudo grub-mkconfig -o /boot/grub/grub.cfg

3. 清理 NixOS 配置文件

如果你不再使用 NixOS,你可以删除 NixOS 的配置文件(例如:/etc/nixos/configuration.nix 等)。这些文件可能包含你对 NixOS 的自定义配置。你可以删除 /etc/nixos 目录:

1
2
# 删除 NixOS 配置文件
sudo rm -rf /etc/nixos

4. 恢复引导顺序

删除 NixOS 后,你可能需要更新 UEFIBIOS 启动顺序,确保系统从其他操作系统(如 WindowsArch Linux)启动。你可以通过进入 UEFI/BIOS 设置,在启动顺序中选择合适的引导项。

如果你删除了 systemd-bootGRUB 引导配置,你可能需要重新配置它们。假设 GRUB 在其他操作系统中仍然可用,可以重新生成 GRUB 配置文件:

1
sudo grub-mkconfig -o /boot/grub/grub.cfg

5. 删除 swap 分区(如果需要)

如果你不再使用 swap 分区 /dev/nvme0n1p5,可以通过以下步骤删除它:

1
2
# 使用 parted 删除 swap 分区
sudo parted /dev/nvme0n1 rm 5

6. 清理多余的文件

如果你不再需要 NixOS 安装的任何文件或配置,最后可以清理掉其他不再需要的文件,包括下载的镜像和相关的日志文件。

总结:

  1. 删除 NixOS 分区:卸载并删除 BTRFS 子卷和相关分区。
  2. 删除引导项:清理 systemd-bootGRUB 配置中的 NixOS 启动项。
  3. 清理配置文件:删除 /etc/nixos 配置目录。
  4. 恢复引导顺序:确保系统从其他操作系统启动。
  5. 删除 swap 分区(如果不再需要)。

完成这些步骤后,NixOS 将被从系统中完全移除。如果你有任何问题,或者在操作过程中遇到困难,随时向我求助!