Files
ps1-craft/dotfiles/banner/banner.sh

66 lines
1.5 KiB
Bash

#!/usr/bin/env bash
# Banner module (global/user). Runs once per login session.
case "$-" in
*i*) ;;
*) return 0 ;;
esac
# Disable switch (per-user/per-shell)
# 1) env: DISABLE_GLOBAL_BANNER=1
# 2) file: ~/.config/ps1/disable-banner
if [[ "${DISABLE_GLOBAL_BANNER:-0}" == "1" ]]; then
return 0
fi
if [[ -f "$HOME/.config/ps1/disable-banner" ]]; then
return 0
fi
# Run banner only once per session
if [[ -n "${__BANNER_ALREADY_SHOWN:-}" ]]; then
return 0
fi
__BANNER_ALREADY_SHOWN=1
# Find tools (be defensive)
FIGLET="$(command -v figlet 2>/dev/null || true)"
LANDSCAPE="$(command -v landscape-sysinfo 2>/dev/null || true)"
# lolcat is often /usr/games/lolcat on Ubuntu
if [[ -x /usr/games/lolcat ]]; then
LOLCAT="/usr/games/lolcat"
else
LOLCAT="$(command -v lolcat 2>/dev/null || true)"
fi
HAVE_LOLCAT=0
if [[ -n "${LOLCAT:-}" ]]; then
HAVE_LOLCAT=1
fi
# Punchline source:
# - global file: /etc/ps1-punchline
# - fallback: "Hello"
PUNCHLINE="Hello"
if [[ -r /etc/ps1-punchline ]]; then
PUNCHLINE="$(head -n 1 /etc/ps1-punchline 2>/dev/null || echo "Hello")"
PUNCHLINE="${PUNCHLINE%%$'\r'}"
fi
# Print banner + sysinfo
if [[ -n "${FIGLET:-}" ]]; then
if [[ "$HAVE_LOLCAT" -eq 1 ]]; then
"$FIGLET" "$(hostname)" -c | "$LOLCAT"
"$FIGLET" -f digital "$PUNCHLINE" -c | "$LOLCAT"
if [[ -n "${LANDSCAPE:-}" ]]; then
"$LANDSCAPE" | "$LOLCAT"
fi
else
"$FIGLET" "$(hostname)" -c
"$FIGLET" -f digital "$PUNCHLINE" -c
if [[ -n "${LANDSCAPE:-}" ]]; then
"$LANDSCAPE"
fi
fi
fi