QORTector-scripts/create-icon-theme-uni.sh

152 lines
4.5 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -euo pipefail
for cmd in rsync curl unzip convert; do
if ! command -v "$cmd" >/dev/null; then
echo "[!] Required command '$cmd' is not installed. Please install it and re-run."
exit 1
fi
done
ICON_SOURCE_DIR="${HOME}/Pictures/icons/icons_theme"
ICON_THEME_NAME="Yaru-blue-qortal"
ICON_CACHE_DIR="${HOME}/.icons/${ICON_THEME_NAME}"
TARGET_THEME_DIR="${ICON_CACHE_DIR}/48x48/apps"
# Download icons if missing
if [ ! -d "${ICON_SOURCE_DIR}" ]; then
echo "🔽 Downloading Qortal icon set..."
mkdir -p "${HOME}/iconTemp"
trap 'rm -rf "${HOME}/iconTemp"' EXIT
cd "${HOME}/iconTemp"
curl -L -o icons.zip https://cloud.qortal.org/s/machinePicturesFolder/download
unzip icons.zip
mv Pictures/* "${HOME}/Pictures/"
cd
fi
# Define icon mappings
declare -A ICON_MAP=(
["qortal-menu-button.png"]="qortal-menu-button"
["qortal-menu-button-2.png"]="qortal-menu-button-2"
["qortal-menu-button-3.png"]="qortal-menu-button-3"
["qortal-menu-button-4.png"]="qortal-menu-button-4"
["qortal-ui.png"]="qortal-ui"
["qortal-hub.png"]="qortal-hub"
["qortal.png"]="qortal"
)
# Step 1: Choose base theme
BASE_THEME_DIR=""
if [ -d "/usr/share/icons/Yaru-dark" ]; then
BASE_THEME_DIR="/usr/share/icons/Yaru-dark"
echo "[*] Using Yaru-dark as base."
else
CURRENT_THEME=$(gsettings get org.gnome.desktop.interface icon-theme 2>/dev/null | tr -d "'")
if [ -n "$CURRENT_THEME" ] && [ -d "/usr/share/icons/$CURRENT_THEME" ]; then
BASE_THEME_DIR="/usr/share/icons/$CURRENT_THEME"
echo "[*] Falling back to current icon theme: $CURRENT_THEME"
else
echo "[!] Could not find Yaru-dark or current theme. Creating minimal fallback..."
mkdir -p "${ICON_CACHE_DIR}/48x48/apps"
cat <<EOF > "${ICON_CACHE_DIR}/index.theme"
[Icon Theme]
Name=${ICON_THEME_NAME}
Inherits=hicolor
Directories=48x48/apps
[48x48/apps]
Size=48
Context=Applications
Type=Fixed
EOF
fi
fi
# Step 2: Copy base theme if found
if [ -n "$BASE_THEME_DIR" ] && [ ! -d "${ICON_CACHE_DIR}" ]; then
echo "[*] Copying base theme from: $BASE_THEME_DIR"
mkdir -p "${ICON_CACHE_DIR}"
rsync -a "$BASE_THEME_DIR/" "${ICON_CACHE_DIR}/"
if [ -f "/usr/share/icons/Yaru-blue-dark/index.theme" ]; then
cp /usr/share/icons/Yaru-blue-dark/index.theme "${ICON_CACHE_DIR}/index.theme"
fi
sed -i 's/^Name=.*/Name=Yaru-blue-qortal/' "${ICON_CACHE_DIR}/index.theme"
sed -i 's/^Inherits=.*/Inherits=Yaru-blue-dark,Yaru-dark,Yaru,hicolor/' "${ICON_CACHE_DIR}/index.theme"
if ! grep -q "48x48/apps" "${ICON_CACHE_DIR}/index.theme"; then
echo "Directories=48x48/apps" >> "${ICON_CACHE_DIR}/index.theme"
echo "
[48x48/apps]
Size=48
Context=Applications
Type=Fixed" >> "${ICON_CACHE_DIR}/index.theme"
fi
fi
# Step 3: Install icons
mkdir -p "${TARGET_THEME_DIR}"
install_icon() {
local src="$1"
local name="$2"
local dest="${TARGET_THEME_DIR}/${name}.png"
if [ ! -f "$src" ]; then
echo "[!] Missing source icon: $src"
return
fi
echo "[*] Installing icon: $name"
convert "$src" -resize 48x48 "$dest"
}
for src in "${!ICON_MAP[@]}"; do
install_icon "${ICON_SOURCE_DIR}/${src}" "${ICON_MAP[$src]}"
done
# Step 4: Update icon cache
if [ -f "${ICON_CACHE_DIR}/index.theme" ]; then
gtk-update-icon-cache -f "${ICON_CACHE_DIR}" || echo "[!] gtk-update-icon-cache failed or not found."
fi
# Step 5: Set icon theme if DE supports it
CURRENT_DESKTOP=$(echo "${XDG_CURRENT_DESKTOP}" | tr '[:upper:]' '[:lower:]')
# Normalize aliases
case "$CURRENT_DESKTOP" in
x-cinnamon) CURRENT_DESKTOP="cinnamon" ;;
xfce*) CURRENT_DESKTOP="xfce" ;;
kde-plasma) CURRENT_DESKTOP="plasma" ;;
esac
if command -v gsettings >/dev/null; then
case "$CURRENT_DESKTOP" in
cinnamon)
gsettings set org.cinnamon.desktop.interface icon-theme "${ICON_THEME_NAME}"
;;
gnome)
gsettings set org.gnome.desktop.interface icon-theme "${ICON_THEME_NAME}"
;;
xfce)
xfconf-query -c xsettings -p /Net/IconThemeName -s "${ICON_THEME_NAME}" 2>/dev/null
;;
kde | plasma)
kwriteconfig5 --file kdeglobals --group Icons --key Theme "${ICON_THEME_NAME}"
;;
*)
echo "[!] Unsupported or unknown DE: '$CURRENT_DESKTOP'. Set icon theme manually if needed."
;;
esac
else
echo "[!] gsettings not available. Please set icon theme manually if needed."
fi
echo "✅ Qortal icons installed into local theme: ${ICON_THEME_NAME}"
echo " You can now use Icon=qortal-ui (etc.) in .desktop files."
echo "💡 If icons don't show up immediately, try logging out and back in."