home/.zsh/themes/spaceship-prompt/sections/docker_compose.zsh

70 lines
2.6 KiB
Bash
Raw Normal View History

2023-09-06 14:03:56 +02:00
#
# Docker Compose
#
# Compose is a tool for defining and running multi-container Docker applications.
# Link: https://docs.docker.com/compose/
# ------------------------------------------------------------------------------
# Configuration
# ------------------------------------------------------------------------------
SPACESHIP_DOCKER_COMPOSE_SHOW="${SPACESHIP_DOCKER_COMPOSE_SHOW=true}"
SPACESHIP_DOCKER_COMPOSE_ASYNC="${SPACESHIP_DOCKER_COMPOSE_ASYNC=true}"
SPACESHIP_DOCKER_COMPOSE_PREFIX="${SPACESHIP_DOCKER_COMPOSE_PREFIX="runs "}"
SPACESHIP_DOCKER_COMPOSE_SUFFIX="${SPACESHIP_DOCKER_COMPOSE_SUFFIX="$SPACESHIP_PROMPT_DEFAULT_SUFFIX"}"
SPACESHIP_DOCKER_COMPOSE_SYMBOL="${SPACESHIP_DOCKER_COMPOSE_SYMBOL="🐙 "}"
SPACESHIP_DOCKER_COMPOSE_COLOR="${SPACESHIP_DOCKER_COMPOSE_COLOR="cyan"}"
SPACESHIP_DOCKER_COMPOSE_COLOR_UP="${SPACESHIP_DOCKER_COMPOSE_COLOR_UP="green"}"
SPACESHIP_DOCKER_COMPOSE_COLOR_DOWN="${SPACESHIP_DOCKER_COMPOSE_COLOR_DOWN="red"}"
SPACESHIP_DOCKER_COMPOSE_COLOR_PAUSED="${SPACESHIP_DOCKER_COMPOSE_COLOR_PAUSED="yellow"}"
# ------------------------------------------------------------------------------
# Utils
# ------------------------------------------------------------------------------
spaceship_docker_compose::paint() {
local color="$1" text="$2"
echo -n "%{%F{$color}%}$text%{%f%}"
}
# ------------------------------------------------------------------------------
# Section
# ------------------------------------------------------------------------------
spaceship_docker_compose() {
[[ $SPACESHIP_DOCKER_COMPOSE_SHOW == false ]] && return
spaceship::exists docker-compose || return
spaceship::upsearch -s 'docker-compose.y*ml' || return
local containers="$(docker-compose ps 2>/dev/null | tail -n+2)"
[[ -n "$containers" ]] || return
local statuses=""
while IFS= read -r line; do
local letter_position=$(echo $line | awk 'match($0,"_"){print RSTART}')
local letter=$(echo ${line:$letter:1} | tr '[:lower:]' '[:upper:]')
local color=""
[[ -z "$letter" ]] && continue
if [[ "$line" == *"Up"* ]] || [[ "$line" == *"running"* ]]; then
color="$SPACESHIP_DOCKER_COMPOSE_COLOR_UP"
elif [[ "$line" == *"Paused"* ]] || [[ "$line" == *"paused"* ]]; then
color="$SPACESHIP_DOCKER_COMPOSE_COLOR_PAUSED"
else
color="$SPACESHIP_DOCKER_COMPOSE_COLOR_DOWN"
fi
statuses+="$(spaceship_docker_compose::paint $color $letter)"
done <<< "$containers"
spaceship::section \
--color "$SPACESHIP_DOCKER_COMPOSE_COLOR" \
--prefix "$SPACESHIP_DOCKER_COMPOSE_PREFIX" \
--suffix "$SPACESHIP_DOCKER_COMPOSE_SUFFIX" \
--symbol "$SPACESHIP_DOCKER_COMPOSE_SYMBOL" \
"$statuses"
}