diff --git a/extensions.bash b/extensions.bash new file mode 100755 index 0000000..af46df7 --- /dev/null +++ b/extensions.bash @@ -0,0 +1,58 @@ +#!/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