#!/bin/bash # ─< Helper functions >───────────────────────────────────────────────────────────────── declare -a echo_messages function echo_error() { local message="\033[0;1;31m❌ ERROR:\033[0;31m\t${*}\033[0m" echo -e "$message" echo_messages+=("$message") } function echo_warning() { local message="\033[0;1;33m⚠️ WARNING:\033[0;33m\t${*}\033[0m" echo -e "$message" echo_messages+=("$message") } function echo_info() { local message="\033[0;1;34mℹ️ INFO:\033[0;34m\t${*}\033[0m" echo -e "$message" echo_messages+=("$message") } function echo_plugin() { local message="\033[0;1;35m🔥 Pluginmgmt:\033[0;35m\t${*} loaded\033[0m" echo -e "$message" echo_messages+=("$message") } # Function to print all stored messages function print_echo_messages() { echo -e "\033[38;5;196mL\033[38;5;202mo\033[38;5;208mg\033[38;5;214m \033[38;5;220mo\033[38;5;226mu\033[38;5;118mt\033[38;5;46mp\033[38;5;48mu\033[38;5;51mt\033[38;5;45m:" for msg in "${echo_messages[@]}"; do echo -e "$msg" done } # ─< Silent execution >───────────────────────────────────────────────────────────────── silentexec() { "$@" >/dev/null 2>&1 } # ─< Check if the given command exists silently >───────────────────────────────────────── command_exists() { command -v "$@" >/dev/null 2>&1 } # ─< Check if the user is root and set sudo variable if necessary >─────────────────────── check_root() { if [ "$(id -u)" -ne 0 ]; then if command_exists sudo; then echo_warning "User is not root. Using sudo for privileged operations." _sudo="sudo" else echo_error "No sudo found and you're not root! Can't install packages." return 1 fi else echo_info "Root access confirmed." _sudo="" fi } _sources() { local sourceDir="$HOME/.bash" local sourceOptions=( "aliases" "defaults" "installs" ) for _s in "${sourceOptions[@]}"; do local _sourceFile="${sourceDir}/.${_s}.sh" if [ -e "$_sourceFile" ]; then . "$_sourceFile" fi local _source_"" done } _init() { # ─< zoxide >───────────────────────────────────────────────────────────────────────────── if command_exists zoxide; then eval "$(zoxide init bash)" fi # ─< fzf >──────────────────────────────────────────────────────────────────────────────── if command_exists fzf; then eval "$(fzf --bash)" fi # ─< oh-my-posh initialization >──────────────────────────────────────────────────────────── if command_exists oh-my-posh; then eval "$(oh-my-posh init bash --config "$HOME/.bash/themes/zen.toml")" else if command_exists curl; then curl -s https://ohmyposh.dev/install.sh | $_sudo bash -s -- -d /usr/bin/ binDirs=( "$HOME/.local/bin" "/usr/local/bin" "/usr/bin" ) while ! command_exists oh-my-posh; do for binDir in "${binDirs[@]}"; do case "$binDir" in "$HOME/.local/bin") echo_info "Installing oh-my-posh into $binDir" curl -s https://ohmyposh.dev/install.sh | bash -s -- -d "$binDir" ;; *) echo_info "Installing oh-my-posh into $binDir" curl -s https://ohmyposh.dev/install.sh | $_sudo bash -s -- -d "$binDir" ;; esac done done fi fi } # ─< ble.sh -- https://github.com/akinomyoga/ble.sh >───────────────────────────────────── d_blesh() { for deeps in git make gawk; do if ! command_exists $deeps; then echo_error "$deeps was missing from the system, cannot setup shell properly! (blesh setup)" exit 1 fi done } i_blesh() { local tmp_dir="$(mktemp -d)" cd "$tmp_dir" || echo_error "$tmp_dir is not valid!" git clone --recursive --depth 1 --shallow-submodules https://github.com/akinomyoga/ble.sh.git make -C ble.sh install PREFIX=~/.local . "$HOME/.local/share/blesh/ble.sh" # bash # cd "$HOME" || return 0 } _blesh() { if [ ! -f $HOME/.local/share/blesh/ble.sh ]; then d_blesh # Dependency check for blesh echo_info "Installing blesh.. Depending on your internet connection and the performance of the client, this could take a minute or two.." i_blesh # installing blesh silently else # . "$HOME/.local/share/blesh/ble.sh" --attach=none . "$HOME/.local/share/blesh/ble.sh" fi } _env() { if command_exists nvim; then export EDITOR="$(which nvim)" elif command_exists vim; then export EDITOR="$(which vim)" elif command_exists vi; then export EDITOR="$(which vi)" fi } _color_prompt_() { # set a fancy prompt (non-color, unless we know we "want" color) case "$TERM" in xterm-color | *-256color) color_prompt=yes ;; esac # uncomment for a colored prompt, if the terminal has the capability; turned # off by default to not distract the user: the focus in a terminal window # should be on the output of commands, not on the prompt force_color_prompt=yes if [ -n "$force_color_prompt" ]; then if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then # We have color support; assume it's compliant with Ecma-48 # (ISO/IEC-6429). (Lack of such support is extremely rare, and such # a case would tend to support setf rather than setaf.) color_prompt=yes else color_prompt= fi if [ "$color_prompt" = yes ]; then # PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' PS1="\[$(tput setaf 196)\]\u\[$(tput setaf 247)\]@\[$(tput setaf 203)\]\h \[$(tput setaf 49)\]\w \[$(tput sgr0)\]$ " else PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' fi unset color_prompt force_color_prompt fi } _end() { # ─< fastfetch >──────────────────────────────────────────────────────────────────────────── if command_exists fastfetch; then alias ff="fastfetch" alias clearff="command clear & fastfetch" alias clearf="command clear & fastfetch" if fastfetch --config os >/dev/null 2>&1; then alias f="fastfetch --config os" else git clone https://git.k4li.de/mirrors/fastfetch.git "$HOME/.local/share/fastfetch" >/dev/null 2>&1 exec $SHELL fi command clear & fastfetch fi if command_exists cowsay; then alias clear='clear && cowsay -f tux "$(uptime --pretty)"' cowsay -f tux "$(uptime --pretty)" fi print_echo_messages } main() { _env _sources _blesh _init _color_prompt_ check_root _end } main