Files
omarchycn/bin/omarchy-cn-setup
T

121 lines
3.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# omarchy:summary=First-run wizard: language, timezone, scale, Chinese env, mirrors, apps, AI
# omarchy:examples=omarchycn setup
set -euo pipefail
if [[ ! -t 0 ]]; then
echo "omarchycn setup 需要交互终端" >&2
exit 1
fi
STATE_DIR="$HOME/.local/state/omarchycn/setup-done"
mkdir -p "$STATE_DIR"
run_step() {
local step="$1" title="$2"
shift 2
if [[ -f $STATE_DIR/$step ]]; then
gum confirm "「$title」已完成,重新运行?" --default=false || return 0
elif ! gum confirm "运行「$title」?(可跳过,稍后重进)"; then
return 0
fi
echo "==> $title"
if "$@"; then
touch "$STATE_DIR/$step"
else
gum confirm "「$title」失败,继续后面的步骤?" || exit 1
fi
}
step_language() {
local choice env_file="$HOME/.config/environment.d/90-omarchycn-lang.conf"
choice=$(gum choose --header "界面语言 LANG" "zh_CN.UTF-8" "en_US.UTF-8" "保持当前")
if [[ $choice == "保持当前" ]]; then
return 0
fi
mkdir -p "${env_file%/*}"
echo "LANG=$choice" > "$env_file"
echo "LANG=$choice 写入 $env_file(重登录生效)"
}
step_timezone() {
local choice
choice=$(gum choose --header "时区" "Asia/Shanghai" "保持当前" "手动输入")
if [[ $choice == "保持当前" ]]; then
return 0
fi
if [[ $choice == "手动输入" ]]; then
choice=$(timedatectl list-timezones | gum filter --header "选择时区")
fi
sudo timedatectl set-timezone "$choice"
echo "时区: $(timedatectl show -p Timezone --value)"
}
step_scale() {
local choice
choice=$(gum choose --header "显示缩放" "1.0" "1.25" "1.5" "1.6" "1.75" "2.0" "保持当前")
if [[ $choice == "保持当前" ]]; then
return 0
fi
omarchy-cn-display-scale "$choice"
}
step_hotkey() {
local choice
choice=$(gum choose --header "输入法切换键" "ctrl-space" "super-space")
omarchy-cn-ime-hotkey "$choice"
}
step_mirror() {
local choice
choice=$(gum choose --header "pacman 镜像策略" "china" "official")
omarchy-cn-mirror-apply "$choice"
}
step_dev_mirror() {
local choice
choice=$(gum choose --header "开发工具镜像(npm/pip/cargo/go/gem" "china" "official")
omarchy-cn-dev-mirror-apply "$choice" --target npm,pip,cargo,go,gem
}
step_apps() {
local catalog picks app rc=0
catalog=$(omarchy-cn-app-list | tail -n +2 | awk '{print $1}') || return 1
picks=$(gum choose --no-limit --header "选择要安装的国内应用(空格多选,回车确认)" <<<"$catalog" || true)
for app in $picks; do
omarchy-cn-app-install "$app" || rc=1
done
return $rc
}
step_privacy() {
echo "隐私状态(无可配置项,如实告知):"
echo " - OmarchyCN 不含遥测代码,默认无任何数据上报"
echo " - 诊断信息仅在你手动运行 doctor 时本地生成,不上传"
gum confirm "已了解" --affirmative "了解" --negative "" || true
}
run_step language "语言 Language" step_language
run_step timezone "时区 Timezone" step_timezone
run_step scale "显示缩放 Display Scale" step_scale
run_step locale "中文 Locale 生成" omarchy-cn-locale-apply
run_step fonts "中文字体与 fallback" omarchy-cn-font-apply
run_step ime "Fcitx5 + Rime 输入法" omarchy-cn-ime-apply
run_step hotkey "输入法切换键" step_hotkey
run_step mirror "pacman 镜像" step_mirror
run_step dev-mirror "开发工具镜像" step_dev_mirror
run_step apps "国内应用" step_apps
run_step ai "AI HubHarness/Provider/Key" omarchy-cn-ai-setup
run_step privacy "隐私与诊断" step_privacy
echo
echo "==> 最终检查"
if omarchy-cn-doctor all; then
echo "OmarchyCN 初始化完成。随时可用 omarchycn setup 重进任一步骤。"
else
echo "初始化步骤已执行,但诊断存在失败项(见上),修复后可重跑 omarchycn setup" >&2
exit 1
fi