diff --git a/bin/ssr-restore b/bin/ssr-restore index fa55cc9..3b241b6 100755 --- a/bin/ssr-restore +++ b/bin/ssr-restore @@ -96,6 +96,10 @@ ssr::rs::run brew_install "Homebrew install" ssr::brew::ensure_install ssr::rs::run brew_restore "Brew bundle install" ssr::brew::restore "$brewfile" ssr::rs::run mackup_restore "Mackup restore" _ssr_mackup_restore_step +# Restart UI services so Dock/Finder/menubar pick up the plists restored +# by Mackup (com.apple.dock.plist etc.) without requiring a logout. +ssr::macos::restart_ui + ssr::rs::run macos_defaults "macOS defaults" ssr::macos::apply_defaults if [[ "${SSR_SNAPSHOT_MACOS_PREFS:-true}" == "true" ]]; then diff --git a/lib/macos.sh b/lib/macos.sh index fe55f7d..ef40536 100644 --- a/lib/macos.sh +++ b/lib/macos.sh @@ -33,6 +33,19 @@ ssr::macos::disable_gatekeeper() { sudo spctl --global-disable } +# Restart macOS UI services that read preference files restored by Mackup. +# Called after mackup restore so Dock/Finder/menubar pick up the new plists. +ssr::macos::restart_ui() { + ssr::log "Restarting UI services (Dock, Finder, SystemUIServer, cfprefsd)" + local svc + for svc in cfprefsd Dock Finder SystemUIServer; do + killall "$svc" 2>/dev/null || true + done + # Brief pause so cfprefsd flushes its cache before Dock re-reads prefs. + sleep 2 + ssr::ok "UI services restarted — Dock and Finder will refresh." +} + ssr::macos::open_installed_casks() { [[ "${SSR_OPEN_CASKS:-false}" == "true" ]] || return 0 local cask_dir