Add seasonal palettes and selection prompts
- Implement dynamic/static season support in shared PS1 - Add season selection prompts to Linux and macOS installers
This commit is contained in:
@@ -37,6 +37,58 @@ _ps1_has_nf() {
|
||||
return 1
|
||||
}
|
||||
|
||||
# Season selection (dynamic or static)
|
||||
# PS1_SEASON_MODE=dynamic|static
|
||||
# PS1_SEASON= winter|spring|summer|autumn
|
||||
# Also reads config from /etc/ps1-season or ~/.config/ps1/season
|
||||
_ps1_season_config() {
|
||||
local cfg=""
|
||||
if [[ -r /etc/ps1-season ]]; then
|
||||
cfg="/etc/ps1-season"
|
||||
elif [[ -r "$HOME/.config/ps1/season" ]]; then
|
||||
cfg="$HOME/.config/ps1/season"
|
||||
fi
|
||||
|
||||
if [[ -n "$cfg" ]]; then
|
||||
while IFS='=' read -r k v; do
|
||||
k="${k//[[:space:]]/}"
|
||||
v="${v//[[:space:]]/}"
|
||||
case "$k" in
|
||||
PS1_SEASON_MODE) export PS1_SEASON_MODE="$v" ;;
|
||||
PS1_SEASON) export PS1_SEASON="$v" ;;
|
||||
esac
|
||||
done < "$cfg"
|
||||
fi
|
||||
}
|
||||
|
||||
_ps1_season_dynamic() {
|
||||
local mm dd m d
|
||||
mm=$(TZ=Europe/Oslo date +%m); dd=$(TZ=Europe/Oslo date +%d)
|
||||
m=$((10#$mm)); d=$((10#$dd))
|
||||
|
||||
if (( m >= 3 && m <= 5 )); then
|
||||
echo "spring"
|
||||
elif (( m >= 6 && m <= 8 )); then
|
||||
echo "summer"
|
||||
elif (( m == 9 || m == 10 || (m == 11 && d < 15) )); then
|
||||
echo "autumn"
|
||||
else
|
||||
echo "winter"
|
||||
fi
|
||||
}
|
||||
|
||||
_ps1_season() {
|
||||
_ps1_season_config
|
||||
local mode="${PS1_SEASON_MODE:-dynamic}"
|
||||
local season="${PS1_SEASON:-}"
|
||||
|
||||
if [[ "$mode" == "static" && -n "$season" ]]; then
|
||||
echo "$season"
|
||||
else
|
||||
_ps1_season_dynamic
|
||||
fi
|
||||
}
|
||||
|
||||
# Time-based emoji (Europe/Oslo)
|
||||
_ps1_symbol() {
|
||||
local hh mm h m
|
||||
@@ -73,22 +125,48 @@ __PS1_SYM=""
|
||||
__PS1_PATH=""
|
||||
__PS1_STATUS=0
|
||||
__PS1_USE_NF=0
|
||||
__PS1_SEASON="winter"
|
||||
|
||||
_ps1_set_prompt() {
|
||||
local RST="\[\e[0m\]"
|
||||
|
||||
# Two-zone palette
|
||||
# Zone 1: gray-blue pastel (date/time/user)
|
||||
local Z1_BG="\[\e[48;5;61m\]"
|
||||
local Z1_FG="\[\e[38;5;255m\]"
|
||||
|
||||
# Zone 2: turquoise / cool green (host/path)
|
||||
local Z2_BG="\[\e[48;5;37m\]"
|
||||
local Z2_FG="\[\e[38;5;255m\]"
|
||||
local PATH_FG="\[\e[38;5;194m\]"
|
||||
|
||||
# Frame
|
||||
local FRAME="\[\e[38;5;60m\]"
|
||||
# Seasonal palettes (Z1 is darker than Z2)
|
||||
local Z1_BG Z1_FG Z2_BG Z2_FG PATH_FG FRAME
|
||||
case "$__PS1_SEASON" in
|
||||
spring)
|
||||
Z1_BG="\[\e[48;5;71m\]"
|
||||
Z1_FG="\[\e[38;5;255m\]"
|
||||
Z2_BG="\[\e[48;5;120m\]"
|
||||
Z2_FG="\[\e[38;5;255m\]"
|
||||
PATH_FG="\[\e[38;5;193m\]"
|
||||
FRAME="\[\e[38;5;65m\]"
|
||||
;;
|
||||
summer)
|
||||
Z1_BG="\[\e[48;5;142m\]"
|
||||
Z1_FG="\[\e[38;5;255m\]"
|
||||
Z2_BG="\[\e[48;5;214m\]"
|
||||
Z2_FG="\[\e[38;5;0m\]"
|
||||
PATH_FG="\[\e[38;5;223m\]"
|
||||
FRAME="\[\e[38;5;130m\]"
|
||||
;;
|
||||
autumn)
|
||||
Z1_BG="\[\e[48;5;95m\]"
|
||||
Z1_FG="\[\e[38;5;255m\]"
|
||||
Z2_BG="\[\e[48;5;173m\]"
|
||||
Z2_FG="\[\e[38;5;255m\]"
|
||||
PATH_FG="\[\e[38;5;223m\]"
|
||||
FRAME="\[\e[38;5;95m\]"
|
||||
;;
|
||||
*)
|
||||
# winter (default)
|
||||
Z1_BG="\[\e[48;5;61m\]"
|
||||
Z1_FG="\[\e[38;5;255m\]"
|
||||
Z2_BG="\[\e[48;5;37m\]"
|
||||
Z2_FG="\[\e[38;5;255m\]"
|
||||
PATH_FG="\[\e[38;5;194m\]"
|
||||
FRAME="\[\e[38;5;60m\]"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Status colors
|
||||
local OK="\[\e[38;5;76m\]"
|
||||
@@ -122,6 +200,7 @@ _ps1_update() {
|
||||
__PS1_STATUS=$?
|
||||
__PS1_SYM="$(_ps1_symbol)"
|
||||
__PS1_PATH="$(_ps1_path)"
|
||||
__PS1_SEASON="$(_ps1_season)"
|
||||
if _ps1_has_nf; then __PS1_USE_NF=1; else __PS1_USE_NF=0; fi
|
||||
_ps1_set_prompt
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user