#!/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" sleep 0.1 rm -f "$import" fi } get-dependencies() { depends=( stow git ) check-and-install ${depends[@]} } __pre_stow__() { pen blue "Getting things ready.." sleep 2 conf="$HOME/.config" bak_dir="$HOME/.bak" dirs=( "btop" "gBar" "fastfetch" "foot" "hypr" "tmux" "kitty" "neovide" "rofi" "tofi" "waybar" "wlogout" "wob" "yazi" "zellij" ) if [ ! -d "$bak_dir" ]; then pen grey "backup dir created at $bak_dir" && silentexec mkdir "$bak_dir" else pen bold grey "Backup dir already present, clearing now" && rm -rf "${bak_dir:?}/*" fi for _dirs in "${dirs[@]}"; do if [ -d "$conf/$_dirs" ]; then pen grey "moved $_dirs" mv -f "$conf/$_dirs" "$bak_dir" fi done h_files=( ".zshrc" ".zshenv" ".bashrc" ".bash_alias" ".wezterm.lua" ) for _f in "${h_files[@]}"; do if [ -f "$HOME/$_f" ]; then pen "moved $_f" mv -f "$HOME/$_f" "$bak_dir" && pen bold blue "Moved $_f to $bak_dir" fi done for _d in ".zsh .tmux .fzf"; do if [ -d "$HOME/$_d" ]; then pen "moved $_d" mv -f "$HOME/$_d" "$bak_dir" && pen bold blue "Moved $_d to $bak_dir" fi done } askThings() { if [ ! -d ./dotfiles/.config/tmux/ ] && [ ! -d ./dotfiles/.config/zellij/ ]; then choose plexer "Choose a menu" tmux zellij none >"$HOME/.monitors.conf" else echo "monitor = preferred,, 0x0, 1" >>"$HOME/.monitors.conf" fi fi } pkg_optional() { _ops=( "cowsay" "cmatrix" "trash-cli" ) for pkg in "${_opts[@]}"; do spin "Installing $pkg" if ! command_exists $pkg; then run pkg-install $pkg && check "$pkg installed" || throw "Error installing $pkg" fi done } __stow__() { local err out spin grey bold "Linking dotfiles.." if run --err err stow --verbose --target="$HOME" --defer=.gitmodules --restow */; then upclear check "Linked dotfiles!" else upclear throw bold red "Could not use stow to link dofiles.." pen bold yellow "OUT: ${out:-}" echo-error "${err:-}" fi } c_fonts() { local err out local dirFonts="$HOME/.local/share/fonts/" local fontsRepo="https://git.k4li.de/pika/fonts.git" if [[ ! -d "$dirFonts" ]]; then if confirm "Seems like you may miss some fonts.. Do you want to clone them now into $(pen blue bold $HOME/.local/share/fonts)" ──────────────────────────────────────────────────────────────────────── if [[ ! -f $HOME/.config/ ]]; then pen grey "mkdir $HOME/.config" silentexec mkdir $HOME/.config fi if [[ ! -f $HOME/.local/share/icons/ ]]; then pen grey "mkdir -p $HOME/.local/share/icons/" silentexec mkdir -p $HOME/.local/share/icons/ fi c_fonts c_wallpapers } 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 fi } main() { local err out __validate__ __dep__ mkdirs # obsolete becouse of __dep__() function.. # if ! command_exists stow; then # if confirm "We couldn't find stow on the machine, do you want us to install it?"; then # line # spin grey "Installing stow now.." # if run --err err pkg-install stow; then # upclear # check "Stow was installed correctly!" # else # upclear # throw bold red "Error installing stow.." # pen bold yellow "OUT: ${out:-}" # echo-error "${err:-}" # fi # else # pen red bold "You cannot proceed without installing stow! Please install manually" # exit 69 # fi # else # pen blue bold "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 blue bold "found resolution ${res}" } if setup-env; then main fi