# Del tema bullet-train BULLETTRAIN_EXEC_TIME_ELAPSED="5" BULLETTRAIN_EXEC_TIME_BG="yellow" BULLETTRAIN_EXEC_TIME_FG="black" preexec() { cmd_timestamp=`date +%s` } precmd() { local stop=`date +%s` local start=${cmd_timestamp:-$stop} let BULLETTRAIN_last_exec_duration=$stop-$start cmd_timestamp='' } prompt_cmd_exec_time() { [ $BULLETTRAIN_last_exec_duration -gt $BULLETTRAIN_EXEC_TIME_ELAPSED ] && prompt_segment $BULLETTRAIN_EXEC_TIME_BG $BULLETTRAIN_EXEC_TIME_FG "$(displaytime $BULLETTRAIN_last_exec_duration)" } # Based on http://stackoverflow.com/a/32164707/3859566 function displaytime { local T=$1 local D=$((T/60/60/24)) local H=$((T/60/60%24)) local M=$((T/60%60)) local S=$((T%60)) [[ $D > 0 ]] && printf '%dd' $D [[ $H > 0 ]] && printf '%dh' $H [[ $M > 0 ]] && printf '%dm' $M printf '%ds' $S } # Begin a segment # Takes three arguments, background, foreground and text. All of them can be omitted, # rendering default background/foreground and no text. prompt_segment() { local bg fg SEGMENT_SEPARATOR='' CURRENT_BG='NONE' [[ -n $1 ]] && bg="%K{$1}" || bg="%k" [[ -n $2 ]] && fg="%F{$2}" || fg="%f" echo -n "%{%F{$CURRENT_BG}%}$SEGMENT_SEPARATOR%{$fg%} " CURRENT_BG=$1 [[ -n $3 ]] && echo -n $3 } POWERLEVEL9K_CUSTOM_EXEC_TIME="prompt_cmd_exec_time" # Cosas de la bateria prompt_battery() { # The battery can have four different states - default to 'unknown'. local current_state="unknown" typeset -AH battery_states battery_states=( 'low' 'red' 'charging' 'yellow' 'charged' 'green' 'disconnected' "$DEFAULT_COLOR_INVERTED" ) # Set default values if the user did not configure them set_default POWERLEVEL9K_BATTERY_LOW_THRESHOLD 10 if [[ $OS =~ OSX && -f /usr/sbin/ioreg && -x /usr/sbin/ioreg ]]; then # Pre-Grep as much information as possible to save some memory and # avoid pollution of the xtrace output. local raw_data="$(ioreg -n AppleSmartBattery | grep -E "MaxCapacity|TimeRemaining|CurrentCapacity|ExternalConnected|IsCharging")" # return if there is no battery on system [[ -z $(echo $raw_data | grep MaxCapacity) ]] && return # Convert time remaining from minutes to hours:minutes date string local time_remaining=$(echo $raw_data | grep TimeRemaining | awk '{ print $5 }') if [[ -n $time_remaining ]]; then # this value is set to a very high number when the system is calculating [[ $time_remaining -gt 10000 ]] && local tstring="..." || local tstring=${(f)$(/bin/date -u -r $(($time_remaining * 60)) +%k:%M)} fi # Get charge values local max_capacity=$(echo $raw_data | grep MaxCapacity | awk '{ print $5 }') local current_capacity=$(echo $raw_data | grep CurrentCapacity | awk '{ print $5 }') if [[ -n "$max_capacity" && -n "$current_capacity" ]]; then typeset -i 10 bat_percent bat_percent=$(( (current_capacity * 100) / max_capacity )) fi local remain="" # Logic for string output if [[ $(echo $raw_data | grep ExternalConnected | awk '{ print $5 }') =~ "Yes" ]]; then # Battery is charging if [[ $(echo $raw_data | grep IsCharging | awk '{ print $5 }') =~ "Yes" ]]; then current_state="charging" remain=" ($tstring)" else current_state="charged" fi else [[ $bat_percent -lt $POWERLEVEL9K_BATTERY_LOW_THRESHOLD ]] && current_state="low" || current_state="disconnected" remain=" ($tstring)" fi fi if [[ $OS =~ Linux ]]; then local sysp="/sys/class/power_supply" # Reported BAT0 or BAT1 depending on kernel version [[ -a $sysp/BAT0 ]] && local bat=$sysp/BAT0 [[ -a $sysp/BAT1 ]] && local bat=$sysp/BAT1 # Return if no battery found [[ -z $bat ]] && return local capacity=$(cat $bat/capacity) local battery_status=$(cat $bat/status) [[ $capacity -gt 100 ]] && local bat_percent=100 || local bat_percent=$capacity [[ $battery_status =~ Charging || $battery_status =~ Full ]] && local connected=true if [[ -z $connected ]]; then [[ $bat_percent -lt $POWERLEVEL9K_BATTERY_LOW_THRESHOLD ]] && current_state="low" || current_state="disconnected" else [[ $bat_percent =~ 100 ]] && current_state="charged" [[ $bat_percent -lt 100 ]] && current_state="charging" fi if [[ -f /usr/bin/acpi ]]; then local time_remaining=$(acpi | awk '{ print $5 }') if [[ $time_remaining =~ rate ]]; then local tstring="..." elif [[ $time_remaining =~ "[:digit:]+" ]]; then local tstring=${(f)$(date -u -d "$(echo $time_remaining)" +%k:%M 2> /dev/null)} fi fi [[ -n $tstring ]] && local remain=" ($tstring)" fi local message # Default behavior: Be verbose! set_default POWERLEVEL9K_BATTERY_VERBOSE true if [[ "$POWERLEVEL9K_BATTERY_VERBOSE" == true ]]; then message="$bat_percent%%$remain" else message="$bat_percent%%" fi # Draw the prompt_segment if [[ $current_state != "charged" ]] then # Draw the prompt_segment if [[ -n $bat_percent && $bat_percent -ne 94 && $bat_percent -ne 98 ]]; then "$1_prompt_segment" "${0}_${current_state}" "$2" "$DEFAULT_COLOR" "${battery_states[$current_state]}" "$message" 'BATTERY_ICON' fi fi } # K8s POWERLEVEL9K_KUBECTL_CONTEXT="prompt_kubectl_context" prompt_kubectl_context() { if [[ -v KUBECTL_SHOW_CONTEXT ]] then prompt_segment $DEFAULT_COLOR blue_COLOR "$KUBECTL_SHOW_CONTEXT" fi }