Skip to content

Commit

Permalink
Added blocks: docker kube netns openstack
Browse files Browse the repository at this point in the history
  • Loading branch information
jcosmao authored and julien.cosmao committed Apr 22, 2024
1 parent 936389e commit d05c018
Show file tree
Hide file tree
Showing 14 changed files with 189 additions and 44 deletions.
5 changes: 5 additions & 0 deletions blox.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ 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/blocks/terraform.zsh"

source "$__BLOX_ROOT/src/title.zsh"
source "$__BLOX_ROOT/src/segments.zsh"
Expand Down
2 changes: 1 addition & 1 deletion src/blocks/bgjobs.zsh
Original file line number Diff line number Diff line change
@@ -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}"

# ---------------------------------------------
Expand Down
16 changes: 16 additions & 0 deletions src/blocks/docker.zsh
Original file line number Diff line number Diff line change
@@ -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}"
)}
18 changes: 4 additions & 14 deletions src/blocks/git.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -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)')
Expand Down Expand Up @@ -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)"
Expand All @@ -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}"
Expand Down
25 changes: 25 additions & 0 deletions src/blocks/kube.zsh
Original file line number Diff line number Diff line change
@@ -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 | tr -d '"' | grep -oPm 1 'current-context: \K.+' 2> /dev/null)

if [[ -n $KUBENS ]]; then
kubens=$KUBENS
namespace_color=108
else
kubens=$(cat $KUBECONFIG | tr -d '"' | sed -n "/- context:/,/\s*name: $kube_context/p" | 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"
)}
16 changes: 16 additions & 0 deletions src/blocks/netns.zsh
Original file line number Diff line number Diff line change
@@ -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"
)}
2 changes: 1 addition & 1 deletion src/blocks/nodejs.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ function blox_block__nodejs() {
return
fi

[[ -f "$(pwd)/package.json" || -d "$(pwd)/node_modules" || -n *.(js|jsx|ts|tsx)(#qN^/) ]] \
[[ -f "$(pwd)/package.json" || -d "$(pwd)/node_modules" || $(ls | grep -Pc '.*\.(js|jsx|ts|tsx)$') > 0 ]] \
|| return

blox_helper__exists "node" \
Expand Down
27 changes: 27 additions & 0 deletions src/blocks/openstack.zsh
Original file line number Diff line number Diff line change
@@ -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"
}
19 changes: 14 additions & 5 deletions src/blocks/pyenv.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,32 @@
# Pyenv block configurations

BLOX_BLOCK__PYENV_COLOR="${BLOX_BLOCK__PYENV_COLOR:-green}"
BLOX_BLOCK__PYENV_SYMBOL="${BLOX_BLOCK__PYENV_SYMBOL:-}"
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)}
[[ $pyenv_version = system ]] && unset pyenv_version
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}"
}

function blox_pyenv__has_python_known_files() {
ls -a | grep -Pq '^(.*\.py|pyproject.toml|.*requirements.txt|tox.ini|.python-version)$'
return $?
}

# ---------------------------------------------

function blox_block__pyenv() {
[[ -n $PYENV_ROOT ]] || return
blox_pyenv__has_python_known_files || return

python_version=$(blox_block__pyenv_helper__get_version)

Expand Down
18 changes: 18 additions & 0 deletions src/blocks/terraform.zsh
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# ---------------------------------------------
# TERRAFORM block configurations

BLOX_BLOCK__TERRAFORM_COLOR="${BLOX_BLOCK__TERRAFORM_COLOR:-135}"
BLOX_BLOCK__TERRAFORM_SYMBOL="${BLOX_BLOCK__TERRAFORM_SYMBOL:-󱁢}"

# ---------------------------------------------

function blox_block__terraform() {
which terraform &> /dev/null || return
ls | grep -Pq '.*.(tf|tf.json)$' || return

if [[ -n $TF_WORKSPACE ]]; then
blox_helper__build_block \
"${BLOX_BLOCK__TERRAFORM_COLOR}" \
" ${BLOX_BLOCK__TERRAFORM_SYMBOL} ${TF_WORKSPACE}"
fi
}
2 changes: 1 addition & 1 deletion src/blocks/virtualenv.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# Virtualenv block configurations

BLOX_BLOCK__VIRTUALENV_COLOR="${BLOX_BLOCK__VIRTUALENV_COLOR:-green}"
BLOX_BLOCK__VIRTUALENV_SYMBOL="${BLOX_BLOCK__VIRTUALENV_SYMBOL:-}"
BLOX_BLOCK__VIRTUALENV_SYMBOL="${BLOX_BLOCK__VIRTUALENV_SYMBOL:-󰌠}"

# ---------------------------------------------

Expand Down
37 changes: 30 additions & 7 deletions src/render.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,40 @@ function blox_hook__render() {
[[ -n "$BLOX_CONF__PROMPT_PREFIX" ]] \
&& echo -ne "$BLOX_CONF__PROMPT_PREFIX"

# Segments
upper_left="$(blox_helper__render_segment $BLOX_SEG__UPPER_LEFT)"
upper_right="$(blox_helper__render_segment $BLOX_SEG__UPPER_RIGHT)"
[[ $BLOX_DEBUG = 1 ]] && start=$(($(date +%s%N)/1000000))

# build block in // using zargs
# https://stackoverflow.com/a/51549244
autoload -Uz zargs
array=()
all_args=(
upper_left "$BLOX_SEG__UPPER_LEFT"
upper_right "$BLOX_SEG__UPPER_RIGHT"
lower_left "$BLOX_SEG__LOWER_LEFT"
lower_right "$BLOX_SEG__LOWER_RIGHT"
)
results=("${(@f)"$(zargs -P4 -n2 -- ${all_args[@]} -- blox_helper__render_segment)"}")

for r in ${results[@]}; do
name=$(echo $r | cut -d: -f1)
segment=$(echo $r | cut -d: -f2-)
[[ $name = upper_left ]] && upper_left="$segment"
[[ $name = upper_right ]] && upper_right="$segment"
if [[ $BLOX_CONF__ONELINE == false ]]; then
[[ $name = lower_left ]] && lower_left="$segment"
[[ $name = lower_right ]] && lower_right="$segment"
fi
done

if [[ $BLOX_CONF__ONELINE == false ]]; then
lower_left="$(blox_helper__render_segment $BLOX_SEG__LOWER_LEFT)"
lower_right="$(blox_helper__render_segment $BLOX_SEG__LOWER_RIGHT)"

spacing="$(blox_helper__calculate_spaces ${upper_left} ${upper_right})"
fi

if [[ $BLOX_DEBUG = 1 ]]; then
finish=$(($(date +%s%N)/1000000))
BLOX_BUILD_TIME=" (DEBUG prompt build time: $(( finish - start )) ms)"
fi

# In oneline mode, we set $PROMPT to the
# upper left segment and $RPROMPT to the upper
# right. In multiline mode, $RPROMPT goes to the bottom
Expand All @@ -86,7 +109,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="${BLOX_BUILD_TIME}${lower_left} "
fi

# Lower right prompt
Expand Down
34 changes: 24 additions & 10 deletions src/segments.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -7,31 +7,45 @@ function blox_helper__render_block() {
local block_func="blox_block__${block}"

if command -v "$block_func" &> /dev/null; then
echo "$(${block_func})"
echo "${block}:$(${block_func})"
else
# Support for older versions of blox, where the block render function name
# would be the same as the block name itself.
echo $(${block})
echo "${block}:$(${block})"
fi
}

# Build a given segment
function blox_helper__render_segment() {
segment_name=$1; shift

# For some reason, arrays cannot be assigned in typeset expressions in older versions of zsh.
local blocks; blocks=( `echo $@` )
local segment=""
typeset -A block_index=()
local i=1
for b in ${blocks[@]}; do
block_index[$b]=$i
i=$((i+1))
done

local segment=()

# build block in // using zargs
# https://stackoverflow.com/a/51549244
autoload -Uz zargs
results=()
results=("${(@f)"$(zargs -P10 -n1 -- ${blocks[@]} -- blox_helper__render_block)"}")

for block in ${blocks[@]}; do
contents="$(blox_helper__render_block ${block})"
for r in "${results[@]}"; do

if [[ -n "$contents" ]]; then
[[ -n "$segment" ]] \
&& segment+="$BLOX_CONF__BLOCK_SEPARATOR"
block=$(echo $r | cut -d: -f1)
result=$(echo $r | cut -d: -f2-)

segment+="$contents"
if [[ -n $result ]]; then
[[ ${#segment} > 0 ]] && result+="$BLOX_CONF__BLOCK_SEPARATOR"
segment[$block_index[$block]]="$result"
fi
done

echo $segment
echo ${segment_name}:$(for s in ${segment[@]}; do echo $s; done)
}
12 changes: 7 additions & 5 deletions src/utils.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,16 @@ function blox_helper__exists() {
function blox_helper__build_block() {
local -r color="$1"
local -r contents="$2"
local -r prefix="${3:-$BLOX_CONF__BLOCK_PREFIX}"
local -r suffix="${4:-$BLOX_CONF__BLOCK_SUFFIX}"
local prefix="${3:-$BLOX_CONF__BLOCK_PREFIX}"
local suffix="${4:-$BLOX_CONF__BLOCK_SUFFIX}"
[[ $prefix = 'null' ]] && unset prefix
[[ $suffix = 'null' ]] && unset suffix

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"
}

0 comments on commit d05c018

Please sign in to comment.