diff --git a/ps1.sh b/ps1.sh index c2294c8..5e56bcd 100644 --- a/ps1.sh +++ b/ps1.sh @@ -1,5 +1,9 @@ #!/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:" @@ -15,98 +19,41 @@ case "$-" in *) return 0 ;; esac -# ---- Emoji pools (edit these) ---- -# Keep them as simple strings; terminals must support the emoji glyphs. -__PS1_EMOJI_FUN=( "πŸš€" "✨" "πŸ”₯" "🌈" "🧠" "πŸ› οΈ" "πŸ“¦" "🧩" "πŸ§ͺ" "⚑" "🐧" "πŸ›°οΈ" ) - -# ---- Emoji function (simple random) ---- +# ------------------------------------------------- +# Emoji helper +# ------------------------------------------------- _ps1_emoji() { - local n="${#__PS1_EMOJI_FUN[@]}" - # RANDOM is bash built-in - printf '%s' "${__PS1_EMOJI_FUN[RANDOM % n]}" + local emojis=( "πŸš€" "✨" "πŸ”₯" "🧠" "πŸ› οΈ" ) + printf '%s' "${emojis[RANDOM % ${#emojis[@]}]}" } -# ---- Your PS1 core (edit to taste) ---- -# This is intentionally simple: time, jobs, host, cwd, emoji. -# Use \\[ \\] around non-printing escape sequences to keep line editing sane. +# ------------------------------------------------- +# Build PS1 (your requested order) +# ------------------------------------------------- _ps1_build() { local emoji="$(_ps1_emoji)" - # Colors: 35 (purple) + 38 (cyan-ish) from your earlier style + printf '%b' \ -"\[\e[0m\]\[\e[38;5;35m\]╭─(\[\e[38;5;38m\]\t\[\e[38;5;35m\])-(\[\e[38;5;38m\]\j\[\e[38;5;35m\])-(\[\e[38;5;38m\]\H\[\e[38;5;35m\])-(\[\e[38;5;38m\]\w\[\e[38;5;35m\])\n\[\e[38;5;35m\]╰──${emoji} \[\e[0m\]" +"\[\e[31m\]\d\[\e[0m\] \ +\[\e[33m\]\A\[\e[0m\] \ +\[\e[34m\]\u@\h\[\e[0m\] \ +\[\e[32m\]\w\[\e[0m\]\n\\$emoji " } -# ---- PROMPT_COMMAND hook (updates PS1 each prompt) ---- -# We add our updater without nuking an existing PROMPT_COMMAND. -__PS1_PREV_PROMPT_COMMAND="" +# ------------------------------------------------- +# PROMPT_COMMAND handling +# ------------------------------------------------- +__PS1_PREV_PROMPT_COMMAND="${PROMPT_COMMAND-}" -_ps1_set_prompt_command() { - # Save existing PROMPT_COMMAND once - if [[ -z "${__PS1_PREV_PROMPT_COMMAND+x}" || -z "$__PS1_PREV_PROMPT_COMMAND" ]]; then - __PS1_PREV_PROMPT_COMMAND="${PROMPT_COMMAND-}" - fi - - local updater='_PS1=$(_ps1_build); export PS1="$_PS1"' - if [[ -z "${PROMPT_COMMAND-}" ]]; then - PROMPT_COMMAND="$updater" - else - # Avoid duplicating if user runs ps1_on multiple times - case "$PROMPT_COMMAND" in - *"_ps1_build"*) : ;; - *) - PROMPT_COMMAND="$updater; $PROMPT_COMMAND" - ;; - esac - fi -} - -_ps1_restore_prompt_command() { - PROMPT_COMMAND="${__PS1_PREV_PROMPT_COMMAND-}" -} - -# ---- Public controls ---- ps1_on() { - _ps1_set_prompt_command - # Force immediate update + PROMPT_COMMAND='_PS1="$(_ps1_build)"; export PS1="$_PS1"' _PS1="$(_ps1_build)"; export PS1="$_PS1" } ps1_off() { - psanimate_stop >/dev/null 2>&1 || true - _ps1_restore_prompt_command + PROMPT_COMMAND="$__PS1_PREV_PROMPT_COMMAND" } -# ---- Animation helpers (simple loop that forces prompt refresh) ---- -# This follows the same basic idea as in the Medium post: background loop updates prompt periodically. :contentReference[oaicite:2]{index=2} -__PSANIMATE_PIDFILE="/tmp/psanimatepid-$$" - -psanimate() { - local interval="${1:-0.5}" - - # Stop existing animator for this shell, if any - psanimate_stop >/dev/null 2>&1 || true - - # Ensure prompt is enabled - ps1_on - - ( - while :; do - # Trigger a prompt rebuild by setting PS1; next prompt draw will use it. - _PS1="$(_ps1_build)"; export PS1="$_PS1" - sleep "$interval" - done - ) & - - echo "$!" > "$__PSANIMATE_PIDFILE" -} - -psanimate_stop() { - if [[ -f "$__PSANIMATE_PIDFILE" ]]; then - local pid - pid="$(cat "$__PSANIMATE_PIDFILE" 2>/dev/null || true)" - if [[ -n "${pid:-}" ]]; then - kill "$pid" 2>/dev/null || true - fi - rm -f "$__PSANIMATE_PIDFILE" - fi -} +# ------------------------------------------------- +# End of file +# -------------------------------------------------