installs/postinstall.sh
2025-05-19 14:31:26 +02:00

221 lines
6.2 KiB
Bash

#!/usr/bin/env bash
PACKAGE=postinstallation
# ─< Check if the given command exists silently >─────────────────────────────────────────
command_exists() {
command -v "$@" >/dev/null 2>&1
}
# 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 = <distro name, like 'arch', 'debian', 'fedora'..>
# 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 </dev/tty
case "$inst_nala" in
N | n)
echo_warning "All right, continue without nala!"
;;
*)
echo_note "Installing nala.."
$_sudo apt install nala --assume-yes &&
echo_info "Fetching best mirrors"
$_sudo nala fetch --auto --assume-yes --https-only
;;
esac
fi
}
main() {
if $silent; then
echo_warning "Executing script silently!"
fi
# Getting general dependencies
if ! getDependencies; then
echo_error "Error when installing dependencies.."
fi
# removing 'bloat'
if ! removeBloat; then
echo_error "Error when removing bloat.."
fi
case "$distro" in
debian)
# Path to sources.list
sources_file="/etc/apt/sources.list"
# Check if file exists
if [ -f "$sources_file" ]; then
# 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"
else
if [ ! -f "/etc/apt/sources.d/sources.list" ]; then
echo_error "Error: $sources_file not found"
fi
fi
_nala
;;
esac
}
checkAUR() {
if ! command_exists yay && ! command_exists paru; then
return 69
else
return 0
fi
}
if command_exists pacman; then
if ! checkAUR; then
paruTempDir="$(mktemp -d)"
# if ! command_exists paru; then
echo "${YELLOW}Installing paru as AUR helper...${NC}"
$_sudo pacman -S --needed --noconfirm base-devel git
cd /opt && $_sudo git clone https://aur.archlinux.org/paru-bin.git "$paruTempDir/paru" && $_sudo chown -R "$USER": "$paruTempDir/paru"
cd "$paruTempDir/paru" && makepkg --noconfirm -si
echo "${GREEN}Paru installed${NC}"
# else
# printf "%b\n" "${GREEN}Paru already installed${RC}"
# fi
fi
fi
if getImports; then
# ─< package variable >───────────────────────────────────────────────────────────────────
unset PACKAGE
# ─< argument list variables >────────────────────────────────────────────────────────────
silent=false
PACKAGE=postinstallation
main
fi