From 59b78472ba7e9551ed75cb558d7a2061910d6495 Mon Sep 17 00:00:00 2001 From: Charles Gould Date: Thu, 17 Nov 2022 19:57:43 -0500 Subject: [PATCH] fish: add clone function --- .config/fish/functions/clone.fish | 24 ++++++++++++++++++++++++ .config/fish/functions/confirm.fish | 4 ++-- .config/fish/functions/nix_upgrade.fish | 2 +- .config/fish/functions/npm_upgrade.fish | 2 +- .config/fish/functions/pip_upgrade.fish | 2 +- 5 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 .config/fish/functions/clone.fish diff --git a/.config/fish/functions/clone.fish b/.config/fish/functions/clone.fish new file mode 100644 index 0000000..052292f --- /dev/null +++ b/.config/fish/functions/clone.fish @@ -0,0 +1,24 @@ +function clone --argument-names giturl + # These regular expressions are far from comprehensive, but they work for me. + # + # Examples: + # https://github.com/NixOS/nix + # https://git.sr.ht/~sircmpwn/git.sr.ht + # git@git.sr.ht:~crg/home + # ssh://git@gitlab.haskell.org:ghc/ghc.git + # + set --local giturl_format1 '^https:\/\/(?[^\/]+)\/(?[^\/]+)\/(?.+)$' + set --local giturl_format2 '^(ssh:\/\/)?[a-z]+?@(?[^:]+):([0-9]+\/)?(?[^\/]+)\/(?.+)$' + + string match -rq $giturl_format1 $giturl; or string match -rq $giturl_format2 $giturl + + set gituser (string replace '~' '' $gituser) + set gitrepo (string replace -r '.git$' '' $gitrepo) + + set --local gitdir "$HOME/Code/$githost/$gituser/$gitrepo" + + if confirm "Clone to $gitdir?" + git clone $giturl "$gitdir" + cd "$gitdir" + end +end diff --git a/.config/fish/functions/confirm.fish b/.config/fish/functions/confirm.fish index 8783a5a..4e8945e 100644 --- a/.config/fish/functions/confirm.fish +++ b/.config/fish/functions/confirm.fish @@ -1,6 +1,6 @@ -function confirm --description "Ask for user confirmation" +function confirm --description "Ask for user confirmation" --argument-names prompt while true - read --local --prompt-str='Are you sure you want to continue? [y/N] ' confirmed + read --local --prompt-str="$prompt [y/N] " confirmed switch $confirmed case Y y diff --git a/.config/fish/functions/nix_upgrade.fish b/.config/fish/functions/nix_upgrade.fish index b96c12c..87e2716 100644 --- a/.config/fish/functions/nix_upgrade.fish +++ b/.config/fish/functions/nix_upgrade.fish @@ -23,7 +23,7 @@ function nix_upgrade --description "Upgrade nix packages" test -z "$nix_pkgs_rem" || echo "Removed packages: $nix_pkgs_rem" # Step 3: Confirm changes - if confirm + if confirm "Continue with upgrade?" nix-env -irf "$nix_pkgs_filepath" end end diff --git a/.config/fish/functions/npm_upgrade.fish b/.config/fish/functions/npm_upgrade.fish index 2032e73..66dc54a 100644 --- a/.config/fish/functions/npm_upgrade.fish +++ b/.config/fish/functions/npm_upgrade.fish @@ -5,7 +5,7 @@ function npm_upgrade --description "Upgrade npm packages" echo "All packages up-to-date." else echo "Outdated packages: $npm_pkgs_outdated" - if confirm + if confirm "Continue with upgrade?" npm update -g end end diff --git a/.config/fish/functions/pip_upgrade.fish b/.config/fish/functions/pip_upgrade.fish index b97fb0e..9e65680 100644 --- a/.config/fish/functions/pip_upgrade.fish +++ b/.config/fish/functions/pip_upgrade.fish @@ -5,7 +5,7 @@ function pip_upgrade --description "Upgrade python packages" echo "All packages up-to-date." else echo "Outdated packages: $py_pkgs_outdated" - if confirm + if confirm "Continue with upgrade?" for py_pkg in $py_pkgs_outdated python3 -m pip install -U $py_pkg end