From 4d111f7a945ad4bae7109f7759a21f5b3579772b Mon Sep 17 00:00:00 2001 From: pika Date: Sat, 17 May 2025 20:50:54 +0200 Subject: [PATCH] postinstall.sh --- postinstall.sh | 477 ++++++++++++++---------------------------------- postinstall2.sh | 357 ++++++++++++++++++++++++++++++++++++ 2 files changed, 497 insertions(+), 337 deletions(-) create mode 100644 postinstall2.sh diff --git a/postinstall.sh b/postinstall.sh index e79f838..28228a9 100644 --- a/postinstall.sh +++ b/postinstall.sh @@ -1,92 +1,135 @@ -{ - #!/bin/sh +#!/usr/bin/env bash - # ╭──────────────╮ - # │ dependencies │ - # ╰──────────────╯ - deps="7zip bc btop exa fzf gawk gdu git make pv ripgrep rsync stow tmux trash-cli unzip zoxide zsh" +PACKAGE=postinstallation - # ╭─────────────╮ - # │ ENVIRONMENT │ - # ╰─────────────╯ - # ANSI color codes - RED='\033[0;31m' - CYAN='\033[0;36m' - YELLOW='\033[0;33m' - LIGHT_GREEN='\033[0;92m' - BOLD='\033[1m' - NC='\033[0m' +# ─< Check if the given command exists silently >───────────────────────────────────────── +command_exists() { + command -v "$@" >/dev/null 2>&1 +} - # Initialize storage variables - _STORED_ERRORS="" - _STORED_WARNINGS="" - _STORED_INFOS="" - _STORED_NOTES="" +# if command_exists "$PACKAGE"; then +# echo_warning "$PACKAGE is already installed!" +# echo_warning "Exiting now!" +# exit 69 +# fi - # Modified echo functions that store and display messages - echo_error() { - message="${RED}$1${NC}\n" - printf "$message" >&2 - _STORED_ERRORS="${_STORED_ERRORS}${message}" - } - - echo_warning() { - message="${YELLOW}$1${NC}\n" - printf "$message" - _STORED_WARNINGS="${_STORED_WARNINGS}${message}" - } - - echo_info() { - message="${CYAN}$1${NC}\n" - printf "$message" - _STORED_INFOS="${_STORED_INFOS}${message}" - } - - echo_note() { - message="${LIGHT_GREEN}$1${NC}\n" - printf "$message" - _STORED_NOTES="${_STORED_NOTES}${message}" - } - - # ─< Check if the given command exists silently >───────────────────────────────────────── - command_exists() { - command -v "$@" >/dev/null 2>&1 - } - - # ─────────────────────────────────────< get packager >───────────────────────────────────── - checkPkg() { - pkger="" - for pkg in apt-get dnf pacman apk zypper; do - if command_exists $pkg; then - printf "Using ${RED}${pkg}${NC} method.." - pkger="$pkg" - - # break - return 0 - fi - done - } - - # ─────────────────────────────────< check for root/sudo >─────────────────────────────── - # checkRoot() { - if [ "$(id -u)" -ne 0 ]; then - if command_exists sudo; then - echo_info "User is not root. Using sudo for privileged operations." - _sudo="sudo -E" - else - echo_error "No sudo found and you're not root! Can't install packages." - return 1 - 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_info "Root access confirmed." - _sudo="" + echo "curl/wget is required, but missing.." + exit 69 fi - # } - # ╭─────╮ - # │ apt │ - # ╰─────╯ - aptCommentCDinSources() { + 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=() + depsFedora=() + depsOpensuse=() + depsArch=( + "tldr" + "oh-my-posh" + ) + 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 "${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 +} + +main() { + + # Getting general dependencies + getDependencies + + # removing 'bloat' + removeBloat + + case "$distro" in + debian) # Path to sources.list sources_file="/etc/apt/sources.list" @@ -99,259 +142,19 @@ # Comment out CD-ROM entries using sudo $_sudo sed -i 's/^[[:space:]]*deb[[:space:]]\+cdrom:/#&/' "$sources_file" echo_info "CD-ROM entries have been commented out in $sources_file" - } - - aptBase() { - aptCommentCDinSources - echo_info "Updating sources.." - $_sudo apt update - - if ! command_exists sudo; then - echo_note "Installing sudo" - apt install sudo --assume-yes - fi - - echo_note "Installing base packages: $deps" - - for _deps in $deps; do - if ! command_exists "$_deps"; then - echo_info "Installing $_deps.." - if ! $_sudo apt install "$_deps" --assume-yes; then - echo_error "$_deps - failed to install!" - fi - else - echo_note "$_deps - was already installed!" - fi - done - } - - aptOptimize() { - if command_exists nala; then - echo_info "Nala is already present, fetching mirros now! (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 &2 + _STORED_ERRORS="${_STORED_ERRORS}${message}" + } + + echo_warning() { + message="${YELLOW}$1${NC}\n" + printf "$message" + _STORED_WARNINGS="${_STORED_WARNINGS}${message}" + } + + echo_info() { + message="${CYAN}$1${NC}\n" + printf "$message" + _STORED_INFOS="${_STORED_INFOS}${message}" + } + + echo_note() { + message="${LIGHT_GREEN}$1${NC}\n" + printf "$message" + _STORED_NOTES="${_STORED_NOTES}${message}" + } + + # ─< Check if the given command exists silently >───────────────────────────────────────── + command_exists() { + command -v "$@" >/dev/null 2>&1 + } + + # ─────────────────────────────────────< get packager >───────────────────────────────────── + checkPkg() { + pkger="" + for pkg in apt-get dnf pacman apk zypper; do + if command_exists $pkg; then + printf "Using ${RED}${pkg}${NC} method.." + pkger="$pkg" + + # break + return 0 + fi + done + } + + # ─────────────────────────────────< check for root/sudo >─────────────────────────────── + # checkRoot() { + if [ "$(id -u)" -ne 0 ]; then + if command_exists sudo; then + echo_info "User is not root. Using sudo for privileged operations." + _sudo="sudo -E" + else + echo_error "No sudo found and you're not root! Can't install packages." + return 1 + fi + else + echo_info "Root access confirmed." + _sudo="" + fi + # } + + # ╭─────╮ + # │ apt │ + # ╰─────╯ + aptCommentCDinSources() { + # Path to sources.list + sources_file="/etc/apt/sources.list" + + # Check if file exists + if [ ! -f "$sources_file" ]; then + echo_error "Error: $sources_file not found" + return 1 + fi + + # Comment out CD-ROM entries using sudo + $_sudo sed -i 's/^[[:space:]]*deb[[:space:]]\+cdrom:/#&/' "$sources_file" + echo_info "CD-ROM entries have been commented out in $sources_file" + } + + aptBase() { + aptCommentCDinSources + echo_info "Updating sources.." + $_sudo apt update + + if ! command_exists sudo; then + echo_note "Installing sudo" + apt install sudo --assume-yes + fi + + echo_note "Installing base packages: $deps" + + for _deps in $deps; do + if ! command_exists "$_deps"; then + echo_info "Installing $_deps.." + if ! $_sudo apt install "$_deps" --assume-yes; then + echo_error "$_deps - failed to install!" + fi + else + echo_note "$_deps - was already installed!" + fi + done + } + + aptOptimize() { + if command_exists nala; then + echo_info "Nala is already present, fetching mirros now! (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