1584 字
8 分钟

NixOS安装指南

折腾完arch就想来玩玩nixos,简直是梦中情os

Windows安装前准备#


调整时间设置#

关于时间错乱

Linux把主板时间改成标准UTC时间,然后根据系统设置的时区对UTC时间进行加减后显示出来。Windows直接读取主板时间显示出来,所以此时你Windows显示的时间就变成了UTC时间,表面上看就像是windows时间错乱了。

PowerShell 管理员权限运行:

PowerShell (管理员)
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1

进入Live CD#


默认无密码自动登录,使用命令切换到root用户:

Terminal window
sudo -i

连接网络#

安装过程几乎肯定需要有效的网络连接。 无网络的安装是可行的, 但是可用的软件包集合是受限的。

有线网络#

使用网线连接电脑,亦或是使用USB共享网络
使用命令确认网络连接:

Terminal window
ip a #查看网络连接信息
ping bilibili.com -c 4 # 确认网络正常
ping 119.29.29.29 -c 4 # 腾讯 DNSPod,不通请检查网络连接

WiFi连接#

NixOS 默认使用wpa_supplicant作为无线守护程序。
使用命令进入:

Terminal window
sudo systemctl start wpa_supplicant # 启动服务
sudo wpa_cli # 进入 wpa 命令行交互模式

接着进入交互模式:

wpa_cli
> add_network
0
> set_network 0 ssid "你家 WIFI 的 SSID"
OK
> set_network 0 psk "WIFI 密码"
OK
> set_network 0 key_mgmt WPA-PSK
OK
> enable_network 0
OK

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

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

这个时候你就可以通过quit命令来退出wpa_cli。
再次检测网络连接:

Terminal window
ip a #查看网络连接信息
ping bilibili.com -c 4 # 确认网络正常
ping 119.29.29.29 -c 4 # 腾讯 DNSPod,不通请检查网络连接

更换频道#

关于 Flake 与国内网络

由于 Flake 使用 Git 仓库 URL 作为 inputs,较难直接使用国内的 Channel 镜像。因此在我们尚未配置好完美的代理环境前,本指南暂时不使用 Flake,以免因为网络问题卡在半路。

警告

在订阅系统版本时请指定系统版本,一般指定当前的最新稳定版。

Terminal window
nix-channel --add https://mirrors.ustc.edu.cn/nix-channels/nixos-25.11 nixos
nix-channel --update # 更新并解包频道

分区与格式化#

NixOS 安装程序附带多种分区工具。
以下示例使用cfdisk,但也提供fdisk、gdisk、parted和cgdisk。

首先,我们使用lsblk命令查看分区情况:

Terminal window
lsblk -pf #查看当前分区情况
fdisk -l /dev/想要查询详细情况的硬盘 #小写字母l,查看详细分区信息
cfdisk /dev/nvme0n1 #选择自己要使用的硬盘进行分区

格式化分区#

  1. 再次查看分区情况
Terminal window
lsblk -pf #查看分区情况
fdisk -l /dev/想要查询详细情况的硬盘 #小写字母l,查看详细分区信息
  1. 格式化efi分区
Terminal window
mkfs.fat -F 32 /dev/nvme0n1p1(EFI分区名)
  1. 格式化btrfs根分区
Terminal window
mkfs.btrfs /dev/nvme0n1p2(根分区名)
#加上-f参数可以强制格式化

创建btrfs子卷#

什么是 Btrfs 子卷?

子卷是 Btrfs 的一个重要特性,主要用于快照管理。通常至少要创建 root 子卷(存放系统文件)和 home 子卷(存放用户文件),根据命名规范取名为 @ 和 @home。由于这两者是平级关系,所以创建 @ 的快照时不会包含 @home。这样就可以做到单独恢复系统文件,而不影响用户数据。

  • 挂载
Terminal window
mount -t btrfs /dev/nvme0n1p2(根分区名) /mnt
  • 创建子卷
Terminal window
btrfs subvolume create /mnt/@root
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@nix
  • 可选:确认
Terminal window
btrfs subvolume list -p /mnt
  • 取消挂载,因为我们要重新挂载子卷:
Terminal window
umount /mnt

正式挂载#

  1. 挂载root子卷
Terminal window
mount -o subvol=@root,compress-force=zstd /dev/nvme0n1p2 /mnt
压缩算法选择

使用 compress-force 而不是 compress,是因为前者会让 Zstd 算法自己判断是否可压缩,这比内核自带的快速启发式检查(compress)压缩率更高。如果您的磁盘空间非常有限,可以指定一个更高的压缩等级,例如 compress-force=zstd:7。Zstd 可选的等级范围是 -15 (快) 到 15 (慢,高压缩率),默认是 3。

  1. 挂载home子卷
Terminal window
mount --mkdir -o subvol=@home,compress-force=zstd /dev/nvme0n1p2 /mnt/home
  1. 挂载nix子卷
Terminal window
mount --mkdir -o subvol=@nix,noatime,compress-force=zstd /dev/nvme0n1p2 /mnt/nix
  1. 挂载efi分区(ESP)
Terminal window
mount --mkdir /dev/nvme0n1p1 /mnt/efi
  1. 复查挂载情况
Terminal window
df -h

编辑系统配置#

使用以下命令生成基础配置:

Terminal window
nixos-generate-config --root /mnt
用户密码准备

马上我们要编辑系统的核心配置,如果你不想配置好系统启动后无法登录,我们需要提前生成密码哈希值:

生成密码哈希
mkpasswd -m sha-512

注意: 运行后输入你的密码,它会输出一串极其复杂的哈希字符串(例如 $6$F...),请把这串字符复制或拍照记录下来,下一步编辑配置时会用到!

然后编辑配置:

Terminal window
nano /mnt/etc/nixos/configuration.nix
/etc/nixos/configuration.nix
{ config, lib, pkgs, ...}:
{
imports = [ ./hardware-configuration.nix ];
boot.loader = {
grub = {
enable = true; #启用GRUB
default = "saved";
device = "nodev"; # `nodev`表示将生成一个 GRUB 引导菜单,但不会实际安装 GRUB。
efiSupport = true; #启用EFI支持
useOSProber = true; # 使用OSprober搜索其他系统
extraConfig = ''
GRUB_SAVEDEFAULT=true
'';
};
efi = {
canTouchEfiVariables = true;
efiSysMountPoint = "/efi";
};
};
networking = {
hostName = "NixOS";
networkmanager.enable = true;
};
time.timeZone = "Asia/Shanghai";
i18n.defaultLocale = "en_US.UTF-8";
# ==== Display Manager ====
services.greetd.enable = true;
services.greetd.settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --cmd niri";
user = "greeter";
};
};
# ==== Window Manager ====
programs.niri.enable = true;
# ==== Audio ====
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true; # 需要 32 位音频支持可保留
pulse.enable = true; # 兼容 PulseAudio
jack.enable = true; # 需要 JACK 可保留,不需要可删
};
# ==== User ====
users.mutableUsers = false; # 让用户完全由配置控制
users.users.sui = {
isNormalUser = true;
hashedPassword = "$6$F1JgV....$kK1R3z....";
extraGroups = [ "wheel" "networkmanager" ];
};
environment.systemPackages = with pkgs; [
neovim
];
nix.settings.substituters = [ "https://mirrors.ustc.edu.cn/nix-channels/store" ];
system.stateVersion = "25.11"; # 不要改动
}

对于hardware-configuration.nix不需要太多改动。

  1. 先获取分区uuid
Terminal window
blkid
  1. 填入各子卷的挂载参数以及uuid修改/boot为/efi
/etc/nixos/hardware-configuration.nix
# 省略其余配置
fileSystem = {
"/" = {
device = "...";
fsType = "btrfs";
options = [ "subvol=@root" "compress-force=zstd" ];
};
"/home" = {
device = "...";
fsType = "btrfs";
options = [ "subvol=@home" "compress-force=zstd" ];
};
"/nix" = {
device = "...";
fsType = "btrfs";
options = [ "subvol=@nix" "noatime" "compress-force=zstd" ];
};
"/efi" = {
device = "...";
fsType = "vfat";
};
# 省略其余配置
}

部署系统#

Terminal window
sudo nixos-install --option substituters https://mirrors.ustc.edu.cn/nix-channels/store

最后只要重启电脑,祈求它能正常进入系统

NixOS安装指南
https://blog.suichyan.top/posts/nixos_install/
作者
Sui
发布于
2026-02-06
许可协议
CC BY-NC-SA 4.0