diff --git a/blox.zsh b/blox.zsh index 0cbf901..218f4b6 100644 --- a/blox.zsh +++ b/blox.zsh @@ -28,6 +28,10 @@ source "$__BLOX_ROOT/src/blocks/symbol.zsh" source "$__BLOX_ROOT/src/blocks/time.zsh" source "$__BLOX_ROOT/src/blocks/virtualenv.zsh" source "$__BLOX_ROOT/src/blocks/awsprofile.zsh" +source "$__BLOX_ROOT/src/blocks/openstack.zsh" +source "$__BLOX_ROOT/src/blocks/docker.zsh" +source "$__BLOX_ROOT/src/blocks/kube.zsh" +source "$__BLOX_ROOT/src/blocks/netns.zsh" source "$__BLOX_ROOT/src/title.zsh" source "$__BLOX_ROOT/src/segments.zsh" diff --git a/src/blocks/bgjobs.zsh b/src/blocks/bgjobs.zsh index aff04af..918ebba 100644 --- a/src/blocks/bgjobs.zsh +++ b/src/blocks/bgjobs.zsh @@ -1,7 +1,7 @@ # --------------------------------------------- # Background jobs block configurations -BLOX_BLOCK__BGJOBS_SYMBOL="${BLOX_BLOCK__BGJOBS_SYMBOL:- }" +BLOX_BLOCK__BGJOBS_SYMBOL="${BLOX_BLOCK__BGJOBS_SYMBOL:-  }" BLOX_BLOCK__BGJOBS_COLOR="${BLOX_BLOCK__BGJOBS_COLOR:-magenta}" # --------------------------------------------- diff --git a/src/blocks/docker.zsh b/src/blocks/docker.zsh new file mode 100644 index 0000000..ecb563b --- /dev/null +++ b/src/blocks/docker.zsh @@ -0,0 +1,16 @@ +# --------------------------------------------- # +# | Docker block options +# --------------------------------------------- # +BLOX_BLOCK__DOCKER_SYMBOL="${BLOX_BLOCK__DOCKER_SYMBOL:- }" +BLOX_BLOCK__DOCKER_COLOR="${BLOX_BLOCK__DOCKER_COLOR:-81}" +# --------------------------------------------- # +# | The block itself +# --------------------------------------------- # +function blox_block__docker() {( + [[ ! -f /.dockerenv ]] && return + docker_id=$(cat /proc/self/cgroup | grep -Po '\w{64}' | sort -u | cut -c1-12) + + blox_helper__build_block \ + "${BLOX_BLOCK__DOCKER_COLOR}" \ + "${BLOX_BLOCK__DOCKER_SYMBOL} ${docker_id}" +)} diff --git a/src/blocks/git.zsh b/src/blocks/git.zsh index 71ebdef..954d851 100644 --- a/src/blocks/git.zsh +++ b/src/blocks/git.zsh @@ -33,8 +33,6 @@ BLOX_BLOCK__GIT_REPO_SYMBOL="${BLOX_BLOCK__GIT_REPO_SYMBOL:-󰊢}" # --------------------------------------------- # Themes -BLOX_BLOCK__GIT_THEME_CLEAN="%F{${BLOX_BLOCK__GIT_CLEAN_COLOR}]%}$BLOX_BLOCK__GIT_CLEAN_SYMBOL%f" -BLOX_BLOCK__GIT_THEME_STASHED="%F{${BLOX_BLOCK__GIT_STASHED_COLOR}]%}$BLOX_BLOCK__GIT_STASHED_SYMBOL%f" BLOX_BLOCK__GIT_THEME_UNPULLED="%F{${BLOX_BLOCK__GIT_UNPULLED_COLOR}]%}$BLOX_BLOCK__GIT_UNPULLED_SYMBOL%f" BLOX_BLOCK__GIT_THEME_UNPUSHED="%F{${BLOX_BLOCK__GIT_UNPUSHED_COLOR}]%}$BLOX_BLOCK__GIT_UNPUSHED_SYMBOL%f" @@ -75,17 +73,11 @@ function blox_block__git_helper__remote_branch() { fi } -# Echo the appropriate symbol for branch's status -function blox_block__git_helper__status() { - if [[ -z "$(git status --porcelain --ignore-submodules 2> /dev/null)" ]]; then - echo " $BLOX_BLOCK__GIT_THEME_CLEAN" - fi -} - # Echo the appropriate symbol if there are stashed files function blox_block__git_helper__stashed_status() { - if $(command git rev-parse --verify refs/stash &> /dev/null); then - echo " $BLOX_BLOCK__GIT_THEME_STASHED" + stash=$(git stash list 2> /dev/null | wc -l) + if [[ $stash > 0 ]]; then + echo " %F{${BLOX_BLOCK__GIT_STASHED_COLOR}]%}${BLOX_BLOCK__GIT_STASHED_SYMBOL} ${stash}%f" fi } @@ -124,7 +116,7 @@ function blox_block__git_helper__short_status() { git_stat=$(git diff --shortstat 2> /dev/null) git_file_untracked=$(echo $git_status | grep '^??' | wc -l) - git_file_staged=$(echo $git_status | grep '^A' | wc -l) + git_file_staged=$(echo $git_status | grep -P '^(A|R|M|D)' | wc -l) git_file_changed=$(echo $git_stat | grep -Po '\d+(?= files* changed)') git_line_added=$(echo $git_stat | grep -Po '\d+(?= insertion)') git_line_deleted=$(echo $git_stat | grep -Po '\d+(?= deletion)') @@ -152,7 +144,6 @@ function blox_block__git() { branch_name="$(blox_block__git_helper__branch)" branch_remote="$(blox_block__git_helper__remote_branch $branch_name)" tag_name="$(blox_block__git_helper__tag)" - branch_status="$(blox_block__git_helper__status)" stashed_status="$(blox_block__git_helper__stashed_status)" remote_status="$(blox_block__git_helper__remote_status)" short_status="$(blox_block__git_helper__short_status)" @@ -167,7 +158,6 @@ function blox_block__git() { && commit_hash="$(blox_block__git_helper__commit)" \ && result+="%F{${BLOX_BLOCK__GIT_COMMIT_COLOR}}${BLOX_CONF__BLOCK_PREFIX}${commit_hash}${BLOX_CONF__BLOCK_SUFFIX}%f" - result+="${branch_status}" result+="${stashed_status}" result+="${remote_status}" result+="${short_status}" diff --git a/src/blocks/kube.zsh b/src/blocks/kube.zsh new file mode 100644 index 0000000..40c324c --- /dev/null +++ b/src/blocks/kube.zsh @@ -0,0 +1,25 @@ +# --------------------------------------------- # +# | Docker block options +# --------------------------------------------- # +BLOX_BLOCK__KUBE_SYMBOL="${BLOX_BLOCK__KUBE_SYMBOL:-󱃾}" +BLOX_BLOCK__KUBE_COLOR="${BLOX_BLOCK__KUBE_COLOR:-111}" +# --------------------------------------------- # +# | The block itself +# --------------------------------------------- # +function blox_block__kube() {( + [[ -z $KUBECONFIG ]] && return + + kube_context=$(cat $KUBECONFIG | grep -oPm 1 'current-context: \K.+' 2> /dev/null) + + if [[ -n $KUBENS ]]; then + kubens=$KUBENS + namespace_color=108 + else + kubens=$(sed -n "/- context:/,/\s*name: $context/p" $KUBECONFIG | grep -oPm 1 '\s*namespace: \K.+') + namespace_color=244 + fi + + blox_helper__build_block \ + "${BLOX_BLOCK__KUBE_COLOR}" \ + "${BLOX_BLOCK__KUBE_SYMBOL} ${kube_context} %F{$namespace_color}${kubens:-default}%f" +)} diff --git a/src/blocks/netns.zsh b/src/blocks/netns.zsh new file mode 100644 index 0000000..a655f57 --- /dev/null +++ b/src/blocks/netns.zsh @@ -0,0 +1,16 @@ +# --------------------------------------------- # +# | NETNS block options +# --------------------------------------------- # +BLOX_BLOCK__NETNS_SYMBOL="${BLOX_BLOCK__NETNS_SYMBOL:- }" +BLOX_BLOCK__NETNS_COLOR="${BLOX_BLOCK__NETNS_COLOR:-198}" +# --------------------------------------------- # +# | The block itself +# --------------------------------------------- # +function blox_block__netns() {( + netns=$(ip netns identify $$) + [[ -z $netns ]] && return + + blox_helper__build_block \ + "${BLOX_BLOCK__NETNS_COLOR}" \ + "${BLOX_BLOCK__NETNS_SYMBOL} $netns" +)} diff --git a/src/blocks/openstack.zsh b/src/blocks/openstack.zsh new file mode 100644 index 0000000..9291e26 --- /dev/null +++ b/src/blocks/openstack.zsh @@ -0,0 +1,27 @@ +# --------------------------------------------- # +# | Openstack block options +# --------------------------------------------- # +BLOX_BLOCK__OPENSTACK_SYMBOL="${BLOX_BLOCK__OPENSTACK_SYMBOL:-󰅡}" +BLOX_BLOCK__OPENSTACK_COLOR="${BLOX_BLOCK__OPENSTACK_COLOR:-9}" + +# --------------------------------------------- # +# | The block itself +# --------------------------------------------- # +function blox_block__openstack() { + [[ -z $OS_PROJECT_NAME && -z $OS_TENANT_NAME ]] && return + region_name=${OS_REGION_NAME:-..} + + display_name='' + project_name=${OS_PROJECT_NAME:-$OS_TENANT_NAME} + project_id=${OS_PROJECT_ID:-$OS_TENANT_ID} + + if [[ $project_name =~ '[0-9]+' && -n $project_id ]]; then + display_name="id: ${project_id}" + else + display_name=$project_name + fi + + blox_helper__build_block \ + "${BLOX_BLOCK__OPENSTACK_COLOR}" \ + "${BLOX_BLOCK__OPENSTACK_SYMBOL} ${region_name} %F{244}${display_name}%f" +} diff --git a/src/blocks/pyenv.zsh b/src/blocks/pyenv.zsh index c831007..1e81c9a 100644 --- a/src/blocks/pyenv.zsh +++ b/src/blocks/pyenv.zsh @@ -8,11 +8,14 @@ BLOX_BLOCK__PYENV_SYMBOL="${BLOX_BLOCK__PYENV_SYMBOL:-}" # Helper functions function blox_block__pyenv_helper__get_version() { - py_version=$(echo $PYENV_VIRTUAL_ENV | sed -nre "s,.*/versions/([^/]+)/.*,\1,p") - if [[ -z $py_version ]]; then - py_version=$(cat $PYENV_ROOT/version 2>/dev/null | grep -v system) + pyenv_version=${PYENV_VERSION:-$(cat $PYENV_ROOT/version 2> /dev/null)} + [[ -z $pyenv_version ]] && pyenv_version=system + python_version=$( (python3 -V || python -V) 2> /dev/null | awk '{print $2}') + if [[ $pyenv_version = $python_version ]]; then + pyenv_version="pyenv" fi - echo -n "${py_version:t}" + [[ -n $pyenv_version ]] && pyenv_version+=':' + echo -n "${pyenv_version}${python_version}" } # --------------------------------------------- diff --git a/src/render.zsh b/src/render.zsh index 07bd9cb..fa09601 100644 --- a/src/render.zsh +++ b/src/render.zsh @@ -86,7 +86,7 @@ function blox_hook__render() { # Otherwise, we'll first render the upper segments separately, then the lower segments. Doing # this may solve some resizing issue (#2). print -rP " %{${upper_left}%}${spacing}%{${upper_right}%} " - PROMPT=" ${lower_left} " + PROMPT="${lower_left} " fi # Lower right prompt diff --git a/src/utils.zsh b/src/utils.zsh index 106e44c..fc62e4b 100644 --- a/src/utils.zsh +++ b/src/utils.zsh @@ -15,9 +15,9 @@ function blox_helper__build_block() { local result="" - result+="%F{${color}}" - result+="${prefix}${contents}${suffix}"; - result+="%f" + result+="%F{${color}}${prefix}" + result+="${contents}%f"; + result+="%F{${color}}${suffix}%f" echo -n "$result" }