OFFSET偏移
← 文章目录OFFSET / FIELD NOTESNO. 021

Nix 语法:属性集、列表与内置函数

掌握常见数据类型、属性访问和配置表达式的基本写法。

所在专题Nix 语言与构建模型 ↗
约 3 分钟阅读开始阅读

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 提供了许多内置函数,在配置中极其常用:

  1. import ./path.nix:加载另一个文件。
  2. builtins.elem x list:检查 x 是否在列表中。
  3. builtins.attrNames set:获取所有键名。
  4. pkgs.lib:虽然不是内置,但它是 NixOS 的核心函数库。
    • lib.mkIf condition config:条件性开启配置。
    • lib.mkMerge [ ... ]:合并多个配置片段。

避坑指南:分号 ;#

在 Nix 中,属性定义的末尾必须有分号。

# 错误
{ a = 1 }

# 正确
{ a = 1; }

参考与延伸

  1. NixOS 手册 ↗
  2. Nix 语言手册 ↗

根据技术笔记重新整理,示例使用通用名称。

沿专题继续阅读

Nix 语言与构建模型

  1. 01Nix 与 NixOS:存储、回滚和声明式思维
  2. 02Nix 语法:属性集、列表与内置函数
  3. 03Nix 函数与作用域
  4. 04Nix 属性集:递归与合并
  5. 05Derivation:从表达式到构建产物
CONTINUE READING / 下一篇Nix 函数与作用域

辨认 let、inherit、with 和函数参数中每个变量的来源。