# ~/.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 historycmds() { history|sed -En "s/ +[0-9]+ +//p" } # source "$HOME/.cargo/env" SAGE_BROWSER=brave-browser BASH_VULNERABILITY="() { :; }; echo VULNERABLE" export BASH_VULNERABILITY # alias mydate="date \"+%a %b %e %H:%M:%S.%3N %Z %Y, unix %s.%06N\"" # alias nohistory="unset HISTFILE; echo Commands not logged" shopt -s histverify HISTCONTROL=ignoreboth HISTFILESIZE=250000 HISTSIZE=5000 # HISTTIMEFORMAT="%e %H:%M:%S " bashrc_testsethist() { ( echo -n >>"$1" ) >/dev/null 2>&1 && HISTFILE="$1" } bashrc_histfile_ref() { local d="$HOME/log/bash-history" # echo "=== [$d]" case "$1" in "$HOME"/*) d="$d${1/#"$HOME"/}" ;; /) d="$d"-root ;; /*) d="$d"-root"$1" ;; *) echo "bashrc_histfile_ref: Unrecognized pwd: $1" ;; esac # local b="$(basename "$d")" # local d="$(dirname "$d")" # echo "=== [$d] $b $d .bash_history" 2>&1 # false mkdir -p "$(dirname "$d")" HISTFILE="$d.bash_history" } bashrc_histfile_rel() { bashrc_testsethist "$1"/.bash_history || bashrc_histfile_ref } bashrc_gray_text="$( echo -e '\033[0;37m' )" bashrc_nc_text="$( echo -e '\033[0m' )" bashrc_histfile_reldir="" bashrc_histfile_setup() { local p="$(pwd)" case "$HISTFILE" in "$HOME"/.bash_history) case "$p" in "$HOME") bashrc_histfile_rel "$p" && bashrc_histfile_reldir="$p" ;; "$HOME"/*) bashrc_histfile_rel "$p" && bashrc_histfile_reldir="$p" ;; *) bashrc_histfile_ref "$p" && bashrc_histfile_reldir="$p" ;; esac ;; # /*) : ;; *) : ;; esac } bashrc_histfile_setup bashrc_precmd() { case "$bashrc_at_prompt" in 2|"") return ;; esac history -a bashrc_precmd_time="$( date +%s%06N )" bashrc_at_prompt=2 } trap bashrc_precmd DEBUG if [ -n "$HISTFILE" ]; then echo "$bashrc_gray_text""Commands logged to: $HISTFILE""$bashrc_nc_text" >&2 fi bashrc_histfile_ext='' bashrc_timediff() { local d="$(( $1 - $2 ))" local us="$(( $d % 1000 ))" local d="$(( $d / 1000 ))" local ms="$(( $d % 1000 ))" local d="$(( $d / 1000 ))" local secs="$(( $d % 60 ))" local d="$(( $d / 60 ))" local minutes="$(( $d % 60 ))" local d="$(( $d / 60 ))" local hours="$(( $d % 24 ))" local d="$(( $d / 24 ))" local days="$(( $d % 24 ))" if (( $days > 0 )); then printf "$days days" fi printf "%02d:%02d:%02d.%03d'%03d" "$hours" "$minutes" "$secs" "$ms" "$us" } bashrc_postcmd() { # echo == >&2 case "$bashrc_at_prompt" in 2) # could use tput for horizontal position bashrc_postcmd_time="$( date +%s%06N )" bashrc_last_command_time="$(bashrc_timediff "$bashrc_postcmd_time" "$bashrc_precmd_time")" echo "$bashrc_gray_text$bashrc_last_command_time$bashrc_nc_text" >&2 ;; esac if [ -n "$bashrc_histfile_reldir" ]; then local d="$(pwd)" if [ _"$bashrc_histfile_reldir" != _"$d" ] && [ -z "$bashrc_histfile_ext" ]; then echo "$bashrc_gray""Commands still logged to: $HISTFILE" >&2 bashrc_histfile_ext="$bashrc_gray_text([H]""$bashrc_histfile_reldir"")$bashrc_nc_text"' ' elif [ -n "($bashrc_histfile_ext" ] && [ _"$bashrc_histfile_reldir" = _"$d" ]; then bashrc_histfile_ext='' fi fi bashrc_at_prompt=1 } PROMPT_COMMAND=bashrc_postcmd PS1='$bashrc_histfile_ext'"$PS1" [ -f ~/.bashrc.d/hist-smenu ] && . ~/.bashrc.d/hist-smenu