minimal/install.sh
2025-05-24 15:19:34 +02:00

303 lines
7 KiB
Bash
Executable file

#!/usr/bin/env bash
# ─< Check if the given command exists silently >─────────────────────────────────────────
command_exists() {
command -v "$@" >/dev/null 2>&1
}
source-script() {
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
echo "curl/wget is required, but missing.."
exit 69
fi
source "$import"
sleep 0.2
rm "$import"
}
__pre_stow__() {
pen bold blue "__pre_stow__"
conf="$HOME/.config"
bak_dir="$HOME/.bak"
dirs=(
"btop"
"zsh"
"yazi"
"tmux"
"nvim"
"ranger"
"lf"
"zellij"
)
if [ ! -d "$bak_dir" ]; then
pen bold blue "backup dir created at $bak_dir" &&
mkdir "$bak_dir"
else
pen bold blue "Backup dir already present, clearing now" &&
rm -rf "${bak_dir:?}/*"
fi
for _dirs in "${dirs[@]}"; do
if [ -d "$conf/$_dirs" ]; then
mv -f "$conf/$_dirs" "$bak_dir"
fi
done
h_files=(
".zshrc"
".zshenv"
)
h_dirs=(
".tmux"
".zsh"
".fzt"
)
for _f in "${h_files[@]}"; do
if [ -f "$HOME/$_f" ]; then
mv -f "$HOME/$_f" "$bak_dir" && pen bold blue "Moved $_f to $bak_dir"
fi
done
for _d in "${h_dirs[@]}"; do
if [ -d "$HOME/$_d" ]; then
mv -f "$HOME/$_d" "$bak_dir" && pen bold blue "Moved $_d to $bak_dir"
fi
done
if [ -d "$HOME/.local/share/fastfetch/" ]; then
mv -f "$HOME/.local/share/fastfetch" "$bak_dir"
fi
}
askThings() {
# pen bold blue "Choose a menu - [r]ofi || [t]ofi"
# read -r askMenu </dev/tty
if [ ! -d ./dotfiles/.config/yazi/ ] && [ ! -d ./dotfiles/.config/lf/ ] && [ ! -d ./dotfiles/.config/ranger/ ]; then
choose fileMgr "Choose a cli filemanager" yazi ranger lf none </dev/tty
# pen bold blue "Choose a cli filemanager - [y]azi || [r]anger || [l]f"
# read -r fileMgr </dev/tty
fi
[ "$fileMgr" == "none" ] && fileMgr=""
[ -n $fileMgr ] && cloneDots "$fileMgr"
if [ ! -d ./dotfiles/.config/tmux/ ] && [ ! -d ./dotfiles/.config/zellij/ ]; then
choose multiPlx "Choose a cli multiplexer" tmux zellij none </dev/tty
# pen bold blue "Choose a cli multiplexer - [t]mux || [z]ellij || [n]one"
# read -r askMultiPlexer </dev/tty
fi
[ "$multiPlx" == "none" ] && multiPlx=""
[ -n $multiPlx ] && cloneDots "$multiPlx"
if confirm "Do you also want to install optional packages?" </dev/tty; then
__optional__=true
fi
}
cloneDots() {
choise="$1"
if command_exists git; then
[ -d ./dotfiles ] &&
[ ! -d "./dotfiles/${choise}" ] &&
git clone --depth=1 "https://git.k4li.de/dotfiles/${choise}.git" "./dotfiles/.config/${choise}"
else
echo-error "Git was not found"
fi
}
__validate__() {
if askThings; then
case "$askFilemgr" in
[yY] | yazi)
cloneDots "yazi"
if ! command_exists yazi; then
if command_exists curl; then
curl -fsSL https://git.k4li.de/scripts/installs/raw/branch/main/yazi.sh | bash
else
pen bold yellow "curl was not found, could not install yazi!"
fi
fi
fileMgr="yazi"
;;
[rR] | ranger)
cloneDots "ranger"
fileMgr="ranger"
;;
[lL] | lf)
cloneDots "lf"
fileMgr="lf"
;;
esac
case "$askMultiPlexer" in
[tT] | tmux)
cloneDots "tmux"
multiPlx="tmux"
;;
[zZ] | zellij)
cloneDots "zellij"
if ! command_exists zellij; then
if command_exists curl; then
curl -fsSL https://git.k4li.de/scripts/installs/raw/branch/main/zellij.sh | bash
else
pen bold yellow "curl was not found, could not install zellij!"
fi
fi
multiPlx="zellij"
;;
esac
else
echo-error "Something went terribly wrong"
exit 1
fi
# if [ ! -d "$HOME/.config/nvim" ]; then
# pen bold blue "There was no nvim config found, do you want to clone the pika nvim? (y/n)"
# read -r _neovim </dev/tty
# case "$_neovim" in
# [yY])
# git clone --recursive --depth=1 https://git.k4li.de/dotfiles/nvim.git "$HOME/.config/nvim"
# ;;
# esac
# fi
}
__dep__() {
_depss=(
"$fileMgr"
"$multiPlx"
"stow"
"btop"
"entr"
"keychain"
"unzip"
"zip"
"fzf"
"rsync"
"zoxide"
)
for hyprdots_dependency in "${_depss[@]}"; do
case "$hyprdots_dependency" in
zellij)
if ! command_exists "$hyprdots_dependency"; then
eval "$(curl -fsSL https://git.k4li.de/scripts/installs/raw/branch/main/zellij.sh)"
else
pen bold blue "$hyprdots_dependency is already installed"
fi
;;
yazi)
if ! command_exists "$hyprdots_dependency"; then
eval "$(curl -fsSL https://git.k4li.de/scripts/installs/raw/branch/main/yazi.sh)"
else
pen bold blue "$hyprdots_dependency is already installed"
fi
;;
*)
checkAndInstall "$hyprdots_dependency"
;;
esac
done
}
pkg_optional() {
_ops=(
"cowsay"
"cmatrix"
"trash-cli"
)
case "$_ops" in
Y | y)
for _o_ in "${_ops[@]}"; do
if command_exists "$_o_"; then
pen bold blue "$_o_ - is already installed"
else
pen bold blue "Installing $_o_"
_install "$_o_"
fi
done
;;
*)
echo default
;;
esac
}
__stow__() {
stow --verbose --target="$HOME" --defer=.gitmodules --restow */
}
main() {
__validate__
__dep__
if ! command_exists stow; then
echo-error "we couldn't find stow on the machine, do you want us to install it? (y/n): "
read -r ask_stow
case "$ask_stow" in
Y | y)
_install stow
;;
*)
echo-error "You cannot proceed without installing stow! Please install manually"
exit 1
;;
esac
else
pen bold blue "stow was found, going on to prepare to stow your config"
sleep 0.3
fi
__pre_stow__
__stow__
sleep 2
if $__optional__; then
pkg_optional
fi
# __monitors__
# pen bold blue "found resolution ${res}"
}
# 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 pkg-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..
setup-env() {
# local beddu=https://git.k4li.de/scripts/beddu/raw/branch/main/dist/beddu.sh
# local pika=https://git.k4li.de/scripts/imports/raw/branch/main/distros.sh
local dream=https://git.k4li.de/scripts/imports/raw/branch/main/dream.sh
if ! command_exists pkg-install && ! command_exists check-and-install && ! command_exists spin; then
source-script $dream
line
fi
}
if setup-env; then
main
fi