#!/bin/bash # CONSTANTS array=( netspeedsimplified@prateekmedia.extension runcat@kolesnikov.se dash-to-dock@micxgx.gmail.com appindicatorsupport@rgcjonas.gmail.com weeks-start-on-monday@extensions.gnome-shell.fifi.org ) # FUNCTIONS function find_extension_by_uuid { local uuid=$1 local page=${2:-1} JSON=$(curl -Lfs "https://extensions.gnome.org/extension-query/?search='${i}'&page=$page") local numpages=$(echo $JSON | jq ".numpages") local extension=$(echo $JSON | jq ".extensions[] | select(.uuid==\"$i\") ") if [[ -z $extension ]]; then page=$((page + 1)) [[ $page -gt $numpages ]] && echo "not found, exiting!" && exit 2 echo >&2 "not found, trying page #$page..." find_extension_by_uuid "$uuid" "$page" else echo "$extension" fi } # MAIN set -Eue gnome_version=$(gnome-extensions version | cut -d. -f1) echo "GNOME=$gnome_version" for i in "${array[@]}"; do page=1 if ! gnome-extensions list | grep --quiet "$i"; then EXTENSION=$(find_extension_by_uuid "$i") name=$(echo "$i" | sed 's/@//') version_tag=$(echo "$EXTENSION" | jq ".shell_version_map.\"$gnome_version\".version") echo "$i => $name => $version_tag" zip_file="$i.zip" URL="https://extensions.gnome.org/extension-data/$name.v$version_tag.shell-extension.zip" wget -O "$zip_file" "$URL" gnome-extensions install --force "$zip_file" rm "$zip_file" # interactive ONLY! busctl call --timeout 20 --expect-reply=yes --user org.gnome.Shell.Extensions /org/gnome/Shell/Extensions org.gnome.Shell.Extensions InstallRemoteExtension s "$i" fi gnome-extensions enable "$i" echo "successfully enabled extension: $i" # break done