diff --git a/scripts/archlinux.sh b/scripts/archlinux.sh index 13e0322..b92dea5 100644 --- a/scripts/archlinux.sh +++ b/scripts/archlinux.sh @@ -1,65 +1,44 @@ -#!{{ lookPath "bash" }} +#!/usr/bin/env bash -# Logging function -log() { - printf "$(tput setaf 4)$(tput bold)>>>>> %s <<<<<$(tput sgr0)\n" "$1" -} +FULL_PATH_TO_SCRIPT="$(realpath "${BASH_SOURCE[-1]}")" +SCRIPT_DIRECTORY="$(dirname "$FULL_PATH_TO_SCRIPT")" -inf() { - printf "$(tput setaf 2)╚═══ᐳ $(tput sgr 0 1)$(tput setaf 2)%s$(tput sgr0)\n" "$1" -} +# include lib +. $SCRIPT_DIRECTORY/utils.sh -err() { - printf "$(tput setaf 9)$(tput bold)>>>>> %s ! <<<<<$(tput sgr0)\n" "$1" -} - -log "Executing $0..." # Packages to install packages=( - bubblewrap - curl - fzf - pass - libyaml - ranger - tmux - trash-cli - ueberzug - unzip - wget - zip - zoxide + bubblewrap + curl + fzf + pass + libyaml + ranger + tmux + trash-cli + ueberzug + unzip + wget + zip + zoxide ) -{{ if ne .chezmoi.username "root" -}} - ## Update system - inf "updating system..." - sudo pacman -Syu --noconfirm --quiet +## Update system +inf "updating system..." +sudo pacman -Syu --noconfirm --quiet - ## Install yay - if [ ! $(command -v yay) ]; then - inf "installing yay..." - sudo pacman -S --needed --noconfirm --quiet git base-devel - git clone https://aur.archlinux.org/yay.git /tmp/yay - cd /tmp/yay - makepkg -si --noconfirm - rm -rf /tmp/yay +## Install yay +if [ ! $(command -v yay) ]; then + inf "installing yay..." + install_binary "yay" +fi + +## Install packages +for package in ${packages[@]}; do + if [ "$(yay -Qq $package 2> /dev/null)" != $package ]; then + inf "installing ${package}..." + install_binary $package "yay" fi - - ## Install packages - for package in ${packages[@]}; do - if [ "$(yay -Qq $package 2> /dev/null)" != $package ]; then - inf "installing ${package}..." - yay -S --noconfirm --removemake --quiet $package - fi - done -{{ else -}} - err "you may not run this script as root" -{{- end}} - - - - - +done diff --git a/scripts/utils.sh b/scripts/utils.sh new file mode 100644 index 0000000..b415c0a --- /dev/null +++ b/scripts/utils.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash + +# Logging function +log() { + printf "$(tput setaf 4)$(tput bold)>>>>> %s <<<<<$(tput sgr0)\n" "$1" +} + +inf() { + printf "$(tput setaf 2)$(tput bold)>>>>> %s <<<<<$(tput sgr0)\n" "$1" +} + +err() { + printf "$(tput setaf 9)$(tput bold)>>>>> %s ! <<<<<$(tput sgr0)\n" "$1" +} + +install_binary() { + ## + # Simple abstraction to install a binary using a supported package manager + # Example usage: + # install_binary "fzf" + # install_binary "fzf" "dnf" + + local package_name="${1}" + local package_manager="${2}" + + # Function to determine the package manager if not specified + determine_package_manager() { + if [ command -v apt-get &>/dev/null ]; then + echo "apt-get" + elif [ command -v pamac &>/dev/null ]; then + echo "pamac" + elif [ command -v yay &>/dev/null ]; then + echo "yay" + elif [ command -v pacman &>/dev/null ]; then + echo "pacman" + else + err "No supported package manager found." + exit 1 + fi + } + + # If the package manager is not specified, determine it + if [[ -z "${package_manager}" ]]; then + package_manager=$(determine_package_manager) + fi + + # Install the package using the determined or specified package manager + inf "Installing ${package_name} using ${package_manager}..." + + case "${package_manager}" in + apt-get) + sudo apt-get install --yes --no-install-recommends --ignore-missing --fix-broken -qq "${package_name}" || { + err "Installation failed." + exit 1 + } + ;; + pacman) + sudo pacman -S --needed --noconfirm --quiet "${package_name}" || { + err "ERROR" "Installation failed." + exit 1 + } + ;; + pamac) + sudo pamac --no-confirm "${package_name}" || { + err "Installation failed." + exit 1 + } + ;; + yay) + yay -S --noconfirm --removemake --quiet "${package_name}" || { + err "Installation failed." + exit 1 + } + ;; + *) + err "Unsupported package manager: ${package_manager}" + exit 1 + ;; + esac + inf "Installation of ${package_name} completed successfully." +} + +