Files
Atomizer/hq/scripts/sync-aom-to-obsidian.sh

58 lines
2.3 KiB
Bash
Executable File

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