#!/bin/bash alias cdw="cd ${WORKSPACE_DIR}" function _get_projects() { ( cd -- "${WORKSPACE_DIR}" && find . -mindepth 3 -maxdepth 3 -type d | sed 's|^\./||' ) } function cdp() { if command -v fzf &>/dev/null; then cd -- "${WORKSPACE_DIR}/$(_get_projects | fzf --query "$*")" return fi local projects=( "${(@f)$( _get_projects )}" ) if [[ "$#" -gt 0 ]]; then projects=( "${(@Mb)projects:#*${1}*}" ) fi select project in "${projects[@]}"; do cd -- "${WORKSPACE_DIR}/${project}" break done } function _cdp_comp() { local projects=( "${(@f)$( _get_projects )}" ) compset -P '*\/' _describe "${projects[@]}" } compdef _cdp_comp cdp function clone() { if [[ "$#" -lt 1 ]]; then echo "[!] Missing URL to clone!" >&2 return 1 fi local url="$1" local forge owner repo if [[ "${url}" =~ ^ssh:\/\/[a-zA-Z0-9_]+@([a-zA-Z0-9_.]+):[0-9]+/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)(.git)?$ ]]; then forge="${match[1]:l}" owner="${match[2]:l}" repo="${match[3]:l}" elif [[ "${url}" =~ ^[a-zA-Z0-9_]+@([a-zA-Z0-9_.]+):([a-zA-Z0-9_]+)\/([a-zA-Z0-9_]+)(.git)?$ ]]; then forge="${match[1]:l}" owner="${match[2]:l}" repo="${match[3]:l}" elif [[ "${url}" =~ ^https?:\/\/([a-zA-Z0-9_.]+)(:[0-9]+)?\/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)(.git)?$ ]]; then forge="${match[1]:l}" owner="${match[3]:l}" repo="${match[4]:l}" else echo "[!] Do not know how to handle ${url}!" >&2 return 1 fi git clone "${url}" "${WORKSPACE_DIR}/${forge}/${owner}/${repo}" }