Created
July 6, 2018 15:59
-
-
Save thejmazz/0960bdaef0a010f6eb0d0dd25e532257 to your computer and use it in GitHub Desktop.
yadm bootsrap with --bootstrap
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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. | |
# | |
# 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 with: | |
# | |
# curl -fsSL 'https://tinyurl.com/yadm-bootstrap' | bash | |
# | |
# OR | |
# | |
# curl -fsSL 'https://github.com/TheLocehiliosan/yadm/raw/master/bootstrap' | bash [-s -- REPO_URL [YADM_RELEASE]] | |
YADM_REPO="https://github.com/TheLocehiliosan/yadm" | |
YADM_RELEASE="master" | |
REPO_URL="" | |
function yadm() { | |
if command -v which >/dev/null 2>&1 && which yadm >/dev/null 2>&1; then | |
echo "Found yadm installed locally, removing remote yadm() function" | |
unset -f yadm | |
command yadm "$@" | |
else | |
echo WARNING: Using yadm remotely. You should install yadm locally. | |
curl -fsSL "$YADM_REPO/raw/$YADM_RELEASE/yadm" | bash -s -- "$@" | |
fi | |
} | |
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 2>&1; then | |
echo | |
echo "***************************************************" | |
echo "yadm is NOT currently installed." | |
echo "You should install it locally, this link may help:" | |
echo "https://thelocehiliosan.github.io/yadm/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 -fsSL '$YADM_REPO/raw/$YADM_RELEASE/bootstrap')" | |
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" --bootstrap | |
ask_about_source | |
} | |
main "$@" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment