#!/usr/bin/env bash # PS1 module with Nerd Font fallback + disable switch # Designed for bash 3.2+ (macOS) and bash 4/5 (Linux) # Load this in interactive shells. case "$-" in *i*) ;; *) return 0 ;; esac # Disable switch (per-user/per-shell) # 1) env: DISABLE_GLOBAL_PS1=1 # 2) file: ~/.config/ps1/disable if [[ "${DISABLE_GLOBAL_PS1:-0}" == "1" ]]; then return 0 fi if [[ -f "$HOME/.config/ps1/disable" ]]; then return 0 fi # Force NF separators globally (rounded caps) unless ASCII is forced. export PS1_FORCE_NF=1 # Nerd Font detection (best-effort) + overrides # PS1_FORCE_ASCII=1 -> always fallback separators # PS1_FORCE_NF=1 -> always Nerd Font separators _ps1_has_nf() { if [[ "${PS1_FORCE_ASCII:-0}" == "1" ]]; then return 1; fi if [[ "${PS1_FORCE_NF:-0}" == "1" ]]; then return 0; fi # Linux/WSL: fontconfig often available if command -v fc-list >/dev/null 2>&1; then fc-list 2>/dev/null | grep -qi "Nerd Font" && return 0 fi # macOS: fontconfig often not present; default to fallback unless forced 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 } # Style selection (aurora/neon/forge/circuit/mono/git/hawolex) # PS1_STYLE=aurora|neon|forge|circuit|mono|git|hawolex # PS1_STYLE_PACK=standard|contest|holiday # PS1_CONTEST_LAYOUT=day-time-user|user-time|time-user|day-time # PS1_HOLIDAY=christmas|easter|halloween|valentine|thanksgiving|newyear # PS1_GIT=0|1 # 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" ;; PS1_STYLE_PACK) export PS1_STYLE_PACK="$v" ;; PS1_CONTEST_LAYOUT) export PS1_CONTEST_LAYOUT="$v" ;; PS1_HOLIDAY) export PS1_HOLIDAY="$v" ;; PS1_GIT) export PS1_GIT="$v" ;; esac done < "$cfg" fi } _ps1_style() { _ps1_style_config local style="${PS1_STYLE:-aurora}" 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" } _ps1_holiday() { _ps1_style_config local holiday="${PS1_HOLIDAY:-christmas}" echo "$holiday" } _ps1_git_enabled() { _ps1_style_config local v="${PS1_GIT:-0}" case "$v" in 1|y|Y|yes|YES|true|TRUE|on|ON) echo "1" ;; *) echo "0" ;; esac } _ps1_git_line_tail() { if [[ "$(_ps1_git_enabled)" == "1" ]]; then export GIT_PS1_SHOWDIRTYSTATE=1 export GIT_PS1_SHOWSTASHSTATE=1 export GIT_PS1_SHOWUNTRACKEDFILES=1 local info info="$(__git_capsule)" if [[ -n "$info" ]]; then printf "%s " "$info" return fi fi printf " " } # ---- Load Git prompt helper (best effort) ---- __try_source_git_prompt() { local candidates=( "/usr/share/git/completion/git-prompt.sh" "/usr/local/etc/bash_completion.d/git-prompt.sh" "/etc/bash_completion.d/git-prompt.sh" ) for f in "${candidates[@]}"; do [[ -r "$f" ]] && source "$f" && return 0 done return 1 } __try_source_git_prompt >/dev/null 2>&1 __git_capsule() { local info status="" local clean="โœจ" local dirty="๐Ÿ”จ" local staged="๐Ÿ“Œ" local untracked="๐Ÿงท" local stashed="๐Ÿ“ฆ" local has_ps1=0 if declare -F __git_ps1 >/dev/null 2>&1; then has_ps1=1 info="$(__git_ps1 "%s" 2>/dev/null)" if [[ -z "$info" ]]; then has_ps1=0 fi fi if [[ -z "$info" ]]; then if command -v git >/dev/null 2>&1; then info="$(git symbolic-ref --quiet --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null)" fi fi [[ -z "$info" ]] && return 0 if (( has_ps1 )); then if [[ "$info" == *"*"* ]]; then status+=" $dirty"; fi if [[ "$info" == *"+"* ]]; then status+=" $staged"; fi if [[ "$info" == *"%"* ]]; then status+=" $untracked"; fi if [[ "$info" == *"$"* ]]; then status+=" $stashed"; fi if [[ -z "$status" ]]; then status=" $clean"; fi info="${info//\%/}" info="${info//\*/}" info="${info//\+/}" info="${info//\$/}" fi info="$(printf "%s" "$info" | xargs)" printf " โŸฆ%sโŸง%s" "$info" "$status" } # Time-based emoji with seasonal accents (Europe/Oslo) _ps1_pick_icon() { local list_name="$1" local season="$2" local day local -a list local idx local offset=0 day=$(TZ=Europe/Oslo date +%j) case "$season" in spring) offset=11 ;; summer) offset=23 ;; autumn) offset=37 ;; christmas) offset=61 ;; easter) offset=73 ;; halloween) offset=97 ;; valentine) offset=109 ;; thanksgiving) offset=131 ;; newyear) offset=151 ;; hawolex) offset=173 ;; *) offset=0 ;; esac eval "list=(\"\${${list_name}[@]}\")" if ((${#list[@]} == 0)); then echo "" return fi idx=$(( (10#$day + offset) % ${#list[@]} )) echo "${list[$idx]}" } _ps1_symbol() { local hh mm h m hh=$(TZ=Europe/Oslo date +%H); mm=$(TZ=Europe/Oslo date +%M) h=$((10#$hh)); m=$((10#$mm)) local season="${__PS1_SEASON:-winter}" local pack="${__PS1_STYLE_PACK:-standard}" local holiday="${__PS1_HOLIDAY:-christmas}" local rot_season="${season}" local sunrise coffee work evening night local -a sunrise_list work_list if [[ "$__PS1_STYLE" == "hawolex" ]]; then rot_season="hawolex" sunrise_list=( "๐Ÿ’ป" "๐Ÿš—" "๐Ÿ”Š" "๐ŸŽฎ" ) work_list=( "๐ŸŽง" "๐Ÿ•น๏ธ" "๐Ÿ“Ÿ" "๐Ÿงฉ" ) coffee="โ˜•"; evening="๐ŸŒ†"; night="๐ŸŒ™" elif [[ "$pack" == "contest" ]]; then rot_season="winter" sunrise_list=( "โšก๏ธ" "๐Ÿ›ฐ๏ธ" "๐Ÿงฌ" "๐Ÿง " ) work_list=( "๐Ÿ› ๏ธ" "๐Ÿ’พ" "๐Ÿงช" "๐Ÿงฉ" ) coffee="โ˜•"; evening="๐ŸŽ›๏ธ"; night="๐Ÿ•ถ๏ธ" elif [[ "$pack" == "holiday" ]]; then rot_season="$holiday" case "$holiday" in christmas) sunrise_list=( "๐ŸŽ„" "๐ŸŽ…" "โ„๏ธ" "โ›„" ) work_list=( "๐ŸŽ" "๐Ÿงค" "๐Ÿงฃ" "๐ŸฆŒ" ) coffee="โ˜•"; evening="๐ŸŒŸ"; night="๐Ÿ•ฏ๏ธ" ;; easter) sunrise_list=( "๐Ÿฃ" "๐Ÿฅš" "๐ŸŒท" "๐ŸŒค" ) work_list=( "๐Ÿฐ" "๐ŸŒผ" "๐Ÿงบ" "๐Ÿซ" ) coffee="โ˜•"; evening="๐ŸŒ…"; night="๐ŸŒ™" ;; halloween) sunrise_list=( "๐ŸŽƒ" "๐Ÿฆ‡" "๐ŸŒ•" "๐Ÿ•ธ๏ธ" ) work_list=( "๐Ÿ‘ป" "๐Ÿ’€" "๐Ÿ•ฏ๏ธ" "๐Ÿงช" ) coffee="โ˜•"; evening="๐ŸŒ†"; night="๐Ÿ•ท๏ธ" ;; valentine) sunrise_list=( "๐Ÿ’–" "๐ŸŒน" "๐Ÿ’˜" "๐Ÿ’•" ) work_list=( "๐Ÿ’Œ" "๐Ÿซ" "๐Ÿ•Š๏ธ" "๐Ÿ’—" ) coffee="โ˜•"; evening="๐ŸŒ†"; night="๐ŸŒ™" ;; thanksgiving) sunrise_list=( "๐Ÿฆƒ" "๐Ÿ" "๐Ÿฅง" "๐Ÿ‚" ) work_list=( "๐Ÿฝ๏ธ" "๐ŸŒพ" "๐Ÿงบ" "๐Ÿฅ–" ) coffee="โ˜•"; evening="๐ŸŒ†"; night="๐ŸŒ™" ;; newyear) sunrise_list=( "๐ŸŽ†" "๐Ÿฅ‚" "๐ŸŽ‡" "โœจ" ) work_list=( "๐Ÿ—“๏ธ" "โณ" "๐Ÿš€" "โœจ" ) coffee="โ˜•"; evening="๐ŸŒ†"; night="๐ŸŒ™" ;; *) sunrise_list=( "๐ŸŽ‰" "โœจ" "๐ŸŽŠ" "๐ŸŒŸ" ) work_list=( "๐Ÿงฉ" "๐Ÿ› ๏ธ" "๐Ÿ’พ" "๐Ÿงช" ) coffee="โ˜•"; evening="๐ŸŒ†"; night="๐ŸŒ™" ;; esac else case "$season" in spring) sunrise_list=( "๐ŸŒท" "๐ŸŒฑ" "๐Ÿฃ" "๐ŸŒค" ) work_list=( "๐ŸŒฟ" "๐Ÿชด" "๐Ÿ" "๐ŸŒผ" ) coffee="โ˜•"; evening="๐ŸŒค"; night="๐ŸŒ™" ;; summer) sunrise_list=( "๐ŸŒž" "๐Ÿ–๏ธ" "๐ŸŒ…" "๐ŸŒค" ) work_list=( "๐Ÿ„" "๐Ÿ–๏ธ" "๐Ÿšค" "๐ŸŒด" ) coffee="๐Ÿงƒ"; evening="๐ŸŒ‡"; night="๐ŸŒ™" ;; autumn) sunrise_list=( "๐Ÿ" "๐Ÿ‚" "๐ŸŒซ๏ธ" "๐ŸŒฆ๏ธ" ) work_list=( "๐Ÿ‚" "๐Ÿ„" "๐ŸŽƒ" "๐Ÿชต" ) coffee="โ˜•"; evening="๐ŸŒ†"; night="๐ŸŒ™" ;; *) sunrise_list=( "๐Ÿ”๏ธ" "๐ŸŒจ๏ธ" "โ„๏ธ" "๐ŸŒŒ" ) work_list=( "๐ŸŽฟ" "โ›ท๏ธ" "๐Ÿ‚" "๐ŸงŠ" ) coffee="โ˜•"; evening="๐ŸŒ†"; night="๐ŸŒ™" ;; esac fi sunrise="$(_ps1_pick_icon sunrise_list "$rot_season")" work="$(_ps1_pick_icon work_list "$rot_season")" if (( h >= 5 && h <= 8 )); then echo "$sunrise" elif (( h >= 9 && h <= 10 )); then echo "$coffee" elif (( h == 11 && m < 30 )); then echo "๐Ÿฅช" elif (( (h == 11 && m >= 30) || (h >= 12 && h <= 15) )); then echo "$work" elif (( h == 16 )); then echo "๐Ÿฒ" elif (( h >= 17 && h <= 22 )); then echo "$evening" else echo "$night" fi } # Path shortening (keeps /home/user or /Users/user visible) # bash 3.2 safe _ps1_path() { local p="$PWD" local parts=() IFS='/' read -ra parts <<< "$p" if ((${#parts[@]} < 6)); then echo "$p"; return fi local n=${#parts[@]} echo "/${parts[1]}/${parts[2]}/โ€ฆ/${parts[$((n-2))]}/${parts[$((n-1))]}" } # Dynamic vars updated before each prompt __PS1_SYM="" __PS1_PATH="" __PS1_STATUS=0 __PS1_USE_NF=0 __PS1_SEASON="winter" __PS1_STYLE="aurora" __PS1_STYLE_PACK="standard" __PS1_CONTEST_LAYOUT="day-time-user" __PS1_HOLIDAY="christmas" __PS1_GIT=0 _ps1_set_prompt() { local RST="\[\e[0m\]" # Seasonal palettes (Z1 is darker than Z2) local Z1_BG Z1_FG Z2_BG Z2_FG Z3_BG Z4_BG PATH_FG FRAME local Z1_BG_CODE Z2_BG_CODE Z3_BG_CODE Z4_BG_CODE if [[ "$__PS1_STYLE_PACK" == "contest" ]]; then Z1_BG_CODE=24 Z2_BG_CODE=31 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;255m\]" PATH_FG="\[\e[38;5;51m\]" FRAME="\[\e[38;5;23m\]" elif [[ "$__PS1_STYLE_PACK" == "holiday" ]]; then case "$__PS1_HOLIDAY" in christmas) Z1_BG_CODE=52 Z2_BG_CODE=28 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;255m\]" PATH_FG="\[\e[38;5;194m\]" FRAME="\[\e[38;5;88m\]" ;; easter) Z1_BG_CODE=186 Z2_BG_CODE=150 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;16m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;16m\]" PATH_FG="\[\e[38;5;94m\]" FRAME="\[\e[38;5;143m\]" ;; halloween) Z1_BG_CODE=53 Z2_BG_CODE=166 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;16m\]" PATH_FG="\[\e[38;5;16m\]" FRAME="\[\e[38;5;89m\]" ;; valentine) Z1_BG_CODE=198 Z2_BG_CODE=205 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;255m\]" PATH_FG="\[\e[38;5;224m\]" FRAME="\[\e[38;5;162m\]" ;; thanksgiving) Z1_BG_CODE=94 Z2_BG_CODE=136 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;230m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;231m\]" PATH_FG="\[\e[38;5;223m\]" FRAME="\[\e[38;5;130m\]" ;; newyear) Z1_BG_CODE=17 Z2_BG_CODE=20 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;255m\]" PATH_FG="\[\e[38;5;229m\]" FRAME="\[\e[38;5;19m\]" ;; *) Z1_BG_CODE=24 Z2_BG_CODE=31 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;255m\]" Z3_BG_CODE="${Z2_BG_CODE}" Z4_BG_CODE="${Z2_BG_CODE}" Z3_BG="\[\e[48;5;${Z3_BG_CODE}m\]" Z4_BG="\[\e[48;5;${Z4_BG_CODE}m\]" PATH_FG="\[\e[38;5;51m\]" FRAME="\[\e[38;5;23m\]" ;; esac else case "$__PS1_SEASON" in spring) Z1_BG_CODE=70 Z2_BG_CODE=71 Z3_BG_CODE=72 Z4_BG_CODE=120 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;22m\]" Z3_BG="\[\e[48;5;${Z3_BG_CODE}m\]" Z4_BG="\[\e[48;5;${Z4_BG_CODE}m\]" PATH_FG="\[\e[38;5;22m\]" FRAME="\[\e[38;5;65m\]" ;; summer) Z1_BG_CODE=141 Z2_BG_CODE=142 Z3_BG_CODE=143 Z4_BG_CODE=214 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;0m\]" Z3_BG="\[\e[48;5;${Z3_BG_CODE}m\]" Z4_BG="\[\e[48;5;${Z4_BG_CODE}m\]" PATH_FG="\[\e[38;5;232m\]" FRAME="\[\e[38;5;130m\]" ;; autumn) Z1_BG_CODE=94 Z2_BG_CODE=95 Z3_BG_CODE=96 Z4_BG_CODE=173 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;255m\]" Z3_BG="\[\e[48;5;${Z3_BG_CODE}m\]" Z4_BG="\[\e[48;5;${Z4_BG_CODE}m\]" PATH_FG="\[\e[38;5;223m\]" FRAME="\[\e[38;5;95m\]" ;; *) # winter (default) Z1_BG_CODE=60 Z2_BG_CODE=61 Z3_BG_CODE=62 Z4_BG_CODE=37 Z1_BG="\[\e[48;5;${Z1_BG_CODE}m\]" Z1_FG="\[\e[38;5;255m\]" Z2_BG="\[\e[48;5;${Z2_BG_CODE}m\]" Z2_FG="\[\e[38;5;255m\]" Z3_BG="\[\e[48;5;${Z3_BG_CODE}m\]" Z4_BG="\[\e[48;5;${Z4_BG_CODE}m\]" PATH_FG="\[\e[38;5;194m\]" FRAME="\[\e[38;5;60m\]" ;; esac fi # Status colors local OK="\[\e[38;5;76m\]" local BAD="\[\e[38;5;203m\]" local BOLD="\[\e[1m\]" local NOBOLD="\[\e[22m\]" local left right sep if [[ "$__PS1_USE_NF" -eq 1 ]]; then left="๎‚ถ"; right="๎‚ด"; sep="๎‚ฐ" else left="["; right="]"; sep="โ–ถ" fi local prompt_sym if [[ "$__PS1_STATUS" -eq 0 ]]; then prompt_sym="${OK}${BOLD}โžœ${NOBOLD}${RST}" else prompt_sym="${BAD}${BOLD}โžœ${NOBOLD}${RST}" fi local style="${__PS1_STYLE:-aurora}" local git_tail="" if [[ "$style" != "git" ]]; then git_tail="$(_ps1_git_line_tail)" fi local L1="\\d \\A \\u" local L_HOST="@\\h" local PREFIX="" local HOST_PART="${L_HOST}" local PATH_PART="${__PS1_PATH}" local PATH_SEP=" " local END_PAD=" " if [[ "$__PS1_STYLE_PACK" == "contest" || "$__PS1_STYLE_PACK" == "holiday" ]]; 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 neon) local N1_BG_CODE=201 local N2_BG_CODE=45 local N1_BG="\[\e[48;5;${N1_BG_CODE}m\]" local N1_FG="\[\e[38;5;255m\]" local N2_BG="\[\e[48;5;${N2_BG_CODE}m\]" local N2_FG="\[\e[38;5;16m\]" local N_PATH_FG="\[\e[38;5;16m\]" local N_FRAME="\[\e[38;5;199m\]" local N_LEFT="${left}" local N_RIGHT="${right}" local N_SEP="${sep}" local N_LEFT_FG="" local N_RIGHT_FG="" if [[ "$__PS1_USE_NF" -eq 1 ]]; then N_LEFT="๎‚ฒ" N_RIGHT="๎‚ฐ" N_SEP="๎‚ฐ" N_LEFT_FG="\[\e[38;5;${N1_BG_CODE}m\]" N_RIGHT_FG="\[\e[38;5;${N2_BG_CODE}m\]" fi PS1="\ ${PREFIX}${N_FRAME}โ•ญโ”€${RST}\ ${N_LEFT_FG}${N_LEFT}${RST}${N1_BG}${N1_FG} ${BOLD}\\u${NOBOLD} \\d \\A ${RST}${N1_BG}${N2_BG}${N2_FG}${N_SEP}${RST}\ ${N2_BG}${N2_FG} ${HOST_PART}${PATH_SEP}${N_PATH_FG}${PATH_PART}${END_PAD}${RST}${N_RIGHT_FG}${N_RIGHT}${RST}\ \n${N_FRAME}โ•ฐโ”€โ”€ ${RST}${prompt_sym} ${__PS1_SYM}${git_tail}" ;; forge) local F1_BG_CODE=94 local F2_BG_CODE=166 local F1_BG="\[\e[48;5;${F1_BG_CODE}m\]" local F1_FG="\[\e[38;5;230m\]" local F2_BG="\[\e[48;5;${F2_BG_CODE}m\]" local F2_FG="\[\e[38;5;231m\]" local F_PATH_FG="\[\e[38;5;224m\]" local F_FRAME="\[\e[38;5;130m\]" local F_LEFT="${left}" local F_RIGHT="${right}" local F_SEP="${sep}" local F_LEFT_FG="" local F_RIGHT_FG="" if [[ "$__PS1_USE_NF" -eq 1 ]]; then F_LEFT="๎‚ฒ" F_RIGHT="๎‚ฐ" F_SEP="๎‚ฐ" F_LEFT_FG="\[\e[38;5;${F1_BG_CODE}m\]" F_RIGHT_FG="\[\e[38;5;${F2_BG_CODE}m\]" fi PS1="\ ${PREFIX}${F_FRAME}โ•ญโ”€${RST}\ ${F_LEFT_FG}${F_LEFT}${RST}${F1_BG}${F1_FG} ${BOLD}${L1}${NOBOLD} ${RST}${F1_BG}${F2_BG}${F2_FG}${F_SEP}${RST}\ ${F2_BG}${F2_FG} ${HOST_PART}${PATH_SEP}${F_PATH_FG}${PATH_PART}${END_PAD}${RST}${F_RIGHT_FG}${F_RIGHT}${RST}\ \n${F_FRAME}โ•ฐโ”€โ”€ ${RST}${prompt_sym} ${__PS1_SYM}${git_tail}" ;; circuit) local C_FG="\[\e[38;5;46m\]" local C_DIM="\[\e[38;5;22m\]" local C_PATH="\[\e[38;5;120m\]" PS1="\ ${PREFIX}${C_DIM}โ”โ”${RST}${C_FG}[${BOLD}\\u${NOBOLD} ${RST}${C_FG}\\A${RST}${C_DIM}]${RST}\ ${C_DIM}โ”${RST}${C_FG}${HOST_PART}${RST}${PATH_SEP}${C_PATH}${PATH_PART}${RST}\ \n${C_DIM}โ”—โ”${RST}${prompt_sym} ${__PS1_SYM}${git_tail}" ;; mono) local M_FG="\[\e[38;5;250m\]" local M_DIM="\[\e[38;5;240m\]" PS1="\ ${PREFIX}${M_FG}โŸฆ${L1}โŸง ${M_DIM}${HOST_PART}${PATH_SEP}${M_FG}${PATH_PART}${RST}\ \n${M_DIM}โ””โ”€${RST}${prompt_sym} ${__PS1_SYM}${git_tail}" ;; git) export GIT_PS1_SHOWDIRTYSTATE=1 export GIT_PS1_SHOWSTASHSTATE=1 export GIT_PS1_SHOWUNTRACKEDFILES=1 local G_FRAME="\[\e[38;5;60m\]" local G_Z1_BG="\[\e[48;5;61m\]" local G_Z1_FG="\[\e[38;5;255m\]" local G_Z2_BG="\[\e[48;5;37m\]" local G_Z2_FG="\[\e[38;5;255m\]" local G_PATH_FG="\[\e[38;5;194m\]" local GIT_INFO="$(__git_capsule)" local G_LEFT="๎‚ฒ" local G_RIGHT="๎‚ฐ" local G_SEP="๎‚ฐ" local G_END_PAD=" " local G_LEFT_FG="\[\e[38;5;61m\]" local G_RIGHT_FG="\[\e[38;5;37m\]" PS1="\ ${PREFIX}${G_FRAME}โ•ญโ”€${RST}\ ${G_LEFT_FG}${G_LEFT}${RST}${G_Z1_BG}${G_Z1_FG} ${L1} ${RST}${G_Z1_BG}${G_Z2_BG}${G_Z2_FG}${G_SEP}${RST}\ ${G_Z2_BG}${G_Z2_FG} ${HOST_PART}${PATH_SEP}${G_PATH_FG}${PATH_PART}${G_END_PAD}${RST}${G_RIGHT_FG}${G_RIGHT}${RST}\ \n${G_FRAME}โ•ฐโ”€โ”€ ${RST}${prompt_sym} ${__PS1_SYM} ${GIT_INFO} " ;; hawolex) local H_FRAME="\[\e[38;5;24m\]" local H_Z1_BG="\[\e[48;5;54m\]" local H_Z1_FG="\[\e[38;5;255m\]" local H_Z2_BG="\[\e[48;5;31m\]" local H_Z2_FG="\[\e[38;5;255m\]" local H_PATH_FG="\[\e[38;5;230m\]" local H_LEFT="๎‚ฒ" local H_RIGHT="๎‚ฐ" local H_SEP="๎‚ฐ" local H_LEFT_FG="\[\e[38;5;54m\]" local H_RIGHT_FG="\[\e[38;5;31m\]" PS1="\ ${PREFIX}${H_FRAME}โ•ญโ”€${RST}\ ${H_LEFT_FG}${H_LEFT}${RST}${H_Z1_BG}${H_Z1_FG} ${L1} ${RST}${H_Z1_BG}${H_Z2_BG}${H_Z2_FG}${H_SEP}${RST}\ ${H_Z2_BG}${H_Z2_FG} ${HOST_PART}${PATH_SEP}${H_PATH_FG}${PATH_PART}${END_PAD}${RST}${H_RIGHT_FG}${H_RIGHT}${RST}\ \n${H_FRAME}โ•ฐโ”€โ”€ ${RST}${prompt_sym} ${__PS1_SYM}${git_tail}" ;; *) # aurora (default) local A_LEFT="${left}" local A_RIGHT="${right}" local A_SEP="${sep}" local A_LEFT_FG="" local A_RIGHT_FG="" if [[ "$__PS1_USE_NF" -eq 1 ]]; then A_LEFT="๎‚ฒ" A_RIGHT="๎‚ฐ" A_SEP="๎‚ฐ" A_LEFT_FG="\[\e[38;5;${Z1_BG_CODE}m\]" A_RIGHT_FG="\[\e[38;5;${Z4_BG_CODE:-$Z2_BG_CODE}m\]" fi if [[ "$__PS1_STYLE_PACK" == "standard" && "$__PS1_USE_NF" -eq 1 ]]; then local SEP12="\[\e[38;5;${Z2_BG_CODE}m\]\[\e[48;5;${Z1_BG_CODE}m\]${A_SEP}${RST}" local SEP23="\[\e[38;5;${Z3_BG_CODE}m\]\[\e[48;5;${Z2_BG_CODE}m\]${A_SEP}${RST}" local SEP34="\[\e[38;5;${Z4_BG_CODE}m\]\[\e[48;5;${Z3_BG_CODE}m\]${A_SEP}${RST}" PS1="\ ${PREFIX}${FRAME}โ•ญโ”€${RST}\ ${A_LEFT_FG}${A_LEFT}${RST}${Z1_BG}${Z1_FG} \\d ${RST}${SEP12}${Z2_BG}${Z1_FG} \\A ${RST}${SEP23}${Z3_BG}${Z1_FG} \\u ${RST}${SEP34}${Z4_BG}${Z2_FG} ${HOST_PART}${PATH_SEP}${PATH_FG}${PATH_PART}${END_PAD}${RST}${A_RIGHT_FG}${A_RIGHT}${RST}\ \n${FRAME}โ•ฐโ”€โ”€ ${RST}${prompt_sym} ${__PS1_SYM}${git_tail}" else PS1="\ ${PREFIX}${FRAME}โ•ญโ”€${RST}\ ${A_LEFT_FG}${A_LEFT}${RST}${Z1_BG}${Z1_FG} ${L1} ${RST}${Z1_BG}${Z2_BG}${Z2_FG}${A_SEP}${RST}\ ${Z2_BG}${Z2_FG} ${HOST_PART}${PATH_SEP}${PATH_FG}${PATH_PART}${END_PAD}${RST}${A_RIGHT_FG}${A_RIGHT}${RST}\ \n${FRAME}โ•ฐโ”€โ”€ ${RST}${prompt_sym} ${__PS1_SYM}${git_tail}" fi ;; esac } _ps1_update() { __PS1_STATUS=$? __PS1_SEASON="$(_ps1_season)" __PS1_STYLE_PACK="$(_ps1_style_pack)" __PS1_CONTEST_LAYOUT="$(_ps1_contest_layout)" __PS1_HOLIDAY="$(_ps1_holiday)" __PS1_STYLE="$(_ps1_style)" __PS1_GIT="${PS1_GIT:-0}" __PS1_SYM="$(_ps1_symbol)" __PS1_PATH="$(_ps1_path)" if _ps1_has_nf; then __PS1_USE_NF=1; else __PS1_USE_NF=0; fi _ps1_set_prompt } ps1_on() { if [[ "${PROMPT_COMMAND:-}" != *"_ps1_update"* ]]; then if [[ -n "${PROMPT_COMMAND:-}" ]]; then PROMPT_COMMAND="${PROMPT_COMMAND}; _ps1_update" else PROMPT_COMMAND="_ps1_update" fi fi _ps1_set_prompt } ps1_off() { :; } # Enable by default when loaded (global standard) ps1_on