Add headless streaming mode + Mac client + full docs
Headless mode (new) — for KVM-attached hosts streaming to disconnected clients - --headless / --mirror flags; default headless on hostname JARVIS, mirror elsewhere - New lib/headless.sh installs prep-cmd hooks to ~/.local/share/omarchy-moonlight/bin - bin/sunshine-stream-do.sh creates/resizes a Hyprland HEADLESS-1 output to the connecting client's resolution and migrates the active workspace onto it - bin/sunshine-stream-undo.sh tears down the headless output on disconnect and returns the workspace to a non-headless monitor when one is available - lib/config.sh writes capture=wlr, output_name=HEADLESS-1, and the JSON global_prep_cmd entry referencing the installed hook paths - lib/preflight.sh adds a preflight_headless step that checks hyprctl, jq, and a running Hyprland session (warn-only, install can proceed) - lib/verify.sh adds checks for the hook scripts and the wlr/global_prep_cmd config lines Mac client - client/install-macos.sh: Darwin guard, Homebrew presence check, brew cask install of Moonlight, idempotent - client/README.md: per-platform install (macOS / Android / iOS / Apple TV / Linux + Steam Deck) and the five-step first-pair walkthrough Other - jq added to the helper install set in lib/packages.sh (hooks parse Hyprland JSON output) - README.md rewritten to cover both modes, the new flags, the tuned defaults per mode + per vendor, the headless internals, and the client pointer
This commit is contained in:
61
client/install-macos.sh
Executable file
61
client/install-macos.sh
Executable file
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
# Install Moonlight on macOS via Homebrew cask.
|
||||
# Standalone: does not source lib/common.sh (intended to run on a Mac that
|
||||
# may not have the full repo checked out yet).
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
if [[ -t 1 ]]; then
|
||||
BOLD=$'\033[1m'
|
||||
RED=$'\033[31m'
|
||||
GREEN=$'\033[32m'
|
||||
YELLOW=$'\033[33m'
|
||||
BLUE=$'\033[34m'
|
||||
RESET=$'\033[0m'
|
||||
else
|
||||
BOLD="" RED="" GREEN="" YELLOW="" BLUE="" RESET=""
|
||||
fi
|
||||
|
||||
step() { printf '\n%s==>%s %s%s%s\n' "$BLUE" "$RESET" "$BOLD" "$*" "$RESET"; }
|
||||
info() { printf ' %s\n' "$*"; }
|
||||
ok() { printf ' %s✓%s %s\n' "$GREEN" "$RESET" "$*"; }
|
||||
warn() { printf ' %s!%s %s\n' "$YELLOW" "$RESET" "$*" >&2; }
|
||||
err() { printf ' %s✗%s %s\n' "$RED" "$RESET" "$*" >&2; }
|
||||
|
||||
# Refuse to run anywhere but macOS.
|
||||
if [[ "$(uname -s)" != "Darwin" ]]; then
|
||||
err "This script only runs on macOS (Darwin). Detected: $(uname -s)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
step "Checking for Homebrew"
|
||||
if ! command -v brew >/dev/null 2>&1; then
|
||||
err "Homebrew is not installed."
|
||||
info "Install it with the official one-liner, then re-run this script:"
|
||||
info ""
|
||||
info ' /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"'
|
||||
info ""
|
||||
info "See https://brew.sh for details."
|
||||
exit 1
|
||||
fi
|
||||
ok "Homebrew found: $(command -v brew)"
|
||||
|
||||
step "Installing Moonlight (brew cask)"
|
||||
# brew install --cask is idempotent: re-running on an already-installed cask
|
||||
# is a no-op and exits 0.
|
||||
if brew install --cask moonlight; then
|
||||
ok "Moonlight installed (or already present)."
|
||||
else
|
||||
err "brew install --cask moonlight failed."
|
||||
warn "Try: brew update && brew install --cask moonlight"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
step "Next steps"
|
||||
info "App location: /Applications/Moonlight.app"
|
||||
info "Launch: open -a Moonlight"
|
||||
info ""
|
||||
info "Pair this Mac with your Sunshine host by following the walkthrough in:"
|
||||
info " client/README.md"
|
||||
info ""
|
||||
ok "Done."
|
||||
Reference in New Issue
Block a user