summaryrefslogtreecommitdiff
path: root/utils/installer/install.sh
diff options
context:
space:
mode:
authorSubho Banerjee <[email protected]>2021-09-21 01:52:46 -0500
committerGitHub <[email protected]>2021-09-21 08:52:46 +0200
commit279d537e9c96759ec0372496b786a2d28247d093 (patch)
tree05a3d893f57631bf670720ba41c2cb58a42c19ce /utils/installer/install.sh
parentdbb958289b19f18739bc3d935e41e6c7ce75eab6 (diff)
[Feature]: use yarn to install nodejs dependencies (#1565)
* Add yarn support for installer script * Add non-interactive install * Fix installer script bug for cargo
Diffstat (limited to 'utils/installer/install.sh')
-rwxr-xr-xutils/installer/install.sh135
1 files changed, 94 insertions, 41 deletions
diff --git a/utils/installer/install.sh b/utils/installer/install.sh
index d2295079..52d36581 100755
--- a/utils/installer/install.sh
+++ b/utils/installer/install.sh
@@ -1,4 +1,5 @@
#!/usr/bin/env bash
+
set -eo pipefail
#Set branch to master unless specified by the user
@@ -31,13 +32,42 @@ declare -a __pip_deps=(
"pynvim"
)
+function usage() {
+ echo "Usage: install.sh [<options>]"
+ echo ""
+ echo "Options:"
+ echo " -h, --help Print this help message"
+ echo " -y, --yes Yes for all choices (Install NodeJS, Python, Rust dependencies)"
+ echo " --overwrite Overwrite previous lvim configuration"
+}
+
+function parse_arguments() {
+ while [ "$#" -gt 0 ]; do
+ case "$1" in
+ -y | --yes)
+ ARGS_INSTALL_NONINTERACTIVE="y"
+ ;;
+ --overwrite)
+ ARGS_OVERWRITE="y"
+ ;;
+ -h | --help)
+ usage
+ exit 0
+ ;;
+ esac
+ shift
+ done
+}
+
function main() {
+ parse_arguments "$@"
+
cat <<'EOF'
- 88\ 88\
- 88 | \__|
- 88 |88\ 88\ 888888$\ 888888\ 888888\ 88\ 88\ 88\ 888888\8888\
- 88 |88 | 88 |88 __88\ \____88\ 88 __88\\88\ 88 |88 |88 _88 _88\
+ 88\ 88\
+ 88 | \__|
+ 88 |88\ 88\ 888888$\ 888888\ 888888\ 88\ 88\ 88\ 888888\8888\
+ 88 |88 | 88 |88 __88\ \____88\ 88 __88\\88\ 88 |88 |88 _88 _88\
88 |88 | 88 |88 | 88 | 888888$ |88 | \__|\88\88 / 88 |88 / 88 / 88 |
88 |88 | 88 |88 | 88 |88 __88 |88 | \88$ / 88 |88 | 88 | 88 |
88 |\888888 |88 | 88 |\888888$ |88 | \$ / 88 |88 | 88 | 88 |
@@ -61,17 +91,23 @@ EOF
__add_separator "80"
- echo "Would you like to install lunarvim's NodeJS dependencies?"
- read -p "[y]es or [n]o (default: no) : " -r answer
- [ "$answer" != "${answer#[Yy]}" ] && install_nodejs_deps
+ if [ -z "$ARGS_INSTALL_NONINTERACTIVE" ]; then
+ echo "Would you like to install lunarvim's NodeJS dependencies?"
+ read -p "[y]es or [n]o (default: no) : " -r answer
+ [ "$answer" != "${answer#[Yy]}" ] && install_nodejs_deps
- echo "Would you like to install lunarvim's Python dependencies?"
- read -p "[y]es or [n]o (default: no) : " -r answer
- [ "$answer" != "${answer#[Yy]}" ] && install_python_deps
+ echo "Would you like to install lunarvim's Python dependencies?"
+ read -p "[y]es or [n]o (default: no) : " -r answer
+ [ "$answer" != "${answer#[Yy]}" ] && install_python_deps
- echo "Would you like to install lunarvim's Rust dependencies?"
- read -p "[y]es or [n]o (default: no) : " -r answer
- [ "$answer" != "${answer#[Yy]}" ] && install_rust_deps
+ echo "Would you like to install lunarvim's Rust dependencies?"
+ read -p "[y]es or [n]o (default: no) : " -r answer
+ [ "$answer" != "${answer#[Yy]}" ] && install_rust_deps
+ else
+ install_nodejs_deps
+ install_python_deps
+ install_rust_deps
+ fi
__add_separator "80"
@@ -80,17 +116,17 @@ EOF
__add_separator "80"
- case "$@" in
- *--overwrite*)
- echo "!!Warning!! -> Removing all lunarvim related config \
- because of the --overwrite flag"
+ if [ -n "$ARGS_OVERWRITE" ]; then
+ echo "!!Warning!! -> Removing all lunarvim related config \
+ because of the --overwrite flag"
+ if [ -z "$ARGS_INSTALL_NONINTERACTIVE" ]; then
read -p "Would you like to continue? [y]es or [n]o : " -r answer
[ "$answer" == "${answer#[Yy]}" ] && exit 1
- for dir in "${__lvim_dirs[@]}"; do
- [ -d "$dir" ] && rm -rf "$dir"
- done
- ;;
- esac
+ fi
+ for dir in "${__lvim_dirs[@]}"; do
+ [ -d "$dir" ] && rm -rf "$dir"
+ done
+ fi
install_packer
@@ -105,7 +141,6 @@ EOF
fi
__add_separator "80"
-
}
function detect_platform() {
@@ -133,14 +168,14 @@ function detect_platform() {
}
function print_missing_dep_msg() {
- echo "[ERROR]: Unable to find dependency [$1]"
- echo "Please install it first and re-run the installer. Try: $RECOMMEND_INSTALL $1"
-}
-
-function check_dep() {
- if ! command -v "$1" &>/dev/null; then
- print_missing_dep_msg "$1"
- exit 1
+ if [ "$#" -eq 1 ]; then
+ echo "[ERROR]: Unable to find dependency [$1]"
+ echo "Please install it first and re-run the installer. Try: $RECOMMEND_INSTALL $1"
+ else
+ local cmds
+ cmds=$(for i in "$@"; do echo "$RECOMMEND_INSTALL $i"; done)
+ printf "[ERROR]: Unable to find dependencies [%s]" "$@"
+ printf "Please install any one of the dependencies and re-run the installer. Try: \n%s\n" "$cmds"
fi
}
@@ -155,8 +190,7 @@ function check_system_deps() {
fi
}
-function install_nodejs_deps() {
- check_dep "npm"
+function __install_nodejs_deps_npm() {
echo "Installing node modules with npm.."
for dep in "${__npm_deps[@]}"; do
if ! npm ls -g "$dep" &>/dev/null; then
@@ -167,6 +201,24 @@ function install_nodejs_deps() {
echo "All NodeJS dependencies are succesfully installed"
}
+function __install_nodejs_deps_yarn() {
+ echo "Installing node modules with yarn.."
+ yarn global add "${__npm_deps[@]}"
+ echo "All NodeJS dependencies are succesfully installed"
+}
+
+function install_nodejs_deps() {
+ local -a pkg_managers=("yarn" "npm")
+ for pkg_manager in "${pkg_managers[@]}"; do
+ if command -v "$pkg_manager" &>/dev/null; then
+ eval "__install_nodejs_deps_$pkg_manager"
+ return
+ fi
+ done
+ print_missing_dep_msg "${pkg_managers[@]}"
+ exit 1
+}
+
function install_python_deps() {
echo "Verifying that pip is available.."
if ! python3 -m ensurepip &>/dev/null; then
@@ -183,22 +235,23 @@ function install_python_deps() {
}
function __attempt_to_install_with_cargo() {
- if ! command -v cargo &>/dev/null; then
+ if command -v cargo &>/dev/null; then
echo "Installing missing Rust dependency with cargo"
cargo install "$1"
else
- echo "[WARN]: Unable to find fd. Make sure to install it to avoid any problems"
+ echo "[WARN]: Unable to find cargo. Make sure to install it to avoid any problems"
+ exit 1
fi
}
# we try to install the missing one with cargo even though it's unlikely to be found
function install_rust_deps() {
- if ! command -v fd &>/dev/null; then
- __attempt_to_install_with_cargo "fd-find"
- fi
- if ! command -v rg &>/dev/null; then
- __attempt_to_install_with_cargo "ripgrep"
- fi
+ local -a deps=("fd::fd-find" "rg::ripgrep")
+ for dep in "${deps[@]}"; do
+ if ! command -v "${dep%%::*}" &>/dev/null; then
+ __attempt_to_install_with_cargo "${dep##*::}"
+ fi
+ done
echo "All Rust dependencies are succesfully installed"
}