+64
-44
@@ -79,23 +79,16 @@ else
|
||||
log "no previous GNOME extension at ${EXT_DIR}"
|
||||
fi
|
||||
|
||||
if command -v gnome-extensions >/dev/null; then
|
||||
if gnome-extensions disable [email protected] >/dev/null 2>&1; then
|
||||
log "disabled GNOME extension [email protected]"
|
||||
else
|
||||
log "GNOME extension [email protected] was not enabled or could not be disabled"
|
||||
fi
|
||||
if gnome-extensions uninstall [email protected] >/dev/null 2>&1; then
|
||||
log "uninstalled GNOME extension [email protected]"
|
||||
else
|
||||
log "GNOME extension [email protected] was not registered or could not be uninstalled"
|
||||
fi
|
||||
else
|
||||
log "gnome-extensions not found; removing extension files directly"
|
||||
EXT_UUID="[email protected]"
|
||||
SHOULD_ENABLE_EXTENSION=false
|
||||
if [[ "${1:-}" == "--enable" ]]; then SHOULD_ENABLE_EXTENSION=true; fi
|
||||
if command -v gsettings >/dev/null; then
|
||||
ENABLED_EXTENSIONS="$(gsettings get org.gnome.shell enabled-extensions 2>/dev/null || printf '[]')"
|
||||
if [[ "${ENABLED_EXTENSIONS}" == *"${EXT_UUID}"* ]]; then SHOULD_ENABLE_EXTENSION=true; fi
|
||||
fi
|
||||
if [[ -e "${EXT_DIR}" ]]; then
|
||||
log "removing leftover extension files at ${EXT_DIR}"
|
||||
rm -rf "${EXT_DIR}"
|
||||
if command -v gnome-extensions >/dev/null && gnome-extensions info "${EXT_UUID}" 2>/dev/null | grep -q 'Enabled: Yes'; then
|
||||
SHOULD_ENABLE_EXTENSION=true
|
||||
log "GNOME extension ${EXT_UUID} is currently enabled; it will be reactivated after the file replace"
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
@@ -131,25 +124,65 @@ chmod 755 "${BARE_BIN}"
|
||||
log "using Bare runtime ${BARE_BIN}"
|
||||
EXT_TMP_DIR="$(mktemp -d "${TMPDIR:-/tmp}/jarvis-extension.XXXXXX")"
|
||||
EXT_ZIP="${EXT_TMP_DIR}/jarvis-extension.zip"
|
||||
log "replacing GNOME extension files at ${EXT_DIR}"
|
||||
rm -rf "${EXT_DIR}"
|
||||
mkdir -p "${EXT_DIR}"
|
||||
cp -a "${ROOT_DIR}/apps/gnome-extension/[email protected]/." "${EXT_DIR}/"
|
||||
log "copied GNOME extension files to ${EXT_DIR}"
|
||||
( cd "${ROOT_DIR}/apps/gnome-extension/[email protected]" && zip -q -r "${EXT_ZIP}" . )
|
||||
if command -v gnome-extensions >/dev/null; then
|
||||
if gnome-extensions install --force "${EXT_ZIP}"; then
|
||||
log "registered GNOME extension from ${EXT_ZIP}"
|
||||
else
|
||||
log "warning: GNOME extension registration failed; copying files to ${EXT_DIR}"
|
||||
echo "GNOME extension registration failed; installing the files directly." >&2
|
||||
cp -a "${ROOT_DIR}/apps/gnome-extension/[email protected]/." "${EXT_DIR}/"
|
||||
log "copied GNOME extension files to ${EXT_DIR}"
|
||||
log "warning: gnome-extensions install failed; the HUD files are already in ${EXT_DIR}"
|
||||
echo "GNOME extension registration failed; the files were copied directly." >&2
|
||||
fi
|
||||
else
|
||||
cp -a "${ROOT_DIR}/apps/gnome-extension/[email protected]/." "${EXT_DIR}/"
|
||||
log "copied GNOME extension files to ${EXT_DIR}"
|
||||
fi
|
||||
if command -v glib-compile-schemas >/dev/null && [[ -d "${EXT_DIR}/schemas" ]]; then
|
||||
glib-compile-schemas "${EXT_DIR}/schemas" >/dev/null
|
||||
log "compiled GSettings schemas in ${EXT_DIR}/schemas"
|
||||
fi
|
||||
persist_enabled_extension() {
|
||||
command -v gsettings >/dev/null || return 0
|
||||
gsettings writable org.gnome.shell enabled-extensions >/dev/null 2>&1 || return 0
|
||||
ENABLED_EXTENSIONS="$(gsettings get org.gnome.shell enabled-extensions 2>/dev/null || printf '[]')"
|
||||
if [[ "${ENABLED_EXTENSIONS}" == *"${EXT_UUID}"* ]]; then
|
||||
log "org.gnome.shell enabled-extensions already lists ${EXT_UUID}"
|
||||
return 0
|
||||
fi
|
||||
if [[ "${ENABLED_EXTENSIONS}" == "[]" ]]; then
|
||||
ENABLED_EXTENSIONS="['${EXT_UUID}']"
|
||||
else
|
||||
ENABLED_EXTENSIONS="${ENABLED_EXTENSIONS%]}, '${EXT_UUID}']"
|
||||
fi
|
||||
gsettings set org.gnome.shell enabled-extensions "${ENABLED_EXTENSIONS}"
|
||||
log "persisted ${EXT_UUID} in org.gnome.shell enabled-extensions"
|
||||
}
|
||||
activate_extension() {
|
||||
persist_enabled_extension
|
||||
if command -v gdbus >/dev/null; then
|
||||
if gdbus call --session --dest org.gnome.Shell.Extensions --object-path /org/gnome/Shell/Extensions --method org.gnome.Shell.Extensions.ReloadExtension "${EXT_UUID}" >/dev/null 2>&1; then
|
||||
log "reloaded ${EXT_UUID} in the running GNOME Shell"
|
||||
else
|
||||
log "GNOME Shell did not reload ${EXT_UUID} yet"
|
||||
fi
|
||||
if gdbus call --session --dest org.gnome.Shell.Extensions --object-path /org/gnome/Shell/Extensions --method org.gnome.Shell.Extensions.EnableExtension "${EXT_UUID}" >/dev/null 2>&1; then
|
||||
log "GNOME Shell EnableExtension succeeded for ${EXT_UUID}"
|
||||
else
|
||||
log "GNOME Shell EnableExtension did not activate ${EXT_UUID}"
|
||||
fi
|
||||
fi
|
||||
if command -v gnome-extensions >/dev/null && gnome-extensions enable "${EXT_UUID}" >/dev/null 2>&1; then
|
||||
log "enabled GNOME extension ${EXT_UUID}"
|
||||
else
|
||||
log "gnome-extensions enable ${EXT_UUID} failed"
|
||||
fi
|
||||
if command -v gnome-extensions >/dev/null && gnome-extensions info "${EXT_UUID}" 2>/dev/null | grep -q 'Enabled: Yes'; then
|
||||
log "GNOME extension ${EXT_UUID} is enabled in this session"
|
||||
else
|
||||
log "GNOME extension ${EXT_UUID} is installed but not active in this session; log out and back in, or run: gnome-extensions enable ${EXT_UUID}"
|
||||
fi
|
||||
}
|
||||
sed "s#__JARVIS_BARE__#${BARE_BIN}#" "${ROOT_DIR}/packaging/jarvisd.service" > "${HOME}/.config/systemd/user/jarvisd.service"
|
||||
log "wrote ${HOME}/.config/systemd/user/jarvisd.service"
|
||||
if [[ -f "${CONFIG_DIR}/config.json" ]]; then
|
||||
@@ -173,28 +206,15 @@ restart_user_service() {
|
||||
}
|
||||
if [[ "${1:-}" == "--enable" ]]; then
|
||||
restart_user_service enable
|
||||
if command -v gnome-extensions >/dev/null && gnome-extensions enable [email protected] >/dev/null 2>&1; then
|
||||
log "enabled GNOME extension [email protected]"
|
||||
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}" != *"[email protected]"* ]]; then
|
||||
if [[ "${ENABLED_EXTENSIONS}" == "[]" ]]; then
|
||||
ENABLED_EXTENSIONS="['[email protected]']"
|
||||
else
|
||||
ENABLED_EXTENSIONS="${ENABLED_EXTENSIONS%]}, '[email protected]']"
|
||||
fi
|
||||
gsettings set org.gnome.shell enabled-extensions "${ENABLED_EXTENSIONS}"
|
||||
log "persisted [email protected] in org.gnome.shell enabled-extensions"
|
||||
fi
|
||||
log "GNOME Shell will enable Jarvis after the next login (the current Shell session has not rescanned extensions)"
|
||||
else
|
||||
log "GNOME Shell has not rescanned extensions; log out and back in, then run: gnome-extensions enable [email protected]"
|
||||
activate_extension
|
||||
else
|
||||
if [[ "${PREVIOUSLY_ACTIVE}" == true ]]; then
|
||||
restart_user_service
|
||||
log "restarted jarvisd.service with the upgraded files"
|
||||
fi
|
||||
if [[ "${SHOULD_ENABLE_EXTENSION}" == true ]]; then
|
||||
activate_extension
|
||||
fi
|
||||
elif [[ "${PREVIOUSLY_ACTIVE}" == true ]]; then
|
||||
restart_user_service
|
||||
log "restarted jarvisd.service with the upgraded files"
|
||||
fi
|
||||
log "install complete; log file ${LOG_FILE}"
|
||||
echo "Installed JARVIS-QVAC to ${APP_DIR}"
|
||||
|
||||
Reference in New Issue
Block a user