#!/usr/bin/env bash # ─< Check if the given command exists silently >───────────────────────────────────────── command_exists() { command -v "$@" >/dev/null 2>&1 } getImports() { 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" echo "imported $url" } __pre_stow__() { echo_note "__pre_stow__" conf="$HOME/.config" bak_dir="$HOME/.bak" dirs=( "btop" "gBar" "yazi" "fastfetch" "hypr" "tmux" "kitty" "neovide" "rofi" "waybar" "wlogout" "wob" "zellij" ) pen yellow "Trying to clean the environment.." if [ ! -d "$bak_dir" ]; then repen yellow "backup dir created at $bak_dir" && silentexec mkdir "$bak_dir" else pen bold yellow "Backup dir already present, clearing now" && rm -rf "${bak_dir:?}/*" fi for _dirs in "${dirs[@]}"; do if [ -d "$conf/$_dirs" ]; then repen moved $_dirs mv -f "$conf/$_dirs" "$bak_dir" fi done h_files=( ".zshrc" ".zshenv" ".wezterm.lua" ) for _f in "${h_files[@]}"; do if [ -f "$HOME/$_f" ]; then repen moved $_f mv -f "$HOME/$_f" "$bak_dir" && echo_info "Moved $_f to $bak_dir" fi done for _d in ".zsh .tmux .fzf"; do if [ -d "$HOME/$_d" ]; then repen moved $_d mv -f "$HOME/$_d" "$bak_dir" && echo_info "Moved $_d to $bak_dir" fi done } askThings() { if [ ! -d ./dotfiles/.config/tmux/ ] && [ ! -d ./dotfiles/.config/zellij/ ]; then choose askMultiPlexer "Choose a menu" tmux zellij none >"$HOME/.monitors.conf" fi } pkg_optional() { _ops=( "cowsay" "cmatrix" "trash-cli" ) case "$_ops" in Y | y | yes) 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__() { local err spin grey "Linking dotfiles.." if run --err err stow --verbose --target="$HOME" --defer=.gitmodules --restow */; then check "Linked dotfiles!" else throw "Could not use stow to link dofiles.." echo_error "${err:-}" fi } c_fonts() { local err local dirFonts="$HOME/.local/share/fonts/" if [[ ! -d "$dirFonts" ]]; then if choise "Seems like you may miss some fonts.. Do you want to clone them now to <$HOME/.local/share/fonts/>" ? [y|n]" && read -r ask_fonts # case "$ask_fonts" in # [Yy]) if ! command_exists git; then spin "Installing fonts.." if run pkg-install git; then return 0 fi if run --err err git clone --depth=1 https://git.k4li.de/pika/fonts.git "$dirFonts"; then check "Cloned fonts correctly!" else throw "Error cloning fonts!" echo_error "${err:-}" fi else git clone --depth=1 https://git.k4li.de/pika/fonts.git "$dirFonts" fi # ;; # [Nn]) else pen bold red "You might have some font issues, but that's your business now!" return 0 fi fi } c_wallpapers() { local dirWallpaper="$HOME/.wallpapers" if [[ ! -d "$dirWallpaper" ]]; then if confirm "Seems like you may miss some wallpapers.. Do you want to clone them now to <$HOME/.wallpapers/> ?" ──────────────────────────────────────────────────────────────────────── 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 if [[ ! -f $HOME/.local/share/fonts/ ]]; then c_fonts || pen grey "mkdir -p $HOME/.local/share/fonts/" && silentexec mkdir -p $HOME/.local/share/fonts/ fi c_wallpapers } main() { mkdirs # check_root # get_packager __validate__ __dep__ if ! command_exists stow; then if confirm "We couldn't find stow on the machine, do you want us to install it?"; then _install stow else pen red bold "You cannot proceed without installing stow! Please install manually" exit 1 fi else pen 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 blue bold "found resolution ${res}" } if getImports "https://git.k4li.de/scripts/imports/raw/branch/main/distros.sh" && getImports "https://git.k4li.de/scripts/beddu/raw/branch/main/dist/beddu.sh"; then main fi