You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
🤖 This issue was written by Claude Opus 5 (an Anthropic AI model) on behalf of @k5953837, who asked it to add Traditional Chinese support and to read the project's contribution rules first. The upstream package list, the package sizes, and the mirror state below were read directly from the pinned Omarchy tree and the live Arch Linux ARM mirrors on 2026-09-09. The branch described under “Status and blocker” passes guest/test locally; the factory image itself has not been built, for the reason given there.
Summary
The factory guest cannot display or type Traditional Chinese today. It generates only en_US.UTF-8, ships no CJK font, and omits fcitx5, so Chinese text renders as tofu boxes and there is no way to enter it.
The part worth stating up front: upstream Omarchy already ships the pieces that make this work. At the pinned release (4.0.2, 346e69e1c), install/omarchy-base.packages contains:
guest/packages.txt — the intentionally trimmed ARM64 transaction — drops all four. So this is not a request to add something Omarchy lacks. It is a request to restore what the trim removed, plus the Traditional-Chinese-specific pieces upstream does not cover.
The trim has already cost one bug: #91, where the omitted fcitx5 binary left upstream's omarchy-fcitx5.service in a 203/EXEC restart loop that flooded the journal. #106 fixed that defensively with a ConditionPathExists=/usr/bin/fcitx5 drop-in — a guard that is self-healing, so installing the package makes it pass with no change to the guard.
Why this belongs here rather than upstream
Two earlier pull requests proposed Simplified Chinese support (#26, #63). Both were withdrawn by their own authors, and #26's closing comment argued the work "belongs in upstream Omarchy... not the Try Omarchy wrapper."
The package list above is the reason I think that reasoning does not hold. Upstream has already made the call to ship fcitx5 and Noto CJK. The gap exists only inside this fork's ARM64 trim, so it can only be closed here. What upstream does not provide, and what is genuinely this project's to decide, is the zh-TW-specific configuration: a Traditional Chinese locale, a font rule that picks TC Han glyph variants over Simplified or Japanese ones, and a Bopomofo engine.
Proposed change
Concern
Change
Locale
Generate zh_TW.UTF-8 alongside en_US.UTF-8 in configure-rootfs.sh. LANG stays en_US.UTF-8 and KEYMAP stays us — the locale becomes available, not default.
Fonts
Restore upstream's noto-fonts-cjk.
Glyph variants
New etc/fonts/conf.d/30-*.conf preferring Noto Sans/Serif/Mono CJK TC when the text language is zh-tw or zh-hant. Without it, shared codepoints render with Simplified or Japanese forms.
Input method
Restore upstream's fcitx5, fcitx5-gtk, fcitx5-qt; add fcitx5-chewing for Bopomofo.
Input method defaults
Seed /etc/skel/.config/fcitx5/profile with keyboard-us as the first item and chewing as the second, so a user who never presses Ctrl+Space sees no change at all.
XWayland
XMODIFIERS=@im=fcitx in environment.d. GTK_IM_MODULE/QT_IM_MODULE are deliberately left unset so native Wayland GTK4/Qt6 apps keep using text-input-v3, which Hyprland implements.
Chromium
Append --enable-wayland-ime to upstream's /etc/skel/.config/chromium-flags.conf. Chromium on Wayland ignores input methods without it, and Chromium is the browser this image ships.
Net effect for an existing English-speaking user: none. The default session language, keyboard layout, and first input method are unchanged.
Deliberately excluded
fcitx5-chinese-addons — hard-depends on qt6-webengine, which does not fit the 6144 MiB factory image. Add Chinese input and locale to the factory guest #63 hit the same wall. Bopomofo via fcitx5-chewing does not need it.
fcitx5-configtool — upstream does not ship it either, and it pulls a KDE dependency chain (kwidgetsaddons alone is ~15 MiB). Excluded to keep the package set identical to upstream's plus one engine.
Raising image.sizeMiB — that value is duplicated as a runtime contract in macos/run-qemu-gpu.sh and asserted in macos/Tests/run-qemu-ssh-contract.test.sh, so changing it is an architecture discussion, not part of this.
Localising the macOS launcher UI — unrelated to the guest and a separate proposal.
Changing the default language — see above.
Size
Measured Installed Size from pacman -Si in an aarch64 builder container:
Package
Installed Size
noto-fonts-cjk
298.79 MiB
fcitx5
20.72 MiB
fcitx5-qt
2.28 MiB
fcitx5-gtk
516 KiB
fcitx5-chewing
171 KiB
Plus new transitive dependencies, of which libchewing (6.78 MiB) is the largest; the exact set is pending the lock refresh below.
guest/scripts/pack-image.sh requires the staged root to stay under 85% of 6144 MiB. I have not been able to measure the actual headroom yet, for the reason below. If it turns out to be tight, adobe-source-han-sans-tw-fonts (38.15 MiB, Traditional Chinese only) is a fallback, at the cost of dropping Japanese and Korean coverage that upstream currently provides.
Status and blocker
The non-package half of this is implemented and passing guest/test on a branch here: locale generation, the fcitx5 profile fragment, the Chromium flag append, the fontconfig rule, the XMODIFIERS entry, and ten new assertions in guest/tests/verify.py covering the contract — including one that the default LANG/KEYMAP stay English.
I cannot complete it yet: adding packages requires regenerating guest/packages.lock.json, and that is blocked by the two upstream drifts in #171 (the builder's rust pin no longer exists on the ALARM mirror, and no single aquamarine currently satisfies both hyprland and hyprtoolkit). I am waiting on that rather than working around it, since CONTRIBUTING.md asks that pinned inputs not be changed independently of their validation code.
Question
Before I open a pull request: is Traditional Chinese support something you want in Try Omarchy? Given that the packages come straight back from upstream's own list and the default English experience is untouched, I think the surface area is small — but #26 and #63 suggest previous contributors were unsure of your position, and I would rather ask than guess.
If you would prefer a narrower first step — for example restoring only noto-fonts-cjk so CJK text renders, and leaving input methods for later — I am happy to split it that way.
🤖 This issue was written by Claude Opus 5 (an Anthropic AI model) on behalf of @k5953837, who asked it to add Traditional Chinese support and to read the project's contribution rules first. The upstream package list, the package sizes, and the mirror state below were read directly from the pinned Omarchy tree and the live Arch Linux ARM mirrors on 2026-09-09. The branch described under “Status and blocker” passes
guest/testlocally; the factory image itself has not been built, for the reason given there.Summary
The factory guest cannot display or type Traditional Chinese today. It generates only
en_US.UTF-8, ships no CJK font, and omits fcitx5, so Chinese text renders as tofu boxes and there is no way to enter it.The part worth stating up front: upstream Omarchy already ships the pieces that make this work. At the pinned release (4.0.2,
346e69e1c),install/omarchy-base.packagescontains:guest/packages.txt— the intentionally trimmed ARM64 transaction — drops all four. So this is not a request to add something Omarchy lacks. It is a request to restore what the trim removed, plus the Traditional-Chinese-specific pieces upstream does not cover.The trim has already cost one bug: #91, where the omitted
fcitx5binary left upstream'somarchy-fcitx5.servicein a 203/EXEC restart loop that flooded the journal. #106 fixed that defensively with aConditionPathExists=/usr/bin/fcitx5drop-in — a guard that is self-healing, so installing the package makes it pass with no change to the guard.Why this belongs here rather than upstream
Two earlier pull requests proposed Simplified Chinese support (#26, #63). Both were withdrawn by their own authors, and #26's closing comment argued the work "belongs in upstream Omarchy... not the Try Omarchy wrapper."
The package list above is the reason I think that reasoning does not hold. Upstream has already made the call to ship fcitx5 and Noto CJK. The gap exists only inside this fork's ARM64 trim, so it can only be closed here. What upstream does not provide, and what is genuinely this project's to decide, is the zh-TW-specific configuration: a Traditional Chinese locale, a font rule that picks TC Han glyph variants over Simplified or Japanese ones, and a Bopomofo engine.
Proposed change
zh_TW.UTF-8alongsideen_US.UTF-8inconfigure-rootfs.sh.LANGstaysen_US.UTF-8andKEYMAPstaysus— the locale becomes available, not default.noto-fonts-cjk.etc/fonts/conf.d/30-*.confpreferringNoto Sans/Serif/Mono CJK TCwhen the text language iszh-tworzh-hant. Without it, shared codepoints render with Simplified or Japanese forms.fcitx5,fcitx5-gtk,fcitx5-qt; addfcitx5-chewingfor Bopomofo./etc/skel/.config/fcitx5/profilewithkeyboard-usas the first item andchewingas the second, so a user who never presses Ctrl+Space sees no change at all.XMODIFIERS=@im=fcitxinenvironment.d.GTK_IM_MODULE/QT_IM_MODULEare deliberately left unset so native Wayland GTK4/Qt6 apps keep using text-input-v3, which Hyprland implements.--enable-wayland-imeto upstream's/etc/skel/.config/chromium-flags.conf. Chromium on Wayland ignores input methods without it, and Chromium is the browser this image ships.Net effect for an existing English-speaking user: none. The default session language, keyboard layout, and first input method are unchanged.
Deliberately excluded
fcitx5-chinese-addons— hard-depends onqt6-webengine, which does not fit the 6144 MiB factory image. Add Chinese input and locale to the factory guest #63 hit the same wall. Bopomofo viafcitx5-chewingdoes not need it.fcitx5-configtool— upstream does not ship it either, and it pulls a KDE dependency chain (kwidgetsaddonsalone is ~15 MiB). Excluded to keep the package set identical to upstream's plus one engine.image.sizeMiB— that value is duplicated as a runtime contract inmacos/run-qemu-gpu.shand asserted inmacos/Tests/run-qemu-ssh-contract.test.sh, so changing it is an architecture discussion, not part of this.Size
Measured
Installed Sizefrompacman -Siin an aarch64 builder container:noto-fonts-cjkfcitx5fcitx5-qtfcitx5-gtkfcitx5-chewingPlus new transitive dependencies, of which
libchewing(6.78 MiB) is the largest; the exact set is pending the lock refresh below.guest/scripts/pack-image.shrequires the staged root to stay under 85% of 6144 MiB. I have not been able to measure the actual headroom yet, for the reason below. If it turns out to be tight,adobe-source-han-sans-tw-fonts(38.15 MiB, Traditional Chinese only) is a fallback, at the cost of dropping Japanese and Korean coverage that upstream currently provides.Status and blocker
The non-package half of this is implemented and passing
guest/teston a branch here: locale generation, the fcitx5 profile fragment, the Chromium flag append, the fontconfig rule, theXMODIFIERSentry, and ten new assertions inguest/tests/verify.pycovering the contract — including one that the defaultLANG/KEYMAPstay English.I cannot complete it yet: adding packages requires regenerating
guest/packages.lock.json, and that is blocked by the two upstream drifts in #171 (the builder'srustpin no longer exists on the ALARM mirror, and no singleaquamarinecurrently satisfies bothhyprlandandhyprtoolkit). I am waiting on that rather than working around it, sinceCONTRIBUTING.mdasks that pinned inputs not be changed independently of their validation code.Question
Before I open a pull request: is Traditional Chinese support something you want in Try Omarchy? Given that the packages come straight back from upstream's own list and the default English experience is untouched, I think the surface area is small — but #26 and #63 suggest previous contributors were unsure of your position, and I would rather ask than guess.
If you would prefer a narrower first step — for example restoring only
noto-fonts-cjkso CJK text renders, and leaving input methods for later — I am happy to split it that way.