缘起#
我大约在四五年前尝试过NixOS。当时觉得这个系统的想法很有意思:把需要的软件和系统设置写进配置文件,用Git保存起来,换电脑时就可以复用,更新出问题也可以退回旧版本。
实际使用时,写配置花了不少时间。Nix语言和我之前接触的配置格式不同,配置服务、驱动和用户环境时,需要查找相应的选项和示例。网上的教程还可能使用不同版本的写法,不能直接套用。由于当时花在配置上的时间比较多,后来就没有继续使用,主力电脑一直用Fedora。
最近又开始用NixOS,主要原因是现在可以让AI帮忙写配置了。像Codex、OpenCode这类编码助手,可以直接读取仓库里的文件,根据要求修改Nix代码,再运行命令检查有没有错误。查找选项时,可以先让它结合已有配置给出修改建议,再由我检查具体内容。
AI生成的配置仍然需要检查。NixOS的修改保存在文件里,可以先查看diff,再构建,确认之后才应用到系统。这种方式方便我检查修改涉及哪些软件和设置。
因此,这次把几台电脑陆续从Fedora迁移到了NixOS。这里把迁移和日常使用中整理出的配置方法写成一个系列,方便以后查阅,也供想尝试NixOS的朋友参考。
NixOS的主要用途#
多台电脑的配置管理#
如果只有一台电脑,手动安装软件、修改配置文件,其实也没有太大的问题。但电脑多了之后,就会遇到配置不一致的情况。例如在一台电脑上调好了Shell,换到另一台又要重新配置;有些设置改完很久没动,重装系统时才发现已经想不起来当时怎么弄的了。
我之前也会用Git保存一些配置文件,例如Shell配置。不过这些文件只能保存一部分设置,软件包、系统服务、防火墙等还需要另外处理。
NixOS可以把这些内容也写进配置。几台电脑需要的公共部分放在一起,硬件和用途不同的地方分别设置。以后修改公共配置时,就不用在每台机器上重复改一遍了。至于怎么拆分文件,后面第三篇会具体介绍。
系统更新与回滚#
Linux系统用久了,多少会遇到更新后某个软件或者驱动不好用的情况。NixOS会保留系统代次(generation),只要旧代次还在,就可以选择它重新启动,或者回滚到之前的系统配置。
测试配置和更新软件时,这个功能比较方便。不过它恢复的是系统软件和配置,数据库、下载的文件、家目录里的文档等,并不会跟着回到过去。所以有了系统回滚,数据备份仍然要做。
配置与修改记录#
把配置放进Git之后,除了能保存文件,还能看到每次改了什么、为什么改。再配上一些简单的使用说明,下次换电脑或者隔几个月再修改时,就可以参考之前的配置过程。
这对AI也有帮助。换一个对话,它不会自动记得之前做过什么,但可以重新读仓库和说明文件。配置、修改记录和实际运行结果写清楚之后,后续接着改会方便很多。
使用AI协助维护配置#
这次迁移里,AI主要帮忙查找配置选项、整理重复的设置、解释构建报错,以及根据已有文件补充说明。使用时需要先说明功能需求,以及哪些电脑需要这些设置。
例如,同样是“加一个远程桌面”,可能是分享已经登录的桌面,也可能是希望电脑没有显示器时仍然能远程使用。这两个需求的配置并不一样。因此,除了软件名称,还需要说明实际的使用场景。
配置通过检查后,还需要确认实际运行情况。例如检查服务是否启动、客户端是否能够连接,以及重启后功能是否正常。后面第四篇会介绍我怎么把这些要求写成维护说明,第五篇则会把修改配置到实际生效的过程走一遍。
迁移范围#
最初一批迁移是在2026年8月到9月初完成的,涉及日常使用的笔记本、本地AI与游戏用的台式机,以及运行自托管服务的电脑。这里会用这些经历举例,不过大部分内容不依赖具体机型。
除了系统本身,还包括:
- 用Home Manager管理用户环境,例如Shell、编辑器、输入法和一些桌面设置;
- 把不同电脑的配置放在同一个flake中管理;
- 管理服务需要的密码和密钥,避免把明文放进Git和Nix store;
- 配置原生服务和Docker容器,以及它们用到的网络和存储;
- 更新系统、检查运行情况,以及出问题时恢复。
后面的示例都会使用通用名字和路径,不会直接放出私人配置。阅读这个系列,熟悉基本Linux命令和Git就够了,NixOS相关的概念会边用边介绍。
系列内容#
这个系列主要介绍多台电脑都能使用的配置方法。目前整理出十三个主题,写作时可以根据内容合并或拆分。
- 为什么现在重新选择NixOS(本文)
- 核心概念:声明、Nix store、flake、锁定输入与代次
- 仓库架构:公共配置、每台电脑的设置与配置文件放在哪里
- 用AI维护配置:说明需求、检查修改和记录结果
- 一次配置变更的生命周期:评估、构建、test、switch、启动、回滚与垃圾回收
- 理解NixOS模块:导入、选项、默认值、优先级与覆盖
- 软件应该放在哪里:系统软件包、Home Manager、临时Shell与项目开发环境
- 管理用户环境:dotfiles、桌面偏好、已有文件与可变设置
- 机密与信任边界:store可见性、运行时机密与解密身份
- 状态、备份与恢复:配置能重建什么、什么需要备份、如何验证恢复
- 服务、容器与网络:原生模块、容器边界、依赖、存储与访问
- 多机器更新与部署:输入审查、构建资源、分阶段更新与远程验证
- AI维护NixOS的经验回顾:有效的帮助、反复出现的错误,以及让结果可信的检查
硬件支持、本地AI部署和具体服务迁移,可以另外写成专题补充。主系列用实际经历说明概念,公开示例单独编写,并省略私人配置细节。
可以接着读第五篇:一次配置变更的生命周期,跟随一个小改动理解实际流程。
相关文章#
- “本地运行大语言模型(一):使用ollama和LobeChat在本地或者服务器上部署”:此前用容器运行本地模型的背景材料
- “OpenClaw AI助手设置总结”:AI助手本身的配置,这次迁移中它从Docker容器变成了NixOS原生用户服务
- “容器(1):容器相关知识简介——容器化、docker、docker-compose、Kubernetes / K8s等”:自托管服务的背景知识
