这是一篇关于 Nix Flakes 的文章,主要内容如下:
- 重写文章并介绍 Flakes:作者基于Learn Nix the Fun Way on fzakaria.com进行了重写,以 Nix 用户的角度展示 Flakes 的用法,虽增加了步骤和复杂度,但仍有价值。
单个示例:what-is-my-ip 脚本:通过一个获取 IP 地址的 shell 脚本
what-is-my-ip
,展示了在 Nix Flakes 中的实现。包括使用 Nixpkgs 的 trivial builders 构建 Nix 派生(构建配方),以及在不同系统上的构建和运行。- 保证可移植性:Nix 保证了脚本的可移植性,通过固定依赖来自 NixOS/Nixpkgs 24.05 版本的包来实现。
- 生成依赖图:可以将构建的包放入 Nix 存储中,生成依赖图,如
nix-store --query --graph $(readlink result) | nix shell nixpkgs#graphviz -c dot -Tpng -o what-is-my-ip-deps.png
。 - 开发者环境:添加开发者环境,包含新工具,如
devShells
,可以创建可重现工具的开发环境,且哈希值与之前构建的相同。 - 部署:可以进行二进制或源代码部署,将必要的
/nix/store
路径复制到其他安装了 Nix 的机器上,或者使用 Nix 创建 OCI 兼容的镜像,如docker load < $(nix build.#container --print-out-paths)
,还可以创建包含所需程序的可重现操作系统,如 NixOS VM。
- Flakes 作为各种包管理:Flakes 可以在任何地方使用,如运行 Flake 的包
nix run git+https://git.lyte.dev/lytedev/learn-flakes-the-fun-way
,进入 Flake 的开发环境nix develop git+https://git.lyte.dev/lytedev/learn-flakes-the-fun-way -c $SHELL
,加载 Flake 的 Docker 镜像并运行docker load < $(nix build git+https://git.lyte.dev/lytedev/learn-flakes-the-fun-way#container --print-out-paths)
,运行 Flake 的 NixOS 配置作为虚拟机nixos-rebuild build-vm --flake git+https://git.lyte.dev/lytedev/learn-flakes-the-fun-way#default
等。 - Flakes 作为输入:Flakes 可以将其他 Flake 作为输入,实现很好的组合。可以使用作者提供的模板生成自己的 Flake,并添加教程中的包。
- 其他 Flakey 工具:可以利用
direnv
风格的设置,在进入目录时进入开发环境,Flakes 还有checks
用于 CI 确保 Flake 能够构建所需的包或检查代码格式等。 - 结论:希望展示的 Nix 的有趣用法能激励读者克服困难,在 Nix Flakes 的世界中找到乐趣和价值。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。