_WHITE='\033[1;37m' # White _NC='\033[0m' # No Color export SHELL_CONFIG="$SHELL_CONFIG:.bashrc" # # ~/.bashrc # function show_date() { # Define the dot file to store the selected adjective dotfile="$HOME/.adjective_of_the_day" # Check if the dot file exists and was modified less than 1 day ago if [[ -f "$dotfile" && $(date -d "$(stat -c %y "$dotfile")" +%s) -ge $(date -d 'yesterday' +%s) ]]; then # If the dot file exists and was modified less than 1 day ago, # read the stored adjective from the file selected_adjective=$(cat "$dotfile") else # Define an array of adjectives with classifications adjectives=( "beautiful:positive" "engaging:positive" "majestic:positive" "distinguished:positive" "venerable:positive" "formal:positive" "elegant:positive" "serene:positive" "graceful:positive" "regal:positive" "noble:positive" "miserable:negative" "worthless:negative" "depressing:negative" "soulless:negative" "desolate:negative" "archaic:negative" "grim:negative" "dreadful:negative" "forlorn:negative" "wretched:negative" "neutral:neutral" "ordinary:neutral" "common:neutral" "antique:neutral" "ceremonial:neutral" "timeless:neutral" "classic:neutral" "historic:neutral" "ancient:neutral" ) # Select a random adjective from the array selected_adjective="${adjectives[$RANDOM % ${#adjectives[@]}]}" # Store the selected adjective in the dot file echo "$selected_adjective" > "$dotfile" fi # Split the selected adjective into the adjective and classification parts IFS=':' read -r adjective classification <<< "$selected_adjective" # Determine the color code based on the classification case "$classification" in "positive") text_color="\033[1;32m";; "negative") text_color="\033[1;31m";; *) text_color="";; # Default to no colour esac # ANSI escape codes for reset reset_color='\033[0m' hl_color='\033[1;34m' # Get the current day of the week, day of the month, and year day_of_week=$(date "+%A") day_of_month=$(date "+%d") month_name=$(date "+%B") year=$(date "+%Y") # Determine the day suffix (th, nd, rd) case "$day_of_month" in 1[0-9]) day_suffix="th";; *1) day_suffix="st";; *2) day_suffix="nd";; *3) day_suffix="rd";; *) day_suffix="th";; esac # Create the full date format with colored parts and the selected adjective full_date="Pray, be informed, on this ${text_color}${adjective}${reset_color} day,\n${hl_color}${day_of_week}${reset_color} the ${hl_color}${day_of_month}${day_suffix}${reset_color} day of ${hl_color}${month_name}${reset_color}, in the year of our Lord ${hl_color}${year}${reset_color}!" # Print the full date echo -e "$full_date" echo "" } # If not running interactively, don't do anything [[ $- != *i* ]] && return export HISTCONTROL=ignoreboth:erasedups [ -f "$HOME/.config/bash/gitstatus/gitstatus.prompt.sh" ] && . "$HOME/.config/bash/gitstatus/gitstatus.prompt.sh" PS1='\t \[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]${GITSTATUS_PROMPT:+ $GITSTATUS_PROMPT}\n\[\033[01;$((31+!$?))m\]\$\[\033[00m\] \[\e]0;\u@\h: \w\a\]' # If there are multiple matches for completion, Tab should cycle through them bind TAB:menu-complete # Display a list of the matching files bind "set show-all-if-ambiguous on" # Perform partial (common) completion on the first Tab press, only start # cycling full results on the second Tab press (from bash version 5) bind "set menu-complete-display-prefix on" show_date; source ~/.profile export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion # https://github.com/skywind3000/z.lua if command -v lua ; then eval "$(lua $HOME/.z.lua/z.lua --init bash enhanced once echo)" fi > /dev/null _mem_available=$(awk '/MemAvailable/ { printf "%.1f \n", $2/1024/1024 }' /proc/meminfo) _updates_available="$(wc -l $HOME/.checkupdates | cut -d' ' -f1)" [ -z $_updates_available ] && _updates_available="0" echo "Remember your commands:" echo -e " ${_WHITE}cheat vimv 'flameshot gui' mid3v2 zathura tesseract remmina${_NC}" echo "" if [ ${_mem_available%.*} -lt 5 ] ; then echo -ne "Memory available: \033[0;33m" [ ${_mem_available%.*} -lt 3 ] && echo -ne "\033[0;31m" echo -n "${_mem_available}" echo -e "GB\033[0m" fi if [ $_updates_available -gt 0 ] ; then echo -ne "Updates available: \033[1;37m" [ $_updates_available -gt 15 ] && echo -ne "\033[0;33m" [ $_updates_available -gt 29 ] && echo -ne "\033[0;31m" echo -ne "$_updates_available\033[0m" echo "" fi echo "" echo -e "Remember \"\033[1;34mTODO.md\033[0m\" files have content automatically displayed." echo "" . "$HOME/.config/bash/cheat.bash" if command -v checkupdates ; then (checkupdates > "$HOME/.checkupdates") & disown fi > /dev/null . "$HOME/.cargo/env" alias backup='sudo borgmatic create --verbosity 1 --files' # Function to check for TODO.md and echo its contents function check_todo() { if [ -f "TODO.md" ]; then echo echo -e "\e[91mTODO.md\e[0m" echo "---------------------------" mdcat TODO.md echo "---------------------------" echo fi } # Hook to execute check_todo when changing directories cd() { builtin cd "$@" check_todo } random-bg() { local color='xxx' while getopts ":mrgb" opt; do case $opt in m) muted=true ;; r) color="ffxx" ;; g) color="xffx" ;; b) color="xxff" ;; *) echo "Invalid option: -$OPTARG" >&2 return 1 ;; esac done if [ "$muted" = true ]; then # FIXME sometimes gives 7 digit value # note value of 30 works hue_range=360 # Restricted hue range (0-360 degrees) hue=$((RANDOM % $hue_range)) saturation_range="50-80" # Adjust as needed saturation=$((RANDOM % ($saturation_range + 1) + ${saturation_range%-*})) lightness_range="60-80" # Adjust as needed lightness=$((RANDOM % ($lightness_range + 1) + ${lightness_range%-*})) color=$(printf "%02x%02x%02x" "$hue" "$saturation" "$lightness") else # FIXME: each x is replaced with same value, need a different value for each x color=${color//x/$(openssl rand -hex 1)} fi echo "#$color" xsetroot -solid "#$color" }