diff --git a/packages.list b/packages.list new file mode 100644 index 0000000..93f63b1 --- /dev/null +++ b/packages.list @@ -0,0 +1,10 @@ +curl +wget +git +vim-gtk3 +tmux +zsh +universal-ctags +build-essential +coreutils + diff --git a/packages.sh b/packages.sh new file mode 100644 index 0000000..f5032de --- /dev/null +++ b/packages.sh @@ -0,0 +1,126 @@ +#!/usr/bin/env bash + +set -Eeuo pipefail +trap cleanup SIGINT SIGTERM ERR EXIT + +script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd -P) + +usage() { + cat << EOF +Usage: $(basename "${BASH_SOURCE[0]}") [-h] [-v] [-f] -p param_value -u url + +Script description here. + +Available options: + +-h, --help Print this help and exit +-v, --verbose Print script debug info +-f, --flag Some flag description +-p, --param Some param description +-u, --url URL to download the .list file from +EOF + exit +} + +cleanup() { + trap - SIGINT SIGTERM ERR EXIT + # script cleanup here +} + +setup_colors() { + if [[ -t 2 ]] && [[ -z "${NO_COLOR-}" ]] && [[ "${TERM-}" != "dumb" ]]; then + NOFORMAT='\033[0m' RED='\033[0;31m' GREEN='\033[0;32m' ORANGE='\033[0;33m' BLUE='\033[0;34m' PURPLE='\033[0;35m' CYAN='\033[0;36m' YELLOW='\033[1;33m' + else + NOFORMAT='' RED='' GREEN='' ORANGE='' BLUE='' PURPLE='' CYAN='' YELLOW='' + fi +} + +msg() { + echo >&2 -e "${1-}" +} + +die() { + local msg=$1 + local code=${2-1} # default exit status 1 + msg "$msg" + exit "$code" +} + +install_packages() { + local packages=("$@") + if [[ ${#packages[@]} -gt 0 ]]; then + msg "${BLUE}Installing packages:${NOFORMAT} ${packages[*]}" + apt update + apt install -y "${packages[@]}" + else + msg "${RED}No packages specified to install.${NOFORMAT}" + fi +} + +download_list() { + local url=$1 + local temp_file=$(mktemp) + + msg "${BLUE}Downloading .list file from:${NOFORMAT} ${url}" + curl -s "$url" -o "$temp_file" || die "Failed to download file from $url" + + # Read each line from the file and install the package + while IFS= read -r line || [[ -n "$line" ]]; do + # Skip empty lines or comments (lines starting with '#') + [[ -z "$line" || "$line" =~ ^# ]] && continue + msg "${GREEN}Installing:${NOFORMAT} $line" + apt install -y "$line" + done < "$temp_file" + + # Clean up temporary file + rm -f "$temp_file" +} + +parse_params() { + # default values of variables set from params + flag=0 + param='' + url='' + + while :; do + case "${1-}" in + -h | --help) usage ;; + -v | --verbose) set -x ;; + --no-color) NO_COLOR=1 ;; + -f | --flag) flag=1 ;; + -p | --param) + param="${2-}" + shift + ;; + -u | --url) # URL to download the .list file + url="${2-}" + shift + ;; + -?*) die "Unknown option: $1" ;; + *) break ;; + esac + shift + done + + args=("$@") + + # check required params and arguments + [[ -z "${param-}" ]] && die "Missing required parameter: param" + [[ -z "${url-}" ]] && die "Missing required parameter: url" + [[ ${#args[@]} -eq 0 ]] && die "Missing script arguments" + + return 0 +} + +parse_params "$@" +setup_colors + +# script logic here +msg "${RED}Read parameters:${NOFORMAT}" +msg "- flag: ${flag}" +msg "- param: ${param}" +msg "- arguments: ${args[*]-}" + +# Download the .list file and install the packages +download_list "$url" +