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

NixOS 学习路线:基础、Flakes、用户配置与进阶

保存六个学习模块、语言生态和进阶资源,并给出清晰的前后依赖。

所在专题Nix 命令与长期维护 ↗
约 7 分钟阅读开始阅读

模块一:基础认知#

1.1 NixOS 是什么 & 设计哲学

  • 声明式 vs 命令式系统管理
  • 函数式包管理的含义
  • /nix/store 的工作原理
  • 与 Arch/Debian 的根本差异

资料:

1.2 Nix 语言基础

  • 基本类型:string, int, bool, list, attrset
  • let ... in、with、import
  • 函数语法(x: x + 1)
  • 路径类型与字符串插值

资料:

本地构建文档

在可信的 nix.dev 源码 checkout 中,先按仓库版本选择开发环境,再执行构建:

cd /path/to/nix.dev
direnv allow    # 阅读 .envrc 后授权;或使用仓库支持的 nix-shell
make html
xdg-open build/html/index.html

构建入口与输出路径以 checkout 的 README/Makefile 为准。

模块二:系统配置#

2.1 configuration.nix 核心结构

  • environment.systemPackages
  • services.* 启用系统服务
  • users.users.* 用户管理
  • networking, time, i18n 基础配置
  • nixos-rebuild switch / boot / test 的区别

资料:

2.2 包管理

  • nix search、nix-env(legacy)vs declarative
  • Unfree 包的开启方式
  • Overlays 简介:覆盖/修改已有包
  • nix-shell -p 临时环境

资料:

2.3 Generations & 回滚

  • 成功构建与 profile 切换形成可恢复配置世代;求值检查不等于创建或激活世代
  • GRUB 多 generation 启动
  • nix-collect-garbage 清理旧 generation

资料:

模块三:Flakes(常用工作流)#

3.1 Flakes 是什么

  • 解决了什么问题(reproducibility, nix-channel 的缺点)
  • flake.nix 结构:inputs / outputs
  • flake.lock 版本锁定

3.2 启用 Flakes & 迁移

  • 在 configuration.nix 启用实验性功能
  • 用 nixos-rebuild switch --flake .#workstation 构建
  • 管理多机器配置

资料:

模块四:Home Manager#

4.1 Home Manager 简介

  • 系统配置 vs 用户配置的边界
  • standalone 模式 vs NixOS module 模式
  • home.nix 基本结构

4.2 常见用途

  • 管理 dotfiles(.zshrc, nvim, git 等)
  • programs.* 直接配置应用
  • home.file.* 声明式 symlink

资料:

模块五:开发环境#

5.1 nix-shell & nix develop

  • shell.nix 编写
  • flake.nix 的 devShells output
  • 与 direnv 集成(use flake / use nix)

5.2 语言生态

  • Python:python3.withPackages、uv 与 nix 的边界问题
  • Rust:fenix / rust-overlay
  • C/C++:pkgs.mkShell + stdenv

资料:

模块六:进阶主题(按需)#

主题 简介 资料
NixOS Modules 系统 如何写自己的 module Module System deep dive
Cross-compilation 交叉编译嵌入式目标 Nixpkgs Cross Manual
Hydra / CI Nix 原生 CI 系统 Hydra Docs
NixOS on ARM / 嵌入式 RPi, STM32 sysroot nix-community/nixos-hardware
Secrets 管理 agenix / sops-nix agenix / sops-nix

推荐学习顺序#

模块一 → 模块二 → 模块三(Flakes)
                ↓
           模块四(Home Manager)
                ↓
           模块五(Dev Env)
                ↓
        模块六(按项目需求选)

综合资源#

学习中的验收边界#

基础认知先连接 /nix/store、Nix 语言与系统配置;随后理解 Flake 输入锁定、Home Manager 用户边界,再按项目学习开发环境与 ARM、CI、交叉编译、Secrets。build 只构建,test 激活但不设启动默认,boot 设下次启动,switch 即时激活并设默认;这些阶段要分别验证。参考资源中的第三方教程与观点保留原链接,不能替代当前锁定版本的选项和源码。

参考与延伸

  1. Nix 语言教程 ↗
  2. NixOS 手册 ↗
  3. Home Manager 手册 ↗

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

沿专题继续阅读

Nix 命令与长期维护

  1. 01NixOS 学习路线:基础、Flakes、用户配置与进阶
  2. 02Nix 命令详解:构建、环境、profile 与系统
  3. 03nh:统一 Nix 系统、用户和清理工作流
  4. 04垃圾回收、存储优化与回滚世代
  5. 05NixOS 配置组织、维护与排错实践
CONTINUE READING / 下一篇Git 的底层模型:对象、快照与引用

用快照、对象数据库和引用理解 Git 操作改变的内容。