71 lines
2.6 KiB
Bash
Executable File
71 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Show or switch the region this machine is set up for
|
|
# omarchy:args=[global|cn]
|
|
# omarchy:examples=omarchy region | omarchy region cn
|
|
# omarchy:requires-sudo=true
|
|
|
|
set -euo pipefail
|
|
|
|
region_file=/etc/omarchy/region
|
|
|
|
if (($# == 0)); then
|
|
if [[ ! -e $region_file ]]; then
|
|
echo "Global"
|
|
elif [[ $(<"$region_file") == "cn" ]]; then
|
|
echo "China"
|
|
else
|
|
echo "Unknown region in $region_file: $(<"$region_file")" >&2
|
|
exit 1
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
if [[ $1 != "global" && $1 != "cn" ]]; then
|
|
echo "Usage: omarchy-region [global|cn]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
channel=$(omarchy-version-channel)
|
|
if [[ $channel != "stable" && $channel != "rc" && $channel != "edge" ]]; then
|
|
echo "Cannot tell this machine's package channel ($channel); run omarchy channel set first" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $1 == "cn" ]]; then
|
|
# Packages first against current mirrors, so a failed install leaves the machine Global.
|
|
omarchy-update-pacman -Syu --noconfirm
|
|
sudo env OMARCHY_REGION=cn OMARCHY_PATH="$OMARCHY_PATH" bash -e "$OMARCHY_PATH/install/config/region.sh"
|
|
# Trust ArchLinuxCN before the refresh upgrades through it.
|
|
rendered=$(mktemp -d)
|
|
trap 'rm -rf "$rendered"' EXIT
|
|
omarchy-apply-pacman --render "$channel" "$rendered"
|
|
mapfile -t profile_packages < <(grep -Ev '^[[:space:]]*(#|$)' "$OMARCHY_PATH/default/regions/cn/packages")
|
|
sudo pacman --config "$rendered/pacman.conf" -Sy --noconfirm --needed "${profile_packages[@]}"
|
|
sudo pacman-key --populate archlinuxcn
|
|
omarchy-refresh-pacman "$channel"
|
|
if [[ ! -f $HOME/.local/share/fcitx5/rime/rime_ice.schema.yaml ]]; then
|
|
# A running fcitx5 only sees the new Rime addon after a restart.
|
|
systemctl --user try-restart omarchy-fcitx5.service
|
|
rime-ice-installer --yes
|
|
fi
|
|
else
|
|
sudo env OMARCHY_REGION=global OMARCHY_PATH="$OMARCHY_PATH" bash -e "$OMARCHY_PATH/install/config/region.sh"
|
|
omarchy-refresh-pacman "$channel"
|
|
omarchy-setup-claude-api --remove
|
|
fi
|
|
|
|
# The language and the developer mirrors reach only a new session, so offer one in the new language.
|
|
if [[ $1 == "cn" ]]; then
|
|
prompt="立即注销,切换到中文界面和国内镜像?" log_out="立即注销" later="稍后"
|
|
reminder="区域已设为中国。重新登录后切换到中文界面和国内镜像。"
|
|
else
|
|
prompt="Log out now to switch to English and the global mirrors?" log_out="Log out now" later="Later"
|
|
reminder="Region set to Global. Log back in to switch to English and the global mirrors."
|
|
fi
|
|
if [[ -t 0 && -t 1 ]] && gum confirm --affirmative "$log_out" --negative "$later" "$prompt" 2>&1; then
|
|
omarchy-system-logout
|
|
else
|
|
echo "$reminder"
|
|
fi
|