#!/bin/bash # VM-only: exercises the shared setup command and real composition for every # shipped engine. Restore the profile, shortcut settings, and font preference. set -euo pipefail source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh" selection=$(omarchy-input-method status) initial_method=$(jq -r .installed_method <<< "$selection") initial_layout=$(jq -r .layout <<< "$selection") group=$(fcitx5-remote -q) initial_info=$(busctl --user --json=short call org.fcitx.Fcitx5 /controller org.fcitx.Fcitx.Controller1 InputMethodGroupInfo s "$group") jq -e --arg layout "$initial_layout" '.data[0] == $layout' <<< "$initial_info" >/dev/null || fail "installed keyboard layout reaches Fcitx" if [[ $initial_method != "none" ]]; then jq -e --arg method "$initial_method" '.data[1] | any(.[0] == $method)' <<< "$initial_info" >/dev/null || fail "installer-selected engine is ready before live setup" fi pass "installer input selection reaches the first desktop session" work=$(mktemp -d) dbus-monitor --session "type='method_call',interface='org.freedesktop.Notifications',member='Notify'" > "$ARTIFACTS/input-method-notifications.log" 2>&1 & notification_monitor=$! config_home=${XDG_CONFIG_HOME:-$HOME/.config} data_home=${XDG_DATA_HOME:-$HOME/.local/share} paths=("$config_home/fcitx5" "$config_home/fontconfig/conf.d/50-omarchy-input-method.conf" "$data_home/dbus-1/services/org.fcitx.Fcitx5.service") for (( i = 0; i < ${#paths[@]}; i++ )); do if [[ -e ${paths[i]} || -L ${paths[i]} ]]; then cp -a "${paths[i]}" "$work/backup-$i" fi done cleanup() { kill "$notification_monitor" 2>/dev/null || true wait "$notification_monitor" 2>/dev/null || true close_windows '^org\.omarchy\.ime-test$' close_windows '^org\.omarchy\.ime-test-gtk$|^org\.qt-project\.qml$|^chrome-.*_omarchy-ime-entry\.html-Default$' systemctl --user stop omarchy-fcitx5.service for (( i = 0; i < ${#paths[@]}; i++ )); do rm -rf "${paths[i]}" if [[ -e $work/backup-$i || -L $work/backup-$i ]]; then mkdir -p "$(dirname "${paths[i]}")" cp -a "$work/backup-$i" "${paths[i]}" fi done busctl --user call org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus ReloadConfig >/dev/null systemctl --user start omarchy-fcitx5.service rm -rf "$work" } trap cleanup EXIT cat > "$work/reader" <<'SH' #!/bin/bash IFS= read -r text printf '%s' "$text" > "$1" sleep 1 SH chmod +x "$work/reader" cat > "$work/entry.py" <<'PY' import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk app = Gtk.Application(application_id="org.omarchy.ime-test-gtk") def activate(app): window = Gtk.ApplicationWindow(application=app, title="GTK input test") window.set_default_size(600, 160) entry = Gtk.Entry() window.set_child(entry) window.present() entry.grab_focus() app.connect("activate", activate) app.run() PY cat > "$work/entry.qml" <<'QML' import QtQuick import QtQuick.Controls ApplicationWindow { visible: true width: 600 height: 160 title: "Qt input test" TextField { anchors.fill: parent focus: true } } QML cat > "$work/omarchy-ime-entry.html" <<'HTML'