diff --git a/distros.sh b/distros.sh index 5408187..4a91f8e 100755 --- a/distros.sh +++ b/distros.sh @@ -73,6 +73,10 @@ echo_error() { echo "${BOLD}${RED}${UNDERLINE}ERROR:${NC}${BRIGHT_RED} $1 ${NC}" >&2 } +echo-error() { + echo "${BOLD}${RED}${UNDERLINE}ERROR:${NC}${BRIGHT_RED} $1 ${NC}" >&2 +} + # INFO: # ↓ should get set in the install script itself # ↓ @@ -107,84 +111,64 @@ echo_pkg() { } echo_info() { - echo "${BOLD}${BLUE}INFO:${NC}${BRIGHT_BLUE} $1${NC}" + echo "${BOLD}${BLUE}INFO:${NC} $1${NC}" +} + +echo_info() { + echo "${BOLD}${BLUE}INFO:${NC} $1${NC}" +} + +echo-warning() { + echo "${BOLD}${YELLOW}WARNING:${NC} $1${NC}" } echo_warning() { - echo "${BOLD}${YELLOW}WARNING:${NC}${BRIGHT_YELLOW} $1${NC}" + echo "${BOLD}${YELLOW}WARNING:${NC} $1${NC}" +} + +echo-note() { + echo "${BOLD}${GREEN}NOTE:${NC} $1${NC}" } echo_note() { - echo "${BOLD}${GREEN}NOTE:${NC}${BRIGHT_GREEN} $1${NC}" + echo "${BOLD}${GREEN}NOTE:${NC} $1${NC}" } # ─< Check if the given command exists silently >───────────────────────────────────────── command_exists() { command -v "$@" >/dev/null 2>&1 } +command-exists() { + command -v "$@" >/dev/null 2>&1 +} silentexec() { "$@" >/dev/null 2>&1 } -source_script() { - local url="$1" - local import="$(mktemp)" - - # ─< if $1 is a local file, source this one instead >───────────────────────────────────── - if [ -f "$url" ]; then - source "$url" - sleep 0.1 - return 0 - else - # ─< if $1 is a url, grab it and source it, also deletes afterwards >───────────────────── - if command_exists curl; then - curl -fsSL $url -o $import - elif command_exists wget; then - wget -o $import $url - else - echo "curl/wget is required, but missing.." - exit 69 - fi - - source "$import" - - echo "${BLUE}Sourcing external script:${NC} $url" - sleep 0.1 - rm -f "$import" - fi -} - -# just an alias for source_script -source-script() { - source_script "$1" -} - run-silent() { - [[ -z $silent ]] && - "$@" || - # else - if $silent; then - silentexec "$@" - else - "$@" - fi - # fi + if [[ -z $silent ]] || ! $silent; then + "$@" + else + silentexec "$@" + fi } # if given an array, it checks if the command is available, and if not - installs all packages in that array one by one checkAndInstall() { + local pkg=$1 # echo "DEBUG:: GOT ARRAY :: ${@}" - # ─< if it's not a list, then just check and install the package.. >────────────────────── + # INFO: if it's not a list, then just check and install the package.. if [[ -z $2 ]]; then - if ! command_exists "$1"; then - if run-silent pkg-install "$1"; then - echo_pkg deps "$1 - ${GREEN}installed" + if ! command_exists "$pkg"; then + echo_pkg deps "Installing $pkg" + if run-silent pkg-install "$pkg"; then + echo_pkg deps "Installed $pkg" else - echo_pkg deps "$1 is already installed.." + echo_pkg deps "$pkg is already installed.." fi else - echo_pkg deps "skipping $1 - as it's ${RED}already installed.." + echo_pkg deps "skipping $pkg - as it's ${RED}already installed.." fi else # ─< else go though the list of items and do the same >─────────────────────────────────── @@ -220,7 +204,6 @@ check_env() { _sudo="" fi - pikaCheckFile="$HOME/.cache/pika_script_detection" checkFileAge() { local file="$1" [[ ! -e "$file" ]] && return 2 # File doesn't exist @@ -232,6 +215,8 @@ check_env() { fi } + pikaCheckFile="$HOME/.cache/pika_script_detection" + if [ -f "$pikaCheckFile" ]; then if checkFileAge $pikaCheckFile; then PIKA_INIT=true @@ -478,6 +463,7 @@ get_packager() { dist_setup() { case "$distro" in debian) + echo "${BOLD}Found ${RED}debian${NC}" _setup debian # Codename support if [ -n $VERSION_CODENAME ]; then @@ -490,6 +476,7 @@ dist_setup() { fi ;; ubuntu) + echo "${BOLD}Found ${BRIGHT_YELLOW}ubuntu${NC}" _setup ubuntu # Codename support if [ -n $VERSION_CODENAME ]; then @@ -502,12 +489,14 @@ dist_setup() { fi ;; fedora) + echo "${BOLD}Found ${BRIGHT_BLUE}fedora${NC}" _setup fedora # Add version-specific var like: fedora_40=true fedora_version="fedora_${VERSION_ID//./_}" eval "$fedora_version=true" ;; arch) + echo "${BOLD}Found ${BLUE}arch${NC}" _setup arch if command_exists yay || command_exists paru; then aur=true @@ -515,16 +504,20 @@ dist_setup() { aur=false fi ;; - alpine | opensuse) + alpine) + echo "${BOLD}Found ${BLUE}alpine${NC}" + _setup $distro + ;; + opensuse) + echo "${BOLD}Found ${GREEN}opensuse${NC}" _setup $distro ;; - # opensuse) - # _setup opensuse - # ;; esac } update_package_list() { + local USER="${USER:-$(whoami)}" + echo_info "Refreshing repository sources.." case "$distro" in ubuntu | debian) run-silent $_sudo apt-get update ;; @@ -533,21 +526,31 @@ update_package_list() { if command_exists pacman; then if ! checkAUR; then local paruBuildDir="/opt/builds" - local USER="$(whoami)" $_sudo mkdir -p "$paruBuildDir" - # if ! command_exists paru; then + echo "${YELLOW}Installing paru as AUR helper...${NC}" - run-silent $_sudo pacman -S --needed --noconfirm base-devel git - cd "$paruBuildDir" && $_sudo git clone https://aur.archlinux.org/paru-bin.git paru + $_sudo pacman -S --needed --noconfirm base-devel git + + cd "$paruBuildDir" && echo "${YELLOW} Cloning paru from ${NC}https://aur.archlinux.org/paru-bin.git" + $_sudo git clone https://aur.archlinux.org/paru-bin.git paru + $_sudo chown -R "$USER": "$paruBuildDir/paru" - cd "$paruBuildDir/paru" && makepkg --noconfirm -si - echo "${GREEN}Paru installed${NC}" - # else - # printf "%b\n" "${GREEN}Paru already installed${RC}" - # fi + cd "$paruBuildDir/paru" + + echo "${GREEN}${BOLD}Installing paru" + makepkg --noconfirm -si + sleep 1 + + if command_exists paru; then + echo "${GREEN}Paru installed${NC}" + else + echo "${RED}${BOLD}Error: Something went wrong when installing paru!" + fi fi fi + sleep 0.01 + if command_exists paru; then run-silent paru -Sy elif command_exists yay; then @@ -571,17 +574,16 @@ if check_env; then # WHY: # ╭─────────────────────────────────────────────────────────────────────────╮ - # │ check if the script has run-silent at least once, so that the sources dont │ + # │ check if the script has run at least once, so that the sources dont │ # │ have to get updated again.. │ # ╰─────────────────────────────────────────────────────────────────────────╯ if [[ -z "$PIKA_INIT" ]]; then - echo_pkg "First time being imported.." + echo_pkg "First time importing.." if update_package_list; then - touch "$pikaCheckFile" + silentexec touch "$pikaCheckFile" fi else - echo_pkg "Skipping repo refresh (PIKA_INIT is already set)" + echo_pkg "Skipping repo refresh" fi - fi diff --git a/dream.sh b/dream.sh index ccc0fe4..c6ca19a 100644 --- a/dream.sh +++ b/dream.sh @@ -95,6 +95,7 @@ echo_pkg() { fi } +# alias for echo_pkg echo-pkg() { echo_pkg "$@" } @@ -126,7 +127,7 @@ check-and-install() { # INFO: if it's not a list, then just check and install the package.. if [[ -z $2 ]]; then spin bold yellow "Installing $pkg" - if ! command_exists "$pkg"; then + if ! command-exists "$pkg"; then if run pkg-install "$pkg"; then check "Installed $pkg" else @@ -141,7 +142,7 @@ check-and-install() { # ─< else go though the list of items and do the same >─────────────────────────────────── pen grey "Packages to install: $(pen green bold $pkgs)" for pkg in "$@"; do - if ! command_exists $pkg; then + if ! command-exists $pkg; then spin bold "$(pen bold yellow Installing) $pkg" if run --err err pkg-install $pkg; then check "$(pen bold green Installed) $pkg" @@ -159,8 +160,10 @@ check-and-install() { # ─< Check if the user is root and set sudo variable if necessary >─────────────────────── check_env() { if [ "$(id -u)" -ne 0 ]; then - if command_exists sudo; then + if command-exists sudo; then _sudo="sudo -E" + pen blue "Testing your access.." + $_sudo echo "${GREEN}${BOLD}Aye, it works!${NC}" else echo-error "No sudo found and you're not root! Can't install packages." return 69 @@ -180,31 +183,19 @@ check_env() { return 0 # File is within 1 week fi } - - pikaCheckFile="$HOME/.cache/pika_script_detection" - - if [ -f "$pikaCheckFile" ]; then - if checkFileAge $pikaCheckFile; then - PIKA_INIT=true - else - unset PIKA_INIT - fi - else - unset PIKA_INIT - fi } # CAUTION: -# ╭─────────────────────────────────────────────────────────────────────╮ -# │ This can break really quickly, since the pkg-remove() function removes │ -# │ without confirmation! use with CAUTION!! │ -# ╰─────────────────────────────────────────────────────────────────────╯ +# ╭──────────────────────────────────────────────────────────────────────╮ +# │ This can break really quickly, since the pkg-remove function removes │ +# │ without confirmation! use with CAUTION!! │ +# ╰──────────────────────────────────────────────────────────────────────╯ _setup() { case "$1" in debian | ubuntu) pkg-install() { # $_sudo apt-get install --assume-yes "$@" - if command_exists nala; then + if command-exists nala; then pkger=nala $_sudo nala install --assume-yes "$@" else @@ -215,7 +206,7 @@ _setup() { # CAUTION: pkg-remove() { - if command_exists nala; then + if command-exists nala; then pkger=nala $_sudo nala remove --assume-yes "$@" $_sudo nala autoremove --assume-yes @@ -241,7 +232,7 @@ _setup() { ;; arch) checkAUR() { - if ! command_exists yay && ! command_exists paru; then + if ! command-exists yay && ! command_exists paru; then return 69 else return 0 @@ -249,10 +240,10 @@ _setup() { } pkg-install() { - if command_exists paru; then + if command-exists paru; then pkger=paru paru -S --color always --noconfirm --needed "$@" - elif command_exists yay; then + elif command-exists yay; then pkger=yay yay -S --color always --noconfirm --needed "$@" else @@ -263,10 +254,10 @@ _setup() { # CAUTION: pkg-remove() { - if command_exists paru; then + if command-exists paru; then pkger=paru paru -R --color always --noconfirm "$@" - elif command_exists yay; then + elif command-exists yay; then pkger=yay yay -R --color always --noconfirm "$@" else @@ -306,15 +297,13 @@ _setup() { get_packager() { # ─< define fallback function >─────────────────────────────────────────────────────────── fallback() { - # ─────────────────────────────────────< get packager >───────────────────────────────────── local pkger="" for pkg in apt-get dnf pacman apk zypper; do - if command_exists $pkg; then + if command-exists $pkg; then printf "Using ${RED}${pkg}${NC} method.." pkger="$pkg" - # break - return 0 + break fi done @@ -459,7 +448,7 @@ dist_setup() { arch) echo "${BOLD}Found ${BLUE}arch${NC}" _setup arch - if command_exists yay || command_exists paru; then + if command-exists yay || command_exists paru; then aur=true else aur=false @@ -493,7 +482,7 @@ update-package-list() { run $_sudo dnf update || repo::check ;; arch) - if command_exists pacman; then + if command-exists pacman; then if ! checkAUR; then pen grey bold "If this is your first time after boot (or simmilarly soon) then this might take a while.." spin bold grey "You don't have an AUR helper, gonna install one for ya!" @@ -519,7 +508,7 @@ update-package-list() { echo-error "${err:-}" fi - if command_exists paru; then + if command-exists paru; then pen green bold "Paru is installed" else echo-error "Something went wrong when installing paru!" @@ -530,9 +519,9 @@ update-package-list() { spin blue bold "Refreshing $distro repositories.." sleep 0.01 - if command_exists paru; then + if command-exists paru; then run paru -Sy || repo::check - elif command_exists yay; then + elif command-exists yay; then run yay -Sy || repo::check else run $_sudo pacman -Sy || repo::check @@ -697,6 +686,7 @@ spin() { pen -n cyan "${spinner:0:1} " pen "${message[@]}" while true; do + line for ((i = 0; i < ${#spinner}; i++)); do frame="${spinner:$i:1}" up @@ -903,7 +893,9 @@ if check_env; then # │ check if the script has run at least once, so that the sources dont │ # │ have to get updated again.. │ # ╰─────────────────────────────────────────────────────────────────────────╯ - if [[ -z "$PIKA_INIT" ]]; then + pikaCheckFile="$HOME/.cache/pika_script_detection" + + if [ ! -f "$pikaCheckFile" ]; then pen bold grey "First time importing.." if update-package-list; then diff --git a/test.sh b/test.sh index 8970528..944899e 100644 --- a/test.sh +++ b/test.sh @@ -1,221 +1,144 @@ -#!/usr/bin/env bash +{ + #!/usr/bin/env bash -PACKAGE=postinstallation + # ─< Check if the given command exists silently >───────────────────────────────────────── + command_exists() { + command -v "$@" >/dev/null 2>&1 + } -# ─< Check if the given command exists silently >───────────────────────────────────────── -command_exists() { - command -v "$@" >/dev/null 2>&1 -} + # run() { + # if $silent; then + # # silentexec "$@" & + # spin "Installing packages" & + # silentexec "$@" + # else + # "$@" + # fi + # } -# if command_exists "$PACKAGE"; then -# echo_warning "$PACKAGE is already installed!" -# echo_warning "Exiting now!" -# exit 69 -# fi - -# WHY: -# This import will give you the following variables: -# _sudo="sudo -E" <- only if non root user -# distro = -# arch = bool -# fedora = bool -# opensuse = bool.... -# You can then use it for, `if $arch; then` -# Also this gives you the _install and _remove command, which installs/removes a package pased on the packagemanager/distro used. -# CAUTION: -# This only works for generic package names, like neovim, or vim, or tmux etc.. -# not every package packagemanager has the same packagenames for their packages.. -getImports() { - local url="https://git.k4li.de/scripts/imports/raw/branch/main/distros.sh" - local import="$(mktemp)" - if command_exists curl; then - curl -fsSL $url -o $import - elif command_exists wget; then - wget -o $import $url - else - echo "curl/wget is required, but missing.." - exit 69 - fi - - source "$import" - sleep 0.2 - rm "$import" -} - -getDependencies() { - echo_info "Checking build dependencies.." - - # INFO: - # ╭─────────────────────────────────────────────────────────────────────────╮ - # │ You can define dependencies for various linux distros here. It will │ - # │ automagically be pulled via the $pkgArray[$distro] variable │ - # ╰─────────────────────────────────────────────────────────────────────────╯ - generalDeps=( - "awk" - "7zip" - "bc" - "btop" - "curl" - "fzf" - "gawk" - "git" - "keychain" - "make" - "pv" - "ripgrep" - "rsync" - "stow" - "sudo" - "unzip" - "vi" - "zsh" - "zoxide" - ) - - generalBloat=( - "nano" - ) - - depsDebian=( - "eza" - ) - - depsFedora=() - depsOpensuse=() - depsArch=( - "tldr" - "oh-my-posh" - "eza" - "ytui-bin" - ) - depsAlpine=() - - declare -A deps=( - [debian]="depsDebian" - [ubuntu]="depsUbuntu" - [fedora]="depsFedora" - [arch]="depsArch" - [alpine]="depsAlpine" - [opensuse]="depsOpensuse" - ) - - # INFO: - # ╭────────────────────────────────────────────────────────────────╮ - # │ This variable stores the packages you provided for each distro │ - # ╰────────────────────────────────────────────────────────────────╯ - declare -n pkgArray="${deps[$distro]}" - - case "$distro" in - debian | ubuntu | arch | fedora | alpine | opensuse) - echo_info "Installing base packages.." - - checkAndInstall "${generalDeps[@]}" - - checkAndInstall "${pkgArray[@]}" - ;; - *) - echo_error "There are no dependencies to install for $distro" - return 69 - ;; - esac -} - -removeBloat() { - if ! $arch; then - echo_info "Removing bloat.." - _remove "${generalBloat[@]}" - fi -} - -_nala() { - if command_exists nala; then - echo_info "Nala is already present, fetching mirros now!" - echo_warning "(This might take a minute or two, depending on your internet speed)" - $_sudo nala fetch --auto --assume-yes --https-only - else - echo_note "Nala is not installed on the system, do you want to install it now? (Y/n): " - read -r inst_nala + # arch = bool + # fedora = bool + # opensuse = bool.... + # You can then use it for, `if $arch; then` + # Also this gives you the _install command, which installs a package pased on the packagemanager/distro used. + # CAUTION: + # This only wokrs for generic package names, like neovim, or vim, or tmux etc.. + # not every package packagemanager has the same packagenames for their packages.. + getImports() { + local url="$1" + local import="$(mktemp)" + if command_exists curl; then + curl -fsSL $url -o $import + elif command_exists wget; then + wget -o $import $url else - if [ ! -f "/etc/apt/sources.d/sources.list" ]; then - echo_error "Error: $sources_file not found" - fi + echo "curl/wget is required, but missing.." + exit 69 fi - _nala - ;; - esac + . "$import" + sleep 0.1 + + rm -f "$import" + } + + ask-stuff() { + choose multiplexer "Select a multiplexer" tmux zellij ─────────────────────────────────────────────────────────────────── - unset PACKAGE - # ─< argument list variables >──────────────────────────────────────────────────────────── - silent=false - - PACKAGE=postinstallation - - main -fi