minimal/install.sh
2025-05-17 13:06:29 +02:00

281 lines
6.2 KiB
Bash
Executable file

#!/usr/bin/env bash
# ─< Check if the given command exists silently >─────────────────────────────────────────
command_exists() {
command -v "$@" >/dev/null 2>&1
}
# 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..
if command_exists curl; then
eval "$(curl -fsSL https://git.k4li.de/scripts/imports/raw/branch/main/distros.sh)"
else
echo "curl is required, but missing.."
exit 1
fi
__pre_stow__() {
echo_note "__pre_stow__"
conf="$HOME/.config"
bak_dir="$HOME/.bak"
dirs=(
"btop"
"zsh"
"yazi"
"tmux"
"nvim"
"ranger"
"lf"
"zellij"
)
if [ ! -d "$bak_dir" ]; then
echo_info "backup dir created at $bak_dir" &&
mkdir "$bak_dir"
else
echo_info "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" && echo_info "Moved $_f to $bak_dir"
fi
done
for _d in "${h_dirs[@]}"; do
if [ -d "$HOME/$_d" ]; then
mv -f "$HOME/$_d" "$bak_dir" && echo_info "Moved $_d to $bak_dir"
fi
done
if [ -d "$HOME/.local/share/fastfetch/" ]; then
mv -f "$HOME/.local/share/fastfetch" "$bak_dir"
fi
}
askThings() {
# echo_info "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
echo_info "Choose a cli filemanager - [y]azi || [r]anger || [l]f"
read -r askFilemgr </dev/tty
fi
if [ ! -d ./dotfiles/.config/tmux/ ] && [ ! -d ./dotfiles/.config/zellij/ ]; then
echo_info "Choose a cli multiplexer - [t]mux || [z]ellij || [n]one"
read -r askMultiPlexer </dev/tty
fi
echo_info "Do you also want to install optional packages? (y/n)"
read -r askOptional </dev/tty
case "$askOptional" in
[yY]) __optional__="true" ;;
[nN]) __optional__="false" ;;
esac
}
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
echo_warning "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
echo_warning "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
# echo_note "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
echo_info "$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
echo_info "$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
echo_note "$_o_ - is already installed"
else
echo_info "Installing $_o_"
_install "$_o_"
fi
done
;;
*)
echo default
;;
esac
}
__stow__() {
stow --verbose --target="$HOME" --defer=.gitmodules --restow */
}
main() {
check_root
get_packager
__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
echo_info "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__
# echo_note "found resolution ${res}"
}
main