#!/usr/bin/env bash # ------------------------------------------------- # ps1.sh – custom PS1 (must be sourced) # ------------------------------------------------- # Must be sourced, not executed if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then echo "Dette scriptet mΓ₯ kjΓΈres med:" echo " source ps1.sh" echo "eller:" echo " . ps1.sh" exit 1 fi # Only for interactive shells case "$-" in *i*) ;; *) return 0 ;; esac # ------------------------------------------------- # Emoji based on time (Norway / Europe/Oslo) # Ranges: # 05:00-08:59 tidlig # 09:00-10:59 formiddag # 11:00-11:29 lunsj # 11:30-15:59 dag # 16:00-16:59 middag # 17:00-22:59 kveld # 23:00-04:59 natt # ------------------------------------------------- _ps1_emoji() { local hh mm h m hh="$(TZ=Europe/Oslo date +%H)" mm="$(TZ=Europe/Oslo date +%M)" h=$((10#$hh)) m=$((10#$mm)) if (( h >= 5 && h <= 8 )); then printf '%s' "πŸŒ…" # tidlig elif (( h >= 9 && h <= 10 )); then printf '%s' "β˜•" # formiddag elif (( h == 11 && m < 30 )); then printf '%s' "πŸ₯ͺ" # lunsj elif (( (h == 11 && m >= 30) || (h >= 12 && h <= 15) )); then printf '%s' "πŸ’»" # dag elif (( h == 16 )); then printf '%s' "🍲" # middag elif (( h >= 17 && h <= 22 )); then printf '%s' "πŸŒ†" # kveld else printf '%s' "πŸŒ™" # natt fi } # ------------------------------------------------- # Build PS1 (boxy + pastel contrast + full path) # NOTE: We DO NOT use printf %b, because \u etc are PS1 escapes (not printf escapes) # We keep PS1 escapes as \\u, \\h, \\d, \\A, \\n so bash expands them in the prompt. # ------------------------------------------------- _ps1_build() { local emoji path emoji="$(_ps1_emoji)" path="$(pwd)" # Pastel-ish 256 colors: # - box: 183 (light purple) # - value: 117 (light cyan) # - accent 229 (light yellow) local BOX="\[\e[38;5;183m\]" local VAL="\[\e[38;5;117m\]" local ACC="\[\e[38;5;229m\]" local RST="\[\e[0m\]" # Use PS1 escapes for date/time/user/host and a PS1 newline (\\n) # Use full path from $(pwd) so /home/user is shown (no ~ shortening) local ps1 ps1="${BOX}╭─(${ACC}\\d${BOX} ${ACC}\\A${BOX})-(${VAL}\\u${BOX}@${VAL}\\h${BOX})-(${VAL}${path}${BOX})${RST}\\n${BOX}β•°β”€β”€βžœ ${RST}\\$${emoji} " printf '%s' "$ps1" } # ------------------------------------------------- # PROMPT_COMMAND handling # ------------------------------------------------- __PS1_PREV_PROMPT_COMMAND="${PROMPT_COMMAND-}" ps1_on() { PROMPT_COMMAND='_PS1="$(_ps1_build)"; export PS1="$_PS1"' _PS1="$(_ps1_build)"; export PS1="$_PS1" } ps1_off() { PROMPT_COMMAND="$__PS1_PREV_PROMPT_COMMAND" } # Optional auto-enable (leave commented) # ps1_on