diff --git a/cradle/home/.config/kitty/kitty.conf b/cradle/home/.config/kitty/kitty.conf index fdc1cb7..e393b7e 100644 --- a/cradle/home/.config/kitty/kitty.conf +++ b/cradle/home/.config/kitty/kitty.conf @@ -61,7 +61,7 @@ listen_on unix:~/.config/kitty/.kitty_socket strip_trailing_spaces smart # --- Keybinds -kitty_mod ctrl+shift +kitty_mod ctrl map kitty_mod+c copy_to_clipboardround map kitty_mod+v paste_from_clipboard map kitty_mod+enter launch --cwd=current --type os-window diff --git a/cradle/usr/local/bin/prompt.sh b/cradle/usr/local/bin/prompt.sh index 730304d..f743457 100755 --- a/cradle/usr/local/bin/prompt.sh +++ b/cradle/usr/local/bin/prompt.sh @@ -49,21 +49,24 @@ _screen_symbol="scr:" # --- # * Colours # --- -_prompt_success_color="142" -_prompt_fail_color="203" -_prompt_user_color="109" -_prompt_sudo_color="198" -_prompt_info_color="172" -_prompt_input_color="254" -_git_module_color="66" -_pyenv_module_color="66" -_readonly_module_color="196" -_screen_module_color="33" +_prompt_success_colour="142" +_prompt_fail_colour="203" +_prompt_user_colour="109" +_prompt_sudo_colour="208" +_prompt_at_colour="249" +_prompt_hostname_colour="132" +_prompt_info_colour="172" +_prompt_input_colour="254" +_prompt_dir_colour="249" +_git_module_colour="66" +_pyenv_module_colour="66" +_readonly_module_colour="196" +_screen_module_colour="33" # --- # * Miscellaneous # --- -_prompt_hostname="ssh" +_prompt_hostname="all" _prompt_separator=" " _prompt_wrapper="[]" @@ -105,9 +108,9 @@ declare -x HISTFILESIZE=10000 declare -x HISTSIZE=${HISTFILESIZE} # --- -# * Color function +# * colour function # --- -_prompt_color() { +_prompt_colour() { [[ ${1} != "-" ]] && echo -ne "\[\033[38;5;${1}m\]" || echo -ne "\[\033[0m\]" } @@ -115,14 +118,9 @@ _prompt_color() { # * Generate prompt segments # --- _prompt_generate() { - declare _separator="" + declare _separator="" _text="${1%%|*}" _colour="${1##*|}" [[ ${_prompt_seg} -gt 1 ]] && _separator="${_prompt_separator}" - - # Parse parameters without IFS manipulation - declare _text="${1%%|*}" - declare _color="${1##*|}" - - _prompt_information+="${_separator}$(_prompt_color "${_color}")${_text}\[\e[0m\]" + _prompt_information+="${_separator}$(_prompt_colour "${_colour}")${_text}\[\e[0m\]" ((_prompt_seg++)) } @@ -130,21 +128,27 @@ _prompt_generate() { # * Screen # --- _screen_pre() { - [[ ${TERM} == "screen"* ]] && _prompt_generate "${_screen_symbol}|${_screen_module_color}" + [[ ${TERM} == "screen"* ]] && _prompt_generate "${_screen_symbol}|${_screen_module_colour}" } # --- # * Git # --- _git_post() { - [[ -z "$_git_dir" ]] && _git_dir="$(git rev-parse --git-dir 2>/dev/null)" - [[ -n "$_git_dir" ]] || return + [[ -z "$_git_dir" ]] && _git_dir="$(git rev-parse --git-dir 2>/dev/null)" + [[ -n "$_git_dir" ]] || return - declare _unsafe_ref - _unsafe_ref=$(git symbolic-ref -q HEAD 2>/dev/null) || return - declare _clean_ref="${_unsafe_ref##refs/heads/}" - _clean_ref="${_clean_ref//[^a-zA-Z0-9\/]/-}" - [[ -n ${_clean_ref} ]] && _prompt_generate "${_prompt_wrapper:0:1}${_git_symbol} ${_clean_ref}${_prompt_wrapper:1:1}|${_git_module_color}" + local _unsafe_ref + _unsafe_ref=$(git symbolic-ref -q HEAD 2>/dev/null) || return + local _clean_ref="${_unsafe_ref##refs/heads/}" + _clean_ref="${_clean_ref//[^a-zA-Z0-9\/]/-}" + + # Add status indicators + local _status="" + [[ -n "$(git status --porcelain 2>/dev/null)" ]] && _status="*" + [[ -n "$(git ls-files --others --exclude-standard 2>/dev/null)" ]] && _status="${_status}+" + + [[ -n ${_clean_ref} ]] && _prompt_generate "${_git_symbol} ${_clean_ref}${_status}|${_git_module_colour}" } # --- @@ -158,7 +162,7 @@ _pyenv_post() { _cached_pyenv_version="${_cached_pyenv_version#Python }" _pyenv_cache_key="$VIRTUAL_ENV" } - [[ -n ${_cached_pyenv_version} ]] && _prompt_generate "${_prompt_wrapper:0:1}${_pyenv_symbol} ${_cached_pyenv_version}${_prompt_wrapper:1:1}|${_pyenv_module_color}" + [[ -n ${_cached_pyenv_version} ]] && _prompt_generate "${_prompt_wrapper:0:1}${_pyenv_symbol} ${_cached_pyenv_version}${_prompt_wrapper:1:1}|${_pyenv_module_colour}" } # --- @@ -170,8 +174,7 @@ _readonly_post() { [[ ! -w "$(pwd)" ]] && _cached_readonly="readonly" _readonly_cache_key="$PWD" } - - [[ -n "$_cached_readonly" ]] && _prompt_generate "${_prompt_wrapper:0:1}${_readonly_symbol}${_prompt_wrapper:1:1}|${_readonly_module_color}" + [[ -n "$_cached_readonly" ]] && _prompt_generate "${_prompt_wrapper:0:1}${_readonly_symbol}${_prompt_wrapper:1:1}|${_readonly_module_colour}" } # --- @@ -194,32 +197,43 @@ _prompt_build() { # END # --- - # * User and hostname - # --- - declare _user_color="${_prompt_user_color}" - sudo -n -v 2>/dev/null && _user_color="${_prompt_sudo_color}" +# * User and hostname +# --- +declare _user_colour="${_prompt_user_colour}" +sudo -nv 2>/dev/null && _user_colour="${_prompt_sudo_colour}" - _gen_uh="${_cached_uh}" - _uh_cache_key="${_prompt_hostname}:${SSH_CLIENT:-}" - [[ "$_uh_cache_key" != "$_last_uh_key" ]] && { - _gen_uh="${USER}" - [[ ${_prompt_hostname} == "all" ]] || [[ ${_prompt_hostname} == "ssh" && -n ${SSH_CLIENT} ]] && _gen_uh="${USER}@${HOSTNAME}" - _cached_uh="$_gen_uh" - _last_uh_key="$_uh_cache_key" - } - _prompt_generate "${_gen_uh}|${_user_color}" +_gen_uh="${_cached_uh}" +# Change the cache key to include sudo status +_uh_cache_key="${_prompt_hostname}:${SSH_CLIENT:-}:$(sudo -n -v 2>/dev/null && echo 'sudo' || echo 'nosudo')" - # --- - # * Current directory - # --- - declare _current_dir="${PWD}" - _current_dir="${_current_dir/#$HOME/\~}" - _prompt_generate "${_prompt_wrapper:0:1}${_current_dir}${_prompt_wrapper:1:1}|${_prompt_info_color}" +[[ "$_uh_cache_key" != "$_last_uh_key" ]] && { + _gen_uh="$(_prompt_colour "${_user_colour}")${USER}" + + # Add hostname if needed + if [[ ${_prompt_hostname} == "all" ]] || [[ ${_prompt_hostname} == "ssh" && -n ${SSH_CLIENT} ]]; then + _gen_uh+="$(_prompt_colour "${_prompt_at_colour}")@$(_prompt_colour "${_prompt_hostname_colour}")${HOSTNAME}" + fi + + _gen_uh+="\[\033[0m\]" # Reset color + _cached_uh="$_gen_uh" + _last_uh_key="$_uh_cache_key" +} +_prompt_generate "${_gen_uh}|${_prompt_info_colour}" + + + +# --- +# * Current directory +# --- +declare _current_dir="${PWD}" +_current_dir="${_current_dir/#$HOME/\~}" +# Build the segment with individual colours for each part +_prompt_generate "$(_prompt_colour "${_prompt_info_colour}")${_prompt_wrapper:0:1}$(_prompt_colour "${_prompt_dir_colour}")${_current_dir}$(_prompt_colour "${_prompt_info_colour}")${_prompt_wrapper:1:1}\[\033[0m\]|${_prompt_info_colour}" # --- # * Error status # --- - [[ ${_last_status} -ne 0 ]] && _prompt_generate "${_prompt_wrapper:0:1}${_last_status}${_prompt_wrapper:1:1}|${_prompt_fail_color}" + [[ ${_last_status} -ne 0 ]] && _prompt_generate "${_prompt_wrapper:0:1}${_last_status}${_prompt_wrapper:1:1}|${_prompt_fail_colour}" # --- # ! Insert *post* functions here @@ -234,10 +248,10 @@ _prompt_build() { # --- # *Final prompt symbol # --- - _prompt_status_color=${_prompt_success_color} - [[ ${_last_status} -ne 0 ]]&& _prompt_status_color=${_prompt_fail_color} + _prompt_status_colour=${_prompt_success_colour} + [[ ${_last_status} -ne 0 ]]&& _prompt_status_colour=${_prompt_fail_colour} - _prompt_information+="$(_prompt_color "${_prompt_status_color}")\n${_prompt_symbol}\[\e[0m\]" + _prompt_information+="$(_prompt_colour "${_prompt_status_colour}")\n${_prompt_symbol}\[\e[0m\]" PS1="${_prompt_information} " unset _prompt_information _prompt_seg