Nix
Nix 是一个声明式的包管理工具
包管理
nix-shell
会启动一个安装了指定包的 shell
通过:
1 | nix-shell --run {cmd} -I [--pure [--keep name]] -p {packages} |
在安装了 {packages}
的 shell 中运行 {cmd}
后退出 shell
--pure
将不继承父级环境,同时指定--keep name
将继承父级环境变量--run
若换为--command
则在运行后不退出 shell
或通过 shebang:
1 | #!/usr/bin/env nix-shell |
-I nixpkgs=...
被用来指定源的版本
还可以通过:
1 | nix-shell {path} |
将根据 {path}
指向的 .nix
文件启动 shell;
不指定 {path}
则根据当前目录下的 shell.nix
文件启动 shell
一个 shell.nix
:
1 | let |
https://wiki.nixos.org/ 提供了很多教程,用于编写 shell.nix
还有“最重要”的命令:nix-collect-garbage
,用于拯救硬盘空间
名词解释
来自 https://nix.dev/manual/nix/2.18/glossary
derivation
:构建任务store
: 运行时存储数据的地方,被存储其中的数据称为store object
Nix 语言
Nix 语言是一门用于包管理的 DSL
这部分记录了对 Nix 语言 2.18 版本的官方语言手册 的理解
-
语言手册的首页给出了一张 Cheat Sheet,可以清晰了解这门语言
-
Nix 语言被用来构建
derivation
,并运行对derivation
进行求值以获得构建结果 来源 -
函数都是 纯函数,除了:
-
在字符串内对文件系统路径求值
-
进行网络请求
以上两种情况会将返回值暂存至本地,然后返回暂存结果的路径
-