diff --git a/README.md b/README.md index 0b0abef..c6334ca 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,10 @@ setup afterward: ~~~bash bash ~/.local/share/jarvis-qvac/packaging/first-run.sh gnome-extensions enable jarvis@qvac.local + +If GNOME says the extension does not exist immediately after installation, log +out and back in once. GNOME Shell only refreshes its user extension catalogue +at session startup; the installer persists the enabled state for that login. ~~~ The rolling installer first downloads a self-contained architecture bundle diff --git a/packaging/build-extension.sh b/packaging/build-extension.sh index c9b4488..f18628e 100755 --- a/packaging/build-extension.sh +++ b/packaging/build-extension.sh @@ -7,6 +7,8 @@ rm -f "${OUT_DIR}/jarvis-qvac-extension.zip" if command -v glib-compile-schemas >/dev/null; then glib-compile-schemas "${ROOT_DIR}/apps/gnome-extension/jarvis@qvac.local/schemas" >/dev/null fi -( cd "${ROOT_DIR}/apps/gnome-extension" && zip -q -r "${OUT_DIR}/jarvis-qvac-extension.zip" "jarvis@qvac.local" -x '*/__pycache__/*' -x '*.pyc' ) +# GNOME's installer expects metadata.json at the archive root. The UUID is +# taken from metadata.json and becomes the on-disk extension directory. +( cd "${ROOT_DIR}/apps/gnome-extension/jarvis@qvac.local" && zip -q -r "${OUT_DIR}/jarvis-qvac-extension.zip" . -x '*/__pycache__/*' -x '*.pyc' ) test -s "${OUT_DIR}/jarvis-qvac-extension.zip" echo "${OUT_DIR}/jarvis-qvac-extension.zip" diff --git a/packaging/install.sh b/packaging/install.sh index a9fa1a5..8cdd29c 100755 --- a/packaging/install.sh +++ b/packaging/install.sh @@ -23,15 +23,18 @@ if [[ -z "${BARE_BIN}" || ! -x "${BARE_BIN}" ]]; then exit 1 fi chmod 755 "${BARE_BIN}" -rm -rf "${EXT_DIR}" -mkdir -p "${EXT_DIR}" EXT_TMP_DIR="$(mktemp -d "${TMPDIR:-/tmp}/jarvis-extension.XXXXXX")" EXT_ZIP="${EXT_TMP_DIR}/jarvis-extension.zip" cleanup_ext() { rm -rf "${EXT_TMP_DIR}"; } trap cleanup_ext EXIT -( cd "${ROOT_DIR}/apps/gnome-extension" && zip -q -r "${EXT_ZIP}" "jarvis@qvac.local" ) -if command -v gnome-extensions >/dev/null && gnome-extensions install --force "${EXT_ZIP}" >/dev/null 2>&1; then - : +( cd "${ROOT_DIR}/apps/gnome-extension/jarvis@qvac.local" && zip -q -r "${EXT_ZIP}" . ) +rm -rf "${EXT_DIR}" +mkdir -p "${EXT_DIR}" +if command -v gnome-extensions >/dev/null; then + if ! gnome-extensions install --force "${EXT_ZIP}"; then + echo "GNOME extension registration failed; installing the files directly." >&2 + cp -a "${ROOT_DIR}/apps/gnome-extension/jarvis@qvac.local/." "${EXT_DIR}/" + fi else cp -a "${ROOT_DIR}/apps/gnome-extension/jarvis@qvac.local/." "${EXT_DIR}/" fi @@ -46,6 +49,24 @@ if [[ "${1:-}" == "--enable" ]]; then systemctl --user daemon-reload systemctl --user enable jarvisd.service systemctl --user restart jarvisd.service + if command -v gnome-extensions >/dev/null && gnome-extensions enable jarvis@qvac.local >/dev/null 2>&1; then + echo "GNOME extension enabled." + elif command -v gsettings >/dev/null && gsettings writable org.gnome.shell enabled-extensions >/dev/null 2>&1; then + # A running GNOME Shell keeps its extension catalogue until the next + # session. Persist the enabled state so the extension starts on login. + ENABLED_EXTENSIONS="$(gsettings get org.gnome.shell enabled-extensions 2>/dev/null || printf '[]')" + if [[ "${ENABLED_EXTENSIONS}" != *"jarvis@qvac.local"* ]]; then + if [[ "${ENABLED_EXTENSIONS}" == "[]" ]]; then + ENABLED_EXTENSIONS="['jarvis@qvac.local']" + else + ENABLED_EXTENSIONS="${ENABLED_EXTENSIONS%]}, 'jarvis@qvac.local']" + fi + gsettings set org.gnome.shell enabled-extensions "${ENABLED_EXTENSIONS}" + fi + echo "GNOME Shell will enable Jarvis after the next login (the current Shell session has not rescanned extensions)." + else + echo "GNOME Shell has not rescanned extensions; log out and back in, then run: gnome-extensions enable jarvis@qvac.local" + fi fi echo "Installed JARVIS-QVAC to ${APP_DIR}" echo "Run: ${APP_DIR}/packaging/first-run.sh"