在 Nix/NixOS 上组织项目的最佳实践是什么?

使用 NixOS/Nix 的「最佳实践」是什么?继续讨论:

以 Python 为例,(理论上)有如下几个选择:

  1. 用 Nix 来安装 Python 的解释器,并用 Nix 来管理 Python 第三方模块
  2. 用 Nix 来安装 Python 的解释器,但用 uv/pixi 等 Python 的虚拟环境工具来管理 Python 第三方模块
  3. 用 uv/pixi 等 Python 的虚拟环境工具来管理 Python 解释器以及 Python 第三方模块

我的情况是 OS 还是 Arch 或者 Ubuntu,装了 nix-daemon 但我在个人目录下用 home-manager 配了一套环境 比较严肃的项目会用 flake ,配合 direnv 来自动激活环境

python 这种语言原生有靠谱方案(uv)的场景,俺是倾向用原生方案的,用 nix 徒增抽象没啥收益

但是像 go 这种就 nix 一把梭了,手搓或者用 flox/devbox/devenv 之类的东西包一下

是的,补充一下,用flake管理uv和原生依赖,python包还是uv管理,除非要用nix flake做分发

我是用home-manager安装一个python版本以及需要的依赖到用户环境,这个python只用来跑一些简单脚本。其他的项目,如果是需要开发则利用nix develop虚拟环境,再在这个虚拟环境下配置需要的python版本,并在这个虚拟环境下利用venv和uv,搭配direnv自动激活环境。如果只是使用项目,则把uv省略。以上都可以通过envrc(这俩天在tg群里了解到mise也可以,还没去研究)和emacs协作。

总之就是、依赖简单的,脚本简单的,扔给nix,复杂的还是nix develop和venv。

distrobox一个项目一个box

用 uv 关系项目的,用 nix 管 python 太痛苦了

I’ve found a setup with devenv and direnv work well for me. Devenv helps organizing all my languages and their associated package managers and direnv automatically switches to that environment whenever i change to that directory. This setup works well with emacs as well

2 个赞

关于 devenv 我有问题:

  1. 用了 devenv 还能给 Nix 打包软件么?
  2. devenv 是 cachix 的,使用会不会收费?

这几样 nix tool 都不收费,应该也不影响用 nix 打包(没打过,只是从体验上讲都是局部环境,不影响全局)

这几个二进制可能让人有点困惑,直接用 organist 来理解会比较容易,跟自己维护 nix develop 没太大区别