Files
fedora-dots/.local/state/noctalia/community-templates/obsidian/apply.sh
T
2026-11-04 20:35:46 +01:00

60 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/bash
set -euo pipefail
# Discover Obsidian vaults by finding .obsidian directories.
# Creates the snippets/ folder if it doesn't exist and enables the snippet
# in each vault's appearance.json.
snippet_name="noctalia"
find_vaults() {
# Search common locations for Obsidian vaults (up to 4 levels deep)
local search_dirs=("$HOME")
for dir in "${search_dirs[@]}"; do
find "$dir" -maxdepth 4 -name ".obsidian" -type d 2>/dev/null || true
done | sort -u
}
case "${1:-}" in
output)
# Called by noctalia to determine output paths.
# Print one path per line for each discovered vault.
find_vaults | while read -r obsidian_dir; do
snippets_dir="$obsidian_dir/snippets"
mkdir -p "$snippets_dir"
echo "$snippets_dir/$snippet_name.css"
done
;;
apply)
# Called after rendering. Enable the snippet in each vault's appearance.json.
find_vaults | while read -r obsidian_dir; do
appearance_file="$obsidian_dir/appearance.json"
if [ ! -f "$appearance_file" ]; then
printf '{\n "enabledCssSnippets": ["%s"]\n}\n' "$snippet_name" > "$appearance_file"
continue
fi
# Add noctalia to enabledCssSnippets if not already present
python3 -c "
import json, sys
with open('$appearance_file') as f:
data = json.load(f)
snippets = data.get('enabledCssSnippets', [])
if '$snippet_name' not in snippets:
snippets.append('$snippet_name')
data['enabledCssSnippets'] = snippets
with open('$appearance_file', 'w') as f:
json.dump(data, f, indent=2)
f.write('\n')
" 2>/dev/null || true
done
;;
*)
echo "Usage: $0 {output|apply}" >&2
exit 1
;;
esac