From 79ea29b7c57bea969419e00bbd6bd2b90c17efba Mon Sep 17 00:00:00 2001 From: Azat Date: Mon, 2 Feb 2026 22:20:28 +0100 Subject: [PATCH] Add snippets.d auto-import for modular config --- SKILL.md | 11 +++++++++++ scripts/autorun.sh | 7 ++++++- scripts/run.sh | 41 ++++++++++++++++++++++++++++++++++------- 3 files changed, 51 insertions(+), 8 deletions(-) diff --git a/SKILL.md b/SKILL.md index 3687bf4..426141c 100644 --- a/SKILL.md +++ b/SKILL.md @@ -42,6 +42,17 @@ Create a `Caddyfile` in your skill's directory or set `CADDYFILE_PATH` environme # } ``` +## Auto-Import from Skills + +Other skills can drop `.caddy` snippets into `caddy/snippets.d/` and they'll be automatically merged at startup. + +Example: If `ttyd` skill is present with `TTYD_DOMAIN=terminal.example.com`, it creates: +``` +caddy/snippets.d/ttyd.caddy +``` + +Caddy's `run.sh` merges all snippets into the config before starting. + ## Usage This skill is typically used as a dependency by other skills that need a web server: diff --git a/scripts/autorun.sh b/scripts/autorun.sh index 092a463..cb3b595 100644 --- a/scripts/autorun.sh +++ b/scripts/autorun.sh @@ -25,11 +25,16 @@ install_caddy() { echo "Caddy installed: $(caddy version)" } -# Create data directory +# Create data directory and snippets folder setup_dirs() { local data_dir="${CADDY_DATA_DIR:-/data/caddy}" + local skill_dir="$(dirname "$(dirname "$0")")" + mkdir -p "$data_dir" + mkdir -p "$skill_dir/snippets.d" + echo "Caddy data directory: $data_dir" + echo "Caddy snippets directory: $skill_dir/snippets.d" } install_caddy diff --git a/scripts/run.sh b/scripts/run.sh index 9921f7d..5ea07b0 100644 --- a/scripts/run.sh +++ b/scripts/run.sh @@ -1,13 +1,40 @@ #!/bin/bash set -e -CADDYFILE_PATH="${CADDYFILE_PATH:-/skills/caddy/Caddyfile}" +SKILL_DIR="$(dirname "$(dirname "$0")")" +CADDYFILE_PATH="${CADDYFILE_PATH:-$SKILL_DIR/Caddyfile}" CADDY_DATA_DIR="${CADDY_DATA_DIR:-/data/caddy}" +SNIPPETS_DIR="$SKILL_DIR/snippets.d" +MERGED_CONFIG="/tmp/Caddyfile.merged" -if [ ! -f "$CADDYFILE_PATH" ]; then - echo "Error: Caddyfile not found at $CADDYFILE_PATH" - exit 1 -fi +# Merge base Caddyfile with snippets from other skills +merge_config() { + if [ ! -f "$CADDYFILE_PATH" ]; then + echo "Error: Caddyfile not found at $CADDYFILE_PATH" + exit 1 + fi -echo "Starting Caddy with config: $CADDYFILE_PATH" -exec caddy run --config "$CADDYFILE_PATH" --adapter caddyfile + # Start with base config + cat "$CADDYFILE_PATH" > "$MERGED_CONFIG" + + # Append snippets from other skills + if [ -d "$SNIPPETS_DIR" ] && [ "$(ls -A "$SNIPPETS_DIR" 2>/dev/null)" ]; then + echo "" >> "$MERGED_CONFIG" + echo "# === Auto-imported from skills ===" >> "$MERGED_CONFIG" + + for snippet in "$SNIPPETS_DIR"/*.caddy; do + if [ -f "$snippet" ]; then + echo "" >> "$MERGED_CONFIG" + cat "$snippet" >> "$MERGED_CONFIG" + echo "Imported: $(basename "$snippet")" + fi + done + fi + + echo "Merged config written to: $MERGED_CONFIG" +} + +merge_config + +echo "Starting Caddy..." +exec caddy run --config "$MERGED_CONFIG" --adapter caddyfile