惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
I
InfoQ
C
Check Point Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
Last Week in AI
Last Week in AI
GbyAI
GbyAI
P
Proofpoint News Feed
量子位
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
B
Blog
T
The Blog of Author Tim Ferriss
H
Help Net Security
云风的 BLOG
云风的 BLOG

lznauy的技术小屋

聊一聊近况 Kubernetes Service/Ingress/CNI 体系 Kubelet Pod 生命周期管理 Kubernetes 存储 PV/PVC/CSI 体系 Kubernetes API Server—请求处理链路 Kubernetes 调度器—Pod 如何被分配到节点 Kubernetes Controller 调谐循环的实现原理 Kubernetes 核心资源模型的设计哲学 Gin 路由为什么快:Radix Tree 源码剖析 前路茫茫 NekoCode 深度解析 用AI开发新主题仅需一天 AIAgent开发杂谈 CodeAgent的开发比我想象的难的多 nix语法初入门 记录一次家里老人受骗 nixos美化shell及常用软件安装 皖南川藏线之旅 nixos配置kitty以及桌面美化 nixos安装niri和noctalia nixos-shell及配置优化 nixos-flake和home-manager claude源码泄漏事件及简单剖析 春季赏花之旅 曲折的离职过程 年味越来越淡了 城市里没有爱情? 日常碎记(三) 利用DeepSeek分析你的隐藏天赋 SELinux技术介绍
nixos折腾之旅
lznauy · 2026-04-06 · via lznauy的技术小屋

前言 @

作为一个arch系的长期用户,最早接触archlinux是2019年,后来觉得折腾起来有点累,然后转向了稍微省心点的Manjaro,中间也尝试过CachyOS,为什么现在想尝试nixos?

因为听说nixos可以一份配置快速复现系统,并且方便转移我的各种GUI以及软件配置、用户配置,虽然初期学习成本较高,但觉得综合对比下来,nixos依然是我现阶段的最优解。

目前的最终目标是达成类似 ryan4yin作者配置的效果

nixos

nixos简介 @

NixOS 是一个基于 Nix 包管理器的 Linux 发行版,采用声明式配置来管理整个操作系统。其核心设计理念是声明式系统配置原子化升级回滚,使得系统状态可预测、可重现、可回滚。

发展历史 @

  • 2003 年:Nix 包管理器诞生,由 Eelco Dolstra 开发
  • 2013 年:NixOS 首个稳定版本发布
  • 2016 年:NixOS 16.09 发布,成为首个官方稳定版
  • 2020 年:NixOS 20.09 发布,引入新的初始化系统
  • 2023 年:NixOS 23.11 发布,持续更新至今

优点 @

  • 声明式配置:整个系统(包括软件包、服务、用户、环境变量等)都可以通过单一的 configuration.nix 文件进行声明式管理
  • 原子升级:系统升级是原子性的,要么完全成功,要么回滚到之前状态,不会出现半升级状态
  • 可回滚性:任何配置更改都可以轻松回滚到之前的版本
  • 可重现性:只要配置相同,在任何机器上都能构建出完全相同的系统
  • 多版本并存:同一软件可以安装多个版本,用户可以自由切换
  • 隔离依赖:每个包都是独立隔离的,避免了依赖冲突
  • 强大的沙箱:构建过程在沙箱中运行,确保构建的可重现性

缺点 @

  • 学习曲线陡峭:需要学习 Nix 语言和 NixOS 的配置方式
  • 文档相对分散:官方文档较为分散,社区文档质量参差不齐
  • 启动速度较慢:由于使用 systemd-boot 和 Nix 的延迟加载,首次启动较慢
  • 软件包数量有限:相比 Ubuntu/Debian,AUR 等发行版,NixOS/Nixpkgs 中的包数量较少
  • 二进制缓存依赖:没有二进制缓存时,从源码构建耗时长
  • 与传统 Linux 差异大:一些传统的 Linux 操作方式在 NixOS 中不适用
  • 硬件驱动支持:某些专有驱动(如 NVIDIA)配置复杂

适用场景 @

  • 需要可重现环境的开发者和运维人员
  • 追求系统稳定性和可回滚性的用户
  • 需要在同一机器上测试不同软件版本
  • 偏好声明式配置的管理员
  • Nix 语言/函数式编程爱好者

镜像下载 @

NixOS 官方下载页 获取 Minimal ISO image。

VMware Workstation Pro 安装 @

VMware 官方 下载 Windows 版本,安装前需禁用 Hyper-V。

注意:Windows 环境下需关闭 Hyper-V 功能,否则与 VMware 虚拟化冲突。

虚拟机创建 @

测试环境配置:32GB RAM / i5-13600 / 5TB HDD

配置项 参数
内存 16GB
处理器 1 核 × 6 线程,开启 VT-x/EPT
硬盘 64GB
网络 NAT 模式
3D 加速 启用
固件 UEFI
光盘 挂载 ISO,选择启动时连接

启动 Live 环境与分区 @

进入 Live CD 环境后,使用 cfdisk 进行分区操作:

分区方案:
  /dev/nvme0n1p1 - EFI 分区   512MiB  Type: EFI System
  /dev/nvme0n1p2 - 根分区    剩余空间  Type: Linux filesystem

操作步骤:

  1. New → 输入 512MType → 选择 EFI System
  2. New → 回车分配剩余空间 → Type → 选择 Linux filesystem
  3. Write → 输入 yes 确认
  4. Quit 退出

也可以使用parted进行分区

# 新建 GPT 分区表
parted /dev/nvme0n1 --script mklabel gpt
# 创建 EFI 分区 512MiB
parted /dev/nvme0n1 --script mkpart ESP fat32 1MiB 513MiB
# 设置为 EFI 系统分区
parted /dev/nvme0n1 --script set 1 esp on
# 创建根分区,占用剩余所有空间
parted /dev/nvme0n1 --script mkpart root ext4 513MiB 100%

磁盘扩容 @

如果虚拟机磁盘需要扩容,那么需要使用下面方法重新分区。

# 1. 编辑分区表:把 nvme0n1p2 扩到磁盘末尾,然后写入退出
sudo cfdisk /dev/nvme0n1

# 2. 让系统识别新分区大小
sudo partx -u /dev/nvme0n1

# 3. 把文件系统也扩满
sudo btrfs filesystem resize max /

# 4. 检查结果
df -h /

挂载文件系统 @

# 格式化 EFI 分区
mkfs.fat -F32 /dev/nvme0n1p1

# 格式化根分区(btrfs)
mkfs.btrfs /dev/nvme0n1p2

# 挂载根分区
mount /dev/nvme0n1p2 /mnt

# 创建并挂载 boot 分区
mkdir -p /mnt/boot
mount /dev/nvme0n1p1 /mnt/boot

# 验证分区
lsblk

配置国内镜像源 @

sudo -i

# 订阅频道(使用中科大镜像)
nix-channel --add https://mirrors.ustc.edu.cn/nix-channels/nixpkgs-unstable nixpkgs
nix-channel --add https://mirrors.ustc.edu.cn/nix-channels/nixos-25.11 nixos
nix-channel --list
nix-channel --update

# 启用二进制缓存加速构建(上海交大镜像)
nixos-rebuild --option substituters https://mirror.sjtu.edu.cn/nix-channels/store switch --upgrade

生成初始配置 @

nixos-generate-config --root /mnt

生成配置文件位于 /mnt/etc/nixos/

  • configuration.nix - 系统主配置文件
  • hardware-configuration.nix - 硬件配置(通常无需修改)

配置 configuration.nix @

{ config, lib, pkgs, ... }:

{
  imports = [ ./hardware-configuration.nix ];

  # 启动引导配置
  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  # 主机名
  networking.hostName = "nixos";

  # Nix 二进制缓存
  nix.settings.substituters = [ "https://mirror.sjtu.edu.cn/nix-channels/store" ];

  # VMware 虚拟化支持
  virtualisation.vmware.guest.enable = true;

  # 允许安装非自由软件包
  nixpkgs.config.allowUnfree = true;

  # 网络管理
  networking.networkmanager.enable = true;

  # 时区
  time.timeZone = "Asia/Shanghai";

  # 用户配置
  users.mutableUsers = false;
  users.users.lznauy = {
    isNormalUser = true;
    hashedPassword = "$y$j9T$uYfmWiBrhxkmHyoNtal6x0$p5RAOTS4V5.JqOZoL78grCDwMNPuUK7sluQ0Qfz/aU/";
    extraGroups = [ "wheel" "users" ];
  };

  # 系统软件包
  environment.systemPackages = with pkgs; [
    vim wget git curl htop
  ];

  # SSH 服务
  services.openssh.enable = true;
  services.openssh.settings.PermitRootLogin = "no";
  services.openssh.settings.PasswordAuthentication = true;
  services.openssh.settings.AllowUsers = [ "lznauy" ];

  system.stateVersion = "26.05";
}

安装 @

cd /mnt
nixos-install --show-trace --option substituters https://mirror.sjtu.edu.cn/nix-channels/store

安装完成后:

  1. 关闭虚拟机
  2. 移除 ISO 镜像挂载,取消 “启动时连接” 选项
  3. 重新启动通过 UEFI 引导进入系统

注意:添加新用户后需通过 passwd <username> 设置密码。可使用 mkpasswd 生成密码哈希。

日常维护 @

# 应用配置变更
sudo nixos-rebuild switch

# 升级系统
sudo nixos-rebuild switch --upgrade

# 回滚至上一版本
sudo nixos-rebuild switch --rollback

# 查询可用软件包
nix-env -qaP firefox

# 临时安装软件(不写入配置)
nix-env -iA pkgs.firefox

# 清理旧世代
sudo nix-collect-garbage -d

可以通过 nixos Wiki查询相关文档