{ #!/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 = # 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 }