recover-nixos-config · git:20260606.7dad578 · 2026-06-06 · sha256 830b15329776fac9

recover-nixos-config git:20260606.7dad578A

Immutable. This exact content is served forever at /api/v1/blob/830b15329776fac9.

---
name: recover-nixos-config
description: 当用户误删 /etc/nixos 目录下的文件(flake.nix、flake.lock 等)时,从 Nix store 中恢复。
---

# 恢复误删的 /etc/nixos 文件

当 `/etc/nixos` 下的文件被误删,但 NixOS 系统此前已从该配置成功构建过,
则 flake 源码(包括 flake.nix、flake.lock 及所有本地模块)仍保留在 Nix store 中。
任何构建文件 — flake.nix、flake.lock、boot.nix、system.nix、home.nix 等 — 均可恢复。

## 第 1 步:在 Nix store 中定位 flake 源码

Nix store 中保留了每次成功执行 `nixos-rebuild` 的 flake 源码快照。
按主机名搜索:

```bash
grep -rl '<HOSTNAME>' /nix/store/*-source/flake.nix 2>/dev/null
```

源码目录命名为 `*-source`,包含构建时 `/etc/nixos` 中的全部文件:
- `flake.nix`
- `flake.lock`
- 所有本地 `.nix` 模块(boot.nix、home.nix、system.nix 等)

## 第 2 步:确认最新的 generation

在第 1 步的候选中找出最新 generation 的源码。最新的源码通常具有最大的
store path hash。如不确定,可将各候选的 `flake.nix` 与 `/etc/nixos` 中
尚存的文件对比 — 正确的源码会引用相同的本地模块
(如 `./boot.nix`、`./system.nix`)。

列出所有历史 generation:

```bash
nixos-rebuild list-generations
```

与当前 generation 匹配的源码目录包含构建当前运行系统的配置。

## 第 3 步:验证内容

检查 `flake.nix` 的第一行以确认是正确的配置:

```bash
head -1 /nix/store/<hash>-source/flake.nix
```

列出源码中的所有文件:

```bash
ls /nix/store/<hash>-source/
```

## 第 4 步:恢复已删除的文件

将需要的文件复制回 `/etc/nixos/`。仅恢复丢失的文件:

```bash
cp /nix/store/<hash>-source/<filename> /etc/nixos/<filename>
```

示例 — 仅恢复 flake.nix:

```bash
cp /nix/store/<hash>-source/flake.nix /etc/nixos/flake.nix
```

恢复多个文件:

```bash
cp /nix/store/<hash>-source/flake.nix /etc/nixos/flake.nix
cp /nix/store/<hash>-source/flake.lock /etc/nixos/flake.lock
cp /nix/store/<hash>-source/home.nix   /etc/nixos/home.nix
```

## 第 5 步:验证

```bash
nix flake check /etc/nixos
```