forked from yadm-dev/yadm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bootstrap
executable file
·122 lines (108 loc) · 3.37 KB
/
bootstrap
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#!/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"
ask_about_source
}
main "$@"