Nix 是惰性求值的函数式表达式语言。属性集和列表是配置中常见的数据结构,但函数、条件、递归与求值同样构成语言本身。
基础数据类型#
1. 属性集 (Attribute Sets)
这是 Nix 中最重要的数据结构。
{
name = "nixos";
version = "24.11"; # 版本号通常用字符串,24.11 是浮点数
isGood = true;
}- 访问属性:
mySet.name。 - 合并属性:使用
//运算符。
2. 列表 (Lists)
用空格分隔,不是逗号!
[ "git" "vim" "htop" ]3. 字符串 (Strings)
双引号用于单行,两个单引号用于多行(Indented Strings)。
"single line string"
''
multi
line
string
''- 字符串插值:使用
${variable}。
常用操作符#
//(Merge):将两个属性集合并。{ a = 1; } // { b = 2; }结果为{ a = 1; b = 2; }。.(Access):访问层级属性。pkgs.lib.mkIf。?(Has Property):检查属性是否存在。set ? name返回 true/false。
内置函数 (Builtins)#
Nix 提供了许多内置函数,在配置中极其常用:
import ./path.nix:加载另一个文件。builtins.elem x list:检查 x 是否在列表中。builtins.attrNames set:获取所有键名。pkgs.lib:虽然不是内置,但它是 NixOS 的核心函数库。lib.mkIf condition config:条件性开启配置。lib.mkMerge [ ... ]:合并多个配置片段。
避坑指南:分号 ;#
在 Nix 中,属性定义的末尾必须有分号。
# 错误
{ a = 1 }
# 正确
{ a = 1; }参考与延伸
根据技术笔记重新整理,示例使用通用名称。