#!/usr/bin/env zsh # ============================================================================ # ADLee's zsh Theme for oh-my-zsh # ============================================================================ # ============================================================================ # OPTIONS # ============================================================================ setopt PROMPT_SUBST setopt PROMPT_CR setopt PROMPT_SP setopt TYPESET_SILENT export PROMPT_EOL_MARK='' export KEYTIMEOUT=1 # Force color loading (critical for tmux) autoload -U colors && colors # ============================================================================ # CONFIGURATION # ============================================================================ # Colors typeset -g COLOR_GREY='%{$FG[239]%}' typeset -g COLOR_YELLOW='%{$FG[179]%}' typeset -g COLOR_BLUE='%{$FG[069]%}' typeset -g COLOR_GREEN='%{$FG[118]%}' typeset -g COLOR_RED='%{$FG[196]%}' typeset -g COLOR_ORANGE='%{$FG[220]%}' typeset -g COLOR_LIGHT_ORANGE='%{$FG[228]%}' typeset -g COLOR_LIGHT_GREEN='%{$FG[002]%}' typeset -g COLOR_BRIGHT_GREEN='%{$FG[010]%}' typeset -g COLOR_RESET='%{$reset_color%}' typeset -g COLOR_BOLD='%{$FX[bold]%}' # Thresholds typeset -g PATH_TRUNCATE_LENGTH=32 typeset -g TIMER_THRESHOLD=10 # ============================================================================ # GIT PROMPT # ============================================================================ ZSH_THEME_GIT_PROMPT_PREFIX=" %{$fg_bold[green]%}⎇ " ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color$FG[239]%}" ZSH_THEME_GIT_PROMPT_DIRTY=" %{$fg[red]%}*" ZSH_THEME_GIT_PROMPT_CLEAN="" # ============================================================================ # COMMAND TIMER # ============================================================================ _adlee_format_elapsed_time() { local elapsed=$1 local timestamp="%D{%Y-%m-%d %I:%M:%S}" if (( elapsed >= 3600 )); then local hours=$((elapsed / 3600)) local remainder=$((elapsed % 3600)) local minutes=$((remainder / 60)) local seconds=$((remainder % 60)) print -P "${COLOR_RED}•••「Completed in: %b%B${COLOR_RED}${hours}h${minutes}m${seconds}s%b${COLOR_RED} at: %b%B${COLOR_RED}${timestamp}%b${COLOR_RED}」•••%b" elif (( elapsed >= 60 )); then local minutes=$((elapsed / 60)) local seconds=$((elapsed % 60)) print -P "${COLOR_ORANGE}••「Completed in: %b%B${COLOR_LIGHT_ORANGE}${minutes}m${seconds}s%b${COLOR_ORANGE} at: %b%B${COLOR_LIGHT_ORANGE}${timestamp}%b${COLOR_ORANGE}」••%b" else print -P "${COLOR_LIGHT_GREEN}•「Completed in: %b%B${COLOR_BRIGHT_GREEN}${elapsed}s%b${COLOR_BRIGHT_GREEN} at: %b%B${COLOR_LIGHT_GREEN}${timestamp}%b${COLOR_LIGHT_GREEN}」•%b" fi } # ============================================================================ # PROMPT # ============================================================================ _adlee_build_prompt() { # %(#.TRUE.FALSE) - red for root, blue for users if [[ -n $UPDATE_PKG_COUNT && $UPDATE_PKG_COUNT -gt 0 ]];then PROMPT='%{$FG[239]%}┌「%{$FG[118]%}%n@%m%{$reset_color$FG[239]%}」─「%{$FG[179]%}%~%{$reset_color$FG[239]%}$(git_prompt_info)%{$FG[239]%}」─「%{$FG[111]%}⇑${UPDATE_PKG_COUNT}%{$reset_color$FG[239]%}」 %{$FG[239]%}└%{$FX[bold]%}%(#.%{$FG[196]%}.%{$FG[069]%})%#%{$reset_color%} ' else PROMPT='%{$FG[239]%}┌「%{$FG[118]%}%n@%m%{$reset_color$FG[239]%}」─「%{$FG[179]%}%~%{$reset_color$FG[239]%}$(git_prompt_info)%{$FG[239]%}」 %{$FG[239]%}└%{$FX[bold]%}%(#.%{$FG[196]%}.%{$FG[069]%})%#%{$reset_color%} ' fi } # ============================================================================ # HOOKS # ============================================================================ adlee_preexec() { cmd_start_time=$SECONDS echo -ne "\e[0m" } adlee_precmd() { if [[ -n $cmd_start_time ]]; then local elapsed=$((SECONDS - cmd_start_time)) (( elapsed > TIMER_THRESHOLD )) && _adlee_format_elapsed_time $elapsed unset cmd_start_time fi zle_highlight=( default:fg=white ) _adlee_build_prompt } TRAPALRM() { _adlee_build_prompt [[ "$WIDGET" != "expand-or-complete" ]] && zle reset-prompt } # ============================================================================ # UTILITIES # ============================================================================ histsearch() { fc -lim "$@" 1 } # ============================================================================ # INITIALIZATION # ============================================================================ autoload -Uz add-zsh-hook add-zsh-hook preexec adlee_preexec add-zsh-hook precmd adlee_precmd # Configure ZLE zle -N zle-line-init zle -N zle-keymap-select # Initial prompt build (critical for tmux) _adlee_build_prompt