diff --git a/scripts/setup/machine-setup/lib/packages.sh b/scripts/setup/machine-setup/lib/packages.sh index aaa7b5c4..936de3e4 100644 --- a/scripts/setup/machine-setup/lib/packages.sh +++ b/scripts/setup/machine-setup/lib/packages.sh @@ -125,7 +125,14 @@ pkgs_core() { # curl, unzip and the TLS roots ship with macOS; the compilers come from # the Xcode command line tools, which is not a formula — see xcode_clt_*. # brotli is here because macOS ships the library but not the CLI. - echo gnupg git jq wget brotli btop htop tree ripgrep fd eza poppler radicale + # + # radicale has no Homebrew formula — confirmed live ("No available formula with the + # name radicale"), it is a pure-Python package normally installed via pip/pipx, not + # brew. Left out of a dev install rather than reached for pip here: officer-caldav + # (services.sh CORE_PROCESSES) is skipped to match on macOS, so nothing on this + # machine expects it to be present. The Linux lists above are untouched — a real + # package there, unaffected. + echo gnupg git jq wget brotli btop htop tree ripgrep fd eza poppler ;; esac } diff --git a/scripts/setup/officer-setup/lib/services.sh b/scripts/setup/officer-setup/lib/services.sh index 7fcbc75c..d2499fb5 100644 --- a/scripts/setup/officer-setup/lib/services.sh +++ b/scripts/setup/officer-setup/lib/services.sh @@ -44,13 +44,6 @@ CORE_PROCESSES=( "officer-claude-code|bun|run src/servers/sidecar/claude/user-instance.ts" "officer-opencode|bun|run src/servers/sidecar/opencode/index.ts" "officer-pty|node|src/servers/sidecar/pty/index.mjs" - # Calendar and contacts, CORE since 2026-08-19 rather than an app-store entry. - # - # It was a Docker service because the app store made everything one, not because Radicale needs a - # container — it is a ~2MB Python package, and this sidecar spawns it directly on loopback. A personal - # server having a calendar is not an integration with something you already run; it is the baseline. - # Radicale needs `python3` and the `radicale` package, both installed by machine-setup. - "officer-caldav|bun|run src/servers/sidecar/caldav/index.ts" # Push notifications, CORE since 2026-08-19. Built 2026-07-31, then switched off on 2026-08-13 with # memos and photos when it was slated to become a plugin — the only one of the three never extracted, # so it sat mounted nowhere with its schema commented out. @@ -62,6 +55,21 @@ CORE_PROCESSES=( "officer-notify|bun|run src/servers/sidecar/notify/index.ts" ) +# Calendar and contacts, CORE since 2026-08-19 rather than an app-store entry. +# +# It was a Docker service because the app store made everything one, not because Radicale needs a +# container — it is a ~2MB Python package, and this sidecar spawns it directly on loopback. A personal +# server having a calendar is not an integration with something you already run; it is the baseline. +# Radicale needs `python3` and the `radicale` package, both installed by machine-setup. +# +# EXCEPT on macOS: radicale has no Homebrew formula (pkgs_core in machine-setup/lib/packages.sh +# leaves it out of the brew list for the same reason), so a dev install has nowhere for this sidecar +# to find it — `resolveRadicale()` failing is exactly the "took a whole sidecar down on a fresh +# install" case its own test guards against. Left out of a macOS install's process list entirely +# rather than crash-looped; Calendar/Contacts are the one core feature not available on a Mac dev +# install. The Linux path — and the feature itself — is untouched. +[[ "$(uname -s)" == "Darwin" ]] || CORE_PROCESSES+=("officer-caldav|bun|run src/servers/sidecar/caldav/index.ts") + write_ecosystem() { local dest entry name script args dest="$(ecosystem_file)"