system-helpers/dotfiles-system-sync

112 lines
2.6 KiB
Text
Raw Normal View History

2019-04-09 17:11:22 +00:00
#!/usr/bin/env bash
2019-01-25 17:28:29 +00:00
#
# Be careful what you are doing with this script. You may overwrite files.
# cd into the repository before executing the script!
set -e;
usage() {
2022-09-08 18:02:00 +00:00
echo "Script to synchronize dotfiles-system with your system";
2019-01-25 17:28:29 +00:00
echo "";
2022-09-08 18:02:00 +00:00
echo "(1) to sync the git folder's '/etc' --> system's '/etc'";
2019-01-25 17:28:29 +00:00
echo "";
2022-09-08 18:02:00 +00:00
echo "(2) to sync the git folder's '/etc' with all command line users with a certain shell";
echo "";
echo "(3) to sync the git folder's '/etc' ('/etc/skel') with a specific user's home folder"
2019-01-25 17:28:29 +00:00
echo "";
2022-09-08 18:02:00 +00:00
echo "(4) to list command line users for sync";
echo "";
echo "(5) to sync the git folder's '/usr' with system's '/usr'";
2019-01-25 17:28:29 +00:00
echo "";
2022-09-08 18:02:00 +00:00
echo "(0) or [CTRL+C] to exit";
2019-01-25 17:28:29 +00:00
}
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
2022-06-04 23:09:23 +00:00
sudo rsync -r -t -v --chown=root:root --progress $(pwd)/usr/ /usr/
2019-01-25 17:28:29 +00:00
echo "";
2019-01-25 17:36:42 +00:00
elif [ "$menuInput" = "0" ]; then
2019-01-25 17:28:29 +00:00
exit 0;
fi
menu;
}
menu;