Files
omarchy/docs/regions.md
T
ZacharyZhang-NY 9a57690e7d Align the China region to the official cn profile
The region value is cn, the China files live under default/regions/cn/, and
omarchy-apply-pacman renders pacman for every caller: the .cn twins of the
channel servers first, then .org, USTC and ArchLinuxCN. Switching to China
installs and trusts the ArchLinuxCN keyring. A migration renames china to cn
and repoints the drop-in links.
2026-10-07 11:33:01 -04:00

6.1 KiB

Regional ISO defaults

Regions customize bootstrap defaults independently of update channels. Country identifiers are lowercase, officially assigned ISO 3166-1 alpha-2 codes. global is a reserved value for no country-specific additions. Only implemented profiles are accepted; currently global and cn.

Runtime configuration

The ISO installer writes the selected region to /etc/omarchy/region before target finalization. It is plain text, not executable configuration. A missing file means global; an unsupported value is an error.

omarchy-apply-pacman <stable|rc|edge> [target-root] restores the selected channel's two pacman templates, runs default/regions/<region>/pacman/servers.sed over both when the profile has one, and appends default/regions/<region>/pacman/{pacman.conf.append,mirrorlist.append}. Both files are generated before either live file is replaced. Existing files are backed up with .bak. Dev uses the edge pacman channel, as before.

Both installation finalization and omarchy-refresh-pacman use this command. Explicit refreshes and channel changes restore regional defaults; ordinary updates do not enforce them. The existing pre-refresh-pacman user hook runs after regeneration and before the update, so users can maintain overrides there. Switching to the dev channel refuses a checkout that lacks this machine's region profile, because that checkout's own refresh would otherwise drop the regional repositories. Users can edit the files directly or set the region to global before a refresh to stop applying regional repository defaults. This does not uninstall packages or rewrite anything in existing home directories.

The China profile's servers.sed puts a .omarchy.cn twin ahead of every .omarchy.org server, including the [omarchy] package repository, so the channel's own snapshot stays first and .org stays the fallback. It then appends USTC's regular Arch mirror and adds the USTC ArchLinuxCN community repository. USTC's mirror, run by the University of Science and Technology of China, and ArchLinuxCN, a long-standing community repository, are the last fallback behind Omarchy's own mirrors in China. USTC is not a stable/RC snapshot replica: missing old packages and newer fallback databases remain compatibility risks.

Switching an installed machine

omarchy-region cn|global switches at runtime. China installs the input method, runs install/config/region.sh (region file, developer-mirror drop-ins, locale), refreshes pacman on the current channel, installs the profile packages and populates the ArchLinuxCN keyring. Global undoes the drop-ins and the locale and refreshes pacman back to the channel defaults. Neither touches home directories.

ISO builder contract

Every ISO carries the China profile, and the person picks the region on the installer's first screen. The companion omarchy-iso repository also accepts --region global|cn, which only preselects that choice, records it in /root/omarchy_region, and adds a region suffix to non-global artifact and offline-cache names. Existing global names remain unchanged.

Regional content comes from the same runtime used by the ISO: either the --local-source checkout or the downloaded runtime package. A build against a runtime without regional support fails rather than silently producing an ISO without the China choice.

  • packages: additional target packages, one name per line, with blank lines and # comments allowed. The builder bundles them in the offline repository, and the installer installs them only when China is chosen. The source manifest is not modified.
  • pacman/: repository fragments used by the runtime finalizer. The builder also adds the community repository to its writable online config to obtain regional packages; it does not change its Arch channel mirrors.
  • timezone (optional): one zone name, such as Asia/Shanghai. The setup form preselects it in the timezone list when the network geo guess is unavailable, which is always the case offline. Both callers pass it: the ISO configurator from its copy of the profile, and first-boot setup from default/regions/<region>/timezone for the region in /etc/omarchy/region. A successful geo guess still wins, and the person can choose any other zone.
  • environment.conf, cargo.toml, gemrc, maven-settings.xml: developer-mirror drop-ins that install/config/region.sh symlinks into /etc and /.cargo.
  • skel/ (optional): new-user defaults. The ISO installer overlays these onto target /etc/skel after the base settings packages and before user creation, including installations that defer user creation until first boot. It never overlays existing home directories.

For China, the builder installs archlinuxcn-keyring using the existing Arch trust chain before downloading other regional packages. Signature or keyring failures abort the build; no unverified keyserver trust or online signature bypass is added. The keyring is also installed on the target from the offline package set, then initialized and populated before online repositories are enabled. The ISO's existing offline repository verification policy is unchanged.

Scope of the China profile

The China profile provides repository and developer-mirror defaults and preselects Asia/Shanghai as the timezone. System language, the Rime input method and China Apps come from install/config/region.sh and manual/52-china.md, not from the profile files.

Remaining release validation

Unit tests cover region/channel independence, package-list augmentation, keyring failure handling, pre-user defaults, generated pacman contents, repeat application, and refresh ordering; refresh itself is exercised only inside the sudo-boundary sandbox. They do not establish live mirror availability, real package trust, or successful offline installation. Before distribution, build from matching local checkouts on an x86_64 builder and run the disposable-VM acceptance workflow in agents/skills/acceptance-tests.md.

The China acceptance run must install without network access, boot to a new user, including deferred first-boot user creation, and keep the regional mirrors, repository, marker, and keyring trust through stable, rc, and edge refreshes.