Contest mode layout and prompt flow
- Add contest layout selection and config - Default PS1 mode to contest option
This commit is contained in:
@@ -27,6 +27,7 @@ season_mode="dynamic"
|
|||||||
season_choice=""
|
season_choice=""
|
||||||
style_choice="aurora"
|
style_choice="aurora"
|
||||||
style_pack="standard"
|
style_pack="standard"
|
||||||
|
contest_layout="day-time-user"
|
||||||
if [[ -t 0 ]]; then
|
if [[ -t 0 ]]; then
|
||||||
echo "Install options:"
|
echo "Install options:"
|
||||||
echo " 1) PS1 only"
|
echo " 1) PS1 only"
|
||||||
@@ -66,14 +67,27 @@ if [[ -t 0 ]]; then
|
|||||||
|
|
||||||
style_pack="standard"
|
style_pack="standard"
|
||||||
;;
|
;;
|
||||||
""|2)
|
2)
|
||||||
season_mode="dynamic"
|
season_mode="dynamic"
|
||||||
style_pack="standard"
|
style_pack="standard"
|
||||||
;;
|
;;
|
||||||
3)
|
""|3)
|
||||||
season_mode="static"
|
season_mode="static"
|
||||||
style_pack="contest"
|
style_pack="contest"
|
||||||
season_choice="winter"
|
contest_layout="day-time-user"
|
||||||
|
echo "Contest layout order:"
|
||||||
|
echo " 1) day-time-user"
|
||||||
|
echo " 2) user-time"
|
||||||
|
echo " 3) time-user"
|
||||||
|
echo " 4) day-time"
|
||||||
|
read -r -p "Choose [1]: " layout_pick
|
||||||
|
case "${layout_pick}" in
|
||||||
|
2) contest_layout="user-time" ;;
|
||||||
|
3) contest_layout="time-user" ;;
|
||||||
|
4) contest_layout="day-time" ;;
|
||||||
|
""|1) contest_layout="day-time-user" ;;
|
||||||
|
*) echo "Invalid choice, using day-time-user."; contest_layout="day-time-user" ;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid choice, using dynamic."
|
echo "Invalid choice, using dynamic."
|
||||||
@@ -176,7 +190,13 @@ if [[ "$install_ps1" -eq 1 ]]; then
|
|||||||
} > /etc/ps1-season
|
} > /etc/ps1-season
|
||||||
chmod 0644 /etc/ps1-season
|
chmod 0644 /etc/ps1-season
|
||||||
|
|
||||||
printf 'PS1_STYLE=%s\n' "$style_choice" > /etc/ps1-style
|
{
|
||||||
|
printf 'PS1_STYLE=%s\n' "$style_choice"
|
||||||
|
printf 'PS1_STYLE_PACK=%s\n' "$style_pack"
|
||||||
|
if [[ "$style_pack" == "contest" ]]; then
|
||||||
|
printf 'PS1_CONTEST_LAYOUT=%s\n' "$contest_layout"
|
||||||
|
fi
|
||||||
|
} > /etc/ps1-style
|
||||||
chmod 0644 /etc/ps1-style
|
chmod 0644 /etc/ps1-style
|
||||||
else
|
else
|
||||||
rm -f "$DST_PS1"
|
rm -f "$DST_PS1"
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ MARKER_END="# <<< user ps1 (managed) <<<"
|
|||||||
season_mode="dynamic"
|
season_mode="dynamic"
|
||||||
season_choice=""
|
season_choice=""
|
||||||
style_choice="aurora"
|
style_choice="aurora"
|
||||||
|
contest_layout="day-time-user"
|
||||||
if [[ -t 0 ]]; then
|
if [[ -t 0 ]]; then
|
||||||
style_pack="standard"
|
style_pack="standard"
|
||||||
echo "PS1 mode:"
|
echo "PS1 mode:"
|
||||||
@@ -42,14 +43,27 @@ if [[ -t 0 ]]; then
|
|||||||
|
|
||||||
style_pack="standard"
|
style_pack="standard"
|
||||||
;;
|
;;
|
||||||
""|2)
|
2)
|
||||||
season_mode="dynamic"
|
season_mode="dynamic"
|
||||||
style_pack="standard"
|
style_pack="standard"
|
||||||
;;
|
;;
|
||||||
3)
|
""|3)
|
||||||
season_mode="static"
|
season_mode="static"
|
||||||
style_pack="contest"
|
style_pack="contest"
|
||||||
season_choice="winter"
|
contest_layout="day-time-user"
|
||||||
|
echo "Contest layout order:"
|
||||||
|
echo " 1) day-time-user"
|
||||||
|
echo " 2) user-time"
|
||||||
|
echo " 3) time-user"
|
||||||
|
echo " 4) day-time"
|
||||||
|
read -r -p "Choose [1]: " layout_pick
|
||||||
|
case "${layout_pick}" in
|
||||||
|
2) contest_layout="user-time" ;;
|
||||||
|
3) contest_layout="time-user" ;;
|
||||||
|
4) contest_layout="day-time" ;;
|
||||||
|
""|1) contest_layout="day-time-user" ;;
|
||||||
|
*) echo "Invalid choice, using day-time-user."; contest_layout="day-time-user" ;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Invalid choice, using dynamic."
|
echo "Invalid choice, using dynamic."
|
||||||
@@ -97,7 +111,13 @@ chmod 0644 "$DST_PS1"
|
|||||||
} > "$SEASON_FILE"
|
} > "$SEASON_FILE"
|
||||||
chmod 0644 "$SEASON_FILE"
|
chmod 0644 "$SEASON_FILE"
|
||||||
|
|
||||||
printf 'PS1_STYLE=%s\n' "$style_choice" > "$STYLE_FILE"
|
{
|
||||||
|
printf 'PS1_STYLE=%s\n' "$style_choice"
|
||||||
|
printf 'PS1_STYLE_PACK=%s\n' "$style_pack"
|
||||||
|
if [[ "$style_pack" == "contest" ]]; then
|
||||||
|
printf 'PS1_CONTEST_LAYOUT=%s\n' "$contest_layout"
|
||||||
|
fi
|
||||||
|
} > "$STYLE_FILE"
|
||||||
chmod 0644 "$STYLE_FILE"
|
chmod 0644 "$STYLE_FILE"
|
||||||
|
|
||||||
add_source_block() {
|
add_source_block() {
|
||||||
|
|||||||
@@ -91,6 +91,8 @@ _ps1_season() {
|
|||||||
|
|
||||||
# Style selection (aurora/neon/forge/circuit/mono)
|
# Style selection (aurora/neon/forge/circuit/mono)
|
||||||
# PS1_STYLE=aurora|neon|forge|circuit|mono
|
# PS1_STYLE=aurora|neon|forge|circuit|mono
|
||||||
|
# PS1_STYLE_PACK=standard|contest
|
||||||
|
# PS1_CONTEST_LAYOUT=day-time-user|user-time|time-user|day-time
|
||||||
# Also reads config from /etc/ps1-style or ~/.config/ps1/style
|
# Also reads config from /etc/ps1-style or ~/.config/ps1/style
|
||||||
_ps1_style_config() {
|
_ps1_style_config() {
|
||||||
local cfg=""
|
local cfg=""
|
||||||
@@ -106,6 +108,8 @@ _ps1_style_config() {
|
|||||||
v="${v//[[:space:]]/}"
|
v="${v//[[:space:]]/}"
|
||||||
case "$k" in
|
case "$k" in
|
||||||
PS1_STYLE) export PS1_STYLE="$v" ;;
|
PS1_STYLE) export PS1_STYLE="$v" ;;
|
||||||
|
PS1_STYLE_PACK) export PS1_STYLE_PACK="$v" ;;
|
||||||
|
PS1_CONTEST_LAYOUT) export PS1_CONTEST_LAYOUT="$v" ;;
|
||||||
esac
|
esac
|
||||||
done < "$cfg"
|
done < "$cfg"
|
||||||
fi
|
fi
|
||||||
@@ -117,6 +121,18 @@ _ps1_style() {
|
|||||||
echo "$style"
|
echo "$style"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_ps1_style_pack() {
|
||||||
|
_ps1_style_config
|
||||||
|
local pack="${PS1_STYLE_PACK:-standard}"
|
||||||
|
echo "$pack"
|
||||||
|
}
|
||||||
|
|
||||||
|
_ps1_contest_layout() {
|
||||||
|
_ps1_style_config
|
||||||
|
local layout="${PS1_CONTEST_LAYOUT:-day-time-user}"
|
||||||
|
echo "$layout"
|
||||||
|
}
|
||||||
|
|
||||||
# Time-based emoji with seasonal accents (Europe/Oslo)
|
# Time-based emoji with seasonal accents (Europe/Oslo)
|
||||||
_ps1_pick_icon() {
|
_ps1_pick_icon() {
|
||||||
local list_name="$1"
|
local list_name="$1"
|
||||||
@@ -150,9 +166,17 @@ _ps1_symbol() {
|
|||||||
h=$((10#$hh)); m=$((10#$mm))
|
h=$((10#$hh)); m=$((10#$mm))
|
||||||
|
|
||||||
local season="${__PS1_SEASON:-winter}"
|
local season="${__PS1_SEASON:-winter}"
|
||||||
|
local pack="${__PS1_STYLE_PACK:-standard}"
|
||||||
|
local rot_season="${season}"
|
||||||
local sunrise coffee work evening night
|
local sunrise coffee work evening night
|
||||||
local -a sunrise_list work_list
|
local -a sunrise_list work_list
|
||||||
|
|
||||||
|
if [[ "$pack" == "contest" ]]; then
|
||||||
|
rot_season="winter"
|
||||||
|
sunrise_list=( "⚡️" "🛰️" "🧬" "🧠" )
|
||||||
|
work_list=( "🛠️" "💾" "🧪" "🧩" )
|
||||||
|
coffee="☕"; evening="🎛️"; night="🕶️"
|
||||||
|
else
|
||||||
case "$season" in
|
case "$season" in
|
||||||
spring)
|
spring)
|
||||||
sunrise_list=( "🌷" "🌱" "🐣" "🌤" )
|
sunrise_list=( "🌷" "🌱" "🐣" "🌤" )
|
||||||
@@ -175,9 +199,10 @@ _ps1_symbol() {
|
|||||||
coffee="☕"; evening="🌆"; night="🌙"
|
coffee="☕"; evening="🌆"; night="🌙"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
sunrise="$(_ps1_pick_icon sunrise_list "$season")"
|
sunrise="$(_ps1_pick_icon sunrise_list "$rot_season")"
|
||||||
work="$(_ps1_pick_icon work_list "$season")"
|
work="$(_ps1_pick_icon work_list "$rot_season")"
|
||||||
|
|
||||||
if (( h >= 5 && h <= 8 )); then echo "$sunrise"
|
if (( h >= 5 && h <= 8 )); then echo "$sunrise"
|
||||||
elif (( h >= 9 && h <= 10 )); then echo "$coffee"
|
elif (( h >= 9 && h <= 10 )); then echo "$coffee"
|
||||||
@@ -211,12 +236,22 @@ __PS1_STATUS=0
|
|||||||
__PS1_USE_NF=0
|
__PS1_USE_NF=0
|
||||||
__PS1_SEASON="winter"
|
__PS1_SEASON="winter"
|
||||||
__PS1_STYLE="aurora"
|
__PS1_STYLE="aurora"
|
||||||
|
__PS1_STYLE_PACK="standard"
|
||||||
|
__PS1_CONTEST_LAYOUT="day-time-user"
|
||||||
|
|
||||||
_ps1_set_prompt() {
|
_ps1_set_prompt() {
|
||||||
local RST="\[\e[0m\]"
|
local RST="\[\e[0m\]"
|
||||||
|
|
||||||
# Seasonal palettes (Z1 is darker than Z2)
|
# Seasonal palettes (Z1 is darker than Z2)
|
||||||
local Z1_BG Z1_FG Z2_BG Z2_FG PATH_FG FRAME
|
local Z1_BG Z1_FG Z2_BG Z2_FG PATH_FG FRAME
|
||||||
|
if [[ "$__PS1_STYLE_PACK" == "contest" ]]; then
|
||||||
|
Z1_BG="\[\e[48;5;24m\]"
|
||||||
|
Z1_FG="\[\e[38;5;255m\]"
|
||||||
|
Z2_BG="\[\e[48;5;31m\]"
|
||||||
|
Z2_FG="\[\e[38;5;255m\]"
|
||||||
|
PATH_FG="\[\e[38;5;51m\]"
|
||||||
|
FRAME="\[\e[38;5;23m\]"
|
||||||
|
else
|
||||||
case "$__PS1_SEASON" in
|
case "$__PS1_SEASON" in
|
||||||
spring)
|
spring)
|
||||||
Z1_BG="\[\e[48;5;71m\]"
|
Z1_BG="\[\e[48;5;71m\]"
|
||||||
@@ -252,6 +287,7 @@ _ps1_set_prompt() {
|
|||||||
FRAME="\[\e[38;5;60m\]"
|
FRAME="\[\e[38;5;60m\]"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
# Status colors
|
# Status colors
|
||||||
local OK="\[\e[38;5;76m\]"
|
local OK="\[\e[38;5;76m\]"
|
||||||
@@ -276,6 +312,23 @@ _ps1_set_prompt() {
|
|||||||
local style="${__PS1_STYLE:-aurora}"
|
local style="${__PS1_STYLE:-aurora}"
|
||||||
local L1="\\d \\A \\u"
|
local L1="\\d \\A \\u"
|
||||||
local L_HOST="@\\h"
|
local L_HOST="@\\h"
|
||||||
|
local PREFIX=""
|
||||||
|
local HOST_PART="${L_HOST}"
|
||||||
|
local PATH_PART="${__PS1_PATH}"
|
||||||
|
local PATH_SEP=" "
|
||||||
|
if [[ "$__PS1_STYLE_PACK" == "contest" ]]; then
|
||||||
|
local layout="${__PS1_CONTEST_LAYOUT:-day-time-user}"
|
||||||
|
case "$layout" in
|
||||||
|
user-time) L1="\\u \\A" ;;
|
||||||
|
time-user) L1="\\A \\u" ;;
|
||||||
|
day-time) L1="\\d \\A" ;;
|
||||||
|
*) L1="\\d \\A \\u" ;;
|
||||||
|
esac
|
||||||
|
HOST_PART="@\\h - ${__PS1_PATH}"
|
||||||
|
PATH_PART=""
|
||||||
|
PATH_SEP=""
|
||||||
|
PREFIX="\n"
|
||||||
|
fi
|
||||||
|
|
||||||
case "$style" in
|
case "$style" in
|
||||||
neon)
|
neon)
|
||||||
@@ -286,9 +339,9 @@ _ps1_set_prompt() {
|
|||||||
local N_PATH_FG="\[\e[38;5;16m\]"
|
local N_PATH_FG="\[\e[38;5;16m\]"
|
||||||
local N_FRAME="\[\e[38;5;199m\]"
|
local N_FRAME="\[\e[38;5;199m\]"
|
||||||
PS1="\
|
PS1="\
|
||||||
${N_FRAME}╭─${RST}\
|
${PREFIX}${N_FRAME}╭─${RST}\
|
||||||
${N1_BG}${N1_FG}${left} ${BOLD}\\u${NOBOLD} \\d \\A ${RST}${N1_BG}${N2_BG}${N2_FG}${sep}${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}\
|
${N2_BG}${N2_FG} ${HOST_PART}${PATH_SEP}${N_PATH_FG}${PATH_PART}${RST}${N2_BG}${N2_FG}${right}${RST}\
|
||||||
\n${N_FRAME}╰── ${RST}${prompt_sym} ${__PS1_SYM} "
|
\n${N_FRAME}╰── ${RST}${prompt_sym} ${__PS1_SYM} "
|
||||||
;;
|
;;
|
||||||
forge)
|
forge)
|
||||||
@@ -299,9 +352,9 @@ ${N2_BG}${N2_FG} ${L_HOST} ${N_PATH_FG}${__PS1_PATH}${RST}${N2_BG}${N2_FG}${righ
|
|||||||
local F_PATH_FG="\[\e[38;5;224m\]"
|
local F_PATH_FG="\[\e[38;5;224m\]"
|
||||||
local F_FRAME="\[\e[38;5;130m\]"
|
local F_FRAME="\[\e[38;5;130m\]"
|
||||||
PS1="\
|
PS1="\
|
||||||
${F_FRAME}╭─${RST}\
|
${PREFIX}${F_FRAME}╭─${RST}\
|
||||||
${F1_BG}${F1_FG}${left} ${BOLD}${L1}${NOBOLD} ${RST}${F1_BG}${F2_BG}${F2_FG}${sep}${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}\
|
${F2_BG}${F2_FG} ${HOST_PART}${PATH_SEP}${F_PATH_FG}${PATH_PART}${RST}${F2_BG}${F2_FG}${right}${RST}\
|
||||||
\n${F_FRAME}╰── ${RST}${prompt_sym} ${__PS1_SYM} "
|
\n${F_FRAME}╰── ${RST}${prompt_sym} ${__PS1_SYM} "
|
||||||
;;
|
;;
|
||||||
circuit)
|
circuit)
|
||||||
@@ -309,23 +362,23 @@ ${F2_BG}${F2_FG} ${L_HOST} ${F_PATH_FG}${__PS1_PATH}${RST}${F2_BG}${F2_FG}${righ
|
|||||||
local C_DIM="\[\e[38;5;22m\]"
|
local C_DIM="\[\e[38;5;22m\]"
|
||||||
local C_PATH="\[\e[38;5;120m\]"
|
local C_PATH="\[\e[38;5;120m\]"
|
||||||
PS1="\
|
PS1="\
|
||||||
${C_DIM}┏━${RST}${C_FG}[${BOLD}\\u${NOBOLD} ${RST}${C_FG}\\A${RST}${C_DIM}]${RST}\
|
${PREFIX}${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}\
|
${C_DIM}━${RST}${C_FG}${HOST_PART}${RST}${PATH_SEP}${C_PATH}${PATH_PART}${RST}\
|
||||||
\n${C_DIM}┗━${RST}${prompt_sym} ${__PS1_SYM} "
|
\n${C_DIM}┗━${RST}${prompt_sym} ${__PS1_SYM} "
|
||||||
;;
|
;;
|
||||||
mono)
|
mono)
|
||||||
local M_FG="\[\e[38;5;250m\]"
|
local M_FG="\[\e[38;5;250m\]"
|
||||||
local M_DIM="\[\e[38;5;240m\]"
|
local M_DIM="\[\e[38;5;240m\]"
|
||||||
PS1="\
|
PS1="\
|
||||||
${M_FG}⟦${L1}⟧ ${M_DIM}${L_HOST} ${M_FG}${__PS1_PATH}${RST}\
|
${PREFIX}${M_FG}⟦${L1}⟧ ${M_DIM}${HOST_PART}${PATH_SEP}${M_FG}${PATH_PART}${RST}\
|
||||||
\n${M_DIM}└─${RST}${prompt_sym} ${__PS1_SYM} "
|
\n${M_DIM}└─${RST}${prompt_sym} ${__PS1_SYM} "
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
# aurora (default)
|
# aurora (default)
|
||||||
PS1="\
|
PS1="\
|
||||||
${FRAME}╭─${RST}\
|
${PREFIX}${FRAME}╭─${RST}\
|
||||||
${Z1_BG}${Z1_FG}${left} ${L1} ${RST}${Z1_BG}${Z2_BG}${Z2_FG}${sep}${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}\
|
${Z2_BG}${Z2_FG} ${HOST_PART}${PATH_SEP}${PATH_FG}${PATH_PART}${RST}${Z2_BG}${Z2_FG}${right}${RST}\
|
||||||
\n${FRAME}╰── ${RST}${prompt_sym} ${__PS1_SYM} "
|
\n${FRAME}╰── ${RST}${prompt_sym} ${__PS1_SYM} "
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -334,6 +387,8 @@ ${Z2_BG}${Z2_FG} ${L_HOST} ${PATH_FG}${__PS1_PATH}${RST}${Z2_BG}${Z2_FG}${right}
|
|||||||
_ps1_update() {
|
_ps1_update() {
|
||||||
__PS1_STATUS=$?
|
__PS1_STATUS=$?
|
||||||
__PS1_SEASON="$(_ps1_season)"
|
__PS1_SEASON="$(_ps1_season)"
|
||||||
|
__PS1_STYLE_PACK="$(_ps1_style_pack)"
|
||||||
|
__PS1_CONTEST_LAYOUT="$(_ps1_contest_layout)"
|
||||||
__PS1_STYLE="$(_ps1_style)"
|
__PS1_STYLE="$(_ps1_style)"
|
||||||
__PS1_SYM="$(_ps1_symbol)"
|
__PS1_SYM="$(_ps1_symbol)"
|
||||||
__PS1_PATH="$(_ps1_path)"
|
__PS1_PATH="$(_ps1_path)"
|
||||||
|
|||||||
Reference in New Issue
Block a user