65 lines
1.8 KiB
Bash
Executable File
65 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
SVG="$ROOT/assets/Icon.svg"
|
|
OUT="${1:-$ROOT/build/AppIcon.icns}"
|
|
|
|
if [ ! -f "$SVG" ]; then
|
|
echo "ERROR: $SVG not found" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v rsvg-convert >/dev/null 2>&1; then
|
|
echo "ERROR: rsvg-convert not on PATH (brew install librsvg)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v iconutil >/dev/null 2>&1; then
|
|
echo "ERROR: iconutil not on PATH (macOS only)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
WORK_SVG="$(mktemp -t icon-svg.XXXXXX)"
|
|
ICONSET="$(mktemp -d -t iconset.XXXXXX)/AppIcon.iconset"
|
|
mkdir -p "$ICONSET"
|
|
trap 'rm -rf "$WORK_SVG" "$(dirname "$ICONSET")"' EXIT
|
|
|
|
# pulls the gradient labeled #bg-color and paints it across the whole viewBox under the existing artwork.
|
|
BG_FLAG=()
|
|
if grep -q 'id="bg-color"' "$SVG"; then
|
|
VIEWBOX="$(grep -oE 'viewBox="[^"]+"' "$SVG" | head -1 | sed -E 's/viewBox="//;s/"$//')"
|
|
read -r VBX VBY VBW VBH <<<"$VIEWBOX"
|
|
INJECT="<rect x=\"${VBX}\" y=\"${VBY}\" width=\"${VBW}\" height=\"${VBH}\" fill=\"url(#bg-color)\"/>"
|
|
awk -v inj="$INJECT" '/<\/defs>/ {print; print inj; next} {print}' "$SVG" > "$WORK_SVG"
|
|
echo "Injected #bg-color full-canvas fill"
|
|
else
|
|
cp "$SVG" "$WORK_SVG"
|
|
BG_FLAG=(--background-color="${YRXTALS_ICON_BG:-black}")
|
|
echo "No #bg-color id; falling back to solid ${YRXTALS_ICON_BG:-black}"
|
|
fi
|
|
|
|
ICNS_SIZES=(
|
|
"16x16 16"
|
|
"16x16@2x 32"
|
|
"32x32 32"
|
|
"32x32@2x 64"
|
|
"128x128 128"
|
|
"128x128@2x 256"
|
|
"256x256 256"
|
|
"256x256@2x 512"
|
|
"512x512 512"
|
|
"512x512@2x 1024"
|
|
)
|
|
|
|
for entry in "${ICNS_SIZES[@]}"; do
|
|
name="${entry%% *}"
|
|
size="${entry##* }"
|
|
rsvg-convert "${BG_FLAG[@]}" --width="$size" --height="$size" "$WORK_SVG" -o "$ICONSET/icon_${name}.png"
|
|
done
|
|
|
|
mkdir -p "$(dirname "$OUT")"
|
|
iconutil -c icns "$ICONSET" -o "$OUT"
|
|
|
|
echo "Wrote $OUT"
|