小类随手记

nixos 从0实现全集 梦中情os

新版入门指南NixOS 入门指南:从新手到高手的渐进式之路(第二版)

梦中情os

nixos的几个特色

  • 滚不死的系统 弄不坏,非常强壮稳定。且回滚和更新都更加方便。
  • 应用可以多版本共存
  • 一个套配置文件从多机上包括别的发行版随时复现
  • Nix包数量非常多,并不仅限官方的8万包 并不比arch的aur,各有千秋
  • nix包管理同时支持macos wsl和 非nixos的linux发行版本
  • 开发环境可以多版本 多平台 多项目 相互独立和隔离
  • flake.nix 可以提供高度一致的环境/系统 复现能力
  • nix home manager 可以集中化管理多数软件(几乎是全部)的配置文件/配置项,并提供非常高的可复现能力
  • nix-shell 可以沙箱临时测试一个软件,随后自动或手动gc掉
  • 远程部署工具 deploy-rs NixOps 等
  • 轻松在别的发行版上原地偷家切换到nixos
  • 别的发行版可以引入nix包管理,复用nixos的配置文件
  • 支持的cpu架构很多,包括 arm aarch risc mips 等
  • 纯净,你可以把/挂载到内存 只持久化 /nix /home /var 等个别目录
  • nixos是不可变系统,优点不用展开说了。目前来看,这很大可能是操作系统以后的趋势

由此 可以延申很多场景

比如 我想体验一下刚刚发布的 kde plasma 6 ,发现目前版本插件兼容很差 并不值得我升级,所以体验了一会儿后 马上回到 我干干净净的 kde plasma 5。
比如 我想 neofetch 截个图装个x, 但是我平时根本不需要它 nix-shell -p neofetch 截图完毕 关掉窗口 neofetch 就无了。同样我想临时装一个浏览器测试一下web网页兼容性,或者测试一个网站无cookies新浏览器指纹的效果 我平时使用edge,那么我现在只需要安装一个firefox就好了。
比如 我平时使用zsh的自定义配置,那么我可以写到nix中,那么在任意一台机器上 安装后 zsh就按照我习惯部署好了。
比如 我有多台云主机,我可以在我本机编译配置好环境,然后云主机全部从初始系统切换到nixos,而且我本地直接推送到云主机二进制上去。这和k8s docker 并不冲突,只是多了个运维选择。

为什么不选择nixos

nixos也有很多缺点

  • 入门较难:
    • linux新手基本搞不定,小白想都别想。
    • nix语言虽然简单,但是nixos的文档和wiki较为分散且混乱,chatgpt给你的答案大概率都是错的。你可能非常需要社区和电报群的帮助!
    • nixos 有 传统configuration.nix flakes.nix home-manage.nix 还有类似apt yum包管理 以及临时使用一个软件的方式,还有 nix develop/profile切换/devShell/mkShell等等功能,非常容易迷糊。
    • 因为nixos的配置/包管理/环境管理 方式太多,导致你直接复制别人的nix代码大概率是无法直接使用的,你需要学nix语法。
    • 虽然nixos包数量不少,但是覆盖面不高,很多软件都不提供nixos下的托管安装,一些小众软件 需要自己写nix构建。部分软件需要较为复杂的配置,比如绕过发行版检测,有版权问题的,强依赖fhs文件系统的
    • 某些软件的打包会比较复杂,比如todesk,他的控制端也需要启动一个systemd。某些小地方处理起来比较麻烦,比如nautilus默认右键打开shell 是gnome-terminal,如果我们要替换为其他终端,常规操作系统下直接替换掉/usr/bin/下的文件即可,但是nixos不可以这样操作。
    • 对外网的依赖度比较高,国内网络环境大家都懂的,如果你没有梯子即便是勉强安装上一个基础系统,后面使用nixos会非常不爽。另外国内的镜像源 目前(20240312)清华的是崩的状态 ustc目前包不全,好像也经常限速。 sjtu目前是限速并经常断掉的状态,还有一些包是写死的被墙掉的url,这些地址在国内往往无法访问或者速度非常慢。
    • 硬盘占用,nixos会比常规发行版需要的空间更多一些,基本的nixos系统包含gnome和日用的基础软件,基本上需要8-15G左右的磁盘空间(btrfs 压缩等级5)。 不过一般/ 或者/nix 预留30-60G 也足够了。

对nixos的误区

  • nixos可以运行古董软件,是可以,但是新手别想,如果没有别人写好的nix配置,你需要手撸nix。
  • nixos不支持依赖fhs文件结构的软件,并不是。nixos可以虚拟一个fhs环境给这些软件用,注意不是容器。除非某些软件恶意不兼容这种方式,否则都是可以正常运行的。
  • nixos可以100%复现,错误。nixos只是相对来说更容易100%复现,实际上需要一些额外的手段才能保证100%。
  • nixos很难,也没那么难。它的安装和基本使用还是很简单的。难的是彻底弄明白。
  • docker可以搞定的为什么要nix,虽然他们有一些地方很接近,但是完全不是一回事,各有所长。比如nix和docker都可以复现运行环境,但是nix并不是完全隔离的,可以访问到外部资源,另外运行ui软件包括访问硬件资源(包括显卡加速)也更方便。nix也可以管理docker可以替代dockerfile,但是docker擅长的领域就不是nix的能搞定的。

为什么说nixos是梦中情os

这句话仅仅针对对linux有一些基础,并且有时间精力和兴趣去学习一个除了nix/nixos 没啥别的卵用的nix语言,并愿意折腾nixos的人。
那么nixos的缺点,你都可以假装不存在。只看它的优点的话,真香!

日志记录

基本安装

使用 configuration.nix 安装一个带ssh和常用工具的 nixos

基本安装 configuration

启用 flake

基本安装 configuration flake

启用 Home Manager

基本安装 configuration flake

目录结构 和最终配置文件

基础 目录结构 和最终配置文件

kde桌面

kde桌面简单体验

gnome桌面

gnome桌面简单体验

清理磁盘

清理磁盘

关于nix unstable

启用了flake和 Home Manager的情况下切换到unstable

清理磁盘命令

清理磁盘命令

flutter开发环境

flutter+idea开发环境

golang开发环境

golang+goland开发环境

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Theme Stack