diff options
Diffstat (limited to 'raveos-center/adat/actions/discord.sh')
| -rwxr-xr-x | raveos-center/adat/actions/discord.sh | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/raveos-center/adat/actions/discord.sh b/raveos-center/adat/actions/discord.sh new file mode 100755 index 0000000..9b626b3 --- /dev/null +++ b/raveos-center/adat/actions/discord.sh @@ -0,0 +1,249 @@ +#!/bin/bash +# Discord + Vencord telepítő script +# Környezeti változók: INSTALL_USER, INSTALL_HOME, REPO_CONFIGS_URL + +set -e + +USER="$INSTALL_USER" +HOME="$INSTALL_HOME" +REPO_URL="${REPO_CONFIGS_URL:-https://git.rp1.hu/Nippy/Raveos-App-beta/raw/branch/main/raveos-app-installer-beta/configs/}" +ACTION="${1:-install}" +TARGET_UID="${TARGET_UID:-$(id -u "$USER" 2>/dev/null || true)}" +TARGET_XDG_RUNTIME_DIR="${TARGET_XDG_RUNTIME_DIR:-/run/user/$TARGET_UID}" +CONFIG_OVERRIDE_DIR="${RAVEOS_CONFIG_OVERRIDE_DIR:-/etc/raveos-beta/configs}" +CONFIG_PACKAGE_DIR="${RAVEOS_CONFIG_PACKAGE_DIR:-/usr/share/raveos-app-installer-beta/configs}" + +run_as_user() { + runuser -u "$USER" -- env \ + HOME="$HOME" \ + XDG_RUNTIME_DIR="$TARGET_XDG_RUNTIME_DIR" \ + "$@" +} + +resolve_local_config() { + local name="$1" + local candidate + for candidate in \ + "$CONFIG_OVERRIDE_DIR/$name" \ + "$CONFIG_PACKAGE_DIR/$name" + do + if [[ -f "$candidate" ]]; then + printf '%s\n' "$candidate" + return 0 + fi + done + return 1 +} + +remove_installed_packages() { + local installed=() + local pkg + for pkg in "$@"; do + if pacman -Qq "$pkg" >/dev/null 2>&1; then + installed+=("$pkg") + fi + done + if ((${#installed[@]})); then + pacman -Rnsu --noconfirm "${installed[@]}" + fi +} + +find_discord_dirs() { + local d + for d in "$HOME"/.config/discord/app-*/resources/app.asar; do + [[ -e "$d" ]] && printf '%s\n' "$(dirname "$(dirname "$d")")" + done + for d in "$HOME/.local/share/discord" "$HOME/.local/share/Discord" /usr/lib/discord /opt/discord; do + [[ -e "$d/resources/app.asar" ]] && printf '%s\n' "$d" + done +} + +if [[ "$ACTION" == "remove" ]]; then + echo "Removing Discord + Vencord for $USER..." + while IFS= read -r dir; do + [[ -n "$dir" ]] || continue + run_as_user /usr/local/bin/VencordInstallerCli-linux -uninstall -location "$dir" </dev/null 2>/dev/null || true + run_as_user /usr/local/bin/VencordInstallerCli-linux -uninstall-openasar -location "$dir" </dev/null 2>/dev/null || true + done < <(find_discord_dirs) + remove_installed_packages discord + run_as_user env DBUS_SESSION_BUS_ADDRESS="unix:path=$TARGET_XDG_RUNTIME_DIR/bus" \ + systemctl --user disable --now vencord-patch.path 2>/dev/null || true + rm -f "$HOME/.config/systemd/user/vencord-patch.path" \ + "$HOME/.config/systemd/user/vencord-patch.service" \ + "$HOME/.config/systemd/user/default.target.wants/vencord-patch.path" + rm -f /etc/pacman.d/hooks/vencord-reinstall.hook + rm -f /usr/local/bin/vencord-reinstall.sh + rm -f /usr/local/bin/vencord-patch + rm -f /usr/local/bin/VencordInstallerCli-linux + rm -rf "$HOME/.config/Vencord" + echo "Discord + Vencord removal complete!" + exit 0 +fi + +echo "Installing Discord + Vencord for $USER..." + +# Discord telepítése +pacman -S --noconfirm --needed discord + +# Secure temp directory +TMPDIR=$(mktemp -d) +chmod 755 "$TMPDIR" +trap 'rm -rf "$TMPDIR"' EXIT + +# Vencord Installer letöltése (fix verzió + SHA256 ellenőrzés) +echo "Downloading Vencord Installer..." +VENCORD_VERSION="1.4.2" +VENCORD_SHA256="52642c8521a866ad241c10337144a4f513672c54b9c86a8169954785054c815d" +VENCORD_URL="https://github.com/Vencord/Installer/releases/download/v${VENCORD_VERSION}/VencordInstallerCli-linux" +wget -q -O "$TMPDIR/VencordInstallerCli-linux" "$VENCORD_URL" +echo "${VENCORD_SHA256} $TMPDIR/VencordInstallerCli-linux" | sha256sum -c - >/dev/null || { + echo "ERROR: Vencord installer checksum mismatch (version ${VENCORD_VERSION})" + exit 1 +} + +# Verify it's an ELF binary (not a malicious script) +FILE_TYPE=$(file -b "$TMPDIR/VencordInstallerCli-linux") +if [[ "$FILE_TYPE" != ELF* ]]; then + echo "ERROR: Downloaded file is not a valid ELF binary: $FILE_TYPE" + exit 1 +fi + +chmod +x "$TMPDIR/VencordInstallerCli-linux" + +# Vencord installer másolása a rendszerbe +cp "$TMPDIR/VencordInstallerCli-linux" /usr/local/bin/VencordInstallerCli-linux +chmod +x /usr/local/bin/VencordInstallerCli-linux + +# Vencord telepítése. Az új Discord bootstrap a user home-ba telepíti az +# app-<verzió> mappákat (~/.config/discord/app-*/resources/app.asar), ezért +# ezeket user-ként, explicit -location-nel patcheljük. Régi rendszer-szintű +# telepítés (/usr/lib/discord) esetén is működik. +cat > /usr/local/bin/vencord-patch << 'PATCH' +#!/bin/bash +for _ in $(seq 1 60); do + hianyzik=0 + for d in "$HOME"/.config/discord/app-*/; do + [ -d "$d" ] || continue + [ -e "${d}resources/app.asar" ] || hianyzik=1 + done + [ "$hianyzik" = 0 ] && break + sleep 5 +done +for asar in "$HOME"/.config/discord/app-*/resources/app.asar "$HOME"/.local/share/discord/resources/app.asar "$HOME"/.local/share/Discord/resources/app.asar /usr/lib/discord/resources/app.asar /opt/discord/resources/app.asar; do + [ -f "$asar" ] || continue + res=$(dirname "$asar") + [ -e "$res/_app.asar" ] && continue + [ -w "$res" ] || continue + dir=$(dirname "$res") + echo "Vencord patch: $dir" + /usr/local/bin/VencordInstallerCli-linux -install -location "$dir" </dev/null || true + /usr/local/bin/VencordInstallerCli-linux -install-openasar -location "$dir" </dev/null || true +done +PATCH +chmod 755 /usr/local/bin/vencord-patch + +UNIT_DIR="$HOME/.config/systemd/user" +run_as_user mkdir -p "$UNIT_DIR/default.target.wants" +cat > "$UNIT_DIR/vencord-patch.service" << 'UNIT' +[Unit] +Description=Vencord patch az uj Discord verziokra +StartLimitIntervalSec=0 + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/vencord-patch +UNIT +cat > "$UNIT_DIR/vencord-patch.path" << 'UNIT' +[Unit] +Description=Uj Discord verzio figyelese a Vencordhoz + +[Path] +PathChanged=%h/.config/discord +MakeDirectory=yes + +[Install] +WantedBy=default.target +UNIT +ln -sf ../vencord-patch.path "$UNIT_DIR/default.target.wants/vencord-patch.path" +chown -R "$USER:$USER" "$HOME/.config/systemd" +run_as_user env DBUS_SESSION_BUS_ADDRESS="unix:path=$TARGET_XDG_RUNTIME_DIR/bus" \ + systemctl --user daemon-reload 2>/dev/null || true +run_as_user env DBUS_SESSION_BUS_ADDRESS="unix:path=$TARGET_XDG_RUNTIME_DIR/bus" \ + systemctl --user start vencord-patch.path 2>/dev/null || true + +echo "Installing Vencord..." +if [[ -n "$(find_discord_dirs)" ]]; then + run_as_user /usr/local/bin/vencord-patch +else + echo "A Discord az elso inditaskor tolti le magat, a Vencord ezutan automatikusan felkerul." +fi + +# Pacman hook: Discord update után Vencord újratelepítés +mkdir -p /etc/pacman.d/hooks +cat > /etc/pacman.d/hooks/vencord-reinstall.hook << 'HOOK' +[Trigger] +Operation = Install +Operation = Upgrade +Type = Package +Target = discord + +[Action] +Description = Reinstalling Vencord after Discord update... +When = PostTransaction +Exec = /usr/local/bin/vencord-reinstall.sh +HOOK + +# Reinstall script - user neve bele van égetve telepítéskor +cat > /usr/local/bin/vencord-reinstall.sh << SCRIPT +#!/bin/bash +runuser -u "$USER" -- env HOME="$HOME" /usr/local/bin/vencord-patch || true +SCRIPT +chmod +x /usr/local/bin/vencord-reinstall.sh + +# Vencord config könyvtár létrehozása és RaveOS téma letöltése +run_as_user mkdir -p "$HOME/.config/Vencord/themes" +echo "Downloading RaveOS Vencord theme..." +if local_cfg="$(resolve_local_config RaveOS-Vencord.theme.css)"; then + cp "$local_cfg" "$HOME/.config/Vencord/themes/RaveOS-Vencord.theme.css" +else + wget -q -O "$HOME/.config/Vencord/themes/RaveOS-Vencord.theme.css" \ + "${REPO_URL}RaveOS-Vencord.theme.css" || true +fi +if local_cfg="$(resolve_local_config raveos-discord-bg.jpeg)"; then + cp "$local_cfg" "$HOME/.config/Vencord/themes/raveos-discord-bg.jpeg" +else + wget -q -O "$HOME/.config/Vencord/themes/raveos-discord-bg.jpeg" \ + "${REPO_URL}raveos-discord-bg.jpeg" || true +fi + +# Vencord settings: téma engedélyezés + quickCss bekapcsolás +run_as_user mkdir -p "$HOME/.config/Vencord/settings" +VENCORD_SETTINGS="$HOME/.config/Vencord/settings/settings.json" +if [ ! -f "$VENCORD_SETTINGS" ]; then + cat > "$VENCORD_SETTINGS" << 'SETTINGS' +{ + "autoUpdate": true, + "autoUpdateNotification": true, + "useQuickCss": true, + "enabledThemes": [ + "RaveOS-Vencord.theme.css" + ] +} +SETTINGS +else + python3 -c " +import json +with open('$VENCORD_SETTINGS', 'r') as f: + s = json.load(f) +themes = s.get('enabledThemes', []) +if 'RaveOS-Vencord.theme.css' not in themes: + themes.append('RaveOS-Vencord.theme.css') + s['enabledThemes'] = themes + with open('$VENCORD_SETTINGS', 'w') as f: + json.dump(s, f, indent=4) +" || true +fi +chown -R "$USER:$USER" "$HOME/.config/Vencord" + +echo "Discord + Vencord installation complete!" +echo "Ha a Vencord az elso inditaskor meg nem latszik, inditsd ujra a Discordot." |