66 lines
1.5 KiB
Bash
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
|