Files
openless/openless-all/scripts/linux-desktop/install.sh
T
16c3f841b5 chore(release): prepare 2.0.0-Beta.2 build 20260924
Integrate the reviewed 2.0 PRs and local fixes from 03136853.
Preserve the verified subtitle behavior and model/runtime corrections.
Keep the numeric Beta tag compatible with released clients while exposing
the date as application build metadata.

Co-authored-by: DepengWang <2818245+DepengWang@users.noreply.github.com>
Co-authored-by: HKLHaoBin <we3q@qq.com>
Co-authored-by: Nahida <1139500183@qq.com>
Co-authored-by: TRIP <1933142963@qq.com>
Co-authored-by: chyuwei <weichangyuwcy@gmail.com>
Co-authored-by: leonoxo <leonoxo@gmail.com>
Co-authored-by: tayir <arnoldincredible@126.com>
2026-09-24 17:28:24 +08:00

77 lines
3.9 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
MODE=${1:-install}
ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
DATA=${XDG_DATA_HOME:-"$HOME/.local/share"}
CONFIG=${XDG_CONFIG_HOME:-"$HOME/.config"}
BIN="$HOME/.local/bin"
UUID=openless@openless.app
GNOME_DIR="$DATA/gnome-shell/extensions/$UUID"
KWIN_DIR="$DATA/kwin/scripts/openless-desktop"
HELPER="$BIN/openless-desktop-bridge"
RUNTIME="$HOME/.local/lib/openless-desktop-bridge"
case "$MODE" in install|enable|uninstall) ;; *) echo 'Usage: install.sh [install|enable|uninstall]' >&2; exit 2;; esac
is_gnome=false
desktop=${XDG_CURRENT_DESKTOP:-}
case "${desktop,,}" in *gnome*|*ubuntu*) is_gnome=true;; esac
if [ "$MODE" = uninstall ]; then
if command -v gnome-extensions >/dev/null; then gnome-extensions disable "$UUID" || true; fi
for tool in kwriteconfig6 kwriteconfig5; do
if command -v "$tool" >/dev/null; then "$tool" --file kwinrc --group Plugins --key openless-desktopEnabled false; break; fi
done
# Only remove these package-owned directories and files under the user's
# configured roots. Never enumerate arbitrary home files or use shell globs.
test "$GNOME_DIR" = "$DATA/gnome-shell/extensions/openless@openless.app"
test "$KWIN_DIR" = "$DATA/kwin/scripts/openless-desktop"
rm -rf -- "$GNOME_DIR" "$KWIN_DIR" "$RUNTIME"
rm -f -- "$HELPER" "$DATA/dbus-1/services/org.openless.Desktop1.service" "$CONFIG/autostart/openless-desktop-bridge.desktop"
echo 'Desktop integration removed. Log out and back in to unload the running component.'
exit 0
fi
if [ "$MODE" = install ]; then
if $is_gnome; then
version=$(gnome-shell --version | sed -n 's/.* \([0-9][0-9]*\).*/\1/p')
test -n "$version"
variant=modern; if [ "$version" -lt 45 ]; then variant=legacy; fi
install -Dm644 "$ROOT/gnome/$variant/metadata.json" "$GNOME_DIR/metadata.json"
install -Dm644 "$ROOT/gnome/$variant/extension.js" "$GNOME_DIR/extension.js"
else
install -Dm644 "$ROOT/kwin/metadata.json" "$KWIN_DIR/metadata.json"
install -Dm644 "$ROOT/kwin/metadata.desktop" "$KWIN_DIR/metadata.desktop"
install -Dm644 "$ROOT/kwin/contents/code/main.js" "$KWIN_DIR/contents/code/main.js"
install -Dm755 "$ROOT/openless-desktop-bridge" "$RUNTIME/openless-desktop-bridge"
if [ -d "$ROOT/lib" ]; then mkdir -p "$RUNTIME/lib"; cp -a "$ROOT/lib/." "$RUNTIME/lib/"; fi
if [ -d "$ROOT/plugins" ]; then mkdir -p "$RUNTIME/plugins"; cp -a "$ROOT/plugins/." "$RUNTIME/plugins/"; fi
if [ -d "$ROOT/licenses" ]; then mkdir -p "$RUNTIME/licenses"; cp -a "$ROOT/licenses/." "$RUNTIME/licenses/"; fi
mkdir -p "$BIN"
# Keep the helper and its Qt runtime after the AppImage mount disappears.
printf '#!/usr/bin/env bash\nexec %q "$@"\n' "$RUNTIME/openless-desktop-bridge" > "$HELPER"
chmod +x "$HELPER"
mkdir -p "$DATA/dbus-1/services" "$CONFIG/autostart"
escaped=${HELPER//\\/\\\\}; escaped=${escaped//\"/\\\"}
printf '[D-BUS Service]\nName=org.openless.Desktop1\nExec="%s"\n' "$escaped" > "$DATA/dbus-1/services/org.openless.Desktop1.service"
printf '[Desktop Entry]\nType=Application\nName=OpenLess Desktop Bridge\nExec="%s"\nOnlyShowIn=KDE;\nNoDisplay=true\n' "$escaped" > "$CONFIG/autostart/openless-desktop-bridge.desktop"
fi
fi
if $is_gnome; then
if ! gnome-extensions enable "$UUID"; then
echo 'The extension is installed. Log out and back in, then run this command with enable.' >&2
exit 1
fi
else
enabled=false
for tool in kwriteconfig6 kwriteconfig5; do
if command -v "$tool" >/dev/null; then "$tool" --file kwinrc --group Plugins --key openless-desktopEnabled true; enabled=true; break; fi
done
$enabled || { echo 'KDE configuration tools are missing' >&2; exit 1; }
for tool in qdbus6 qdbus qdbus-qt5; do
if command -v "$tool" >/dev/null; then "$tool" org.kde.KWin /KWin reconfigure; break; fi
done
# The service is started by D-Bus on demand and on the next KDE login.
fi
echo 'OpenLess desktop integration enabled. Restart OpenLess to bind shortcuts.'