# !/usr/bin/env bash # # Be careful what you are doing with this script. You may overwrite files. # cd into the repository before executing the script! set -e; usage() { echo "Script to synchronize dotfiles or common scripts"; echo "---"; echo "- Press 1 to sync the git folder's '/etc' with system's '/etc'"; echo ""; echo "- Press 2 to sync the git folder's '/etc' with all command line users with a certain shell"; echo ""; echo "- Press 3 to sync the git folder's '/etc' ('/etc/skel') with a specific user's home folder" echo ""; echo "- Press 4 to list command line users for sync"; echo ""; echo "- Press 5 to sync the git folder's '/usr/local/bin' with system's '/usr/local/bin'"; echo "---"; echo "Press 0 or [CTRL+C] to exit"; } menu() { usage; read -n 1 -e -p ">" menuInput echo ""; if [ "$menuInput" = "1" ]; then sudo rsync -r -t -v --chown=root:root --progress $(pwd)/etc/ /etc/ echo ""; elif [ "$menuInput" = "2" ]; then # require root [[ $UID -eq 0 ]] || (>&2 echo "ERROR: need to be root!" && exit 1) # determine shell echo "Which shell (shortname, e.g. zsh)?"; read -e -p ">" shellInput echo ""; # shell users users=$(cat /etc/passwd|grep $shellInput| awk -F':' '{ print $1 }'); # stage tmpDir=/tmp/dotfiles-system-sync/; mkdir -p $tmpDir; srcDir=$(pwd)/etc/skel/. cp -R $srcDir $tmpDir; # copy for user in $users; do exists=$(id -u $user); primaryGroup=$(id -gn $user); chown -R $user:$primaryGroup $tmpDir; trgDir=$(eval echo ~$user/); echo "Copy from $tmpDir to $trgDir"; cp -Rp $tmpDir/. $trgDir/; done # remove stage rm -rf $tmpDir; elif [ "$menuInput" = "3" ]; then # determine shell echo "Which user?"; read -e -p ">" user echo ""; # stage tmpDir=/tmp/dotfiles-system-sync/; mkdir -p $tmpDir; srcDir=$(pwd)/etc/skel/. cp -R $srcDir $tmpDir; # copy exists=$(id -u $user); if [ $UID -ne $exists ] && [ $UID -ne 0 ]; then echo "ERROR: need to be $user or root!"; exit 1; fi primaryGroup=$(id -gn $user); chown -R $user:$primaryGroup $tmpDir; trgDir=$(eval echo ~$user/); echo "Copy from $tmpDir to $trgDir"; cp -Rp $tmpDir/. $trgDir/; # remove stage rm -rf $tmpDir; elif [ "$menuInput" = "4" ]; then echo "Which shell (shortname, e.g. zsh)?"; read -e -p ">" shellInput echo ""; # shell users users=$(cat /etc/passwd|grep $shellInput| awk -F':' '{ print $1 }'); echo "Users with shell $shellInput" for u in $users; do echo $u; done elif [ "$menuInput" = "5" ]; then sudo rsync -r -t -v --chown=root:root --progress $(pwd)/usr/local/bin/ /usr/local/bin/ echo ""; elif [ "$menuInput" = "0" ]; then exit 0; fi menu; } menu;