From f8e6b745b3283ac1465101a68c93b6bb916a4d43 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Sun, 8 Oct 2023 20:41:30 +0200 Subject: [PATCH] Better argument handling, also add a --force flag to delete all ssh keys --- .config/fish/functions/ssh-import.fish | 31 +++++++++++++++++++------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/.config/fish/functions/ssh-import.fish b/.config/fish/functions/ssh-import.fish index 2d1b8f2..13591c2 100644 --- a/.config/fish/functions/ssh-import.fish +++ b/.config/fish/functions/ssh-import.fish @@ -1,9 +1,17 @@ function ssh-import + # Declare our arguments + argparse h/help f/force -- $argv + or return + + # Get function name + set current_name $(status current-function) + # Check if no arguments were provided, or if the first argument is '--help' - if test -z $argv[1] || test "$argv[1]" = --help - echo -e "Usage: ssh-import " - echo -e " ssh-import --help \t - Show this help message" - echo -e " ssh-import - Erase **all** the current .ssh folder and replace it with the archive content" + if test -z $argv[1] || set -ql _flag_help + echo -e "Usage: $current_name " + echo -e " $current_name [-h|--help] \t\t- Show this help message" + echo -e " $current_name \t\t- Update the current .ssh folder with the archive content" + echo -e " $current_name [-f|--force] - Erase **all** the current .ssh folder and replace it with the archive content" return 0 end @@ -11,20 +19,27 @@ function ssh-import set file "$argv[1]" if test (count $argv) -ge 2 # Check if usage is respected - echo "Too much arguments." 1>&2 + echo "$current_name: too much arguments." 1>&2 return 1 else if not test -e "$file" # Check if file exists - echo "File doesn't exists." 1>&2 + echo "$current_name: file doesn't exists." 1>&2 return 1 else if not test $(string sub --start=-3 "$file") = zip # Check if file have .zip extension - echo "File isn't a zip archive." 1>&2 + echo "$current_name: file isn't a zip archive." 1>&2 return 1 end + set ssh_directory "$HOME/.ssh" + + # Delete the .ssh directory + if set -ql _flag_force + find $ssh_directory -type f -not -name known_hosts -not -name environment -delete + end + # Update and overwrite the .ssh directory with the archive content # Using modification date, and new files are added # Files removed aren't tracked - unzip -uo "$file" -d "$HOME/.ssh" + unzip -uo "$file" -d $ssh_directory end