nixos 从0实现全集 梦中情os

梦中情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](https://dev.leiyanhui.com/nixos/1base-install]

启用 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
使用 Hugo 构建
主题 StackJimmy 设计