mirror of
https://github.com/sudoxnym/brands.git
synced 2026-04-14 19:47:34 +00:00
193 lines
5.8 KiB
Bash
Executable file
193 lines
5.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
if ! [ -x "$(command -v rsvg-convert)" ]; then
|
|
apt install -y librsvg2-bin
|
|
fi
|
|
|
|
# Copy folder, without symlinks, but use actual files instead
|
|
mkdir -p build/_
|
|
mkdir -p build/brands
|
|
|
|
# Clone MDI icons
|
|
rm -f -r mdi
|
|
git clone --depth=1 https://github.com/Templarian/MaterialDesign mdi
|
|
|
|
# Copy custom integrations
|
|
rsync -aL custom_integrations/ build/_
|
|
rsync -aL custom_integrations/ build
|
|
|
|
# Copy core integrations
|
|
rsync -aL --exclude '_homeassistant' core_integrations/ build/_
|
|
rsync -aL --exclude '_homeassistant' --exclude '_placeholder' core_integrations/ build
|
|
|
|
# Generate integration icons based on MDI
|
|
find ./build -type f -name "icon.txt" | while read icon; do
|
|
dir=$(dirname "${icon}")
|
|
mdi=$(<${icon})
|
|
mdi="${mdi##mdi:}"
|
|
rsvg-convert \
|
|
--stylesheet scripts/mdi.css \
|
|
--keep-aspect-ratio \
|
|
--height 256 \
|
|
--width 256 \
|
|
--background-color transparent \
|
|
--output "${dir}/icon.png" \
|
|
"mdi/svg/${mdi}.svg"
|
|
|
|
rsvg-convert \
|
|
--stylesheet scripts/mdi.css \
|
|
--keep-aspect-ratio \
|
|
--height 512 \
|
|
--width 512 \
|
|
--background-color transparent \
|
|
--output "${dir}/icon@2x.png" \
|
|
"mdi/svg/${mdi}.svg"
|
|
|
|
optipng -silent "${dir}/icon.png" "${dir}/icon@2x.png"
|
|
|
|
rm "${icon}"
|
|
echo "Generated mdi:${mdi} for ${icon}"
|
|
done
|
|
|
|
# Use icon@2x as logo@2x in case of a missing logo@2x and no dedicated logo is provided for better resolution
|
|
# This check must before the missing logo check
|
|
find ./build -type f -name "icon@2x.png" | while read icon; do
|
|
dir=$(dirname "${icon}")
|
|
if [[ ! -f "${dir}/logo2x.png" && ! -f "${dir}/logo.png" ]]; then
|
|
cp "${icon}" "${dir}/logo@2x.png"
|
|
echo "Using ${icon} as hDPI logo because no logo is provided"
|
|
fi
|
|
done
|
|
|
|
# Use icon as logo in case of a missing logo
|
|
find ./build -type f -name "icon.png" | while read icon; do
|
|
dir=$(dirname "${icon}")
|
|
if [[ ! -f "${dir}/logo.png" ]]; then
|
|
cp "${icon}" "${dir}/logo.png"
|
|
echo "Using ${icon} as logo"
|
|
fi
|
|
if [[ ! -f "${dir}/dark_logo.png" ]] && [[ -f "${dir}/dark_icon.png" ]]; then
|
|
cp "${dir}/dark_icon.png" "${dir}/dark_logo.png"
|
|
echo "Using ${dir}/dark_icon.png as dark_logo"
|
|
fi
|
|
done
|
|
|
|
# Use icon as icon@2x in case it is missing
|
|
find ./build -type f -name "icon.png" | while read icon; do
|
|
dir=$(dirname "${icon}")
|
|
if [[ ! -f "${dir}/icon@2x.png" ]]; then
|
|
cp "${icon}" "${dir}/icon@2x.png"
|
|
echo "Using ${icon} as hDPI icon"
|
|
fi
|
|
if [[ ! -f "${dir}/dark_logo@2x.png" ]] && [[ -f "${dir}/dark_icon@2x.png" ]]; then
|
|
cp "${dir}/dark_icon@2x.png" "${dir}/dark_logo@2x.png"
|
|
echo "Using ${dir}/dark_icon@2x.png as dark_logo@2x"
|
|
fi
|
|
done
|
|
|
|
# Use logo as logo@2x in case it is missing
|
|
find ./build -type f -name "logo.png" | while read logo; do
|
|
dir=$(dirname "${logo}")
|
|
if [[ ! -f "${dir}/logo@2x.png" ]]; then
|
|
cp "${logo}" "${dir}/logo@2x.png"
|
|
echo "Using ${logo} as hDPI logo"
|
|
fi
|
|
done
|
|
|
|
# Copy in all integrations as fallback for brands
|
|
rsync -aL --exclude 'brands' build/ build/brands
|
|
|
|
# Overwrite brands with actual brands
|
|
rsync -aL --exclude '_homeassistant' --exclude '_placeholder' core_brands/ build/brands
|
|
rsync -aL --exclude '_homeassistant' --exclude '_placeholder' core_brands/ build/brands/_
|
|
|
|
# Use brand icon as logo in case of a missing logo
|
|
find ./build/brands -type f -name "icon.png" | while read icon; do
|
|
dir=$(dirname "${icon}")
|
|
if [[ ! -f "${dir}/logo.png" ]]; then
|
|
cp "${icon}" "${dir}/logo.png"
|
|
echo "Using ${icon} as logo"
|
|
fi
|
|
if [[ ! -f "${dir}/dark_logo.png" ]] && [[ -f "${dir}/dark_icon.png" ]]; then
|
|
cp "${dir}/dark_icon.png" "${dir}/dark_logo.png"
|
|
echo "Using ${dir}/dark_icon.png as dark_logo"
|
|
fi
|
|
done
|
|
|
|
# Use brand icon as icon@2x in case it is missing
|
|
find ./build/brands -type f -name "icon.png" | while read icon; do
|
|
dir=$(dirname "${icon}")
|
|
if [[ ! -f "${dir}/icon@2x.png" ]]; then
|
|
cp "${icon}" "${dir}/icon@2x.png"
|
|
echo "Using ${icon} as hDPI icon"
|
|
fi
|
|
if [[ ! -f "${dir}/dark_logo@2x.png" ]] && [[ -f "${dir}/dark_icon@2x.png" ]]; then
|
|
cp "${dir}/dark_icon@2x.png" "${dir}/dark_logo@2x.png"
|
|
echo "Using ${dir}/dark_icon@2x.png as dark_logo@2x"
|
|
fi
|
|
done
|
|
|
|
# Use brand logo as logo@2x in case it is missing
|
|
find ./build/brands -type f -name "logo.png" | while read logo; do
|
|
dir=$(dirname "${logo}")
|
|
if [[ ! -f "${dir}/logo@2x.png" ]]; then
|
|
cp "${logo}" "${dir}/logo@2x.png"
|
|
echo "Using ${logo} as hDPI logo"
|
|
fi
|
|
done
|
|
|
|
# Create fallback for dark variants
|
|
find ./build -type f -type f -name "icon.png" -o -name "icon@2x.png" -o -name "logo.png" -o -name "logo@2x.png" | while read image; do
|
|
dir=$(dirname "${image}")
|
|
filename=$(basename -s .png "${image}")
|
|
if [[ ! -f "${dir}/dark_${filename}.png" ]]; then
|
|
cp "${image}" "${dir}/dark_${filename}.png"
|
|
echo "Using ${image} as dark_${filename}"
|
|
fi
|
|
done
|
|
|
|
# Copy hardware
|
|
rsync -aL hardware/ build/hardware
|
|
|
|
# Create fallback for dark hardware variants
|
|
find ./build/hardware -type f -name "*.png" | while read image; do
|
|
dir=$(dirname "${image}")
|
|
filename=$(basename -s .png "${image}")
|
|
if [[ ! -f "${dir}/dark_${filename}.png" ]]; then
|
|
cp "${image}" "${dir}/dark_${filename}.png"
|
|
echo "Using ${image} as dark_${filename}"
|
|
fi
|
|
done
|
|
|
|
# Create domains.json
|
|
core_brands=$(
|
|
find ./core_brands \
|
|
-maxdepth 1 \
|
|
-exec basename {} \; \
|
|
| sort \
|
|
| jq -sR 'split("\n")[1:]' \
|
|
| jq -r 'map(select(length > 0))'
|
|
)
|
|
|
|
core_integrations=$(
|
|
find ./core_integrations \
|
|
-maxdepth 1 \
|
|
-exec basename {} \; \
|
|
| sort \
|
|
| jq -sR 'split("\n")[1:]' \
|
|
| jq -r 'map(select(length > 0))'
|
|
)
|
|
custom_integrations=$(
|
|
find ./custom_integrations \
|
|
-maxdepth 1 \
|
|
-exec basename {} \; \
|
|
| sort \
|
|
| jq -sR 'split("\n")[1:]' \
|
|
| jq -r 'map(select(length > 0))'
|
|
)
|
|
|
|
jq -n '{"brands": $brands, "core": $core, "custom": $custom}' \
|
|
--argjson brands "$core_brands" \
|
|
--argjson core "$core_integrations" \
|
|
--argjson custom "$custom_integrations" \
|
|
| jq -r . > ./build/domains.json
|