#!/usr/bin/env bash # --------------------------------------------------------------------------- # Generate Catppuccin Macchiato wallpapers with ImageMagick. # Shipping binary images in a config repo is rude, so we synthesise them. # usage: make-wallpaper.sh [output-dir] [WIDTHxHEIGHT] # --------------------------------------------------------------------------- set -euo pipefail OUT_DIR="${1:-${XDG_DATA_HOME:-$HOME/.local/share}/wallpapers}" GEOM="${2:-3840x2160}" W="${GEOM%x*}" H="${GEOM#*x}" # ImageMagick 7 uses `magick`; 6 uses `convert`. if command -v magick >/dev/null 2>&1; then IM=(magick) elif command -v convert >/dev/null 2>&1; then IM=(convert) else echo "make-wallpaper: ImageMagick not found — skipping wallpaper generation" >&2 exit 0 fi mkdir -p "$OUT_DIR" base="#24273a" mantle="#1e2030" crust="#181926" mauve="#c6a0f6" blue="#8aadf4" teal="#8bd5ca" pink="#f5bde6" # --- 1. soft diagonal gradient -------------------------------------------- "${IM[@]}" -size "${W}x${H}" \ "gradient:${mantle}-${crust}" \ -rotate 45 -gravity center -extent "${W}x${H}" \ -blur 0x24 \ "$OUT_DIR/macchiato-gradient.png" # --- 2. radial glow over the base colour ---------------------------------- "${IM[@]}" -size "${W}x${H}" "xc:${base}" \ \( -size "${W}x${H}" "radial-gradient:${mauve}-${base}" -alpha set -channel A -evaluate multiply 0.22 +channel \) \ -compose over -composite \ \( -size "${W}x${H}" "radial-gradient:${teal}-${base}" -alpha set -channel A -evaluate multiply 0.12 +channel -roll +$((W/3))+$((H/3)) \) \ -compose over -composite \ -blur 0x40 \ "$OUT_DIR/macchiato-glow.png" # --- 3. subtle triangle/mosaic texture ------------------------------------ "${IM[@]}" -size "$((W/12))x$((H/12))" "xc:${base}" \ +noise Gaussian -blur 0x2 -normalize \ -level 40%,60% \ -fill "${base}" -colorize 82% \ -resize "${W}x${H}!" -blur 0x3 \ "$OUT_DIR/macchiato-texture.png" # --- 4. flat base, for people who want zero distraction ------------------- "${IM[@]}" -size "${W}x${H}" "xc:${base}" "$OUT_DIR/macchiato-flat.png" # --- 5. logo-ish centred mark on the gradient ----------------------------- "${IM[@]}" "$OUT_DIR/macchiato-gradient.png" \ -gravity center \ -fill "${mauve}" -stroke none \ -draw "circle $((W/2)),$((H/2)) $((W/2)),$((H/2 - H/9))" \ -fill "${base}" \ -draw "circle $((W/2)),$((H/2)) $((W/2)),$((H/2 - H/9 + H/90))" \ -blur 0x1 \ "$OUT_DIR/macchiato-ring.png" echo "wallpapers written to $OUT_DIR:" ls -1 "$OUT_DIR"