NixOS可以理解为像emacs一样全部在一个配置文件里配置吗?
正在用,但是感觉二进制源有问题,我要装libreoffice,一直提示有的包不存在。我用的是清华源。
用官网源的话,还得配代理,感觉不太爽。
优点:安装卸载软件不会有残留,比如用了grub,想换systemd-boot,或者用了gnome,相换kde,系统层面不会有配置/文件遗留下来。当然home目录下还是有的。
缺点:目前还不能算是一个完善的发行版,缺少发行版的核心逻辑。其实就是文档不好。
嗯 dae 一直在用,我软路由就是 NixOS + dae 整的。
还好,你不打包的话比较简单。
要打包的话,就比较难。一个是需要看 nix,还需要理解被打包的语言。 但我们用的软件可能来自不同语言,不好处理。
还有一些硬伤,比如配置越来越多,运行的时间会变长,你改一个颜色,要等半分钟一分钟才能看到效果。
就是调试会很慢,经常变动的东西也不适合 nix。
同理,对硬件要求高,起码有一台比较快的电脑跑计算。
看上面就知道,要在 nix 中实现其它常规 Linux 中的事,可能会花费更多的时间。
但是维护就比较简单,时间成本就会收回来。你可以认为维护是 NixOS 的唯一优点。
因为个人的 Linux 维护一般是每个人自己在负责,如果你意识到维护是一件多麻烦的事,就可以考虑 NixOS。
个人电脑没有必要, 卖点的reproducibility根本用不上
而且在nixos下想做任何一个dirty hack都很痛苦
Nix 的心智负担只有部署 5 台机器以上才会摊平到可以接受的程度。如果你只管理两三台电脑,不需要上 Nix 。
反过来说当你熟悉 Nix 后,你会更加积极地买新电脑 / VPS(
从nixos切到pop os? pop os我几乎没觉得跟Ubuntu有啥区别
背后是 System76 公司,做笔记本电脑,还有 Redox OS,用 Rust 写的那个。最近又搞了 Cosmic 桌面环境。
楼上主要都在说布署、可复用这些问题。 对个人来说还有一个很重要的点,也可以算是维护的一部分,就是nix打包了很多软件的工具,比如说你vim、emacs插件都可以用nix来管理,python、lisp、haskell这种语言的库也可以用nix来管理。而nix本身又统一管理了所有的文件。当然这些都是有代价的,可大部分场景而言可以有效减少每个工具用各自管理工具带来的混乱。
在开发方面,相当于有一个很轻量的、基于文件系统的小沙盒。在个人使用上,相当于用一个工具代替多个工具的常用功能。
其实没太大用,你不用 cargo, go mod, py venv, cabal/stack 等等却用 nix?
我觉得用 nix 作为包管理,主要解决的是 vim/emacs/lisp/r/haskell 没有啥好用的包管理器的问题,对于 rust/go 这种有成熟的官方包管理器的语言,自然没必要用 nix 弄,吃力不讨好。
你列举的都有成熟的包管理工具的。
你可能不明白,nix 本身也可以用这些包管理器生成的文件去创建一个环境。
nix 对每个语言的支持虽然不一样,但是可以简单认为 nix 是一个超集。
比如你用 python 313 开发,测试 python 312 311 兼容性,生成 docker image 什么的,随便装点什么工具。
当然你不用也没什么,其它开发者不会 nix 也没事。只是用 nix 可能会节约一些时间。
请问一下,我目前在用archlinux,唯一的问题就是感觉好多软件删除之后都有残留文件。了解了下nixos听说每次启动都相当于新系统。有点想尝试。但有点疑问,我看到官网有很多neovim的配置,如lsp。是不是我迁移到nixos需要重写所有的neovim配置啊?那有些插件并没有怎么办呢?还听说存储越用越大,垃圾回收可以让他的存储保持在一个稳定水平吗?
差不多需要重写配置,你可以参考一下我的neovim配置,GitHub - jinzhongjia/neovim-config: Out-of-the-box neovim configuration
有对neovim做适配(中间穿插包了一层,我在nixos上会设置环境变量 IsNixOS
),然后识别到有环境变量就会切换到nixos的配置模式,例如不会尝试主动使用mason安装lsp和相关工具,如果检测到当前的环境包含某些工具则自动设置它(例如lspconfig的设置,conform的设置)
可以设置垃圾回收自动删除很久之前的版本,而且还支持自动升级(但是我没试过自动升级) 另外要有心理预期,nixos的使用成本很高,不想archlinux那样无脑转aur的包就行
当然也有nixvim这个工具(使用nix来配置vim或者neovim),我尝试过,它的灵活性和直接使用neovim配置比起来低很多
在NixOS里,有几个目录的概念可以疏理一下。
/
系统根目录。除了以下提到的目录,要么是只读的,要么可以假定为每次重启或应用配置会重新生成。 默认配置实际上不会,但可以这么理解
/var/lib
系统程序数据目录。比如你 enable 一个数据库,写入数据,再 disable 掉。数据库程序已经删干净了(nix-collect-garbage 之后),但是写入的数据会在 /var/lib
中的一个子目录里,你可以再次 enable 直接用,也可以手动删除子目录。
/home/{用户名}
里面是用户目录。如果没有使用 home-manager
,NixOS 基本上不会动用户的 home 目录。也就是说对于像 Neovim 或 Emacs 这样的用户程序,只会在用户 home 目录里存配置和数据的, 在 NixOS 里面就跟之前一样用也是完全没问题的 。如果想用上 home-manager
的声明式配置,也可以等熟悉以后渐进式改配置。
/home/{用户名}/.config
XDG 应用配置目录。如果使用了 home-manager
,这里面的大部份配置都将通过 home-manager
生成。
/home/{用户名}/.local/share
XDG 应用数据目录,与 /var/lib
类似,一般无论 NixOS
还是 home-manager
都不会接管应用数据目录。
感觉错了吧,一个包管理器不应该这么弱,除非是 /var 下的 data 或者 /etc 下你改的配置,这个不应该删除。
桌面的话就 Nix => Home-manager => NixOS。
服务器或者虚拟机就直接用 NixOS。
「每次启动都相当于新系统」,用了 impermanence 之类的吧,类似 windows 上的还原精灵。
「存储越用越大」,这叫我怎么说,如果你不断加各种 GUI,当然会用很多磁盘,用 CLI 会少很多,不改不会增加。NixOS 还需要一些磁盘保留前几次用过的文件,好让系统复原。
neovim 之类的就尽量用 nix 安装二进制文件,其它无所谓。
一般,home-manager 是桌面的核心,服务器是 NixOS。
home-manager 写的差不多了可以去其它 Linux 分支转转,好用的话就用下去,省得玩 NixOS。
桌面的 NixOS 算是锦上添花,写完了可以找点二手板子玩 NixOS 服务器。
这东西你写多少是多少,没时间玩也没什么,随便一扔就完了。喜欢用命令就用 Nix,不喜欢 NixOS 单用 home-manager 也没事。