feat: gnome-extensions module
If you wished to install some Gnome extension, but couldn't find it in RPM, this extension will help you in that. Basically all extensions are supported, with some rare extensions like Pano just additionally needing some system dependencies. See README for more details.
This commit is contained in:
parent
c6f522e786
commit
04d94eacb2
3 changed files with 84 additions and 0 deletions
24
modules/gnome-extensions/README.md
Normal file
24
modules/gnome-extensions/README.md
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
# `gnome-extensions`
|
||||
|
||||
The `gnome-extensions` module can be used to install Gnome extensions inside system directory.
|
||||
|
||||
This module is universally compatible with all distributions which ship Gnome, as long as some extension doesn't require some additional dependency, like Pano.
|
||||
|
||||
Thanks to https://extensions.gnome.org which provides end-releases of extensions as zips, it is very easy to maintain this module configuration.
|
||||
Basically the only maintenance is to bump the extension version when new Fedora/Gnome releases (around every 6 months).
|
||||
|
||||
What does this module do?
|
||||
- It parses the gettext-domain that you inputted, along with the extension version
|
||||
- It downloads the extension directly from https://extensions.gnome.org
|
||||
- Downloaded extension archive is then extracted to temporary directory
|
||||
- All of its extracted files are copied to the appropriate final directories
|
||||
(`/usr/share/gnome-shell/extensions`, `/usr/share/glib-2.0/schemas`, & `/usr/share/locale`)
|
||||
|
||||
# Usage
|
||||
|
||||
To use this module, you need to input gettext-domain of the extension without @ symbol + the version of the extension in `.v%VERSION%` format.
|
||||
You can see gettext-domain of the extension by looking at the extension repo inside metadata.json
|
||||
or by simply downloading the zip file from https://extensions.gnome.org & than looking at the download URL part after `/extension-data/` & before `.v%VERSION%`.
|
||||
|
||||
You must assure that version of the extension is compatible with current Gnome version that your image is using.
|
||||
You can easily see this information when downloading extension from https://extensions.gnome.org
|
||||
52
modules/gnome-extensions/gnome-extensions.sh
Normal file
52
modules/gnome-extensions/gnome-extensions.sh
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# Tell build process to exit if there are any errors.
|
||||
set -euo pipefail
|
||||
|
||||
get_yaml_array GETTEXT_DOMAIN '.install.gettext-domain[]' "$1"
|
||||
|
||||
if [[ ${#GETTEXT_DOMAIN[@]} -gt 0 ]]; then
|
||||
for EXTENSION in "${GETTEXT_DOMAIN[@]}"; do
|
||||
URL="https://extensions.gnome.org/extension-data/${EXTENSION}.shell-extension.zip"
|
||||
TMP_DIR="/tmp/${EXTENSION}"
|
||||
ARCHIVE=$(basename "${URL}")
|
||||
ARCHIVE_DIR="${TMP_DIR}/${ARCHIVE}"
|
||||
VERSION=$(echo "${EXTENSION}" | grep -oP 'v\d+')
|
||||
echo "Installing ${EXTENSION} Gnome extension with version ${VERSION}"
|
||||
# Download archive
|
||||
curl -L "${URL}" --create-dirs -o "${ARCHIVE_DIR}"
|
||||
# Extract archive
|
||||
echo "Extracting ZIP archive"
|
||||
unzip "${ARCHIVE_DIR}" -d "${TMP_DIR}" > /dev/null
|
||||
# Remove archive
|
||||
echo "Removing archive"
|
||||
rm "${ARCHIVE_DIR}"
|
||||
# Read necessary info from metadata.json
|
||||
echo "Reading necessary info from metadata.json"
|
||||
UUID=$(yq '.uuid' < "${TMP_DIR}/metadata.json")
|
||||
SCHEMA_ID=$(yq '.settings-schema' < "${TMP_DIR}/metadata.json")
|
||||
# Install main extension files
|
||||
echo "Installing main extension files"
|
||||
install -d -m 0755 "/usr/share/gnome-shell/extensions/${UUID}/"
|
||||
find "${TMP_DIR}" -mindepth 1 -maxdepth 1 ! -path "*locale*" ! -path "*schemas*" -exec cp -r {} "/usr/share/gnome-shell/extensions/${UUID}/" \;
|
||||
find "/usr/share/gnome-shell/extensions/${UUID}" -type d -exec chmod 0755 {} +
|
||||
find "/usr/share/gnome-shell/extensions/${UUID}" -type f -exec chmod 0644 {} +
|
||||
# Install schema
|
||||
echo "Installing schema extension file"
|
||||
install -d -m 0755 "/usr/share/glib-2.0/schemas/"
|
||||
install -D -p -m 0644 "${TMP_DIR}/schemas/${SCHEMA_ID}.gschema.xml" "/usr/share/glib-2.0/schemas/${SCHEMA_ID}.gschema.xml"
|
||||
# Install languages
|
||||
echo "Installing language extension files"
|
||||
install -d -m 0755 "/usr/share/locale/"
|
||||
cp -r "${TMP_DIR}/locale"/* "/usr/share/locale/"
|
||||
# Delete the temporary directory
|
||||
echo "Cleaning up the temporary directory"
|
||||
rm -r "${TMP_DIR}"
|
||||
echo "------------------------------DONE----------------------------------"
|
||||
done
|
||||
else
|
||||
echo "ERROR: You did not specify gettext-domain"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Finished the installation of Gnome extensions"
|
||||
8
modules/gnome-extensions/module.yml
Normal file
8
modules/gnome-extensions/module.yml
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
name: gnome-extensions
|
||||
shortdesc: The gnome-extensions module can be used to install Gnome extensions inside system directory.
|
||||
readme: https://raw.githubusercontent.com/blue-build/modules/main/modules/gnome-extensions/README.md
|
||||
example: |
|
||||
type: gnome-extensions
|
||||
install:
|
||||
gettext-domain: # Omit @ symbol from gettext-domain. You can see the gettext-domain by looking into extension metadata.json.
|
||||
- nightthemeswitcherromainvigier.fr.v75 # Version must be specified by adding .v%VERSION% after gettext domain. Extension version must be compatible with current Gnome version.
|
||||
Loading…
Add table
Add a link
Reference in a new issue