nixconfigs/home/scripts/reporsync.nix

80 lines
2.1 KiB
Nix

{ pkgs, lib, ... }:
''
# rsync -rlptzv --progress --delete --exclude=.git --exclude=.vscode --exclude=result --exclude=channels/ /Users/os/src/fc.qemu os@hydra01:
# rsync -rlptzv --progress --rsh="ssh -J fcio-whq-jump" --delete --exclude=.git --exclude=.vscode --exclude=result --exclude=channels/ /Users/os/src/fc-nixos/ os@patty:fc-nixos/
DEFAULT_JUMPHOST="fcio-whq-jump"
_parse_rsync_args() {
# reset pre-defined variables that are read and manipulated throughout this function
unset JUMPHOST
# arrays are bash or zsh specific
RSYNC_OPTS=("-rlptzv" "--progress" "--delete" "--exclude=.git" "--exclude=.vscode" "--exclude=result" "--exclude=channels/" "--exclude=.mypy_cache")
while getopts ':Jj:' OPT; do
case $OPT in
j)
if [ -n "$JUMPHOST" ]; then
echo "-j and -J are conflicting arguments" >&2
return 1
fi
JUMPHOST="$OPTARG"
;;
J)
if [ -n "$JUMPHOST" ]; then
echo "-j and -J are conflicting arguments" >&2
return 1
fi
JUMPHOST="$DEFAULT_JUMPHOST"
;;
?)
echo "rsyncrepo [-J] [-j <jumphost>] <directory> <hostname>"
return 1
;;
esac
done
# trim CLI parameters
shift "$(($OPTIND -1))"
RR_FROM="$1"
RR_TO="$2"
}
_do_rsync() {
# parameter check
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Missing arguments, required: <directory> <hostname>" >&2
return 1
fi
if [ -n "$JUMPHOST" ]; then
RSYNC_OPTS+=("--rsh=${lib.getExe pkgs.openssh} -J ''${JUMPHOST}")
fi
for OPTI in "''${RSYNC_OPTS[@]}"; do
echo "$OPTI"
done
# we always sync /path/to/dir/ to hostname:dir
RR_DEST="''${2}:$(basename $(realpath "''${1}"))"
echo "Syncing ''${1} to ''${RR_DEST}"
# ensure trailing slash for src to avoid recreating directory
${lib.getExe pkgs.rsync} "''${RSYNC_OPTS[@]}" "''${1}/" "''${RR_DEST}"
}
rsyncrepo() {
_parse_rsync_args "$@"
# inherits parsed arguments through variables
_do_rsync "$RR_FROM" "$RR_TO"
}
rsynchydra() {
_parse_rsync_args "$@"
_do_rsync "$RR_FROM" "hydra01"
}
''