164 lines
4.3 KiB
Bash
Executable File
164 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Vars
|
|
DOTFILES_DIR="$HOME/.dotfiles"
|
|
CONFIG_DIR="$HOME/.config/dotfiles"
|
|
REPO="https://gitea.keuledrive.de/Keule2/Dotfiles.git"
|
|
DIST=$(source /etc/os-release && echo $ID)
|
|
|
|
# Colors
|
|
COLOR_RESET='\033[0m'
|
|
RED='\033[0;31m'
|
|
LGREEN='\033[01;32m'
|
|
|
|
# Helper Functions
|
|
print_header() {
|
|
echo -e "${LGREEN}$1${COLOR_RESET}"
|
|
}
|
|
|
|
cmd() {
|
|
local DOTFILES_LOG="./error.log"
|
|
|
|
if eval "$1" 1> /dev/null 2> $DOTFILES_LOG; then
|
|
rm "$DOTFILES_LOG"
|
|
return 0
|
|
fi
|
|
|
|
echo -e "${RED}"
|
|
cat $DOTFILES_LOG
|
|
echo -e "${COLOR_RESET}"
|
|
rm "$DOTFILES_LOG"
|
|
exit 1
|
|
}
|
|
|
|
paru_install() {
|
|
if [ -x "$(command -v paru)" ]; then
|
|
return
|
|
fi
|
|
|
|
# Install Base-Devel
|
|
if [ -z "$(pacman -Q | grep base-devel)" ]; then
|
|
print_header "Installing base-devel"
|
|
cmd "sudo pacman -S base-devel --noconfirm"
|
|
fi
|
|
# Install RustUp
|
|
if ! [ -x "$(command -v rustup)" ]; then
|
|
print_header "Installing rustup"
|
|
cmd "sudo pacman -S rustup --noconfirm"
|
|
cmd "rustup default stable"
|
|
fi
|
|
# Instal Paru
|
|
FOLDER=$(mktemp -d)
|
|
print_header "Installing paru"
|
|
cmd "git clone https://aur.archlinux.org/paru.git $FOLDER"
|
|
cd $FOLDER
|
|
cmd "makepkg -si --noconfirm"
|
|
}
|
|
|
|
arch_install() {
|
|
# Install Ansible
|
|
if ! [ -x "$(command -v ansible)" ]; then
|
|
print_header "Installing ansible"
|
|
cmd "sudo pacman -S ansible --noconfirm"
|
|
fi
|
|
# Install Git
|
|
if ! [ -x "$(command -v git)" ]; then
|
|
print_header "Installing git"
|
|
cmd "sudo pacman -S git --noconfirm"
|
|
fi
|
|
# Installl Paru
|
|
paru_install
|
|
# Install PIP
|
|
if ! [ -x "$(command -v pip)" ]; then
|
|
print_header "Installing pip"
|
|
cmd "sudo pacman -S python-pip --noconfirm"
|
|
fi
|
|
# Install Watchdog
|
|
if [ -z "$(pip list | grep watchdog)" ]; then
|
|
print_header "Installing watchdog"
|
|
cmd "pip install --break-system-packages watchdog"
|
|
fi
|
|
}
|
|
|
|
ubuntu_install() {
|
|
# Install Ansible
|
|
if ! dpkg -s ansible >/dev/null 2>&1; then
|
|
print_header "Installing ansible"
|
|
cmd "sudo apt-get update"
|
|
cmd "sudo apt-get install -y software-properties-common"
|
|
cmd "sudo apt-add-repository -y ppa:ansible/ansible"
|
|
cmd "sudo apt-get update"
|
|
cmd "sudo apt-get install -y ansible"
|
|
cmd "sudo apt-get install python3-argcomplete"
|
|
cmd "sudo activate-global-python-argcomplete3"
|
|
fi
|
|
# Install Git
|
|
if ! dpkg -s git >/dev/null 2>&1; then
|
|
print_header "Installing git"
|
|
cmd "sudo apt-get install -y git"
|
|
fi
|
|
# TODO pip, watchdog
|
|
}
|
|
|
|
update_galaxy() {
|
|
local OS=$1
|
|
|
|
print_header "Installing/Updating ansible-galaxy"
|
|
cmd "ansible-galaxy install -r $DOTFILES_DIR/requirements/default.yml"
|
|
if [ -f "$DOTFILES_DIR/requirements/$OS.yml" ]; then
|
|
cmd "ansible-galaxy install -r $DOTFILES_DIR/requirements/$OS.yml"
|
|
fi
|
|
}
|
|
|
|
# Banner
|
|
cat << "EOF"
|
|
________ __ .___ __ .__ .__
|
|
\______ \ _____/ |_ ______ | | ____ _______/ |______ | | | | ___________
|
|
| | \ / _ \ __\/ ___/ | |/ \ / ___/\ __\__ \ | | | | _/ __ \_ __ \
|
|
| ` ( <_> ) | \___ \ | | | \\___ \ | | / __ \| |_| |_\ ___/| | \/
|
|
/_______ /\____/|__| /____ > |___|___| /____ > |__| (____ /____/____/\___ >__|
|
|
\/ \/ \/ \/ \/ \/
|
|
EOF
|
|
|
|
# Setup
|
|
case $DIST in
|
|
arch)
|
|
arch_install
|
|
;;
|
|
ubuntu)
|
|
ubuntu_install
|
|
;;
|
|
*)
|
|
echo "Unsupported OS"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Clone repository
|
|
if ! [[ -d "$DOTFILES_DIR" ]]; then
|
|
print_header "Cloning repo"
|
|
cmd "git clone $REPO $DOTFILES_DIR"
|
|
else
|
|
print_header "Updating repo"
|
|
cmd "git -C $DOTFILES_DIR pull"
|
|
fi
|
|
|
|
# Change Working Dir
|
|
cd "$DOTFILES_DIR"
|
|
|
|
# Update Galaxy
|
|
update_galaxy $DIST
|
|
|
|
# Run playbook
|
|
if [[ -f "$CONFIG_DIR/vault-password.txt" ]]; then
|
|
if [[ -f "$CONFIG_DIR/values.yml" ]]; then
|
|
ansible-playbook --diff -v --ask-become-pass --extra-vars "@$CONFIG_DIR/values.yml" --vault-password-file "$CONFIG_DIR/vault-password.txt" "$DOTFILES_DIR/main.yml" "$@"
|
|
else
|
|
ansible-playbook --diff -v --ask-become-pass --vault-password-file "$CONFIG_DIR/vault-password.txt" "$DOTFILES_DIR/main.yml" "$@"
|
|
fi
|
|
elif [[ -f "$CONFIG_DIR/values.yml" ]]; then
|
|
ansible-playbook --diff -v --ask-become-pass --extra-vars "@$CONFIG_DIR/values.yml" "$DOTFILES_DIR/main.yml" "$@"
|
|
else
|
|
ansible-playbook --diff -v --ask-become-pass "$DOTFILES_DIR/main.yml" "$@"
|
|
fi
|