init
This commit is contained in:
commit
b3dba4542f
44 changed files with 1596 additions and 0 deletions
192
install
Executable file
192
install
Executable file
|
@ -0,0 +1,192 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
# ./install --system --forced
|
||||
# --forced (not forced, does not delete old version, just ends in failure)
|
||||
# --system (refault user)
|
||||
|
||||
# Defaults
|
||||
force=false
|
||||
system=false
|
||||
|
||||
# Parse arguments
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--forced)
|
||||
forced=true
|
||||
;;
|
||||
--system)
|
||||
system=true
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Set INSTALL_HOME to $HOME if not already set
|
||||
: "${INSTALL_HOME:=$HOME}"
|
||||
|
||||
if [ "$system" = true ] && [ "$EUID" -ne 0 ]; then
|
||||
echo "Not running as root. Re-running with sudo... $0"
|
||||
exec sudo INSTALL_HOME="$INSTALL_HOME" "$0" "$@"
|
||||
fi
|
||||
|
||||
REPO_URL="https://gitlab.com/artur.gurgul/home.git"
|
||||
|
||||
is_debian_like() {
|
||||
if [ -r /etc/os-release ]; then
|
||||
. /etc/os-release
|
||||
if [ "$ID" = "debian" ] || printf '%s' "$ID_LIKE" | grep -qi 'debian'; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
[ -r /etc/debian_version ]
|
||||
}
|
||||
|
||||
is_macos() {
|
||||
[ "$(uname)" = "Darwin" ]
|
||||
}
|
||||
|
||||
echo "Forced: $forced"
|
||||
echo "System: $system"
|
||||
|
||||
# local
|
||||
if [ "$system" = false ]; then
|
||||
DAT_ROOT="\$HOME/.dat"
|
||||
else
|
||||
# system/linux
|
||||
if is_debian_like; then
|
||||
DAT_ROOT="/dat"
|
||||
# MacOS
|
||||
elif is_macos; then
|
||||
DAT_ROOT="/opt/dat"
|
||||
else
|
||||
echo "OS is not supported"
|
||||
exit -1
|
||||
fi
|
||||
fi
|
||||
|
||||
####################### ZSHRC ================================
|
||||
|
||||
echo "Create ~/.zshrc"
|
||||
echo "export DAT_ROOT=$DAT_ROOT" > "$INSTALL_HOME/.zshrc"
|
||||
echo ". \$DAT_ROOT/bin/zshrc/init" >> "$INSTALL_HOME/.zshrc"
|
||||
|
||||
export DAT_ROOT=$(echo "$DAT_ROOT" | envsubst)
|
||||
|
||||
####################### Dependencies =========================
|
||||
|
||||
debian_install_packages() {
|
||||
# List of required packages
|
||||
local packages=("git" "ruby")
|
||||
local to_install=()
|
||||
|
||||
# Determine if we need to use sudo
|
||||
local SUDO=""
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
SUDO="sudo"
|
||||
fi
|
||||
|
||||
# Check each package
|
||||
for pkg in "${packages[@]}"; do
|
||||
if ! dpkg -s "$pkg" >/dev/null 2>&1; then
|
||||
to_install+=("$pkg")
|
||||
fi
|
||||
done
|
||||
|
||||
# Install missing packages
|
||||
if [ "${#to_install[@]}" -gt 0 ]; then
|
||||
# Update and upgrade
|
||||
$SUDO apt update
|
||||
$SUDO apt upgrade -y
|
||||
|
||||
$SUDO apt install -y "${to_install[@]}"
|
||||
else
|
||||
echo "All required packages are already installed."
|
||||
fi
|
||||
}
|
||||
|
||||
macos_install_packages() {
|
||||
# List of required packages
|
||||
local packages=("git" "ruby")
|
||||
local to_install=()
|
||||
|
||||
# Check for Homebrew
|
||||
if ! command -v brew >/dev/null 2>&1; then
|
||||
echo "Homebrew not found. Installing Homebrew..."
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
eval "$(/opt/homebrew/bin/brew shellenv)" # Adjust for Apple Silicon
|
||||
fi
|
||||
|
||||
# Check each package
|
||||
for pkg in "${packages[@]}"; do
|
||||
if ! brew list "$pkg" >/dev/null 2>&1; then
|
||||
to_install+=("$pkg")
|
||||
fi
|
||||
done
|
||||
|
||||
# Install missing packages
|
||||
if [ "${#to_install[@]}" -gt 0 ]; then
|
||||
# Update Homebrew
|
||||
brew update
|
||||
brew install "${to_install[@]}"
|
||||
else
|
||||
echo "All required packages are already installed."
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
if is_debian_like; then
|
||||
debian_install_packages
|
||||
elif is_macos; then
|
||||
macos_install_packages
|
||||
fi
|
||||
|
||||
####################### Cleaning previous installs ============
|
||||
## if forced
|
||||
clean_previous_installs() {
|
||||
if [ "$system" = true ]; then
|
||||
rm -rf /usr/bin/dat
|
||||
fi
|
||||
rm -rf $DAT_ROOT
|
||||
}
|
||||
|
||||
if [ "$forced" = true ]; then
|
||||
clean_previous_installs
|
||||
fi
|
||||
|
||||
####################### Installing... =========================
|
||||
|
||||
install_dat() {
|
||||
if [ -d "$DAT_ROOT" ]; then
|
||||
if [ -d "$DAT_ROOT/.git" ]; then
|
||||
echo "Directory exists and is a Git repository. Pulling latest changes..."
|
||||
git -C "$DAT_ROOT" pull
|
||||
else
|
||||
echo "Directory exists but is not a Git repository."
|
||||
read -p "Do you want to delete it and clone the repository? [y/N]: " confirm
|
||||
if [[ "$confirm" =~ ^[Yy]$ ]]; then
|
||||
rm -rf "$DAT_ROOT"
|
||||
echo "Cloning repository..."
|
||||
git clone $REPO_URL "$DAT_ROOT"
|
||||
else
|
||||
echo "Aborting installation."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "Directory does not exist. Cloning repository..."
|
||||
git clone $REPO_URL "$DAT_ROOT"
|
||||
fi
|
||||
}
|
||||
install_dat
|
||||
|
||||
####################### Make it global ========================
|
||||
# Not done yet
|
||||
install_global_zsh_deb() {
|
||||
ln -s /dat/bin/dat /usr/bin/dat
|
||||
cat > /etc/profile.d/dat.sh <<EOF
|
||||
export RUBYLIB=$DAT_ROOT
|
||||
EOF
|
||||
}
|
||||
|
||||
####################### Make shell setable by user =============
|
||||
####################### Set daemon that updates the dat ========
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue