Files
omarchy/bin/omarchy-theme-render
2025-12-31 17:00:30 -07:00

80 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# omarchy-theme-render
# Renders templates using values from a TOML configuration file.
COLORS_FILE="$1"
TEMPLATES_DIR="$2"
OUTPUT_DIR="$3"
if [[ -z "$COLORS_FILE" || -z "$TEMPLATES_DIR" || -z "$OUTPUT_DIR" ]]; then
echo "Usage: omarchy-theme-render <colors_toml> <templates_dir> <output_dir>"
exit 1
fi
if [[ ! -f "$COLORS_FILE" ]]; then
echo "Error: Colors file '$COLORS_FILE' not found"
exit 1
fi
if [[ ! -d "$TEMPLATES_DIR" ]]; then
echo "Error: Templates directory '$TEMPLATES_DIR' not found"
exit 1
fi
mkdir -p "$OUTPUT_DIR"
# Create a temporary sed script
SED_SCRIPT=$(mktemp)
# Read the TOML file line by line
while IFS='=' read -r key value; do
# Skip comments and empty lines
[[ "$key" =~ ^[[:space:]]*# ]] && continue
[[ -z "$key" ]] && continue
# Skip lines without values (like [headers])
[[ -z "$value" ]] && continue
# Trim whitespace from key and value
key=$(echo "$key" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
value=$(echo "$value" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
# Remove quotes from string values
value="${value%\"}"
value="${value#\"}"
value="${value%\'}"
value="${value#\'}"
# Add replacement command to sed script
# We use | as delimiter to avoid issues with / in paths or values, though colors are usually hex
# Escaping special regex characters in value would be ideal, but for hex codes it's fine.
# We replace {{ key }} with the value
echo "s|{{ $key }}|$value|g" >> "$SED_SCRIPT"
done < "$COLORS_FILE"
# Process each template file
count=0
skipped=0
# Enable nullglob to handle case where no templates exist
shopt -s nullglob
for tpl in "$TEMPLATES_DIR"/*.tpl; do
filename=$(basename "$tpl" .tpl)
output_path="$OUTPUT_DIR/$filename"
# If the file already exists in the output directory (copied from theme specific folder),
# do NOT overwrite it.
if [[ -f "$output_path" ]]; then
# echo "Skipping $filename (explicit config exists)"
((skipped++))
continue
fi
sed -f "$SED_SCRIPT" "$tpl" > "$output_path"
((count++))
done
rm "$SED_SCRIPT"
echo "Rendered $count templates to $OUTPUT_DIR (skipped $skipped existing)"