Move prompt display to oh-my-posh
and reduce shell-integrated fallback-prompt to minimum Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
86dc403cf6
commit
0b789b5a8a
2 changed files with 152 additions and 105 deletions
|
@ -18,104 +18,6 @@ function box_name() {
|
|||
[ -f ~/.box-name ] && cat ~/.box-name || echo ${SHORT_HOST:-$HOST}
|
||||
}
|
||||
|
||||
function git_describe() {
|
||||
git describe --tags 2>/dev/null || git rev-parse --short HEAD 2>/dev/null || printf '\ue701'
|
||||
}
|
||||
|
||||
function awsenv_prompt() {
|
||||
local pr=$(awsenv prompt 2>/dev/null)
|
||||
[ -z "${pr}" ] || echo "${bracket_open} ${pr} ${bracket_close}"
|
||||
}
|
||||
|
||||
function config-git_prompt() {
|
||||
if [ -f ~/bin/config-git-status.sh ]; then
|
||||
if ! (~/bin/config-git-status.sh); then
|
||||
echo "${bracket_open} %{$fg[red]%} ${bracket_close}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function shortened_branch() {
|
||||
local branch=$(git_current_branch)
|
||||
[ $(echo -n "${branch}" | wc -c) -gt 15 ] && branch="${branch:0:15}%{$fg[red]%}$(printf '\uf141')%{$reset_color%}"
|
||||
echo "${branch}"
|
||||
}
|
||||
|
||||
function build_git_prompt() {
|
||||
# Allow hiding the right side of the prompt
|
||||
(test "${NO_RIGHT}" = "true") && return
|
||||
|
||||
# When there is no git, don't show a git prompt
|
||||
git branch >/dev/null 2>/dev/null || return
|
||||
|
||||
# Fetch status of the current repo
|
||||
local INDEX=$(command git status --porcelain -b 2>/dev/null)
|
||||
local REMOTE=$(command git remote -v | grep fetch)
|
||||
|
||||
echo -n "${bracket_open} %{$fg[blue]%}"
|
||||
|
||||
# Mark specific remotes
|
||||
case "${REMOTE}" in
|
||||
*bitbucket.org*)
|
||||
printf '\ue703 '
|
||||
;;
|
||||
*github.com*)
|
||||
printf '\ue709 '
|
||||
;;
|
||||
*gitlab.com*)
|
||||
printf '\uf296 '
|
||||
;;
|
||||
*)
|
||||
printf '\uf1d3 '
|
||||
;;
|
||||
esac
|
||||
|
||||
# Show current branch and commit / tag
|
||||
echo -n "%{$reset_color%}"
|
||||
echo -n "$(shortened_branch) "
|
||||
echo -n "($(git_describe)) "
|
||||
|
||||
# Print repository status information
|
||||
[ $(echo "$INDEX" | wc -l) -gt 1 ] && echo -n "%{$fg[red]%}$(printf '\uf0f6')%{$FG[236]%} "
|
||||
|
||||
(git rev-parse --verify refs/stash >/dev/null 2>&1) && echo -n "%{$fg[blue]%}$(printf '\uf64c')%{$FG[236]%} "
|
||||
|
||||
# Show difference to remote
|
||||
if (echo "$INDEX" | grep '^## .*ahead.*behind' &>/dev/null); then
|
||||
echo -n "%{$fg[red]%}$(printf '\uf047')"
|
||||
elif (echo "$INDEX" | grep '^## .*ahead' &>/dev/null); then
|
||||
echo -n "%{$fg[green]%}$(printf '\uf061')"
|
||||
elif (echo "$INDEX" | grep '^## .*behind' &>/dev/null); then
|
||||
echo -n "%{$fg[yellow]%}$(printf '\uf060')"
|
||||
else
|
||||
echo -n "%{$fg[green]%}="
|
||||
fi
|
||||
|
||||
echo -n "%{$reset_color%} ${bracket_close}"
|
||||
}
|
||||
|
||||
function prompt_gomod() {
|
||||
local mod_default="auto"
|
||||
local mod=${GO111MODULE:-${mod_default}}
|
||||
|
||||
[[ ${mod} == ${mod_default} ]] || echo "${bracket_open} %{$fg[yellow]%}${mod} ${bracket_close}"
|
||||
}
|
||||
|
||||
function prompt_kubectx() {
|
||||
command -v kubectl >/dev/null || return 0
|
||||
local ctx="$(kubectl config current-context 2>/dev/null || echo "")"
|
||||
local color="yellow"
|
||||
|
||||
[[ -n $ctx ]] || return 0
|
||||
|
||||
case "${ctx}" in
|
||||
minikube) color="green" ;;
|
||||
prod) color="red" ;;
|
||||
esac
|
||||
|
||||
echo "${bracket_open} %{$fg[${color}]%}${ctx} ${bracket_close}"
|
||||
}
|
||||
|
||||
local current_dir='$(short_path)'
|
||||
local git_info='$(build_git_prompt)'
|
||||
|
||||
|
@ -126,16 +28,12 @@ local prompt_part_time="${bracket_open} %T ${bracket_close}"
|
|||
local prompt_part_user="${bracket_open} %{$FG[040]%}%n%{$reset_color%}%{$FG[239]%}@%{$reset_color%}%{$(box_color)%}$(box_name)%{$reset_color%} ${bracket_close}"
|
||||
local prompt_part_path="%{$terminfo[bold]$FG[226]%}${current_dir}%{$reset_color%}"
|
||||
local prompt_part_exit="%(?..${bracket_open} %{$fg[red]%}%?%{${reset_color}%} ${bracket_close})"
|
||||
local prompt_part_char='$(prompt_char)'
|
||||
local prompt_part_configgit='$(config-git_prompt)'
|
||||
local prompt_part_gomod='$(prompt_gomod)'
|
||||
local prompt_part_kubectx='$(prompt_kubectx)'
|
||||
|
||||
PROMPT="
|
||||
╭─ ${prompt_part_time}${prompt_part_user}${prompt_part_configgit}${prompt_part_gomod}${prompt_part_kubectx}${prompt_part_exit} ${prompt_part_path}
|
||||
╰─ "
|
||||
${prompt_part_time}${prompt_part_user}${prompt_part_exit} ${prompt_part_path}
|
||||
$(printf '\u279c') "
|
||||
|
||||
RPROMPT="${git_info}"
|
||||
RPROMPT=""
|
||||
|
||||
ZSH_THEME_GIT_PROMPT_PREFIX=""
|
||||
ZSH_THEME_GIT_PROMPT_SUFFIX=""
|
||||
|
@ -144,4 +42,8 @@ ZSH_THEME_GIT_PROMPT_SUFFIX=""
|
|||
ZSH_THEME_GIT_PROMPT_SHA_BEFORE=""
|
||||
ZSH_THEME_GIT_PROMPT_SHA_AFTER=""
|
||||
|
||||
if command -v oh-my-posh >/dev/null; then
|
||||
eval "$(oh-my-posh init zsh --config ~/.zsh/oh-my-custom/oh-my-posh.yaml)"
|
||||
fi
|
||||
|
||||
# vim: set ft=zsh:
|
||||
|
|
145
.zsh/oh-my-custom/oh-my-posh.yaml
Normal file
145
.zsh/oh-my-custom/oh-my-posh.yaml
Normal file
|
@ -0,0 +1,145 @@
|
|||
blocks:
|
||||
- type: prompt
|
||||
alignment: left
|
||||
newline: true
|
||||
segments:
|
||||
- type: time
|
||||
style: diamond
|
||||
leading_diamond: &ld '<#666>[</> '
|
||||
trailing_diamond: &td ' <#666>]</>'
|
||||
foreground: p:white
|
||||
template: '{{ .CurrentDate | date "15:04:05" }}'
|
||||
|
||||
- type: session
|
||||
style: diamond
|
||||
leading_diamond: *ld
|
||||
trailing_diamond: *td
|
||||
foreground: p:green
|
||||
template: '{{ .UserName }}{{ if .SSHSession }}@{{ .HostName }}{{ end }}'
|
||||
|
||||
- type: command
|
||||
style: diamond
|
||||
leading_diamond: *ld
|
||||
trailing_diamond: *td
|
||||
foreground: p:red
|
||||
properties:
|
||||
command: '~/bin/config-git-status.sh || echo "mod"'
|
||||
template: '{{ if eq .Output "mod" }}{{ end }}'
|
||||
|
||||
- type: kubectl
|
||||
style: diamond
|
||||
leading_diamond: *ld
|
||||
trailing_diamond: *td
|
||||
foreground: p:white
|
||||
foreground_templates:
|
||||
- '{{ if eq .Context "int" }}p:yellow{{ end }}'
|
||||
- '{{ if eq .Context "minikube" }}p:green{{ end }}'
|
||||
- '{{ if eq .Context "prod" }}p:red{{ end }}'
|
||||
template: '{{ .Context }}'
|
||||
|
||||
- type: command
|
||||
style: diamond
|
||||
leading_diamond: *ld
|
||||
trailing_diamond: *td
|
||||
foreground: p:yellow
|
||||
properties:
|
||||
command: short_path
|
||||
template: '{{ .Output }}'
|
||||
|
||||
- type: exit
|
||||
style: diamond
|
||||
leading_diamond: *ld
|
||||
trailing_diamond: *td
|
||||
foreground: p:white
|
||||
foreground_templates:
|
||||
- '{{ if gt .Code 0 }}p:red{{ end }}'
|
||||
properties:
|
||||
always_enabled: false
|
||||
template: '{{ if gt .Code 0 }}{{ .Code }}{{ else }}{{ end }}'
|
||||
|
||||
- type: prompt
|
||||
alignment: right
|
||||
overflow: hide
|
||||
segments:
|
||||
- type: executiontime
|
||||
style: diamond
|
||||
leading_diamond: *ld
|
||||
trailing_diamond: *td
|
||||
properties:
|
||||
style: austin
|
||||
template: '{{ .FormattedMs }}'
|
||||
|
||||
- type: git
|
||||
style: diamond
|
||||
leading_diamond: *ld
|
||||
trailing_diamond: *td
|
||||
foreground: p:green
|
||||
foreground_templates:
|
||||
- '{{ if or (.Working.Changed) (.Staging.Changed) }}p:yellow{{ end }}'
|
||||
- '{{ if and (gt .Ahead 0) (gt .Behind 0) }}p:red{{ end }}'
|
||||
- '{{ if gt .Ahead 0 }}#49416D{{ end }}'
|
||||
- '{{ if gt .Behind 0 }}#7A306C{{ end }}'
|
||||
properties:
|
||||
bitbucket_icon: "\ue703"
|
||||
branch_icon: ''
|
||||
branch_max_length: 25
|
||||
fetch_status: true
|
||||
fetch_upstream_icon: true
|
||||
github_icon: "\ue709"
|
||||
git_icon: "\uf1d3"
|
||||
gitlab_icon: "\uf296"
|
||||
templates:
|
||||
- '{{ if .UpstreamURL }}{{ url .UpstreamIcon .UpstreamURL }} {{ end }}'
|
||||
- '{{ .HEAD }} ({{ .ShortHash }})'
|
||||
- '{{ if .BranchStatus }} {{ .BranchStatus }}{{ end }}'
|
||||
- '{{ if .Working.Changed }} {{ .Working.String }}{{ end }}'
|
||||
- '{{ if .Staging.Changed }} {{ .Staging.String }}{{ end }}'
|
||||
|
||||
- type: prompt
|
||||
alignment: left
|
||||
newline: true
|
||||
segments:
|
||||
- type: text
|
||||
style: plain
|
||||
foreground: p:yellow
|
||||
template: "\u279c"
|
||||
|
||||
console_title_template: "{{ .UserName }}@{{ .HostName }} \u279c {{ .Folder }}"
|
||||
|
||||
final_space: true
|
||||
|
||||
palette:
|
||||
black: '#262B44'
|
||||
blue: '#4B95E9'
|
||||
gray: '#333333'
|
||||
green: '#00bc00'
|
||||
orange: '#F07623'
|
||||
red: '#c91b00'
|
||||
white: '#E0DEF4'
|
||||
yellow: '#f4f400'
|
||||
darkblue: '#0b1052'
|
||||
|
||||
tooltips:
|
||||
- type: aws
|
||||
style: diamond
|
||||
leading_diamond: &ttld
|
||||
trailing_diamond: &tttd
|
||||
background: p:orange
|
||||
foreground: p:white
|
||||
properties:
|
||||
display_default: true
|
||||
template: ' {{ .Profile }}{{ if .Region }}@{{ .Region }}{{ end }} '
|
||||
tips:
|
||||
- aws
|
||||
|
||||
- type: az
|
||||
style: diamond
|
||||
leading_diamond: *ttld
|
||||
trailing_diamond: *tttd
|
||||
background: p:blue
|
||||
foreground: p:white
|
||||
template: ' ﴃ {{ .Name }} '
|
||||
tips:
|
||||
- az
|
||||
|
||||
version: 2
|
Loading…
Reference in a new issue