From ee25a6f017f4e426e43ec2f1766921b2178b81fa Mon Sep 17 00:00:00 2001 From: ladro Date: Wed, 22 May 2019 11:14:40 +0200 Subject: [PATCH] config prompt --- conf/.bashrc | 124 ++++++++++++++++++++++++++ conf/.shell_prompt.sh | 203 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 327 insertions(+) create mode 100644 conf/.bashrc create mode 100644 conf/.shell_prompt.sh diff --git a/conf/.bashrc b/conf/.bashrc new file mode 100644 index 0000000..3bc48de --- /dev/null +++ b/conf/.bashrc @@ -0,0 +1,124 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. +# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) +# for examples + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate lines or lines starting with space in the history. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +#shopt -s globstar + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set variable identifying the chroot you work in (used in the prompt below) +if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then + debian_chroot=$(cat /etc/debian_chroot) +fi + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color|*-256color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +#force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# If this is an xterm set the title to user@host:dir +case "$TERM" in +xterm*|rxvt*) + PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" + ;; +*) + ;; +esac + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + #alias dir='dir --color=auto' + #alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' +fi + +# colored GCC warnings and errors +#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' + +# some more ls aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' + +# Add an "alert" alias for long running commands. Use like so: +# sleep 10; alert +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# Alias definitions. +# You may want to put all your additions into a separate file like +# ~/.bash_aliases, instead of adding them here directly. +# See /usr/share/doc/bash-doc/examples in the bash-doc package. + +if [ -f ~/.bash_aliases ]; then + . ~/.bash_aliases +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if ! shopt -oq posix; then + if [ -f /usr/share/bash-completion/bash_completion ]; then + . /usr/share/bash-completion/bash_completion + elif [ -f /etc/bash_completion ]; then + . /etc/bash_completion + fi +fi +export NVS_HOME="$HOME/.nvs" +[ -s "$NVS_HOME/nvs.sh" ] && . "$NVS_HOME/nvs.sh" +source ~/.shell_prompt.sh + +#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! +export SDKMAN_DIR="/home/ladro/.sdkman" +[[ -s "/home/ladro/.sdkman/bin/sdkman-init.sh" ]] && source "/home/ladro/.sdkman/bin/sdkman-init.sh" diff --git a/conf/.shell_prompt.sh b/conf/.shell_prompt.sh new file mode 100644 index 0000000..cf53e0d --- /dev/null +++ b/conf/.shell_prompt.sh @@ -0,0 +1,203 @@ +# +# This shell prompt config file was created by promptline.vim +# +function __promptline_host { + local only_if_ssh="0" + + if [ $only_if_ssh -eq 0 -o -n "${SSH_CLIENT}" ]; then + if [[ -n ${ZSH_VERSION-} ]]; then print %m; elif [[ -n ${FISH_VERSION-} ]]; then hostname -s; else printf "%s" \\h; fi + fi +} + +function __promptline_last_exit_code { + + [[ $last_exit_code -gt 0 ]] || return 1; + + printf "%s" "$last_exit_code" +} +function __promptline_ps1 { + local slice_prefix slice_empty_prefix slice_joiner slice_suffix is_prompt_empty=1 + + # section "a" header + slice_prefix="${a_bg}${sep}${a_fg}${a_bg}${space}" slice_suffix="$space${a_sep_fg}" slice_joiner="${a_fg}${a_bg}${alt_sep}${space}" slice_empty_prefix="${a_fg}${a_bg}${space}" + [ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" + # section "a" slices + __promptline_wrapper "$(__promptline_host)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } + + # section "b" header + slice_prefix="${b_bg}${sep}${b_fg}${b_bg}${space}" slice_suffix="$space${b_sep_fg}" slice_joiner="${b_fg}${b_bg}${alt_sep}${space}" slice_empty_prefix="${b_fg}${b_bg}${space}" + [ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" + # section "b" slices + __promptline_wrapper "$USER" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } + + # section "c" header + slice_prefix="${c_bg}${sep}${c_fg}${c_bg}${space}" slice_suffix="$space${c_sep_fg}" slice_joiner="${c_fg}${c_bg}${alt_sep}${space}" slice_empty_prefix="${c_fg}${c_bg}${space}" + [ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" + # section "c" slices + __promptline_wrapper "$(__promptline_cwd)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } + + # section "y" header + slice_prefix="${y_bg}${sep}${y_fg}${y_bg}${space}" slice_suffix="$space${y_sep_fg}" slice_joiner="${y_fg}${y_bg}${alt_sep}${space}" slice_empty_prefix="${y_fg}${y_bg}${space}" + [ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" + # section "y" slices + __promptline_wrapper "$(__promptline_vcs_branch)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } + + # section "warn" header + slice_prefix="${warn_bg}${sep}${warn_fg}${warn_bg}${space}" slice_suffix="$space${warn_sep_fg}" slice_joiner="${warn_fg}${warn_bg}${alt_sep}${space}" slice_empty_prefix="${warn_fg}${warn_bg}${space}" + [ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" + # section "warn" slices + __promptline_wrapper "$(__promptline_last_exit_code)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } + + # close sections + printf "%s" "${reset_bg}${sep}$reset$space" +} +function __promptline_vcs_branch { + local branch + local branch_symbol=" " + + # git + if hash git 2>/dev/null; then + if branch=$( { git symbolic-ref --quiet HEAD || git rev-parse --short HEAD; } 2>/dev/null ); then + branch=${branch##*/} + printf "%s" "${branch_symbol}${branch:-unknown}" + return + fi + fi + return 1 +} +function __promptline_cwd { + local dir_limit="3" + local truncation="⋯" + local first_char + local part_count=0 + local formatted_cwd="" + local dir_sep="  " + local tilde="~" + + local cwd="${PWD/#$HOME/$tilde}" + + # get first char of the path, i.e. tilde or slash + [[ -n ${ZSH_VERSION-} ]] && first_char=$cwd[1,1] || first_char=${cwd::1} + + # remove leading tilde + cwd="${cwd#\~}" + + while [[ "$cwd" == */* && "$cwd" != "/" ]]; do + # pop off last part of cwd + local part="${cwd##*/}" + cwd="${cwd%/*}" + + formatted_cwd="$dir_sep$part$formatted_cwd" + part_count=$((part_count+1)) + + [[ $part_count -eq $dir_limit ]] && first_char="$truncation" && break + done + + printf "%s" "$first_char$formatted_cwd" +} +function __promptline_left_prompt { + local slice_prefix slice_empty_prefix slice_joiner slice_suffix is_prompt_empty=1 + + # section "a" header + slice_prefix="${a_bg}${sep}${a_fg}${a_bg}${space}" slice_suffix="$space${a_sep_fg}" slice_joiner="${a_fg}${a_bg}${alt_sep}${space}" slice_empty_prefix="${a_fg}${a_bg}${space}" + [ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" + # section "a" slices + __promptline_wrapper "$(__promptline_host)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } + + # section "b" header + slice_prefix="${b_bg}${sep}${b_fg}${b_bg}${space}" slice_suffix="$space${b_sep_fg}" slice_joiner="${b_fg}${b_bg}${alt_sep}${space}" slice_empty_prefix="${b_fg}${b_bg}${space}" + [ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" + # section "b" slices + __promptline_wrapper "$USER" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } + + # section "c" header + slice_prefix="${c_bg}${sep}${c_fg}${c_bg}${space}" slice_suffix="$space${c_sep_fg}" slice_joiner="${c_fg}${c_bg}${alt_sep}${space}" slice_empty_prefix="${c_fg}${c_bg}${space}" + [ $is_prompt_empty -eq 1 ] && slice_prefix="$slice_empty_prefix" + # section "c" slices + __promptline_wrapper "$(__promptline_cwd)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; is_prompt_empty=0; } + + # close sections + printf "%s" "${reset_bg}${sep}$reset$space" +} +function __promptline_wrapper { + # wrap the text in $1 with $2 and $3, only if $1 is not empty + # $2 and $3 typically contain non-content-text, like color escape codes and separators + + [[ -n "$1" ]] || return 1 + printf "%s" "${2}${1}${3}" +} +function __promptline_right_prompt { + local slice_prefix slice_empty_prefix slice_joiner slice_suffix + + # section "warn" header + slice_prefix="${warn_sep_fg}${rsep}${warn_fg}${warn_bg}${space}" slice_suffix="$space${warn_sep_fg}" slice_joiner="${warn_fg}${warn_bg}${alt_rsep}${space}" slice_empty_prefix="" + # section "warn" slices + __promptline_wrapper "$(__promptline_last_exit_code)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; } + + # section "y" header + slice_prefix="${y_sep_fg}${rsep}${y_fg}${y_bg}${space}" slice_suffix="$space${y_sep_fg}" slice_joiner="${y_fg}${y_bg}${alt_rsep}${space}" slice_empty_prefix="" + # section "y" slices + __promptline_wrapper "$(__promptline_vcs_branch)" "$slice_prefix" "$slice_suffix" && { slice_prefix="$slice_joiner"; } + + # close sections + printf "%s" "$reset" +} +function __promptline { + local last_exit_code="${PROMPTLINE_LAST_EXIT_CODE:-$?}" + + local esc=$'[' end_esc=m + if [[ -n ${ZSH_VERSION-} ]]; then + local noprint='%{' end_noprint='%}' + elif [[ -n ${FISH_VERSION-} ]]; then + local noprint='' end_noprint='' + else + local noprint='\[' end_noprint='\]' + fi + local wrap="$noprint$esc" end_wrap="$end_esc$end_noprint" + local space=" " + local sep="" + local rsep="" + local alt_sep="" + local alt_rsep="" + local reset="${wrap}0${end_wrap}" + local reset_bg="${wrap}49${end_wrap}" + local a_fg="${wrap}38;5;232${end_wrap}" + local a_bg="${wrap}48;5;192${end_wrap}" + local a_sep_fg="${wrap}38;5;192${end_wrap}" + local b_fg="${wrap}38;5;192${end_wrap}" + local b_bg="${wrap}48;5;238${end_wrap}" + local b_sep_fg="${wrap}38;5;238${end_wrap}" + local c_fg="${wrap}38;5;192${end_wrap}" + local c_bg="${wrap}48;5;235${end_wrap}" + local c_sep_fg="${wrap}38;5;235${end_wrap}" + local warn_fg="${wrap}38;5;232${end_wrap}" + local warn_bg="${wrap}48;5;166${end_wrap}" + local warn_sep_fg="${wrap}38;5;166${end_wrap}" + local y_fg="${wrap}38;5;192${end_wrap}" + local y_bg="${wrap}48;5;238${end_wrap}" + local y_sep_fg="${wrap}38;5;238${end_wrap}" + if [[ -n ${ZSH_VERSION-} ]]; then + PROMPT="$(__promptline_left_prompt)" + RPROMPT="$(__promptline_right_prompt)" + elif [[ -n ${FISH_VERSION-} ]]; then + if [[ -n "$1" ]]; then + [[ "$1" = "left" ]] && __promptline_left_prompt || __promptline_right_prompt + else + __promptline_ps1 + fi + else + PS1="$(__promptline_ps1)" + fi +} + +if [[ -n ${ZSH_VERSION-} ]]; then + if [[ ! ${precmd_functions[(r)__promptline]} == __promptline ]]; then + precmd_functions+=(__promptline) + fi +elif [[ -n ${FISH_VERSION-} ]]; then + __promptline "$1" +else + if [[ ! "$PROMPT_COMMAND" == *__promptline* ]]; then + PROMPT_COMMAND='__promptline;'$'\n'"$PROMPT_COMMAND" + fi +fi