Add selectable PS1 styles
- Implement 5 bold styles and style config - Prompt for style selection in installers
This commit is contained in:
@@ -89,6 +89,34 @@ _ps1_season() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Style selection (aurora/neon/forge/circuit/mono)
|
||||
# PS1_STYLE=aurora|neon|forge|circuit|mono
|
||||
# Also reads config from /etc/ps1-style or ~/.config/ps1/style
|
||||
_ps1_style_config() {
|
||||
local cfg=""
|
||||
if [[ -r /etc/ps1-style ]]; then
|
||||
cfg="/etc/ps1-style"
|
||||
elif [[ -r "$HOME/.config/ps1/style" ]]; then
|
||||
cfg="$HOME/.config/ps1/style"
|
||||
fi
|
||||
|
||||
if [[ -n "$cfg" ]]; then
|
||||
while IFS='=' read -r k v; do
|
||||
k="${k//[[:space:]]/}"
|
||||
v="${v//[[:space:]]/}"
|
||||
case "$k" in
|
||||
PS1_STYLE) export PS1_STYLE="$v" ;;
|
||||
esac
|
||||
done < "$cfg"
|
||||
fi
|
||||
}
|
||||
|
||||
_ps1_style() {
|
||||
_ps1_style_config
|
||||
local style="${PS1_STYLE:-aurora}"
|
||||
echo "$style"
|
||||
}
|
||||
|
||||
# Time-based emoji with seasonal accents (Europe/Oslo)
|
||||
_ps1_pick_icon() {
|
||||
local list_name="$1"
|
||||
@@ -182,6 +210,7 @@ __PS1_PATH=""
|
||||
__PS1_STATUS=0
|
||||
__PS1_USE_NF=0
|
||||
__PS1_SEASON="winter"
|
||||
__PS1_STYLE="aurora"
|
||||
|
||||
_ps1_set_prompt() {
|
||||
local RST="\[\e[0m\]"
|
||||
@@ -244,17 +273,68 @@ _ps1_set_prompt() {
|
||||
prompt_sym="${BAD}${BOLD}➜${NOBOLD}${RST}"
|
||||
fi
|
||||
|
||||
# Keep order: date time user | host path, newline, then prompt
|
||||
PS1="\
|
||||
local style="${__PS1_STYLE:-aurora}"
|
||||
local L1="\\d \\A \\u"
|
||||
local L_HOST="@\\h"
|
||||
|
||||
case "$style" in
|
||||
neon)
|
||||
local N1_BG="\[\e[48;5;201m\]"
|
||||
local N1_FG="\[\e[38;5;255m\]"
|
||||
local N2_BG="\[\e[48;5;45m\]"
|
||||
local N2_FG="\[\e[38;5;16m\]"
|
||||
local N_PATH_FG="\[\e[38;5;16m\]"
|
||||
local N_FRAME="\[\e[38;5;199m\]"
|
||||
PS1="\
|
||||
${N_FRAME}╭─${RST}\
|
||||
${N1_BG}${N1_FG}${left} ${BOLD}\\u${NOBOLD} \\d \\A ${RST}${N1_BG}${N2_BG}${N2_FG}${sep}${RST}\
|
||||
${N2_BG}${N2_FG} ${L_HOST} ${N_PATH_FG}${__PS1_PATH}${RST}${N2_BG}${N2_FG}${right}${RST}\
|
||||
\n${N_FRAME}╰── ${RST}${prompt_sym} ${__PS1_SYM} "
|
||||
;;
|
||||
forge)
|
||||
local F1_BG="\[\e[48;5;94m\]"
|
||||
local F1_FG="\[\e[38;5;230m\]"
|
||||
local F2_BG="\[\e[48;5;166m\]"
|
||||
local F2_FG="\[\e[38;5;231m\]"
|
||||
local F_PATH_FG="\[\e[38;5;224m\]"
|
||||
local F_FRAME="\[\e[38;5;130m\]"
|
||||
PS1="\
|
||||
${F_FRAME}╭─${RST}\
|
||||
${F1_BG}${F1_FG}${left} ${BOLD}${L1}${NOBOLD} ${RST}${F1_BG}${F2_BG}${F2_FG}${sep}${RST}\
|
||||
${F2_BG}${F2_FG} ${L_HOST} ${F_PATH_FG}${__PS1_PATH}${RST}${F2_BG}${F2_FG}${right}${RST}\
|
||||
\n${F_FRAME}╰── ${RST}${prompt_sym} ${__PS1_SYM} "
|
||||
;;
|
||||
circuit)
|
||||
local C_FG="\[\e[38;5;46m\]"
|
||||
local C_DIM="\[\e[38;5;22m\]"
|
||||
local C_PATH="\[\e[38;5;120m\]"
|
||||
PS1="\
|
||||
${C_DIM}┏━${RST}${C_FG}[${BOLD}\\u${NOBOLD} ${RST}${C_FG}\\A${RST}${C_DIM}]${RST}\
|
||||
${C_DIM}━${RST}${C_FG}${L_HOST}${RST} ${C_PATH}${__PS1_PATH}${RST}\
|
||||
\n${C_DIM}┗━${RST}${prompt_sym} ${__PS1_SYM} "
|
||||
;;
|
||||
mono)
|
||||
local M_FG="\[\e[38;5;250m\]"
|
||||
local M_DIM="\[\e[38;5;240m\]"
|
||||
PS1="\
|
||||
${M_FG}⟦${L1}⟧ ${M_DIM}${L_HOST} ${M_FG}${__PS1_PATH}${RST}\
|
||||
\n${M_DIM}└─${RST}${prompt_sym} ${__PS1_SYM} "
|
||||
;;
|
||||
*)
|
||||
# aurora (default)
|
||||
PS1="\
|
||||
${FRAME}╭─${RST}\
|
||||
${Z1_BG}${Z1_FG}${left} \\d \\A \\u ${RST}${Z1_BG}${Z2_BG}${Z2_FG}${sep}${RST}\
|
||||
${Z2_BG}${Z2_FG} @\\h ${PATH_FG}${__PS1_PATH}${RST}${Z2_BG}${Z2_FG}${right}${RST}\
|
||||
${Z1_BG}${Z1_FG}${left} ${L1} ${RST}${Z1_BG}${Z2_BG}${Z2_FG}${sep}${RST}\
|
||||
${Z2_BG}${Z2_FG} ${L_HOST} ${PATH_FG}${__PS1_PATH}${RST}${Z2_BG}${Z2_FG}${right}${RST}\
|
||||
\n${FRAME}╰── ${RST}${prompt_sym} ${__PS1_SYM} "
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
_ps1_update() {
|
||||
__PS1_STATUS=$?
|
||||
__PS1_SEASON="$(_ps1_season)"
|
||||
__PS1_STYLE="$(_ps1_style)"
|
||||
__PS1_SYM="$(_ps1_symbol)"
|
||||
__PS1_PATH="$(_ps1_path)"
|
||||
if _ps1_has_nf; then __PS1_USE_NF=1; else __PS1_USE_NF=0; fi
|
||||
|
||||
Reference in New Issue
Block a user