This commit is contained in:
pika 2025-05-23 20:13:15 +02:00
parent 73049cbde6
commit bf57d47fed
3 changed files with 237 additions and 320 deletions

351
test.sh
View file

@ -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 = <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"
# 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 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 </dev/tty
choose menu "Select a menu package" rofi wofi tofi </dev/tty
choose shell "Select a shell" zsh bash fish nushell </dev/tty
}
install-stuff() {
arr=(
firefox-bin
blender-bin
$package
)
# case "$distro" in
# arch)
# $_sudo pacman -Syu
# ;;
# esac
check-and-install ${arr[@]}
if confirm "Do you want to remove the previous installed packages?"; then
for pkg in "${arr[@]}"; do
pkg-remove $pkg
done
fi
}
func1() {
spin yellow "installing stuff"
# if run install-stuff; then
if run --err err --out out git clone --depth=1 https://github.com/neovim/neovim.git; then
check "Installation complete"
line
pen "${out:-}"
else
throw "Installation failed!"
pen "${err:-}"
fi
}
func2() {
# run --err install-stuff
if [ -d ./neovim ]; then
if confirm "$(pen bold blue 'Do you want to remove the cloned ./neovim directory?')" </dev/tty; then
rm -rf ./neovim/
else
pen red bold "Did not remove the neovim directory!"
fi
fi
}
func3() {
local err
arr=(
firefox-esr
)
if $arch; then
spin blue "Installing.."
if run --err err checkAndInstall "${arr[@]}"; then
check "Installed $(pen red ${arr[*]})"
else
throw "Something went wrong installing ${arr[*]}.."
throw "${err:-}"
fi
fi
}
main() {
# if $silent; then
# echo_warning "Executing script silently!"
# fi
# func1
# func2
# func3
# if ask-stuff; then
choose package "What packages should also get installed? space separated list.."
if confirm "Do you want to 'install-stuff'?"; then
install-stuff
fi
# fi
# while install-stuff && break; do
# spin "Installing packages.."
# done
}
dream="https://git.k4li.de/scripts/imports/raw/branch/main/dream.sh"
if getImports "$dream"; then
main
fi
# fi
}
# 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