NixOS 与 Nix Flakes 新手入门

358 天前
 ryan4yin

好几年前就听说过 Nix ,用 DSL 来管理系统依赖,还能随时回滚到任一历史状态。 虽然听着很牛,但是不仅要多学一门语言,装个包还得写代码,当时觉得太麻烦就没研究。 但是最近搞系统迁移遇到两件麻烦事,使我决定尝试下 Nix.

第一件事是在新组装的 PC 主机上安装 EndeavourOS ( Arch Linux 的一个衍生发行版),因为旧系统也是 EndeavourOS 系统,安装完为了省事,我就直接把旧电脑的 Home 目录 rsync 同步到了新 PC 上。 这一同步就出了问题,所有功能都工作正常,但是视频播放老是卡住,firefox/chrome/mpv 都会卡住,网上找各种资料都没解决,还是我灵光一闪想到是不是 Home 目录同步的锅,清空了 Home 目录,问题立马就解决了…后面又花好长时间从旧电脑一点点恢复 Home 目录下的东西。

第二件事是,想尝鲜 wayland ,把桌面从 i3wm 换成了 sway ,但是因为用起来区别不明显,再加上诸多不便( hidpi 、sway 配置调优要花时间精力,另外我用的是 sway 官方不支持的 nvidia 显卡),就还是回退到了 i3wm 。结果回退后,每次系统刚启动时,有一段时间 firefox/thunar 等 GUI 程序会一直卡着,要大概 1 分钟后才能正常启动…

发生第二件事时我就懒得折腾了,想到归根结底还是系统没有版本控制跟回滚机制,导致系统出了问题不能还原,装新系统时各种软件包也全靠自己手工从旧机器导出软件包清单,再在新机器安装恢复。就打算干脆换成 NixOS 试试。

然后就研究了半个月 Nix 与 Flakes ,将 PC 从之前用的 EndeavourOS 切换到了 NixOS 。

我折腾的第一步是在我 homelab 上开了台 NixOS 虚拟机,在这台虚拟机里把我物理机的 EndeavourOS i3 配置迁移到 NixOS + Flakes ,还原出了整个桌面环境。 在虚拟机里搞定后问题就不大了,直接备份好我办公电脑的 Home 目录、软件清单,然后将系统重装为 NixOS ,再 git clone 我调试好的 NixOS 配置,改一改硬盘挂载相关的参数,额外补充下 Nvidia 显卡相关的 NixOS 配置,最后一行命令部署配置。几行命令就在我全新的 NixOS 系统上还原出了整个 i3 桌面环境跟我的常用软件,那一刻真的很有成就感!

NixOS 的回滚能力给了我非常大的底气,使我前几天我又进一步迁移到了 hyprland 桌面,确实比 i3 香多了,它的动画效果我吹爆!(在以前 EndeavourOS 上我肯定是不太敢做这样的切换的,原因前面已经解释过了——万一把系统搞出问题,会非常麻烦。)

如果看完上面这些,你对 NixOS 也产生了一些兴趣,如下是我最近折腾时记录的 NixOS 新手笔记~

https://thiscute.world/posts/nixos-and-flake-basics/

6338 次点击
所在节点    Linux
47 条回复
tywtyw2002
358 天前
装 nixos 最简单的方法其实是用 kexec 。

https://github.com/nix-community/nixos-images
Al0rid4l
358 天前
感谢, 非常详细的指南, 正好最近也想尝试 Nix
ryan4yin
358 天前
@tywtyw2002 感谢推荐,我有空再研究下
yuhangch
358 天前
歪日 4090
lindas
358 天前
好巧,刚好在看你写的关于 linux 虚拟网络设备的文章 https://thiscute.world/posts/linux-virtual-network-interfaces/#%E4%B8%89bridge
ryan4yin
358 天前
@lindas 那确实是巧了,某种程度上说世界还挺小的~

@yuhangch 脑子一热就买了,windows 下打游戏贼爽,就是钱包有点受伤...
Naccl
358 天前
歪日,二花佬又在整些让人头大的技术
ryan4yin
358 天前
@Naccl 哈哈哈哈哈哈嗝...
qwerzl
358 天前
Immutable OS 也可以试试 openSUSE 的 MicroOS https://get.opensuse.org/microos/
qwerzl
358 天前
@qwerzl 不小心发送了... 直接用的 btrfs snapshot 实现回滚,个人感觉比 silverblue 和 nix 都简单很多
ryan4yin
358 天前
@qwerzl 嗯嗯,之前确实没考虑到有这功能,有空研究研究,不过 Nix 都已经搞定了,大概率不换方案了🤣
moonjourney
358 天前
nixos 切换不同桌面非常简单干净,而且很安全,我就经常 gnome/kde/sway 来回换着用。
unidentifiedme
358 天前
我的 NAS 也是 NixOS ,用 flake 的管理的 NixOS 和 home ,正准备把 WSL 和 VPS 也换成 NixOS ,reproducible 确实很爽。

Overlay 就是字面意义上的 nixpkgs overlay ,你可以修改 /新增 pkg ,比如你想在 configuration.nix/home.nix 中安装还不在 nixpkgs 里面的 pkg ,你可以不用提交你的 pkg 到 nixpkgs ,而是通过在 nixpkgs 上叠加你自己的 overlay 来 "生成" 一个包含你自己的 pkg 的 nixpkgs 。有点类似 docker 中的 overlayfs 。
ryan4yin
358 天前
@moonjourney 确实,这是我以前用其他 OS 没体会到过的爽点。

@unidentifiedme 感谢解释,另外将 NixOS 用在 NAS 上也是我下一步想尝试的事情~
Remmina
357 天前
感谢楼主的文章,一直对 NixOS 很感兴趣,有时间好好学习一下~
另外,想请问一下楼主所说的回滚机制具体指什么,能不能使用基于 Btrfs 的 TimeShift 实现呢?
ryan4yin
357 天前
@Remmina 我之前也是用的 btrfs 文件系统,不过确实不知道还有 timeshift 这个功能。

刚刚特意研究了一下,看起来 timeshift 有点类似虚拟机的镜像快照,不过可能更省空间、更快速。

而 NixOS 的回滚机制,就是 NixOS 系统的任何变更,都会生成一个新的系统环境,同时旧的系统环境也会被保留,所有的历史环境都会被自动加入到 grub 启动项中,NixOS 的版本就相当于 timeshift 的快照。

所以单论回滚能力,NixOS 跟 timeshift 貌似确实没啥大的区别,timeshift 反而要更简单些,门槛低很多。

NixOS 更大的优势应该是它的声明式系统配置与版本锁文件带来的可复现性,这是指它是直接通过代码来描述操作系统,OS as Code ,从而可以直接用 Git 来管理这部分配置,这带来的好处有:

1. 可以很方便地分享自己的系统配置,当然也可以在 Github 上找到很多别人分享的配置可供参考。
2. 声明式配置给系统带来了高度便捷的可自定义能力,NixOS 可以非常简单地更换系统的各种组件。
1. 前面有 v 友的评论就是一个例证:「#12 nixos 切换不同桌面非常简单干净,而且很安全,我就经常 gnome/kde/sway 来回换着用。」
1. 只要对声明式配置的修改都及时提交到 Git 仓库,就不用担心系统无法还原,即使你固态硬盘挂了、备份没了甚至机器烧掉了,照样能在别的机器上几行命令基本还原出整个系统。
ryan4yin
357 天前
额楼上排版有点问题,缩进不对,将就着看吧。
Miy4mori
357 天前
我一直用 rpm 系的 fedora ,silverblue 这种同宗同源的无痛切换很爽,nix 这种自成一脉的学习成本有点高。
ryan4yin
357 天前
@Miy4mori 你提到的 sliverblue ,与前面 v 友提到的 microos ,都挺类似的,之前我都没听说过 emmm 涨见识了
Remmina
357 天前
@ryan4yin #16 感谢如此认真的回复!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/938569

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX