# system-clone **Repository Path**: Limoux/system-clone ## Basic Information - **Project Name**: system-clone - **Description**: Omarchy 跨硬件一键还原配置包(装完自动拉起) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-10 - **Last Updated**: 2026-09-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # system-clone — 本机桌面配置一键还原包 把本机(Omarchy / Arch + Hyprland)的**完整桌面定制**复刻到新主机:主题、顶栏、菜单、 voxtype 中文语音、AI 语音助手「你好」、热键、热防护等,一条命令还原。 ## 目标环境 - **Omarchy(Arch 系,Hyprland/Lua 配置)** 已装好并能进桌面。 - 有 `yay`(AUR 助手)、能联网。 ## 🚀 装到一台新机器(两条路,按需求选) ### 路线 A — 零人工(推荐):用定制 ISO 装系统 适合**全新装机**(含重装)。ISO 里已烘入自举装置:系统装完、首次进桌面时**自动**拉本仓库 并跑 `install.sh`,**全程不用敲命令**。 1. 把定制 ISO 写到 U 盘(6.3G): ```bash sudo dd if=$HOME/omarchy-build/omarchy-final.iso of=/dev/sdX bs=4M status=progress oflag=sync # ^^^ 换成你的 U 盘设备(务必确认!写错盘会毁数据) ``` 或直接把 ISO 拷进 Ventoy U 盘(免 dd,最省事)。 2. 新机 U 盘启动 → `Press Return to Start Install` → 按向导填:用户名 / 密码(同时是 LUKS 口令)/ 跳过姓名邮箱 / 时区 / **选安装盘**。 3. 装完重启 → 输 LUKS 口令 → 进桌面后**什么都不用做**。 它会自己:等网络 → clone Gitee 仓库 → 装 179 个官方包 + 8 个 AUR + voxtype 模型 → 应用主题/配置 → 自检。 4. 完成标志:`~/.local/state/sysprovision.done` 出现,日志 `~/.local/state/sysprovision.log` 末尾 显示 `verify 全通过 ✅`。 实测(全新 40G VM,4 核/6G):**装机 5.5 分钟 + 自动还原约 40 分钟**(AUR 含 gtk2/wine 源码编译,机器越慢越久)。 **新机要求**:联网(全程在线)、磁盘 ≥40G(源码编译吃空间)、内存 ≥4G(2G 会 OOM 编译失败)。 ### 路线 B — 一条命令(已在跑的 Omarchy 上) 适合**新机已装好 Omarchy 并能进桌面**,只想把桌面配置搬过去: ```bash # 在图形会话里跑(gsettings/hyprctl 需要会话) git clone https://gitee.com/Limoux/system-clone.git ~/system-clone bash ~/system-clone/install.sh # 全量还原 bash ~/system-clone/verify.sh # 自检(应 17/17 全绿) ``` 分步执行见下表。想让它变成"以后每次开机自动跑",再执行 `REPO_URL=https://gitee.com/Limoux/system-clone.git ~/system-clone/provisioning/arm-autoprovision.sh`。 ### 分步执行(可选) | 命令 | 作用 | |---|---| | `./install.sh packages` | 只装官方 + AUR 包 | | `./install.sh dotfiles` | 只覆盖配置(自动备份为 `.clonebak-<时间>` ) | | `./install.sh theme` | 只装 WhiteSur 主题 + GTK 深色/图标 | | `./install.sh lunar` | 只重建农历 venv | | `./install.sh voxtype` | 只配 voxtype 中文模型 | | `./install.sh thermal` | 只装热防护(**仅** Intel i5-4210M,其它 CPU 自动跳过) | | `./install.sh system` | 只装系统层自定义(agent 自动更新 timer / hid_apple / mkinitcpio / 自举脚本自更新) | | `./install.sh finalize` | 只收尾(重启 shell / 重载 hyprland) | > 建议**在图形会话里**运行(部分步骤需要 gsettings / hyprctl / omarchy)。首次会 sudo 装包。 ## 🔄 跨硬件迁移(本包的主要用途) 本包定位为**跨硬件可移植**(镜像 / Btrfs send 才是同款机专用)。设计上已做这些适配: - **显示器** `hypr/monitors.lua` 用**通用写法**(`output=""`、`mode=preferred`、`position=auto`),任何屏幕都能起; 只有 `scale=1.25` 是按源机 DPI 调的,换低/高 DPI 屏可自行改(或改 `omarchy-monitor-scale`)。 - **用户名不同**:`install.sh` 自动把 `.config` 和系统脚本里写死的 `/home/mmmm` 换成新家目录。 - **热防护**:仅当新机 CPU 是 `i5-4210M` 才装(否则跳过),不会误伤别的机型。 - **GPU/内核/引导**:属安装期,不在本包范围(新机装 Omarchy 时自行处理)。 - **软件包**:`yay -S --needed`,已存在/不适用的包自动跳过,不强行安装。 > 目标机请先装好 **Omarchy(Arch)并进一次桌面**,再运行 `./install.sh`。 > 想达到"一进桌面基本一致":本包覆盖**桌面配置层**(主题/顶栏/菜单/语音/热键/脚本/服务),≈75%; > 系统底层(包安装、驱动)由 Omarchy 安装器 + 本包的包清单共同还原。 ## 🔧 改动后如何同步(capture) 又改了桌面/主题/脚本后,在源机跑一次即可把最新状态刷进包并提交: ```bash ./capture.sh # 重新采集 + git commit ./capture.sh --no-git # 只采集不提交 ``` ## ⚡ 全自动:装完自动拉起仓库(**已实测跑通**) 源头机(`~/omarchy-build/omarchy-final.iso`)已烘入自举装置,新机装完首登**零人工**自动还原。 机制与细节见 [`provisioning/README.md`](provisioning/README.md) 与 `iso/build-custom-iso.sh`: - **路线 A(零人工,推荐)**:用定制 ISO 装机,装完首登自动 clone Gitee 仓库 + `install.sh` + `verify`。 - ⚠️ **Omarchy 安装器不复制 live 根的 `/etc/skel`**!注入必须走"装机时 chroot 进目标"这条路 (ISO 内 `/root/live-watch.sh` 守望目标挂载点 → `arch-chroot` 跑 `target-inject.sh`)。 只把文件塞进 ISO 的 `/etc/skel` 是**假成功**(文件在 ISO 里,但到不了装好的系统)。 - 自举脚本/钩子会**从仓库自更新**:以后改配置或改自举逻辑**只需 `git push`,不用重建 ISO**。 - **路线 B(已在跑的系统)**:`REPO_URL= provisioning/arm-autoprovision.sh` 武装后,进桌面自动还原。 - **路线 C(一条命令)**:`REPO_URL=... bash <(curl -fsSL .../provisioning/bootstrap.sh)`。 **实测结论(全新 VM,2026-09-11)**:定制 ISO → 装机 5.5 分钟 → 首登自动自举 40 分钟 → `verify 17/17 全绿` → 重启后依旧全绿且不重复自举。 ## 还原了什么 | 项目 | 说明 | |---|---| | **软件包** | `packages/pacman-explicit.txt`(179 官方)+ `packages/aur.txt`(8 AUR:网易云、WPS、豆包、飞书、微信、whitesur 图标等) | | **hyprland 配置** | `.config/hypr/*.lua`(含 `Super+A` 语音助手热键) | | **Omarchy 顶栏** | `.config/omarchy/`:`shell.json`(时钟秒+周几+农历、媒体插件)、`plugins/mmmm.*`(11 个克隆插件)、`extensions/omarchy-menu.jsonc`(中文菜单,不含 apps 覆盖) | | **GTK 外观** | WhiteSur-Dark-solid 主题 + WhiteSur-dark 图标 + 深色;`state/dconf-full.ini` 全量偏好 | | **voxtype 中文** | `config.toml`(engine=paraformer)+ paraformer-zh 模型(见下) | | **语音助手「你好」** | `.local/bin/{ai-voice-assistant.py,vassist-toggle.sh}` + 热键 `Super+A` | | **农历** | `.local/bin/bar-lunar-info.sh` + 重建 `~/.local/share/lunar-venv` | | **热防护** | `scripts/thermal/`(老笔记本防过热重启,i5-4210M 专属) | ## 大件资产:voxtype 中文模型(自动下载,无需手工) `paraformer-zh` 模型约 **243MB**,不随仓库分发(**Gitee 免费仓单文件上限 100MB,推不上去**)。 `install.sh voxtype` 会按下面顺序自动搞定,**不用手工干预**: 1. 包内 `assets/models/paraformer-zh.tar.zst`(若你自己放了); 2. 已存在且大小正确 → 跳过; 3. **自动下载**:`hf-mirror.com`(国内可达;`huggingface.co` 直连会超时)→ 源 `csukuangfj/sherpa-onnx-paraformer-zh-2023-09-14` 的 `model.int8.onnx` + `tokens.txt`, **按 sha256 校验**并写回 `.voxtype-manifest.json`(实测 ~9MB/s,25 秒下完)。 4. 全失败才提示手工:`voxtype setup onnx --enable && voxtype setup model`(交互式)。 > 另注:`install.sh voxtype` 会自动执行 `sudo voxtype setup onnx --enable`。 > **必须切 ONNX 版二进制** —— 默认的 `voxtype-avx2` 是 Whisper 版、**没编 paraformer 特性**, > 不切会让守护进程 `status=1` 无限重启。 ## 需要现场适配的项(不保证 100% 照搬) - **显示器配置** `hypr/monitors.lua`:与屏幕型号/分辨率绑定,可能需按新机调整。 - **热防护** `thermal/`:仅对 Intel i5-4210M 调参;别的 CPU 会被自动跳过。 - **用户名**:若源机 `/home/mmmm` 之外的用户,`install.sh` 会自动把 `.config` 里的 `/home/mmmm` 替换成新家目录。 - **LUKS / 分区 / 引导**:属系统级,不在本包范围(本包只做"桌面配置级"还原)。 - 桌面壁纸(17MB `backgrounds/`)未打包,新机用默认壁纸。 ## ⚠️ 真机装机踩过的坑(实测记录 2026-09-11,i3-10100 新机) > 流程:定制 ISO 装系统 → 输 LUKS 口令解锁 → 首启自动自举还原。以下 5 条都是"看着像失败、其实是环境问题"。 ### 1. 装机崩在 `DiskError: Failed to read disk "/dev/sda2" with lsblk` **真因**:目标盘上有**残留的 md RAID / LVM**(实例:旧飞牛 fnOS 单盘 RAID1 `LABEL="fnos22:0"`), 设备被内核持有 → 向导重写分区表后**内核拒绝刷新分区表** → 配置里的 `/dev/sda2` 根本不存在 → 安装器在"卸载既有分区"阶段崩(发生在格式化**之前**)。 **诊断**:`sgdisk -p /dev/sda`(磁盘真表)与 `lsblk`(内核当前视图)**不一致** ⇒ 中招。内核视图的精确偏移见 `/sys/class/block/sdaN/start|size`。 **解决**(会抹盘,先确认数据):`umount -R /mnt; vgchange -an; mdadm --stop /dev/mdX; partprobe /dev/sda` → 重跑安装器即可。**不必重建 ISO**。与"注入脚本 chroot"无关。 ### 2. 装完 SSH 连不上(ping 通、但所有端口超时) 两个独立原因,都要做(install.sh 已自动处理): - **目标机没 openssh**(Arch/Omarchy 基础包不含):`sudo pacman -S openssh && sudo systemctl enable --now sshd` - **ufw 拦掉 22**(Omarchy 默认启用 ufw、入站默认 DROP):`sudo ufw allow 22/tcp` > 症状特征:**ping 通、TCP `Connection timed out`(超时=DROP,不是拒绝)**。 ### 3. 首启自举报 `克隆 __REPO_URL__ … 重试 3 次后退出` **真因**:注入用了**仓库里的原始脚本**,`__REPO_URL__` 占位符没被构建时 sed 替换,被原样写进 `/etc/sysprovision.env` → 克隆必然失败。(用 ISO 内 `/root/*.sh` 则不会,因为那份已替换。) **解决**:修正 `/etc/sysprovision.env` 里的地址后重跑自举;脚本已加"占位符未替换 → 回落默认仓库"兜底。 ### 4. 自检显示 `通过: 16 失败: 0`,不是 17 正常。第 17 项「热防护」被 `grep i5-4210M /proc/cpuinfo` 门控,**只对那台老笔记本(i5-4210M)生效**; 别的 CPU 整块跳过 —— 16/16 就是满分。 ### 5. 想保住旧数据盘(不整盘抹) 用**保护模式**:`disk_config.config_type = "pre_mounted_config"`(`mountpoint`: `/mnt`)+ `omarchy_install.mode = "protected"` + `storage.{esp_device,root_device}`;先自己把 btrfs 子卷 `@ @home @log @pkg` 与 ESP 挂到 `/mnt`,安装器就会**跳过整盘清理**(`detect_pre_mounted_mods` 自动发现布局)。 要保住盘尾旧分区:停 md/LVM 后按**原偏移** `sgdisk -n N:: -t N:fd00` 重建条目、`partprobe`, 数据不动,`mdadm --assemble` 能按超级块原样重组。 > LUKS 口令传参坑:`echo pw | cryptsetup open … --key-file=-` 会把**换行**算进口令,要用 `printf 'pw' |`。 ## 回退 - 配置:覆盖前的旧文件在 `$HOME/**/.clonebak-<时间戳>`。 - 系统:源机有 snapper 快照(`post-voiceassist-theme-*`)。 ## 把它变成可同步的仓库 ```bash cd system-clone git init && git add -A && git commit -m "system config clone" # 推到你的私有仓库(可选): # git remote add origin git@github.com:/omarchy-clone.git && git push -u origin main ``` `assets/models/*.tar.*` 已在 `.gitignore` 中(大文件),用网盘/git-lfs 单独同步。 ## 🌡 稳定性看门狗(2026-09 新增) | 组件 | 作用 | 位置 | |---|---|---| | `thermal-guard` | 基准限频:关睿频 + 上限 2.2GHz(schedutil) | `system/`(原有) | | `thermal-watchdog` | **第二道保险**:≥88°C 降到 1.6GHz,≥92°C 降到 800MHz;≤70°C 连续 3 次自动回到 2.2GHz。桌面通知 + 日志 `journalctl -t thermal-watchdog` | `system/local-sbin/thermal-watchdog.sh` | | `clean-shutdown-marker` | 正常关机时落标记,用于识别"非正常重启" | `system/systemd/clean-shutdown-marker.service` | | `boot-check`(桌面钩子) | 开机核对"限频是否真的生效 + 上次是否正常关机 + 当前温度",异常时桌面通知;结果写 `~/.local/state/boot-check.log` | `system/omarchy-hooks/boot-check` | | `resource-alert.sh` + Hermes cron | 每小时查两台机的磁盘/内存/CPU 温度 + 非正常重启记录。**正常时无输出=不打扰**,越线才推送企业微信 | `scripts/resource-alert.sh` | 新机器由 `install.sh` 的 `s_system` 步骤自动安装并 `enable --now`。 资源告警的 cron 任务属于 Hermes 侧状态(不在仓库里),新机需注册一次:`no_agent` 脚本模式, `every 1h`,脚本 `resource-alert.sh` 放到 `~/.hermes/scripts/`。