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

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

硅上观道・我的个人技术博客

函数式心法 (3):巧用柯里化和部分应用 函数式心法 (2):理解运用高阶函数 打造 NixOS 开发工作流 (1):为什么选择 NixOS Haskell 心法 (1):初识 - 为何学、学什么和怎么学 Clojure 笔记 (2):基本语法结构和 REPL 驱动编程 Clojure 笔记 (1):语言生态介绍和环境配置 前端笔记 (1):ES 标准和 ES6+ 变量定义方法 当我们发现毕生追求的知识在AI面前毫无价值时,如何重建存在的意义? 5 月 28 日 DeepSeek R1 模型完成小版本试升级并开源,具体有哪些提升? 信息闭塞和被信息洪流冲刷,哪个弊端更大?谈错误信息的危害性 Rust CLI 实战:手搓微型 grep (4) 交互式处理错误文件名问题 Rust CLI 实战:手搓微型 grep (3) 更优雅的错误处理 Rust CLI 实战:手搓微型 grep (2) 实现软件第一版 Rust CLI 实战:手搓微型 grep (1) 新建项目 学计算机有什么好的获取学习资料的方法?掌握高效的资料收集技巧 有哪些看起来很高端的技术其实原理很暴力很初级?浅析CDN内容分发网络原理 学习编程可以为自己带来什么?- 理论与实践的紧密结合 长文 - 大一技术成长复盘:课程、竞赛与开源之旅 推荐一个IDE中的AI工具 - CodeGeex插件和AI辅助编程 关于本站 - 一篇旧文章,我对本站内容更新计划的最初想法 读书笔记:读庄子《齐物论》,探寻真正的自我 读书笔记 - 单向度的人:核心思想,内容解析以及我的感悟 一篇时评写作练习:矛盾与救赎 - 关于行善
打造 NixOS 开发环境 (2):NixOS学习与配置入门指南
硅上观道 · 2025-08-20 · via 硅上观道・我的个人技术博客
技术教程

NixOS 安装真的有那么难?当下 NixOS 使用的最佳打开方式是什么?遇到问题怎么解决?这篇文章主要谈了 NixOS 安装、Flakes 和 home-manager 的必要性以及遇到问题时的正确解决思路三点,对于 NixOS 的初学者将会颇有帮助。

上篇文章主要谈了 NixOS 的高可复现性、可维护性和原子化更新特性如何恰到好处地解决了我的需求。如果你还没有看过,请参考 本系列上一篇文章

从这篇文章开始,我们将开始提一些学习配置 NixOS 开发机时更具体的建议。


1. NixOS 真的对新手很不友好吗?

首先,我想要回答一个问题:NixOS 真的对新手很不友好吗?

实际上,我觉得起码从系统安装的角度来看,其实并不难,想要尝鲜体验一下的难度远低于大多数人想象。

NixOS 官网提供了包含图形化界面的安装镜像,以及命令行安装的最小安装镜像。其中,图形化镜像的安装过程和那些公认新手友好的 Linux 发行版并无太大区别,且图形化安装界面会引导你选择你喜欢的桌面环境。

也就是说,如果你拿不准主意不知道 NixOS 是否适合你,我的建议就是从官网上下载一个 ISO 镜像在虚拟机内安装试试,亲自尝试过才知道适不适合。不论后续配置困难与否,至少安装过程是很丝滑的,可以进入系统以后再慢慢体验和斟酌。

事实上,对于下定决心要学习使用 NixOS 的朋友而言,我仍然建议在虚拟机内先尝试一下,并做一些基本的配置工作。不同于其他发行版,我们在虚拟机内做的所有配置调整,未来都是可以迁移到物理机上的,不必担心有重复劳动的问题。

也就是说,我们完全可以想在虚拟机内尝试多久就尝试多久,直到觉得系统达到相对比较顺的时候再考虑真正在物理机上安装。

系统安装的流程很直观,如有任何问题,或者你是 Linux 资深用户并想尝试无图形界面镜像的最小化安装,请查阅官方手册的对应部分


2. NixOS 在当下的正确打开方式

在这篇文章写成的时间点而言 (2025 年 8 月),即便 Nix Flakes 仍然是测试阶段,我建议一定要从开始就使用 Flakes 和 home-manager 来管理自己的配置。这两个工具分别解决了不同方向的问题,配合起来使用才可以实现真正高可复现性的 NixOS 环境。

Flakes 作为新一代 Nix 工具链的重要一环,即便现在名义上还没有完全稳定,也已经具备了极佳的可用性和开发者体验。向 NixOS 配置中引入 Flakes,才可以真正实现精确到 commit 级的软件源。

这主要是因为,引入 Flakes 后系统会自动生成并维护一个 flake.lock 文件,这个 lockfile 本质上和 JavaScript 项目中的 packages.lock,Rust 项目中的 cargo.lock 的功能是一致的。这个由系统自动维护的文件会详细记录软件源 (如 nixpkgs) 的 commit 值并锁定,这在根本上避免了重新构建时可能出现的版本漂移的问题。

也就是说,只有引入了 Flakes,才真正实现了系统层面近乎完美的可复现性

而 home-manager,解决的是用户层软件配置可复现性差的问题。按照原来的配置模式,所有软件均为系统层全局安装,而配置文件和传统 Linux 系统一样放在用户 home 目录下软件指定的文件夹中,这就意味着需要用户自己想办法处理软件配置文件的备份和版本管理问题。

引入 home-manager 后,一方面,一部分软件可以为具体用户安装而不是全局安装,对于有多用户管理需求的使用场景要友好很多,可以实现严格的用户间开发环境隔离。

另一方面,由于 home-manager 源软件在打包的时候往往提供了一些 API,用于把原先 YAML、TOML、JSON 或者其他配置文件类型,转化为 Nix 语言配置 (当然用户也可以选择使用原版配置文件),并在新配置 rebuild 过程中自动在 home 目录下对应位置创建指向 /nix/store 目录的软链接。这使得用户层一些软件的配置信息也可以方便地使用 git 进行版本管理。

简单来说,home-manager 让我们对于终端模拟器、shell 等很多用户层配置也可以轻松进行版本管理和跨设备配置精确复刻。配合 Flakes,从系统层到用户层的几乎全部细节,都被一套配置文件定义了,用户可以轻松实现备份、版本管理、迁移等工作。

关于 Flakes 和 home-manager 的具体使用和配置,我非常推荐知友 @於清樂 写的 NixOS & Flakes Book。全文使用清晰流畅的中文,用深入浅出的方式介绍了许多稍显复杂的概念。

我自己基本就是看这套教程入门的,哪怕只是把基础部分看完,对于 NixOS 终端用户而言就完全够用了,在知识上就具备了定制化 NixOS 开发环境的条件。


3. 遇到问题怎么办?

当然,考虑到 NixOS 的复杂性,我想我们在使用过程中不可避免会遇到一些问题。

NixOS 被人诟病的一点就是文档混乱分散,质量比 Arch wiki 确实存在差距。但是,当你掌握了一定的检索技巧后,我觉得很多问题实际上还是能找到解决办法的 ── 文档只是分散,并非完全不存在

首先,对于想要找“保姆级教程”的朋友,追求文章的可读性和逻辑性,首先推荐的就是上文提到的NixOS & Flakes Book,此外使用英语创作的 Nix Pills

对于 Nix 语言本身,建议先从 官方 Nix 语言入门教学 看起,先学一下基本的数据结构,有这些基本知识,做简单的系统配置完全够用。

至于后续其他深入的 Nix 语言特性,比如柯里化、高阶函数等函数式语言特性,可以等需要的时候慢慢研究,或者移步我目前正在撰文的另一个专栏:《函数式心法》

对于具体软件的配置问题,首先还是建议先查 NixOS Wiki。但是,需要注意的是,Wiki 的各个页面良莠不齐,有的页面事无巨细基本配置抄了就能用;有的页面语焉不详,令人不知所云。所以,我们在使用的时候应当好好甄别。

而且 NixOS Wiki 实际上还有两个版本,这是 官方版本,这是 用户维护的非官方版本

对于 NixOS Wiki 没有覆盖的软件配置,通常下一步是查阅 Arch Wikimankier 看有没有信息供参考。

当然,查到非 NixOS Wiki 上的配置指引,想要翻译成 Nix 配置还是需要再转化一下的。这时候就可以查官方的 NixOS SearchMyNixOS

到这一步,绝大多数问题都基本可以解决。官方提供的 NixOS Search 是一个兜底性工具,毕竟所有的软件包、系统全局配置选项、home-manager 配置选项以及 Flakes 配置选项等信息都可以查到,并且一般伴有比较详细的说明和示例。

如果你仍然有疑问,也欢迎到知乎上提问并邀请我,我非常乐意回答大家的问题。


这篇文章主要谈了 NixOS 安装、Flakes 和 home-manager 的必要性以及遇到问题时的正确解决思路三点。后续几篇文章,我将深入谈一些 NixOS 使用时的技巧,并开始展示如何定制适合自己工作流的桌面环境 (Niri 窗口管理器) 和其他开发工具。