#!/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 " 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)"