#!/usr/bin/env bash # sync-aom-to-obsidian.sh # Syncs Atomizer V2 docs/AOM/ → Obsidian vault (with markdown→wiki-link conversion) # Direction: Repo (source of truth) → Obsidian (read target for iPad/SeaDrive) # Per DEC-036: one-way sync, repo wins. set -euo pipefail REPO_AOM="/home/papa/repos/Atomizer-V2/docs/AOM" OBSIDIAN_AOM="/home/papa/obsidian-vault/2-Projects/P-Atomizer-Operating-Manual" LOG="/home/papa/atomizer/logs/aom-sync.log" mkdir -p "$(dirname "$LOG")" # Check source exists if [ ! -d "$REPO_AOM" ]; then echo "$(date -Iseconds) ERROR: Source not found: $REPO_AOM" >> "$LOG" exit 1 fi # Sync files (delete extras in target that aren't in source) # --exclude .obsidian to preserve any Obsidian workspace settings rsync -av --delete \ --exclude '.obsidian/' \ --exclude '.trash/' \ "$REPO_AOM/" "$OBSIDIAN_AOM/" 2>&1 | tail -5 >> "$LOG" # Convert standard markdown links back to Obsidian wiki-links # Pattern: [Display Text](./path/to/file.md) → [[path/to/file|Display Text]] # Pattern: [filename](./filename.md) → [[filename]] find "$OBSIDIAN_AOM" -name "*.md" -type f | while read -r file; do # Convert [text](relative/path.md#heading) → [[relative/path#heading|text]] perl -i -pe ' # [Text](./file.md#heading) → [[file#heading|Text]] s/\[([^\]]+)\]\(\.\/([\w\/-]+)\.md(#[^\)]+)?\)/ my ($text, $path, $heading) = ($1, $2, $3 || ""); my $target = $path . $heading; # If display text matches filename, simplify my $basename = $path; $basename =~ s|.*\/||; ($text eq $basename) ? "[[$target]]" : "[[$target|$text]]" /ge; # [Text](path.md) without ./ prefix s/\[([^\]]+)\]\(([\w\/-]+)\.md(#[^\)]+)?\)/ my ($text, $path, $heading) = ($1, $2, $3 || ""); my $target = $path . $heading; my $basename = $path; $basename =~ s|.*\/||; ($text eq $basename) ? "[[$target]]" : "[[$target|$text]]" /ge; ' "$file" done # Handle the README.md → MAP rename for Obsidian navigation if [ -f "$OBSIDIAN_AOM/README.md" ] && [ ! -f "$OBSIDIAN_AOM/MAP - Atomizer Operating Manual.md" ]; then cp "$OBSIDIAN_AOM/README.md" "$OBSIDIAN_AOM/MAP - Atomizer Operating Manual.md" fi echo "$(date -Iseconds) OK: Synced $(find "$OBSIDIAN_AOM" -name '*.md' | wc -l) docs" >> "$LOG"