Skip to content

Instantly share code, notes, and snippets.

@BradenM
Last active February 16, 2019 04:39
Show Gist options
  • Save BradenM/ed2460e85a171e06b122f7ff0a008004 to your computer and use it in GitHub Desktop.
Save BradenM/ed2460e85a171e06b122f7ff0a008004 to your computer and use it in GitHub Desktop.
WarriorBeatApp Setup Script for Archlinux
#!/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