installs/yazi.sh
2025-05-24 15:52:28 +02:00

213 lines
6.7 KiB
Bash

{
#!/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 $1 is a local file, source this one instead >─────────────────────────────────────
if [ -f "$url" ]; then
source "$url"
sleep 0.1
return 0
else
# ─< if $1 is a url, grab it and source it, also deletes afterwards >─────────────────────
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"
echo "${BLUE}Sourcing external script:${NC} $url"
line
sleep 0.1
rm -f "$import"
fi
}
getDependencies() {
pen bold blue "Checking build dependencies.."
# INFO:
# ╭─────────────────────────────────────────────────────────────────────────╮
# │ You can define dependencies for various linux distros here. It will │
# │ automagically be pulled via the $pkgArray[$distro] variable │
# ╰─────────────────────────────────────────────────────────────────────────╯
depsDebian=(libpoppler-dev)
depsFedora=()
depsOpensuse=()
depsArch=()
depsAlpine=()
generalDeps=(
ffmpeg
make
gcc
7zip
)
declare -A deps=(
[debian]="depsDebian"
[ubuntu]="depsDebian"
# [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)
check-and-install ${generalDeps[@]}
check-and-install ${pkgArray[@]}
;;
*)
echo-error "There are no dependencies to install for $distro"
return 0
;;
esac
}
evalCargo() {
if [ -e "$HOME/.cargo/env" ]; then
pen bold blue "Using $HOME/.cargo/env.."
. "$HOME/.cargo/env"
fi
}
i_yazi() {
evalCargo
if command_exists cargo; then
return
# echo_pkg install "Installing yazi through cargo"
elif command_exists curl; then
echo_pkg deps "no cargo found, using curl to install rustup"
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
evalCargo
spin bold grey "Updating rustsources.."
run rustup update && chech "Updated sources" || throw-err
pen bold blue "Installing yazi through cargo"
else
pen bold red "neither cargo, nor curl were found. Cannot continue!"
return 69
fi
spin grey bold "Installing yazi through cargo"
run cargo install --locked yazi-fm yazi-cli || throw-err
}
yazi_setup() {
ya pack -u || ya pack -i
}
c_yazi() {
if [ -e "$HOME/.config/yazi/package.toml" ]; then
if command_exists ya; then
yazi_setup || echo-error "Yazi was not setup properly.."
else
if [ -e "$HOME/.cargo/env" ]; then
pen bold blue "Loadet $HOME/.cargo/env"
. "$HOME/.cargo/env"
yazi_setup || echo-error "Yazi was not setup properly.."
else
echo-error "Something went wrong when installing yazi.. ya is not available.."
fi
fi
else
pen bold yellow "There was no yazi config found.. "
fi
}
main() {
if $silent; then
pen bold yellow "Executing script silently!"
fi
case "$distro" in
arch)
pkg-install yazi
;;
debian | ubuntu | fedora)
if getDependencies; then
i_yazi &&
c_yazi
fi
;;
*)
pen bold yellow "$distro is not compatible with this script"
;;
esac
}
# 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
# ─< package variable >───────────────────────────────────────────────────────────────────
unset PACKAGE
# ─< argument list variables >────────────────────────────────────────────────────────────
silent=false
sleep 0.1
PACKAGE=yazi
if command_exists "$PACKAGE"; then
pen bold yellow "$PACKAGE is already installed!"
pen bold yellow "Exiting now!"
exit 69
fi
# ─< parse arguments and get variable contents >──────────────────────────────────────────
for arg in "$@"; do
case "$arg" in
--silent | -s)
export silent=true
;;
esac
done
main
fi
}