2026-04-14 17:01:39 +08:00
2026-04-14 17:01:39 +08:00

Nix Config

使用 nix-darwin + NixOS-WSL + Home Manager + Flakes 声明式管理三台设备的系统配置。

设备

设备 平台 Flake 目标 主机名
Mac Mini aarch64-darwin mac-mini awesome-mac-mini
MacBook Air aarch64-darwin macbook-air awesome-macbook-air
Windows PC (WSL) x86_64-linux wsl awesome-wsl

快速开始

macOS (Mac Mini / MacBook Air)

  1. 安装 LixNix 的社区分支,nix-darwin 官方推荐):
curl -sSf -L https://install.lix.systems/lix | sh -s -- install
  1. 克隆仓库并首次构建:
git clone <repo-url> ~/nix-config
cd ~/nix-config
# 首次(nix-darwin 尚未安装):
sudo nix run nix-darwin -- switch --flake .#mac-mini
# 之后日常重建:
sudo darwin-rebuild switch --flake .#mac-mini

WSL (Windows PC)

  1. 安装 NixOS-WSL
wsl --import NixOS C:\wsl\nixos nixos-wsl.tar.gz
wsl -d NixOS
  1. 首次初始化(全新的 NixOS-WSL 没有 git,需要借助 nix-shell 临时引入):
nix-shell -p git --run "git clone <repo-url> ~/nix-config"
cd ~/nix-config
sudo nixos-rebuild switch --flake .#wsl

首次 rebuild 完成后 gitjust 等工具会由配置声明安装,此后可直接使用 just rebuild 重建。

仓库结构

├── flake.nix                  # 入口:输入源 + 输出配置
├── flake.lock                 # 依赖锁定文件
├── hosts/
│   ├── mac-mini/default.nix   # Mac Mini 特定配置
│   ├── macbook-air/default.nix# MacBook Air 特定配置
│   └── wsl/default.nix        # WSL 特定配置
├── modules/
│   ├── darwin/default.nix     # macOS 模块(Homebrew、系统偏好等)
│   ├── nixos/                 # NixOS 模块
│   │   ├── default.nix        # 系统包、区域、用户
│   │   └── docker.nix         # Docker 配置
│   └── shared/                # 共享模块(Nix 设置)
├── home/                      # Home Manager 配置
│   ├── default.nix            # 入口 + 用户级包 + Catppuccin 主题
│   ├── dev/                   # 开发工具
│   │   ├── neovim.nix
│   │   ├── languages.nix      # 语言运行时、LSP
│   │   └── git.nix
│   └── shell/                 # Shell 配置
│       ├── fish.nix           # Fish shell
│       ├── ghostty.nix        # Ghostty 终端(仅 macOS
│       ├── starship.nix       # Prompt
│       └── tools.nix          # fzf, atuin, zoxide 等
├── lib/default.nix            # 构建辅助函数
├── overlays/                  # 自定义包覆盖
└── pkgs/                      # 自定义包

配置层级hosts/*(主机特定) → modules/*(平台模块) → home/*(用户级,跨平台共享)

日常使用

项目提供 justfile,首次 rebuild 后即可使用:

just rebuild <host>   # 重建系统(自动选择 darwin-rebuild / nixos-rebuild
just update           # 更新所有 flake 输入
just up <input>       # 更新单个输入,如 just up nixpkgs
just check            # 检查配置是否能正常 evaluate
just clean            # 清理旧 generation 并回收空间
just rollback         # 回滚到上一个 generation(仅 NixOS
just history          # 查看系统 profile 历史
just show             # 显示 flake 输出

注意just clean 仅清理用户级 generation。NixOS 上如需清理系统级旧 generation,需要 sudo nix-collect-garbage -d

Shell

使用 Fish 作为默认 shell,搭配:

  • Starship — 跨平台 prompt
  • Atuin — shell 历史搜索
  • Zoxide — 智能 cdcd = zoxide, cdi = 交互选择)
  • FZF — 模糊搜索(Ctrl-R 历史, Ctrl-T 文件, Alt-C 目录)
  • Direnv — 自动加载项目环境
  • Catppuccin Mocha — 统一主题

自定义

  • 添加 fish abbreviation: 编辑 home/shell/fish.nix 中的 shellAbbrs
  • 添加包: 编辑 home/default.nixhome/dev/languages.nix
  • 添加 Homebrew cask: 编辑 modules/darwin/default.nix 中的 homebrew.casks
  • 查包名: nix search nixpkgs <关键词>search.nixos.org

Secrets1Password CLI

项目使用 1Password CLIop inject 在 Fish shell 启动时注入环境变量(如 API Key),而非 sops-nix。

工作原理home/shell/fish.nix 生成模板文件 ~/.config/op-env/env.tpl(仅包含 op:// 引用,无真实密钥,可安全提交),每次打开交互式 shell 时自动调用 op inject 解析模板并 source 到环境中。

前置条件:需要设置 OP_SERVICE_ACCOUNT_TOKEN 环境变量来认证 1Password CLI。建议将其写入 ~/.config/fish/local.fish(该文件被 gitignore,不会提交):

# ~/.config/fish/local.fish
set -gx OP_SERVICE_ACCOUNT_TOKEN "your-service-account-token"

Service Account Token 可在 1Password 开发者工具 中创建管理。若未设置该 tokenop-env 会静默跳过,不影响 shell 正常使用。

S
Description
派生自imbytecat 的 nix-config
Readme 414 KiB
Languages
Nix 90.6%
Just 9.4%