mirror of
				https://github.com/TheLocehiliosan/yadm
				synced 2025-06-13 13:03:58 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| #
 | |
| # This script can be "curl-piped" into bash to bootstrap a dotfiles repo when
 | |
| # yadm is not locally installed. Read below for instructions.
 | |
| #
 | |
| # This script is hosted at bootstrap.yadm.io to make it easy to remember/type.
 | |
| #
 | |
| # DISCLAIMER: In general, I would advise against piping someone's code directly
 | |
| #             from the Internet into an interpreter (like Bash). You should
 | |
| #             probably review any code like this prior to executing it. I leave
 | |
| #             it to you to decide if this is risky behavior or not. The main
 | |
| #             reason this script exists is because I find it to be a pragmatic
 | |
| #             way to bootstrap my dotfiles, and install yadm in one step
 | |
| #             (allowing the yadm project to be a submodule of my dotfiles
 | |
| #             repo).
 | |
| #
 | |
| # Invoke bootstrap with:
 | |
| #
 | |
| #   curl -L bootstrap.yadm.io | bash
 | |
| #
 | |
| #     OR
 | |
| #
 | |
| #   curl -L bootstrap.yadm.io | bash [-s -- REPO_URL [YADM_RELEASE]]
 | |
| #
 | |
| # Alternatively, source in this file to export a yadm() function which uses
 | |
| # yadm remotely until it is locally installed.
 | |
| #
 | |
| #   source <(curl -L bootstrap.yadm.io)
 | |
| #
 | |
| 
 | |
| YADM_REPO="https://github.com/TheLocehiliosan/yadm"
 | |
| YADM_RELEASE=${release:-master}
 | |
| REPO_URL=""
 | |
| 
 | |
| function _private_yadm() {
 | |
|   unset -f yadm
 | |
|   if command -v yadm &> /dev/null; then
 | |
|     echo "Found yadm installed locally, removing remote yadm() function"
 | |
|     unset -f _private_yadm
 | |
|     command yadm "$@"
 | |
|   else
 | |
|     function yadm() { _private_yadm "$@"; }; export -f yadm
 | |
|     echo WARNING: Using yadm remotely. You should install yadm locally.
 | |
|     curl -fsSL "$YADM_REPO/raw/$YADM_RELEASE/yadm" | bash -s -- "$@"
 | |
|   fi
 | |
| }
 | |
| export -f _private_yadm
 | |
| function yadm() { _private_yadm "$@"; }; export -f yadm
 | |
| 
 | |
| # if being sourced, return here, otherwise continue processing
 | |
| return 2>/dev/null
 | |
| unset -f yadm
 | |
| 
 | |
| function remote_yadm() {
 | |
|   curl -fsSL "$YADM_REPO/raw/$YADM_RELEASE/yadm" | bash -s -- "$@"
 | |
| }
 | |
| 
 | |
| function ask_about_source() {
 | |
|   if ! command -v yadm &> /dev/null; then
 | |
|     echo
 | |
|     echo "***************************************************"
 | |
|     echo "yadm is NOT currently installed."
 | |
|     echo "You should install it locally, this link may help:"
 | |
|     echo "https://yadm.io/docs/install"
 | |
|     echo "***************************************************"
 | |
|     echo
 | |
|     echo "If installation is not possible right now, you can temporarily \"source\""
 | |
|     echo "in a yadm() function which fetches yadm remotely each time it is called."
 | |
|     echo
 | |
|     echo "    source <(curl -L bootstrap.yadm.io)"
 | |
|     echo
 | |
|   fi
 | |
| }
 | |
| 
 | |
| function build_url() {
 | |
|   echo "No repo URL provided."
 | |
|   echo
 | |
|   echo "Where is your repo?"
 | |
|   echo
 | |
|   echo "  1. GitHub"
 | |
|   echo "  2. Bitbucket"
 | |
|   echo "  3. GitLab"
 | |
|   echo "  4. Other"
 | |
|   echo
 | |
|   read -r -p "Where is your repo? (1/2/3/4) ->" choice < /dev/tty
 | |
|   case $choice in
 | |
|     1)
 | |
|       REPO_URL="https://github.com/"
 | |
|       ;;
 | |
|     2)
 | |
|       REPO_URL="https://bitbucket.org/"
 | |
|       ;;
 | |
|     3)
 | |
|       REPO_URL="https://gitlab.com/"
 | |
|       ;;
 | |
|     *)
 | |
|       echo
 | |
|       echo Please specify the full URL of your dotfiles repo
 | |
|       read -r -p "URL ->" choice < /dev/tty
 | |
|       REPO_URL="$choice"
 | |
|       return
 | |
|       ;;
 | |
|   esac
 | |
| 
 | |
|   echo
 | |
|   echo "Provide your user and repo separated by '/'"
 | |
|   echo "For example: UserName/dotfiles"
 | |
|   echo
 | |
|   read -r -p "User/Repo ->" choice < /dev/tty
 | |
|   [[ "$choice" =~ ^[^[:space:]]+/[^[:space:]]+$ ]] || {
 | |
|     echo "Not formatted as USER/REPO"
 | |
|     REPO_URL=
 | |
|     return
 | |
|   }
 | |
|   REPO_URL="${REPO_URL}${choice}.git"
 | |
| }
 | |
| 
 | |
| function main() {
 | |
| 
 | |
|   [ -n "$1" ] && REPO_URL="$1"
 | |
|   [ -n "$2" ] && YADM_RELEASE="$2"
 | |
|   [ -z "$REPO_URL" ] && build_url
 | |
|   [ -z "$REPO_URL" ] && echo "Unable to determine the repo URL" && exit 1
 | |
| 
 | |
|   echo "Using URL: $REPO_URL"
 | |
|   remote_yadm clone "$REPO_URL"
 | |
| 
 | |
|   ask_about_source
 | |
| 
 | |
| }
 | |
| 
 | |
| main "$@"
 |