diff --git a/home/home.nix b/home/home.nix index e537195..f971986 100644 --- a/home/home.nix +++ b/home/home.nix @@ -453,7 +453,8 @@ in binpath() { realpath $(${pkgs.which}/bin/which $1) } - ''; + '' + + (import ./scripts/reporsync.nix {inherit pkgs;}); oh-my-zsh = { diff --git a/home/scripts/reporsync.nix b/home/scripts/reporsync.nix new file mode 100644 index 0000000..e52479a --- /dev/null +++ b/home/scripts/reporsync.nix @@ -0,0 +1,79 @@ +{pkgs, ...}: +'' +# 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/") + + 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 ] " + 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: " >&2 + return 1 + fi + + if [ -n "$JUMPHOST" ]; then + RSYNC_OPTS+=("--rsh=/Users/os/.nix-profile/bin/ssh -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 + ${pkgs.rsync}/bin/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" +} +''