mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-02-27 12:22:43 -08:00
55 lines
1.7 KiB
Bash
55 lines
1.7 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
if [[ "$(uname)" != "Darwin" ]]; then
|
|
echo "ensure_macos_permissions.sh only supports macOS" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v swift >/dev/null 2>&1; then
|
|
echo "swift is required to check macOS screen capture permissions" >&2
|
|
exit 1
|
|
fi
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PERM_SWIFT="$SCRIPT_DIR/macos_permissions.swift"
|
|
MODULE_CACHE="${TMPDIR:-/tmp}/codex-swift-module-cache"
|
|
mkdir -p "$MODULE_CACHE"
|
|
|
|
screen_capture_status() {
|
|
local json
|
|
json="$(swift -module-cache-path "$MODULE_CACHE" "$PERM_SWIFT" "$@")"
|
|
python3 -c 'import json, sys; data=json.loads(sys.argv[1]); print("1" if data.get("screenCapture") else "0")' "$json"
|
|
}
|
|
|
|
if [[ -n "${CODEX_SANDBOX:-}" ]]; then
|
|
echo "Screen capture checks are blocked in the sandbox; rerun with escalated permissions." >&2
|
|
exit 3
|
|
fi
|
|
|
|
if [[ "$(screen_capture_status)" == "1" ]]; then
|
|
echo "Screen Recording permission already granted."
|
|
exit 0
|
|
fi
|
|
|
|
cat <<'MSG'
|
|
This workflow needs macOS Screen Recording permission to capture screenshots.
|
|
macOS will show a single system prompt for Screen Recording. Approve it, then
|
|
return here. If macOS opens System Settings instead of prompting, enable Screen
|
|
Recording for your terminal and rerun the command.
|
|
MSG
|
|
|
|
# Request permission once after explaining why it is needed.
|
|
screen_capture_status --request >/dev/null || true
|
|
|
|
if [[ "$(screen_capture_status)" != "1" ]]; then
|
|
cat <<'MSG'
|
|
Screen Recording is still not granted.
|
|
Open System Settings > Privacy & Security > Screen Recording and enable it for
|
|
your terminal (and Codex if needed), then rerun your screenshot command.
|
|
MSG
|
|
exit 2
|
|
fi
|
|
|
|
echo "Screen Recording permission granted."
|