Initial ssr repository

Convert the legacy system_sync.sh and system_restore.sh into a modular
shareable repository:

- bin/ssr CLI dispatcher with install/sync/restore/schedule/config/status
- lib/ split: common, cloud, brew, mackup, macos
- Cloud provider abstraction (icloud, dropbox, googledrive, onedrive, custom)
- launchd template for scheduled daily sync (renderable via sed)
- ssr.conf.example with whitelisted KEY=VALUE config loader
- macos-defaults.sh extracted from inline block, overridable
- install.sh bootstrap symlinks CLI into ~/.local/bin
- README with usage, config table, migration map, security notes
- Original scripts archived under legacy/ for reference

Fixes vs originals: set -euo pipefail, quoted vars, find -print0,
spctl --global-disable (was --master-disable), MACOS=".macos" bug,
zero-width char before ln, Apple Silicon brew shellenv, config injection
hardening.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-05-11 15:05:17 +02:00
commit 539a8fc28f
23 changed files with 1171 additions and 0 deletions
+77
View File
@@ -0,0 +1,77 @@
#!/usr/bin/env bash
# Setup script for setting up a new macos machine
echo "Starting setup"
declare -A nonPckgApps
nonPckgApps[PhraseExpress]="https://www.phraseexpress.com/de/mac/download/"
nonPckgApps[AusweisApp2]="https://www.ausweisapp.bund.de/download/windows-und-mac/"
#nonPckgApps[]=""
BREWFILE="$1"
LOGGER_BIN="/usr/bin/logger -ist '$0'"
# Check for Homebrew to be present, install if it's missing
if test ! $(which brew); then
echo "Installing homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
fi
BREW_BIN=$(which brew)
BREW_PREFX=$(brew --prefix)
CASK_DIR=$(brew --caskroom)
# Update homebrew recipes
$BREW_BIN update
$BREW_BIN install mackup
MACKUP_DIR="$HOME/Library/Mobile Documents/com~apple~CloudDocs/Mackup"
ln -s $MACKUP_DIR/.mackup.cfg $HOME/.mackup.cfg
MACKUP_BIN=$(which mackup)
read -t 60 -n 1 -p "configure iCloud Drive and confirm to continue with Brewfile '$BREWFILE'? [y/N]: " answer
if [ $? == 0 ]; then
echo
echo "allow Apps downloaded from anywhere…"
sudo spctl --master-disable
#open /System/Library/PreferencePanes/Security.prefPane
echo
echo "Make sure Rosetta is installed..."
sudo softwareupdate --install-rosetta
$BREW_BIN bundle --verbose --file="$BREWFILE" | $LOGGER_BIN
$MACKUP_BIN restore
#echo "this script is unable to install the following apps..."
#for key val in ${(kv)nonPckgApps}; do
# echo "$key"
# open "$val"
#done
read -n 1 -p "Hit return to continue: " answer
echo "these apps will need manual config and opened in the background..."
find "$CASK_DIR" -iname "*.app" | while read APP;
do
open "$APP";
done
read -n 1 -p "Hit return to continue: " answer
echo "Configuring OS... (may need sudo)"
MACOS = ".macos"
source "$MACOS"
# Pin The Dock To The Left(start), Bottom(middle), Right(end)
defaults write com.apple.dock pinning -string middle
# Set dock to a flat 2D version
defaults write com.apple.dock no-glass -boolean YES && killall Dock;
# Recent Applications Stack in Dock
defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = { "list-type" = 1; }; "tile-type" = "recents-tile"; }' && killall Dock;
# put a small gradient behind an icon
defaults write com.apple.dock mouse-over-hilte-stack -boolean YES && killall Dock;
# add a message of your choice to the Login window
sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText "Welcome back..."
# Enable Time Machine On Unsupported Drives
defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1
# Force Mail To Display In Plain Text
defaults write com.apple.mail PreferPlainText -bool TRUE
# widegts on the dashboard
defaults write com.apple.dashboard devmode YES
echo "Macbook setup completed!"
else
echo "Can't wait anymore!"
fi