Kevin Cotugno
5cde6657c9
We are removing the submodules and the expectation that this git repository exists one's home directory. Instead, the script will copy the necessary files. We also are removing the code to install the latest the latest ruby and nodejs versions on first start from .zshrc. We will do this in install.sh
146 lines
3.2 KiB
Bash
Executable File
146 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -eo pipefail
|
|
|
|
user=$(whoami)
|
|
|
|
if [ "x$HOME" = "x" ]; then
|
|
echo "HOME must be set"
|
|
exit 1
|
|
fi
|
|
|
|
function is_sudo() {
|
|
if [ "x$SUDO_UID" != "x" ]; then
|
|
echo "Please run without sudo"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function detect_os() {
|
|
# Adapted from https://unix.stackexchange.com/a/6348
|
|
if [ -f /etc/os-release ]; then
|
|
# freedesktop.org and systemd
|
|
. /etc/os-release
|
|
OS=Arch
|
|
VER=$VERSION_ID
|
|
elif type lsb_release >/dev/null 2>&1; then
|
|
# linuxbase.org
|
|
OS=$(lsb_release -si)
|
|
VER=$(lsb_release -sr)
|
|
elif [ -f /etc/lsb-release ]; then
|
|
# For some versions of Debian/Ubuntu without lsb_release command
|
|
. /etc/lsb-release
|
|
OS=$DISTRIB_ID
|
|
VER=$DISTRIB_RELEASE
|
|
elif [ -f /etc/debian_version ]; then
|
|
# Older Debian/Ubuntu/etc.
|
|
OS=Debian
|
|
VER=$(cat /etc/debian_version)
|
|
else
|
|
# Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
|
|
OS=$(uname -s)
|
|
VER=$(uname -r)
|
|
fi
|
|
|
|
OS=$(echo "$OS" | tr '[:upper:]' '[:lower:]')
|
|
}
|
|
|
|
function detect_package_manager() {
|
|
local sudo
|
|
if [ "x$user" != "xroot" ]; then sudo="sudo "; fi
|
|
|
|
if [ "x$OS" = "xarch" ]; then
|
|
install_package_cmd="${sudo}pacman -S --noconfirm"
|
|
check_package_cmd="pacman -Q"
|
|
elif [ "x$OS" = "xdebian" ]; then
|
|
install_package_cmd="${sudo}apt-get install -y"
|
|
elif [ "x$OS" = "darwin" ]; then
|
|
if [ "x$user" != "xroot" ]; then
|
|
echo "Running as root on macOS is unsupported"
|
|
exit 1
|
|
fi
|
|
|
|
install_package_cmd="brew install"
|
|
check_package_cmd="brew list --formula"
|
|
else
|
|
echo "Unknown and unsupported package manager"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function check_package_installed() {
|
|
$check_package_cmd "$1" &>/dev/null || return 1
|
|
}
|
|
|
|
function install_git() {
|
|
if check_package_installed lazygit; then
|
|
echo "Git is already installed...skipping"
|
|
return
|
|
fi
|
|
|
|
echo "Installing git..."
|
|
$install_package_cmd lazygit
|
|
}
|
|
|
|
function install_oh_my_zsh() {
|
|
local oh_my_zsh_dir="$HOME/.oh-my-zsh"
|
|
if [ -d "$oh_my_zsh_dir" ]; then
|
|
echo "Oh My Zsh is already installed"
|
|
return
|
|
fi
|
|
|
|
echo "Installing Oh My Zsh..."
|
|
git -C "$HOME" clone https://code.cotugno.family/kevin/ohmyzsh.git "$(basename "$oh_my_zsh_dir")"
|
|
}
|
|
|
|
function install_asdf() {
|
|
local asdf_dir="$HOME/.asdf"
|
|
if [ -d "$asdf_dir" ]; then
|
|
echo "asdf is already installed"
|
|
return
|
|
fi
|
|
|
|
echo "Installing asdf..."
|
|
if [ "$OS" = "darwin" ]; then
|
|
$install_package_cmd asdf
|
|
. "/usr/local/opt/asdf/libexec/asdf.sh"
|
|
else
|
|
git -C "$HOME" clone https://code.cotugno.family/kevin/asdf.git "$(basename "$asdf_dir")"
|
|
git -C "$asdf_dir" checkout "$(git -C "$asdf_dir" describe --tags --abbrev=0)"
|
|
. "$asdf_dir/asdf.sh"
|
|
fi
|
|
}
|
|
|
|
function setup_asdf() {
|
|
local asdf_plugins=(ruby nodejs)
|
|
|
|
for plugin in ${asdf_plugins[@]}; do
|
|
if [[ ! -d "$HOME/.asdf/plugins/$plugin" ]]; then
|
|
echo "Installing asdf $plugin plugin"
|
|
asdf plugin add "$plugin"
|
|
asdf install "$plugin" latest
|
|
else
|
|
echo "asdf plugin $plugin already installed"
|
|
fi
|
|
done
|
|
}
|
|
|
|
function install_files() {
|
|
for file in $(cat install.txt); do
|
|
echo "Installing $file"
|
|
|
|
if [ "$(dirname "$file")" != "." ]; then
|
|
mkdir -p "$HOME/$(dirname "$file")"
|
|
fi
|
|
cp "$file" "$HOME/$file"
|
|
done
|
|
}
|
|
|
|
is_sudo
|
|
detect_os
|
|
detect_package_manager
|
|
install_git
|
|
install_oh_my_zsh
|
|
install_asdf
|
|
setup_asdf
|
|
install_files
|