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
+9
View File
@@ -0,0 +1,9 @@
# legacy/
Original `system_sync.sh` / `system_restore.sh` kept for reference and
historical diffing. **Do not run these in production** — they have known
issues (no `set -euo pipefail`, broken `MACOS = ".macos"` assignment with
spaces, `` zero-width character before the `ln` call, deprecated
`spctl --master-disable`, hard-coded iCloud paths, no error handling).
Use the top-level `ssr` CLI instead. See [../README.md](../README.md).
+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
+27
View File
@@ -0,0 +1,27 @@
#!/bin/bash
LOGGER_BIN="/usr/bin/logger -ist '$0'"
UUID=$(system_profiler SPHardwareDataType | awk '/UUID/ { print $3; }')
HOSTNAME=$(hostname -s)
BACKUPDIR="$HOME/Library/Mobile Documents/com~apple~CloudDocs/BACKUP/$HOSTNAME - $UUID"
# 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
MACKUP_DIR="$HOME/Library/Mobile Documents/com~apple~CloudDocs/Mackup"
MACKUP_BIN=$(which mackup)
$MACKUP_BIN -f backup
mkdir -vp "$BACKUPDIR"
pushd "$BACKUPDIR" >/dev/null
cp -vf Brewfile{,.bak}
$BREW_BIN bundle dump --describe --quiet --force | $LOGGER_BIN
popd >/dev/null