summaryrefslogtreecommitdiff
path: root/home/.oh-my-zsh/themes/gallois.zsh-theme
diff options
context:
space:
mode:
authornavewindre <boneyaard@gmail.com>2025-07-13 06:42:05 +0200
committernavewindre <boneyaard@gmail.com>2025-07-13 06:42:05 +0200
commit02f14a9cb152561a5e44062aac79f3b700403b40 (patch)
tree2db8ebda3b7f6f8777783aeb5c60018e6e1359d8 /home/.oh-my-zsh/themes/gallois.zsh-theme
parentcbbdeb2f6b40a102a829f0c47cff052937231f00 (diff)
omz
Diffstat (limited to 'home/.oh-my-zsh/themes/gallois.zsh-theme')
-rw-r--r--home/.oh-my-zsh/themes/gallois.zsh-theme140
1 files changed, 140 insertions, 0 deletions
diff --git a/home/.oh-my-zsh/themes/gallois.zsh-theme b/home/.oh-my-zsh/themes/gallois.zsh-theme
new file mode 100644
index 0000000..3fc3490
--- /dev/null
+++ b/home/.oh-my-zsh/themes/gallois.zsh-theme
@@ -0,0 +1,140 @@
+# Depends on the git plugin for work_in_progress()
+(( $+functions[work_in_progress] )) || work_in_progress() {}
+
+ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg[cyan]%}[%{$fg[green]%}"
+ZSH_THEME_GIT_PROMPT_SUFFIX="%{$fg[cyan]%}]"
+ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}"
+ZSH_THEME_GIT_PROMPT_CLEAN=""
+
+# Customized git status, oh-my-zsh currently does not allow render dirty status before branch
+git_custom_status() {
+ local branch=$(git_current_branch)
+ [[ -n "$branch" ]] || return 0
+ print "%{${fg_bold[yellow]}%}$(work_in_progress)%{$reset_color%}\
+${ZSH_THEME_GIT_PROMPT_PREFIX}$(parse_git_dirty)${branch}\
+${ZSH_THEME_GIT_PROMPT_SUFFIX}"
+}
+autoload -U colors && colors
+
+#export VCS_PROMPT=hg_prompt_info
+export VCS_PROMPT=git_custom_status
+
+base_prompt="%{$fg[cyan]%}[%~% ]%(?.%{$fg[green]%}.%{$fg[red]%})%B$%b "
+custom_prompt=""
+last_run_time=""
+last_vcs_info=""
+
+
+function pipestatus_parse {
+ PIPESTATUS="$pipestatus"
+ ERROR=0
+ for i in "${(z)PIPESTATUS}"; do
+ if [[ "$i" -ne 0 ]]; then
+ ERROR=1
+ fi
+ done
+
+ if [[ "$ERROR" -ne 0 ]]; then
+ print "[%{$fg[red]%}$PIPESTATUS%{$fg[cyan]%}]"
+ fi
+}
+
+
+# Combine it all into a final right-side prompt
+PROMPT='%{$fg[cyan]%}[%~% ]%(?.%{$fg[green]%}.%{$fg[red]%})%B$%b '
+function preexec() {
+ last_run_time=$(perl -MTime::HiRes=time -e 'printf "%.9f\n", time')
+}
+
+function duration() {
+ local duration
+ local now=$(perl -MTime::HiRes=time -e 'printf "%.9f\n", time')
+ local last=$1
+ local last_split=("${(@s/./)last}")
+ local now_split=("${(@s/./)now}")
+ local T=$((now_split[1] - last_split[1]))
+ local D=$((T/60/60/24))
+ local H=$((T/60/60%24))
+ local M=$((T/60%60))
+ local S=$((T%60))
+ local s=$(((now_split[2] - last_split[2]) / 1000000000.))
+ local m=$(((now_split[2] - last_split[2]) / 1000000.))
+
+ (( $D > 0 )) && duration+="${D}d"
+ (( $H > 0 )) && duration+="${H}h"
+ (( $M > 0 )) && duration+="${M}m"
+
+ if [[ $S -le 0 ]]; then
+ printf "%ims" "$m"
+ else
+ if ! [[ -z $duration ]] && printf "%s" "$duration"
+ local sec_milli=$((S + s))
+ printf "%.3fs" "$sec_milli"
+ fi
+}
+
+function precmd() {
+ RETVAL=$(pipestatus_parse)
+ local info=""
+
+ if [ ! -z "$last_run_time" ]; then
+ local elapsed=$(duration $last_run_time)
+ last_run_time=$(print $last_run_time | tr -d ".")
+ if [ $(( $(perl -MTime::HiRes=time -e 'printf "%.9f\n", time' | tr -d ".") - $last_run_time )) -gt $(( 120 * 1000 * 1000 * 1000 )) ]; then
+ local elapsed_color="%{$fg[magenta]%}"
+ elif [ $(( $(perl -MTime::HiRes=time -e 'printf "%.9f\n", time' | tr -d ".") - $last_run_time )) -gt $(( 60 * 1000 * 1000 * 1000 )) ]; then
+ local elapsed_color="%{$fg[red]%}"
+ elif [ $(( $(perl -MTime::HiRes=time -e 'printf "%.9f\n", time' | tr -d ".") - $last_run_time )) -gt $(( 10 * 1000 * 1000 * 1000 )) ]; then
+ local elapsed_color="%{$fg[yellow]%}"
+ else
+ local elapsed_color="%{$fg[green]%}"
+ fi
+ info=$(printf "%s%s%s%s%s" "%{$fg[cyan]%}[" "$elapsed_color" "$elapsed" "%{$fg[cyan]%}]" "$RETVAL")
+ unset last_run_time
+ fi
+
+ if [ -z "$info" -a ! -z "$last_vcs_info" ]; then
+ custom_prompt="$last_vcs_info$base_prompt"
+ return;
+ fi
+
+ if (( ${+VCS_PROMPT} )); then
+ last_vcs_info=$($VCS_PROMPT)
+ if [ ! -z "$last_vcs_info" ]; then
+ [ -z "$info" ] && info=$last_vcs_info || info="$info$last_vcs_info"
+ fi
+ fi
+
+ [ -z "$info" ] && custom_prompt="$base_prompt" || custom_prompt="$info$base_prompt"
+}
+
+function hg_prompt_info() {
+ unset output info parts branch_parts branch
+
+ local output=""
+ if ! output="$(hg status 2> /dev/null)"; then
+ return
+ fi
+
+ local info=$(hg log -l1 --template '{author}:{node|short}:{remotenames}:{phabdiff}')
+ local parts=(${(@s/:/)info})
+ local branch_parts=(${(@s,/,)parts[3]})
+ local branch=${branch_parts[-1]}
+ [ ! -z "${parts[3]}" ] && [[ "${parts[1]}" =~ "$USER@" ]] && branch=${parts[3]}
+ [ -z "${parts[3]}" ] && branch=${parts[2]}
+
+ if [[ ! -z "$output" ]]; then
+ local color="%{$fg[red]%}"
+ elif [[ "${branch}" == "master" || "${branch}" == "warm" ]]; then
+ local color="%{$fg[yellow]%}"
+ else
+ local color="%{$fg[green]%}"
+ fi
+
+ print "%{$fg[cyan]%}[${color}${branch}%{$fg[cyan]%}]"
+}
+
+setopt PROMPT_SUBST
+PROMPT='$custom_prompt'
+
+