Last active
February 16, 2019 04:39
-
-
Save BradenM/ed2460e85a171e06b122f7ff0a008004 to your computer and use it in GitHub Desktop.
WarriorBeatApp Setup Script for Archlinux
This file contains 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
#!/usr/bin/env bash | |
# Scripts for automating installation of WarriorBeatApp Deps | |
# Very opinionated, will force yay/rbenv/nvm and others on you | |
# Fail on Error | |
set -e | |
# Pacman Requirements | |
PACMAN_REQS=( | |
binutils | |
base-devel | |
librsvg2-bin | |
librsvg2-dev | |
) | |
PACMAN_LEN=${#PACMAN_REQS[@]} | |
# Package Reqs | |
PKG_NAMES=( | |
"yay" | |
"rbenv" | |
"nvm" | |
"jabba" | |
"java" | |
) | |
PKG_REQS=( | |
install_yay | |
install_rbenv | |
install_nvm | |
install_jabba | |
install_java | |
) | |
PKG_LEN=${#PKG_REQS[@]} | |
# Android Packages | |
ANDROID_PKGS=( | |
android-studio | |
android-sdk | |
android-sdk-build-tools | |
android-sdk-platform-tools | |
android-platform | |
) | |
ANDROID_NAMES=( | |
"Android Studio" | |
"Android SDK" | |
"Android Build Tools" | |
"Android Platform Tools" | |
"Android Platform" | |
) | |
ANDROID_LEN=${#ANDROID_PKGS[@]} | |
# Some Constants | |
USER_HOME="/home/$SUDO_USER" | |
HOME="$USER_HOME" | |
USER_BASHPROF="$USER_HOME/.bash_profile" | |
USER_BASHRC="$USER_HOME/.bashrc" | |
# Debug | |
IS_DEBUG=true | |
# Source Utils from Gist | |
source_utils() { | |
printf "Grabbing Bash Install Utils...\n" | |
local utils_url="https://git.io/fh5mh" | |
source <(curl -sL "$utils_url") | |
e_success "Install Utils Loaded" | |
sleep 1 | |
} | |
# Get Root | |
get_root () { | |
e_bold "Please provide your Root password (It will be stored for the remained of the script)" | |
read -s -p "[sudo] sudo password for $(whoami): " RPASS | |
} | |
# Run as Root | |
as_user() { | |
if [ "$IS_DEBUG" = true ]; then | |
sudo -u "$SUDO_USER" -H bash -c "$@" | |
else | |
sudo -u "$SUDO_USER" -H bash -c "$@" >/dev/null 2>/dev/null | |
fi | |
} | |
# Install Pacman Deps | |
pac_install() { | |
local pkg="$1" | |
(pacman -S --noconfirm --needed --noprogressbar "$pkg" >/dev/null 2>/dev/null) & | |
show_spinner "${bold}Installing ${magenta}${pkg}${reset}" | |
e_success "$pkg installed ($(expr $2 + 1)/$PACMAN_LEN)" | |
} | |
# Handle Other Package Installs | |
pkg_install() { | |
local pkg_name pkg_install | |
pkg_name=${PKG_NAMES[$1]} | |
pkg_exec=${PKG_REQS[$1]} | |
if type_exists "$pkg_name"; then | |
return 1 | |
else | |
if [ "$IS_DEBUG" = true ]; then | |
$pkg_exec | |
else | |
$pkg_exec >/dev/null 2>/dev/null | |
fi | |
fi | |
} | |
# Load Shell | |
refresh_shell() { | |
source "$USER_BASHRC" | |
source "$USER_BASHPROF" | |
HOME="$USER_HOME" | |
} | |
# Handle Curl Scripts | |
install_from_curl() { | |
local url="$1" | |
as_user "curl -fsSL $url | bash" | |
} | |
# Handle Yay packages | |
run_yay() { | |
local args="--aur --noconfirm --needed --noprogressbar --nocleanmenu --nodiffmenu --noeditmenu --noremovemake --sudoloop" | |
if [ "$IS_DEBUG" = true ]; then | |
as_user "yay -S $@ $args" | |
else | |
as_user "yay -S $@ $args" >/dev/null 2>/dev/null | |
fi | |
} | |
# Install Yay | |
install_yay(){ | |
as_user "git clone https://aur.archlinux.org/yay.git --quiet" | |
pushd yay >/dev/null 2>/dev/null | |
if [ "$IS_DEBUG" = true ]; then | |
as_user "makepkg -si --noconfirm" | |
else | |
as_user "makepkg -si --noconfirm --needed --noprogressbar" | |
fi | |
popd >/dev/null 2>/dev/null | |
rm -rf ./yay | |
refresh_shell | |
as_user "yay --noconfirm --needed --noprogressbarf" | |
} | |
# Install Rbenv | |
install_rbenv() { | |
local rbenv_dir rbdoctor_url | |
rbdoctor_url="https://github.com/rbenv/rbenv-installer/raw/master/bin/rbenv-doctor" | |
echo "" | |
e_bold "Installing rbenv..." | |
rbenv_dir="$USER_HOME/.rbenv" | |
as_user "git clone https://github.com/rbenv/rbenv.git $rbenv_dir" | |
pushd $rbenv_dir >/dev/null 2>/dev/null | |
as_user "src/configure" | |
as_user "make -C src" | |
popd >/dev/null 2>/dev/null | |
# Add rbenv-build | |
as_user "mkdir -p ${rbenv_dir}/plugins" | |
as_user "mkdir -p ${rbenv_dir}/cache" | |
as_user "git clone https://github.com/rbenv/ruby-build.git ${rbenv_dir}/plugins/ruby-build" | |
echo "" | |
e_bold "Adding rbenv shell hook..." | |
echo '# rbenv' >> $USER_BASHPROF | |
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> $USER_BASHPROF | |
echo 'eval "$(rbenv init -)"' >> $USER_BASHPROF | |
refresh_shell | |
# Load In Current Shell | |
export PATH="$USER_HOME/.rbenv/bin:$PATH" | |
refresh_shell | |
e_bold "Checking rbenv..." | |
echo "" | |
install_from_curl "$rbdoctor_url" | |
} | |
# Install NVM (Node Version Manager) | |
install_nvm() { | |
local nvm_url | |
nvm_url="https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh" | |
echo "" | |
e_bold "Installing nvm..." | |
install_from_curl "https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh" | |
# Load NVM in Current Shell | |
export NVM_DIR="$USER_HOME/.nvm" | |
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm | |
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion | |
refresh_shell | |
} | |
# Install Jabba (Java Version Manager) | |
install_jabba() { | |
local jabba_url | |
jabba_url="https://github.com/shyiko/jabba/raw/master/install.sh" | |
echo "" | |
e_bold "Installing Java Version Manager..." | |
install_from_curl "https://github.com/shyiko/jabba/raw/master/install.sh" | |
as_user ". $USER_HOME/.jabba/jabba.sh" | |
# Load Jabba In Current Shell | |
[ -s "$USER_HOME/.jabba/jabba.sh" ] && source "$USER_HOME/.jabba/jabba.sh" | |
refresh_shell | |
} | |
# Install Java 1.8 | |
install_java() { | |
as_user "jabba install 1.8" | |
jabba use 1.8 | |
} | |
# Setup Android Env | |
configure_android() { | |
local SDKS | |
SDKS=( | |
"ndk-bundle" | |
"platforms;android-28" | |
"sources;android-28" | |
"platforms;android-27" | |
"sources;android-27" | |
"platforms;android-26" | |
"sources;android-26" | |
"build-tools;27.0.3" | |
"build-tools;28.0.3" | |
"lldb;3.1" | |
"cmake;3.6.4111459" | |
) | |
echo "" | |
e_bold "Configuring Android Environment..." | |
if ! grep -q sdkusers /etc/group; then | |
groupadd sdkusers | |
gpasswd -a "$SUDO_USER" sdkusers | |
chown -R :sdkusers /opt/android-sdk | |
chmod -R g+w /opt/android-sdk/ | |
fi | |
if ! grep -q "ANDROID_HOME" "${USER_BASHPROF}"; then | |
printf '\n# Android Env | |
export ANDROID_HOME=/opt/android-sdk | |
export PATH=$PATH:~/.android/avd | |
export PATH=$PATH:$ANDROID_HOME/emulator | |
export PATH=$PATH:$ANDROID_HOME/tools | |
export PATH=$PATH:$ANDROID_HOME/tools/bin | |
export PATH=$PATH:$ANDROID_HOME/platform-tools | |
export ANDROID_NDK=$ANDROID_HOME/ndk-bundle\n' >> $USER_BASHPROF | |
fi | |
e_bold "Loading Profile..." | |
. "$USER_BASHPROF" | |
e_bold "Updating sdkmanager..." | |
as_user "sdkmanager --update" | |
as_user "yes | sdkmanager --licenses" >/dev/null 2>/dev/null | |
e_bold "Installing SDKs..." | |
for i in "${SDKS[@]}"; do | |
as_user "sdkmanager $i --install" | |
e_success "$i installed" | |
done | |
e_success "Android Environment Complete" | |
} | |
# Checks/Installed Script Deps | |
install_deps() { | |
# Install Pacman Deps | |
e_title "Pacman Dependencies" | |
for i in "${!PACMAN_REQS[@]}"; do | |
pac_install ${PACMAN_REQS[$i]} $i | |
done | |
# Install Other Packages | |
e_title "Other Packages" | |
for i in "${!PKG_REQS[@]}"; do | |
local index="$i" | |
(pkg_install $i) & | |
show_spinner "${bold}Installing ${magenta}${PKG_NAMES[$index]}${reset}" | |
e_success "${PKG_NAMES[$index]} installed ($(expr $index + 1)/$PKG_LEN)" | |
done | |
# Install Android SDK | |
e_title "Setup Android SDK" | |
for i in "${!ANDROID_PKGS[@]}"; do | |
local index="$i" | |
(run_yay "${ANDROID_PKGS[$index]}") & | |
show_spinner "${bold}Installing ${magenta}${ANDROID_NAMES[$index]}${reset}" | |
e_success "${ANDROID_NAMES[$index]} installed ($(expr $index + 1)/$ANDROID_LEN)" | |
done | |
configure_android | |
adb --help | |
} | |
# Install | |
main() { | |
source_utils | |
trap 'handle_error ${LINENO}' ERR | |
clear | |
# Intro | |
e_header "WarriorBeatApp Install Script" | |
e_warning "This Script is very opinionated and will force yay/rbenv/nvm on you!" | |
sleep 1 | |
# Check if Root | |
if ! is_root; then | |
e_error "Please run this script as root!" | |
exit 1 | |
fi | |
# Install Scripts Deps | |
install_deps | |
} | |
main |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment