OS as Code - 我的 NixOS 使用体会

272 天前
 ryan4yin

我 23 年 4 月开始尝试使用 NixOS ,而现在是 2024 年 2 月,距离我入坑 NixOS 刚好 10 个月,我当初写的新手笔记已经获得了大量好评与不少的赞助,并成为了整个社区最受欢迎的入门教程之一。自 2023 年 6 月我为它专门创建一个 GitHub 仓库与单独的文档站点以来,它已经获得了 1189 个 stars ,除我之外还有 37 位读者给它提了 PR:

那么作为一个已经深度使用 NixOS 作为主力桌面系统接近 10 个月的熟手,我在这里也从另一个角度来分享下我的入坑体会。

https://thiscute.world/posts/my-experience-of-nixos/

3590 次点击
所在节点    Linux
36 条回复
ryan4yin
271 天前
@xiaokanhongchen 我这帖子最前面就给了我写的的入门教程啊,如果你想试试 NixOS 的话不妨一看。
不过只面向 nix 用户的教程,目前就只有官方的 nix.dev 了,我这份可以用做参考。
xiaokanhongchen
271 天前
@ryan4yin 看了一遍,准备在硬盘上装个试试。我简单的理解了一下,类似 docker-compose.yml 配置一样,配置好,容器启动就跟你想要的一样,是不是 nix 也是类似的?也就是一份配置文件,走到哪里安装好都一样的系统和软件配置?
ryan4yin
270 天前
@xiaokanhongchen 是这样的,我入坑时在一台虚拟机上花了 20 天,把我之前的 EndeavourOS + i3wm 配置完全迁移到了 NixOS 上,然后在 PC 上装了个全新的 NixOS ,改一点硬件相关的配置,再一行命令部署,就得到了跟我虚拟机完全一致的环境。
这份教程最初就来自我那 20 天的入坑学习笔记。
licolicoli
270 天前
@ryan4yin 我当时是在 Pixelbook 上装的 NixOS, 因为音频有问题,需要为 alsa-ucm-conf 加上特定的配置文件,没记错的话是在 overlay 里通过修改 installPhase 的方式把文件复制进去的,似乎也只有最后一种方法?

配置附上: https://docs.chrultrabook.com/docs/installing/distros.html

另外我感觉 NixOS 是有针对各种不同的机器作优化配置,例如这里的 [nixos-hardware]( https://github.com/NixOS/nixos-hardware),但似乎 Pixelbook 的配置是个空壳。
ryan4yin
270 天前
@licolicoli 听起来你肯定用错方式了,你需要的只是加个配置文件,不是重新编译,因此非常大的概率你可以通过方法一或者方法二搞定这件事。
ryan4yin
270 天前
@licolicoli 你提供的文档我看了,它使用的确实是 overlays ,但这不是最佳方案。

能避免大量编译的写法是这样的,把它文档中的第二部分 overlays 删掉,再把第三部分的代码改成这样:

```nix
# configuration.nix
{
# ...

environment = {
systemPackages = [
pkgs.alsa-ucm-conf.overrideAttrs (old: {
wttsrc = (fetchFromGitHub {
owner = "WeirdTreeThing";
repo = "chromebook-ucm-conf";
rev = "484f5c581ac45c4ee6cfaf62bdecedfa44353424";
hash = "sha256-Jal+VfxrPSAPg9ZR+e3QCy4jgSWT4sSShxICKTGJvAI=";
});
installPhase = ''
runHook preInstall

mkdir -p $out/share/alsa
cp -r ucm ucm2 $out/share/alsa

mkdir -p $out/share/alsa/ucm2/conf.d
cp -r $wttsrc/{hdmi,dmic}-common $wttsrc/GENERATION/* $out/share/alsa/ucm2/conf.d

runHook postInstall
'';
})
];
sessionVariables = {
ALSA_CONFIG_UCM2 = "${pkgs.alsa-ucm-conf}/share/alsa/ucm2";
};
};
}
```
ryan4yin
270 天前
@licolicoli V2EX 的代码渲染有点糟糕,你 copy 过去自己格式化一下吧...
ryan4yin
270 天前
测了没问题的话,可以提个 PR 给他们优化一下,它这示例里还有多余的反斜线啊。
licolicoli
270 天前
@ryan4yin 多谢老哥!开学这几天比较忙,我过几天试一下。看来还是要多学习啊。
tywtyw2002
269 天前
nix-darwin 目前有工具可以把 macos 上当前的配置导出成 nix-darwin 配置吗?

还是说 nix-darwin 目前要从 0 开始配?
ryan4yin
268 天前
@tywtyw2002 目前 NixOS 都没有这种工具,更别说 nix-darwin 了。
你需要自己研究清楚系统里到底装了啥,再手动编写对应的 nix 配置。
如果你用的是 homebrew 的话,它能导出 brewfile 供参考。
tywtyw2002
268 天前
@ryan4yin linux 好说 系统没什么设置,主要设置还是 wm 那些,用 dot 就行了。
mac 的话用个 3-4 年,你连设置了什么都不知道了。
ryan4yin
268 天前
@tywtyw2002 所以才需要 nix-darwin 这种工具
Sliverburger
226 天前
最近被同事种草了 Nix ,我看了下 Nix 主要还是包管理和配置管理吧?理论讲应该可以使用 Archlinux 搭配 Nix 做包和配置管理 而不用 NixOS 是不是?
ryan4yin
225 天前
@Sliverburger Nix 社区这么用的人挺多的,除 NixOS 外用户最大的群体应该是 nix-darwin ,也就是在 macOS 上用 Nix 包管理器。
排名第三的应该就是想在非 NixOS 上用 Nix 的群体。
ryan4yin
225 天前
@Sliverburger 不过我得说 NixOS 才是完全体,在其他 OS 上用 Nix 还是差了点意思。
所以从来没在别的 Linux 发行版上用过 Nix ,入坑后就一直 All in NixOS 了.

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

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

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

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

© 2021 V2EX