Last active
July 7, 2020 17:26
-
-
Save Trucido/d189425d44567967cbddd5ec463537a9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# .bashrc -*- mode:shell-script sh-basic-offset:4 indent-tabs-mode:nil -*- | |
# | |
# | |
# Sanity checks | |
# | |
[ -n "$BASH_VERSION" -a -n "$BASH" ] || return 0 | |
# Always set histfile to avoid clobbering other shells. | |
HISTFILE=${HOME}/.bash_history | |
# Test for corner cases in shells sourcing this file. | |
if [ -f /proc/mounts ]; then | |
shell=$(readlink /proc/$$/exe 2>/dev/null) || return 0 | |
case "$shell" in | |
*/bash) | |
while read -r -d $'\0' a ; do | |
case "$a" in | |
--noprofile) noprofile=true ;; | |
--restricted) restricted=true ;; | |
--posix) SH_VERSION="$BASH_VERSION" ;; | |
--norc) norc=true ;; | |
esac | |
done < /proc/$$/cmdline | |
case "$0" in | |
sh|-sh|*/sh) SH_VERSION="$BASH_VERSION" ;; | |
esac ;; | |
*) return 0 ;; | |
esac | |
else | |
return 0 | |
fi | |
unset a | |
[ "$noprofile" != true ] || return 0 | |
[ "$restricted" != true ] || return 0 | |
[ -z "$SH_VERSION" ] || return 0 | |
[ "$norc" != true ] || return 0 | |
# Not needed after initial bash checks, but just in case... | |
if ! shopt -oq posix 2>/dev/null; then :; else return 0; fi | |
# | |
# Environment | |
# | |
/usr/bin/tty -s && test -t && \ | |
{ | |
LANG=${LANG:-en_US.UTF-8} | |
LC_CTYPE=${LC_CTYPE:-en_US.UTF-8} | |
LANGUAGE=en_US.UTF-8:en_US:en | |
TZ="America/New_York" | |
IS_WSL=$(grep -i microsoft /proc/version) | |
LS_OPTIONS="-A -N --color=auto -T 0" | |
GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' | |
export LANG | |
# Editor(s) | |
if [ "${EUID}" = 0 ] || [ "$USER" = root ]; then | |
EDITOR=nano | |
GIT_EDITOR=vim | |
else | |
EDITOR='emacsclient -t -a="nano"' | |
GIT_EDITOR='emacsclient -t -a=""' | |
fi | |
NANO_OPTIONS='-B -C "/var/tmp" -G -H -O -S -U -a -q -w -x' | |
export EDITOR GIT_EDITOR NANO_OPTIONS | |
# Pager | |
MORE=-sl | |
# LESS | |
LESS='-FiRaX#.5' | |
PAGER=${PAGER:-less} | |
SYSTEMD_PAGER=${SYSTEMD_PAGER:-less} | |
export LESS MORE PAGER | |
# if [ -n "$BASH_VERSION" ]; then | |
# | |
# bashenv | |
# | |
HISTFILE=${HOME}/.bash_history | |
HISTSIZE=1000 | |
HISTFILESIZE=10000 | |
HISTCONTROL=ignoredups | |
HISTTIMEFORMAT="%F %H:%M:%S: " | |
shopt -s histappend no_empty_cmd_completion 2>/dev/null | |
[ "$IS_WSL" != "" ] && shopt -s huponexit | |
# elif [ -n "$ZSH_VERSION" ]; then | |
# # | |
# # zshenv | |
# # | |
# HISTFILE=${HOME}/.zsh_history | |
# #HISTTIMEFORMAT not supported yet in zsh | |
# alias h='fc -t "%Y:%m:%d %T:" -il' | |
# alias H='fc -t "%Y:%m:%d %T:" -il 1' | |
# setopt ALL_EXPORT | |
# ZDOTDIR=${HOME}/.zsh | |
# HISTSIZE=10000 | |
# SAVEHIST=10000 | |
# READNULLCMD=less | |
# HISTSIZE=10000 | |
# SAVEHIST=10000 | |
# HISTFILESIZE=10000 | |
# HISTCONTROL=ignoredups | |
# setopt HIST_IGNORE_DUPS APPEND_HISTORY INC_APPEND_HISTORY SHARE_HISTORY HIST_FCNTL_LOCK | |
# [ "$IS_WSL" != "" ] && setopt HUP | |
# unsetopt ALL_EXPORT | |
# fi | |
} 2>/dev/null || true | |
# | |
# PATH | |
# | |
if [ "$UID" = 0 ]; then | |
PATH=$HOME/bin:$HOME/.local/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/games:/var/games:/usr/lib/mit/sbin | |
elif [ "$UID" -ge 1000 ]; then | |
PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/var/games:/usr/lib/mit/bin | |
fi | |
export PATH | |
# | |
# LS_COLORS | |
# | |
if test -z "$SSH_CONNECTION" -a -z "$SSH_TTY" -a -z "$STY" -a -z "$MC_SID" -a \ | |
"${TERM}" != dumb -a "x`/usr/bin/tty -s && /usr/bin/tput colors 2>/dev/null`" = "x256" | |
then | |
LS_COLORS='rs=0:di=38;5;33:ln=3;36:mh=3;38;5;5:pi=40;38;5;1:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=01;37;41:mi=01;37;41:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;21:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;40:*.cmd=38;5;70:*.exe=38;5;70:*.com=38;5;70:*.bat=38;5;70:*.btm=38;5;70:*.dll=38;5;70:*.local=38;5;239:*.list=01;38;5;5:*.ymp=01;38;5;5:*.lst=01;38;5;5:*.repo=01;38;5;5:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.iso=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.JPG=38;5;13:*.JPEG=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.ico=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.webp=38;5;13:*.ogm=38;5;13:*.divx=38;5;13:*.xvid=38;5;13:*.3gp=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.aiff=38;5;45:*.ape=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.FLAC=38;5;45:*.m4a=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.MP3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.voc=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.WAV=38;5;45:*.wma=38;5;45:*.wv=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.opus=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:*.m4r=38;5;45:*.mp2=38;5;45:*.mod=38;5;45:*.xm=38;5;45:*.s3m=38;5;45:*.it=38;5;45:*~=38;5;239:*.bak=38;5;239:*.bak2=38;5;239:*.bak3=38;5;239:*.bak4=38;5;239:*.bak5=38;5;239:*.swp=38;5;239:*.bck=38;5;239:*.bk=38;5;239:*.old=38;5;239:*.tmp=38;5;239:*history=38;5;239:*hist=38;5;239:*.lesshst=38;5;239:*hsts=38;5;239:*.log=38;5;239:*.tmp=38;5;239:*.i18n=38;5;239:*.urlview=38;5;239:*dump=38;5;239:*template=38;5;239:*temp=38;5;239:*-errors=38;5;239:*.tmp*=38;5;239:*.save=38;5;229:*.rpmsave=38;5;229:*.rpmnew=38;5;229:*.rpmorig=38;5;229:*.rpmbak=38;5;229:*.notes=38;5;229:*.dpkg-new=38;5;229:*.conf.new=38;5;229:*NOTE*=38;5;229:*.save=38;5;229:*.rpmsave=38;5;229:*.rpmnew=38;5;229:*.rpmorig=38;5;229:' | |
export LS_COLORS | |
else | |
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00;35:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.bat=00;32:*.btm=00;32:*.dll=00;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:' | |
export LS_COLORS | |
fi | |
# | |
# Set some basic aliases | |
# | |
{ | |
alias o='less -FiRaX#.5' | |
alias l='/bin/ls -ANFv --group-directories-first --color=auto -T 0' | |
alias ll='/bin/ls -hAlNFsv --group-directories-first --color=auto -T 0' | |
alias cp='cp -v --sparse=auto --reflink=auto' | |
alias cpa='cp -v --preserve=all --sparse=auto --reflink=auto' | |
alias cpx='cp -avx --sparse=auto --reflink=auto' | |
alias cpz='cp -vZ --preserve=all --sparse=auto --reflink=auto' | |
alias mv='mv -v' | |
alias mvz='mv -vZ' | |
alias ln='ln -v' | |
alias mkdir='mkdir -v' | |
alias md='mkdir -pv' | |
alias mdz='mkdir -pvZ' | |
alias rm='rm -v --i=once --preserve-root' | |
alias rd='rmdir -v' | |
alias cl='clear' | |
alias grep='grep --color=auto' | |
alias dfa='/bin/df -halT | column -t' | |
alias chmodx='chmod +x' | |
alias sudo='sudo ' | |
alias klogw='journalctl -kef' | |
alias jlogw='journalctl -ef' | |
# more verbose modinfo | |
modinfov() { | |
systool -m ${1+"$@"} -av | |
} | |
# which2 | |
if /usr/bin/which -V 2>/dev/null | grep -q GNU 2>/dev/null; then | |
alias which2='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot' | |
fi | |
# Man | |
if [ -z "$MANPAGER" ] && [ ! -e /usr/bin/manpager ]; then | |
if [ -z "${PAGER}" ] || [ "${PAGER##*/bin/}" = less ]; then | |
man() { | |
env LESS_TERMCAP_mb="$(printf '\e[1;31m')" \ | |
LESS_TERMCAP_md="$(printf '\e[38;5;33m')" \ | |
LESS_TERMCAP_me="$(printf '\e[0m')" \ | |
LESS_TERMCAP_se="$(printf '\e[0m')" \ | |
LESS_TERMCAP_so="$(printf '\e[1;44;33m')" \ | |
LESS_TERMCAP_ue="$(printf '\e[0m')" \ | |
LESS_TERMCAP_us="$(printf '\e[38;5;136;4m')" \ | |
GROFF_NO_SGR="yes" \ | |
LESS='-FiRaX#.5' \ | |
man "$@" | |
} | |
fi | |
fi | |
# ls permissions in digits | |
_lsp() { | |
( /bin/ls -alG "$@" ) | \ | |
( awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o",k);print}' ); | |
} | |
alias lsp=_lsp | |
#lesspipe.sh (https://github.com/wofr06/lesspipe/) | |
if [ -x /usr/local/bin/lesspipe.sh ]; then | |
less() { | |
env LESSOPEN="|/usr/local/bin/lesspipe.sh %s" \ | |
LESSCLOSE='' \ | |
LESSCHARSET="$(locale charmap 2>/dev/null)" \ | |
LESS_ADVANCED_PREPROCESSOR='1' \ | |
LESSQUIET='1' \ | |
LESS=${LESS:-'-FiRaX#.5'} \ | |
less "$@" | |
} | |
fi | |
# colordiff | |
if [ -x /usr/bin/colordiff ]; then | |
ccdiff() { | |
/usr/bin/colordiff ${1+"$@"} | LESS='-FiRaX#.5' less | |
} | |
fi | |
} 2>/dev/null || true | |
# Prevent double sourcing | |
if [ -z "$BASHRCREAD" ]; then | |
/usr/bin/tty -s || return 0 | |
BASHRCREAD="Y" | |
# | |
# Interactive only | |
case $- in | |
*i*) | |
# | |
# aliases | |
# | |
if [ -e ~/.alias ] && [ -e ~/.bash_aliases ]; then | |
# Handle case of symlinked alias file | |
if [ "`readlink -sfq ~/.alias`" != "`readlink -sfq ~/.bash_aliases`" ]; then | |
test -s ~/.alias && . ~/.alias 2>/dev/null || true | |
test -s ~/.bash_aliases && . ~/.bash_aliases 2>/dev/null || true | |
else | |
test -s ~/.bash_aliases && . ~/.alias 2>/dev/null || true | |
fi | |
else | |
# One of these should exist, so avoid extra elifs and just test anyway. | |
test -s ~/.alias && . ~/.alias 2>/dev/null || true | |
test -s ~/.bash_aliases && . ~/.bash_aliases 2>/dev/null || true | |
fi | |
# | |
# Inputrc/readline settings | |
# | |
if test -n "$TERM" -a -z "$MC_SID" -a -t ; then | |
{ | |
bind "set meta-flag on" | |
bind "set input-meta on" | |
bind "set output-meta on" | |
bind "set convert-meta off" | |
bind "set enable-meta-key off" | |
bind "set bell-style none" | |
bind "set show-all-if-ambiguous on" | |
bind "set show-all-if-unmodified on" | |
bind "set page-completions off" | |
bind "set completion-query-items 500" | |
bind "set completion-ignore-case on" | |
bind "set match-hidden-files on" | |
bind "set colored-stats on" | |
bind "set menu-complete-display-prefix off" | |
bind "set colored-completion-prefix on" | |
bind "set mark-directories on" | |
bind "set mark-symlinked-directories on" | |
bind "set skip-completed-text on" | |
bind "set meta-flag on" | |
bind "set input-meta on" | |
bind "set output-meta on" | |
bind "set convert-meta off" | |
bind "set enable-meta-key off" | |
bind "set bell-style none" | |
bind "set show-all-if-ambiguous on" | |
bind "set show-all-if-unmodified on" | |
bind "set page-completions off" | |
bind "set completion-query-items 500" | |
bind "set completion-ignore-case on" | |
bind "set match-hidden-files on" | |
bind "set colored-stats on" | |
bind "set menu-complete-display-prefix on" | |
bind "set colored-completion-prefix on" | |
bind "set mark-directories on" | |
bind "set mark-symlinked-directories on" | |
bind "set skip-completed-text on" | |
} 2>/dev/null || : | |
# | |
# Set window title of xterms, use __vte_prompt_command if available. | |
# | |
if [ -z "$PROMPT_COMMAND" ]; then | |
case "${TERM}" in | |
[aeEkx]term*|vte*|rxvt*|gnome*|konsole*|interix) | |
if [ "${VTE_VERSION:-0}" -ge 3405 ]; then | |
# prevent double sourcing of vte.sh | |
if ! command -v __vte_prompt_command >/dev/null 2>&1 ; then | |
if [ -r /etc/profile.d/vte.sh ]; then | |
. /etc/profile.d/vte.sh | |
elif [ -r /etc/profile.d/vte-3.91.sh ]; then | |
. /etc/profile.d/vte-3.91.sh | |
fi | |
fi | |
# Check vte.sh was loaded and we have __vte_prompt_command | |
if command -v __vte_prompt_command >/dev/null 2>&1 ; then | |
PROMPT_COMMAND="__vte_prompt_command" | |
else | |
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' | |
fi | |
elif [ -n "$STY" ]; then ## # Some screen* terms lie about their $TERM | |
PROMPT_COMMAND='printf·"\033k%s@%s:%s\033\\"·"${USER}"·"${HOSTNAME%%.*}"·"${PWD/#$HOME/\~}"' | |
else | |
PROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' | |
fi | |
;; | |
screen*) | |
PROMPT_COMMAND='printf "\033k%s@%s:%s\033\\" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"' | |
;; | |
*) ;; | |
esac | |
fi | |
# | |
# PROMPT | |
# | |
#show error code of last command. | |
prompt_errstatus() { local e=$?; [ $e != 0 ] && echo -e " $e"; } | |
#prompt_bang() { [ "$USER" = "root" ] && printf "%s" "#" || printf "%s" "\$"; } | |
if [ "$EUID" = 0 ] || [ "$USER" = "root" ]; then | |
PS1="\[\e[01;30m\]\A \[\e[00;31m\]\u\[\e[01;30m\]@\[\e[00;36m\]\h\[\e[01;30m\]:\[\e[00;34m\]\w\[\e[00;35m\]\$(prompt_errstatus)\[\e[00;31m\] \\$\[\e[00m\] " | |
else | |
PS1="\[\e[01;30m\]\A \[\e[00;32m\]\u\[\e[01;30m\]@\[\e[00;36m\]\h\[\e[01;30m\]:\[\e[00;34m\]\w\[\e[00;35m\]\$(prompt_errstatus)\[\e[00;32m\] \\$\[\e[00m\] " | |
fi | |
# | |
# Git info (no fancy colors just yellow) | |
# | |
if ! command -v __git_ps1 >/dev/null 2>&1 ; then | |
# Avoid double sourcing | |
if [ -r /etc/bash_completion.d/git-prompt.sh ]; then | |
. /etc/bash_completion.d/git-prompt.sh | |
elif [ -r /etc/bash_completion.d/git-prompt ]; then | |
. /etc/bash_completion.d/git-prompt | |
elif [ -r /usr/share/git-core/contrib/completion/git-prompt.sh ]; then | |
. /usr/share/git-core/contrib/completion/git-prompt.sh | |
fi | |
fi | |
# Check we have git info now and set some basic options | |
if command -v __git_ps1 >/dev/null 2>&1 ; then | |
GIT_PS1_SHOWDIRTYSTATE=1 | |
GIT_PS1_SHOWSTASHSTATE=1 | |
GIT_PS1_SHOWUNTRACKEDFILES=1 | |
#GIT_PS1_SHOWUPSTREAM="verbose legacy git" | |
GIT_PS1_DESCRIBE_STYLE=default | |
#GIT_PS1_SHOWCOLORHINTS=1 | |
# dirty sed ps1 hack to include __git_ps1 | |
PS1="$(echo -n "$PS1" | sed "s|\\\w|\\\w\\\[\\\e[00;33m\\\]\$(__git_ps1 \" (%s)\")|")" | |
fi | |
fi | |
;; | |
*) return 0 ;; | |
esac | |
fi | |
# ex: ts=4 sw=4 et filetype=sh | |
# | |
# End: .bashrc | |
# |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment