101 lines
2.3 KiB
Bash
101 lines
2.3 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
# Be careful what you are doing with this script. You may overwrite dotfiles.
|
||
|
# cd into the repository before executing the script!
|
||
|
set -e;
|
||
|
|
||
|
usage() {
|
||
|
echo "Press 1 to sync git folder with /etc";
|
||
|
echo "Press 2 to sync /etc/skel with all command line users";
|
||
|
echo "Press 3 to sync /etc/skel with a specific user's home folder"
|
||
|
echo "Press 4 to list command line users for sync";
|
||
|
echo "---";
|
||
|
echo "Hit 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
|
||
|
|
||
|
fi
|
||
|
|
||
|
menu;
|
||
|
}
|
||
|
|
||
|
menu;
|