#!/usr/bin/env bash # ============================================================= # install.sh — OpenClaw mailbox.org Kalender + Aufgaben # Zielplattform: Raspberry Pi (Raspberry Pi OS / Ubuntu ARM) # Ausführen als: pi-Nutzer (sudo-Rechte erforderlich) # ============================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(dirname "$SCRIPT_DIR")" ENV_FILE="$REPO_ROOT/.env" # --- Farben --- RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m' info() { echo -e "${GREEN}[INFO]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; } # ============================================================= # 1. .env laden # ============================================================= if [[ ! -f "$ENV_FILE" ]]; then warn ".env nicht gefunden — kopiere .env.example nach .env" cp "$REPO_ROOT/assets/.env.example" "$ENV_FILE" error "Bitte .env mit deinen mailbox.org-Zugangsdaten befüllen und install.sh erneut ausführen." fi # shellcheck source=/dev/null source "$ENV_FILE" info ".env geladen (Benutzer: ${MAILBOX_USER:-NICHT GESETZT})" [[ -z "${MAILBOX_USER:-}" ]] && error "MAILBOX_USER in .env nicht gesetzt!" [[ -z "${MAILBOX_PASS:-}" ]] && error "MAILBOX_PASS in .env nicht gesetzt!" # ============================================================= # 2. Systempakete installieren # ============================================================= info "Installiere Systempakete..." sudo apt-get update -qq sudo apt-get install -y \ vdirsyncer \ khal \ todoman \ python3-pass \ gettext-base \ curl \ jq \ python3-pip \ python3-venv # Locale sicherstellen sudo locale-gen de_AT.UTF-8 2>/dev/null || true info "Pakete installiert." # ============================================================= # 3. Verzeichnisse anlegen # ============================================================= info "Lege Verzeichnisse an..." VDIR_BASE="${VDIR_BASE_DIR:-$HOME/.local/share/vdirsyncer}" mkdir -p "$VDIR_BASE/status" mkdir -p "$VDIR_BASE/calendars" mkdir -p "$VDIR_BASE/tasks" mkdir -p "${KHAL_DB_PATH:-$HOME/.local/share/khal}" mkdir -p "$HOME/.config/vdirsyncer" mkdir -p "$HOME/.config/khal" mkdir -p "$HOME/.config/todoman" sudo mkdir -p /var/log/openclaw-mailbox-cal sudo chown "$USER:$USER" /var/log/openclaw-mailbox-cal # ============================================================= # 4. Konfigurationsdateien deployen (envsubst für Variablen) # ============================================================= info "Deploye Konfigurationsdateien..." # vdirsyncer config — Variablen ersetzen export MAILBOX_USER MAILBOX_PASS envsubst '${MAILBOX_USER} ${MAILBOX_PASS}' \ < "$REPO_ROOT/config/vdirsyncer.conf" \ > "$HOME/.config/vdirsyncer/config" chmod 600 "$HOME/.config/vdirsyncer/config" info " → ~/.config/vdirsyncer/config" # khal config cp "$REPO_ROOT/config/khal.conf" "$HOME/.config/khal/config" info " → ~/.config/khal/config" # todoman config cp "$REPO_ROOT/config/todoman.conf" "$HOME/.config/todoman/config.cfg" info " → ~/.config/todoman/config.cfg" # ============================================================= # 5. systemd Units installieren (User-Session) # ============================================================= info "Installiere systemd Units (User-Session)..." SYSTEMD_USER_DIR="$HOME/.config/systemd/user" mkdir -p "$SYSTEMD_USER_DIR" # Variablen in systemd-Units ersetzen for unit_file in "$REPO_ROOT/systemd/"*.{service,timer}; do [[ -f "$unit_file" ]] || continue unit_name="$(basename "$unit_file")" envsubst '${SYNC_INTERVAL}' < "$unit_file" > "$SYSTEMD_USER_DIR/$unit_name" info " → $SYSTEMD_USER_DIR/$unit_name" done systemctl --user daemon-reload systemctl --user enable --now vdirsyncer-sync.timer info "systemd Timer aktiviert." # Lingering aktivieren (damit User-Units ohne Login laufen) loginctl enable-linger "$USER" 2>/dev/null || \ warn "loginctl enable-linger fehlgeschlagen — bitte manuell ausführen: sudo loginctl enable-linger $USER" # ============================================================= # 6. Erst-Synchronisation # ============================================================= info "Führe initialen vdirsyncer discover + sync durch..." vdirsyncer discover calendars || warn "discover calendars hatte Warnungen — prüfe Ausgabe" vdirsyncer discover tasks || warn "discover tasks hatte Warnungen — prüfe Ausgabe" vdirsyncer sync || warn "sync hatte Warnungen — prüfe Ausgabe" info "Erst-Sync abgeschlossen." # ============================================================= # 7. khal-Index aufbauen # ============================================================= info "Baue khal-Index auf..." khal --config "$HOME/.config/khal/config" rebuild-cache || true # ============================================================= # 8. OpenClaw Skill-Verknüpfung # ============================================================= OPENCLAW_SKILLS_DIR="${OPENCLAW_SKILLS_DIR:-$HOME/.config/openclaw/skills}" if [[ -d "$OPENCLAW_SKILLS_DIR" ]]; then info "Verknüpfe OpenClaw Skill..." ln -sf "$REPO_ROOT" "$OPENCLAW_SKILLS_DIR/mailbox-cal" 2>/dev/null || true info " → $OPENCLAW_SKILLS_DIR/mailbox-cal" else warn "OpenClaw Skills-Verzeichnis nicht gefunden ($OPENCLAW_SKILLS_DIR)." warn "Bitte Skill manuell in OpenClaw registrieren (siehe README.md)." fi # ============================================================= # Fertig # ============================================================= echo "" echo -e "${GREEN}╔══════════════════════════════════════════════════════╗${NC}" echo -e "${GREEN}║ Installation abgeschlossen! ║${NC}" echo -e "${GREEN}╚══════════════════════════════════════════════════════╝${NC}" echo "" echo " Nächste Schritte:" echo " 1. khal agenda # Termine anzeigen" echo " 2. todo list # Aufgaben anzeigen" echo " 3. systemctl --user status vdirsyncer-sync.timer" echo " 4. tail -f /var/log/openclaw-mailbox-cal/sync.log" echo ""