Select Git revision
-
Jiří Kalvoda authoredJiří Kalvoda authored
bashrc 11.88 KiB
# ~/.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*) ;;
*)
[[ "$use_bashrc" = "" ]] && return;;
esac
######################### spawn-alacritty-cwd
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD}\007"'
if [[ "$LC_CD" != "" ]];
then
cd "$LC_CD";
export -n LC_CD
fi
########################################################################
######################### BASIC DEFAULT CONFIG #########################
########################################################################
######################### Local bin
export PATH=$PATH:~/bin
#unalias -a
######################### history files
# 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=10000
HISTFILESIZE=20000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# 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
##########################################################################
######################### GLOBAL HELPER FUNCTONS #########################
##########################################################################
device_name()
{
tmp="\h";
echo ${tmp@P};
}
device_name=`device_name`;
char() {
[ "$1" -lt 256 ] || return 1
printf "\\$(printf '%03o' "$1")"
}
###############################################################################
######################### ALIASES AND PROGRAMS CONFIG #########################
###############################################################################
#test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
real_ls=$(which ls)
ls(){
$real_ls --color=auto "$@"
}
######################### grep
real_grep="$(which grep)"
grep(){
$real_grep --color=auto "$@"
}
real_fgrep="$(which fgrep)"
fgrep(){
$real_fgrep --color=auto "$@"
}
real_egrep="$(which egrep)"
egrep(){
$real_egrep --color=auto "$@"
}
######################### ls
unalias ll 2>/dev/null
unalias la 2>/dev/null
unalias l 2>/dev/null
ll(){
ls -alF "$@"
}
la(){
ls -A "$@"
}
l(){
ls -CF "$@"
}
######################### vim
if which nvim >/dev/null 2>/dev/null
then
export EDITOR=nvim
export MANPAGER='nvim +Man!'
else
export EDITOR=vim
fi
e(){
$EDITOR "$@"
}
vi(){
e "$@"
}
view(){
e -R "$@"
}
######################### ping, traceroute
pink(){
ping kam.mff.cuni.cz "$@"
}
pink4(){
ping 195.113.20.16 "$@"
}
pink6(){
ping 2001:718:1e03:801::10 "$@"
}
traceroutek(){ traceroute kam.mff.cuni.cz "$@"
}
pin8(){ ping 8.8.8.8 "$@"
}
traceroute8(){ traceroute 8.8.8.8 "$@"
}
pinb(){
ping blatto.eu "$@"
}
pinb4(){
ping 95.85.217.30 "$@"
}
pinb6(){
ping 2a01:510:d504:75a0::1 "$@"
}
######################### mkdir, cd
mcd(){
mkdir -p "$1"; cd "$1"
}
mkdircd(){
mkdir "$1"; cd "$1"
}
######################## Open on background
BG(){
( "$@" 1>/dev/null 2>/dev/null & )
}
gopen(){
( xdg-open "$@" 2>/dev/null 1>/dev/null & )
}
g(){
( xdg-open "$@" 2>/dev/null 1>/dev/null & )
}
zath(){
for i in "$@"
do
zathura "$i" & sleep 0.2
done
}
zath1(){
for i in "$@"
do
zathura "$i" --page=1 & sleep 0.2
done
}
######################### Separators
promt(){
echo -n "${PS1@P}" | tr -d `char 1``char 2`
}
bashLine(){
promt
echo "$@"
"$@"
}
sepLine(){
s=$(printf "%-`stty size | cut -d ' ' -f 2`s" " ");echo -e "\e[30;48;5;82m${s// / }\e[0m"
}
######################### remove, coppy, move
real_rm="$(which rm)"
rmHARD(){
$real_rm "$@"
}
rm(){
trash "$@"
}
real_cp="$(which cp)"
cp(){
$real_cp -i "$@"
}
real_mv="$(which mv)"
mv(){
$real_mv -i "$@"
}
mňau(){
cat "$@"
}
rs(){
rsync --recursive --info=progress2 --info=name1 --sparse --stats "$@"
}
rsa(){
rs -at "$@"
}
######################### git
gic(){
git commit "$@"
}
gica(){
git commit --amend "$@"
}
gis(){
git status "$@"
}
gig(){
git log --oneline --graph "$@"
}
gil(){
git log --max-count=1 "$@"
}
gia(){
git add "$@"
}
giac(){
git add "$@"; git commit;
}
giaac(){
git add . "$@"; git commit;
}
giaca(){
git add "$@"; git commit --amend;
}
giaaca(){
git add . "$@"; git commit --amend;
}
gip(){
git pull "$@"; git push "$@";
}
gipma(){
b=$1
[[ "$b" == "" ]] && b="$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')"
git remote | while read r ; do echo -e "\e[91;1m PULL MEERGE $r $b\e[0m"; git pull $r $b --no-rebase ; done
git remote | while read r ; do echo -e "\e[91;1m PUSH $r $b\e[0m"; git push $r $b ; done
}
gipa() {
b=$1
[[ "$b" == "" ]] && b="$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')"
git remote | while read r ; do echo -e "\e[91;1m PULL $r $b\e[0m"; git pull $r $b ; done
git remote | while read r ; do echo -e "\e[91;1m PUSH $r $b\e[0m"; git push $r $b ; done
}
gir(){
git rebase $@
}
giri(){
git rebase -i $@
}
girc(){
git rebase --continue $@
}
######################### systemctl
sys(){
root systemctl "$@"
}
syss(){
root systemctl start "$@"
}
syse(){
root systemctl stop "$@"
}
sysp(){
root systemctl status "$@"
}
######################### movingssh
ms(){
movingssh "$@"
}
complete -F _movingssh ms
######################### gpg
bye(){
gpg-connect-agent reloadagent /bye
}
######################### neofetch
neopeč(){
neofetch
}
######################### ip
ipa(){
ip -br -c a
}
######################### root
please(){
root $(fc -ln -1)
}
######################### python
p(){
bpython "$@"
}
p3(){
python3 "$@"
}
pe(){
p="$PS1"
. "${1:-.}"/venv/bin/activate
PS1="$p"
}
pde(){
deactivate
}
####################### make
makej(){
make -j8 "$@"
}
makeme(){
make "$@" "$(cat /etc/hostname)"
}
d(){
BG ~/.config/alacritty/spawn-alacritty-cwd
}
cwd(){
cd $(wd $@)
}
mcwd(){
mcd $(wd $@)
}
#########################################################
######################### PROMT #########################
#########################################################
######################### git
promt_NoGit=0
promt_parse_git_branch() {
if [ $promt_NoGit -eq 0 ]; then
promt_git_branch="$(git branch 2>&1)"
if ! [[ "$promt_git_branch" == *"fatal: not a git repository"* ]]
then
if [[ "$promt_git_branch" == *"fatal: unsafe repository"* ]]
then
echo "[S]"
else
promt_git_branch=$(echo "$promt_git_branch" |sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/')
if [[ "$promt_git_branch" == '('*')' ]]
then
echo "$promt_git_branch"
else
echo "[E]"
fi
fi
fi
else
echo "[?]"
fi
}
######################### return value and user
promt_rvalue() {
lastcmd=$?;
if [ $lastcmd -ne 0 ]; then
echo "[$lastcmd]";
fi
exit $lastcmd
}
promt_NoUser=0
promt_usrCut(){
lastcmd=$?
usr="\u@\h"
usr="${usr@P}"
if [ $promt_NoUser -eq 0 ]; then
if [ $lastcmd -ne 0 ]; then
lastcmdStr="[$lastcmd]";
echo "${usr:${#lastcmdStr}}"
else
echo "$usr"
fi
fi
exit $lastcmd
}
######################### $ and new line
promt_NewLine=0;
promt_MakeNewLine(){
if [ $promt_NewLine -ne 0 ]; then
printf '\n$' #| sed -e 's/* \(.*\)/(\1)/'
else
printf '$' #| sed -e 's/* \(.*\)/(\1)/'
fi
}
######################### config functions
pNL()
{
if [ $promt_NewLine -eq 0 ]; then
promt_NewLine=1;
else
promt_NewLine=0;
fi
}
pNN()
{
if [ $promt_NoUser -eq 0 ]; then
promt_NoUser=1;
else
promt_NoUser=0;
fi
}
pG()
{
if [ $promt_NoGit -eq 0 ]; then
promt_NoGit=1;
else
promt_NoGit=0;
fi
}
nm()
{
neomutt -f"notmuch://?query=$1" ; offlineimap-run all
}
nmt()
{
neomutt -f"notmuch://?query=thread:{$1}" ; offlineimap-run all
}
nmi()
{
nm "tag:unread or tag:flagged"
}
nmat()
{
notmuch search --output=tags '*'
}
######################### default colors
promt_color_rvalue=91
promt_color_user=32
promt_color_dir=96
promt_color_git=93
promt_color_venv=93
promt_color_dolar=39
promt_color_right=32
######################### configuration by devices
if [[ "$device_name" == arch ]] || [[ "$device_name" == arzen ]]
then
promt_color_dir=91
fi
if [[ "$device_name" == *kam* ]] || [[ "$device_name" == *cam* ]]
then
promt_color_dir=92
fi
# 93 -> git
if [ "$device_name" == hopik ] ;
then
promt_color_dir=94
fi
if [[ "$device_name" == rpi* ]]
then
promt_color_dir=95
fi
######################### configuration by connection types
if [ "$SSH_CONNECTION" != "" ];
then
if [ "$LD_SSHTYPE" = "localhost" ] || [ "$LC_SSHTYPE" = "localhost" ]
then
true
elif [ "$LD_SSHTYPE" = "second" ] || [ "$LC_SSHTYPE" = "second" ]
then
promt_color_user=33
elif [ "$LD_SSHTYPE" = "local" ] || [ "$LC_SSHTYPE" = "local" ]
then
promt_color_user=96
else
promt_color_rvalue=32
promt_color_user=91
fi
fi
#
######################### non-native instalations
if [ "$device_name" == "externalArch" ] || [ -e /etc/is_virtual ];
then
promt_color_user=33
fi
######################### phone: no device name
if [ "$SSH_CONNECTION" == "" ]
then
if [ "$device_name" = "localhost" ]
then
pNN
fi
fi
if [ "$ISBREAKEBLE" = "1" ] ;
then
promt_color_user=95
fi
######################### configuration by user (root)
if [ "$USER" == "root" ];
then
promt_color_dolar="91;1"
fi
promt_pwd(){
wd="\w"
wd="${wd@P}"
if [[ "$VIRTUAL_ENV" == "" ]]
then
echo -e "\001\e[${promt_color_dir}m\002$wd"
else
ve="${VIRTUAL_ENV%/venv}"
[[ "$ve" =~ ^"$HOME"(/|$) ]] && ve="~${ve#$HOME}"
if [[ "$wd" =~ ^"$ve" ]]
then
echo -ne "\001\e[${promt_color_dir}m\002[\001\e[${promt_color_venv}m\002$ve\001\e[${promt_color_dir}m\002].${wd#$ve}"
else
echo -ne "\001\e[${promt_color_venv}m\002[$ve]\001\e[${promt_color_dir}m\002$wd"
fi
fi
}
######################### PS1
promt_PS1='\
\[\e[01;${promt_color_rvalue}m\]$(promt_rvalue)\
\[\e[01;${promt_color_user}m\]$(promt_usrCut)\
\[\e[${promt_color_dolar}m\]:\
$(promt_pwd)\
\[\e[00m\]\[\e[01;${promt_color_git}m\]$(promt_parse_git_branch)\
\[\e[0m\]\
\[\e[${promt_color_dolar}m\]\
$(promt_MakeNewLine)\[\e[21m\]\[\e[0m\] '
PS1="$promt_PS1"
# unset color_prompt force_color_prompt
###############################################################
######################### AUTO STARTX #########################
###############################################################
if [[ -z "${DISPLAY}" ]] && [[ "${XDG_VTNR}" = "1" ]]; then
exec startx
fi
####################################################################
######################### BASHRC DIRECTORY #########################
####################################################################
for i in ~/.config/bash/*
do
. $i
done 2>/dev/null
for i in ~/bin/bashrc/*
do
. $i
done 2>/dev/null
aux()
{
if [[ "$(pwd)" == /aux/* ]]
then
cwd 0 home
else
cwd 0 aux
fi
}
unset MAILCHECK
lpl()
{
lp -o Duplex=DuplexTumble -o XRFold=BiFoldStaple -o XROutputMode=HighResolution "$@"
}
lp1l()
{
lp -o Duplex=DuplexTumble -o XROutputMode=HighResolution "$@"
}
h(){
xdo hide "$WINDOWID";
"$@"
r=$?
xdo show "$WINDOWID"
return $r
}
x()
{
h "$(which x)" "$@"
}
bind -x '"\C-o": ranger-select files ""'
bind -x '"\eo": ranger-select dir "/"'
ranger-select() {
local F=$(mktemp)
ranger --choose$1=$F
if [ -s $F ] ; then
local SEL="$(<$F sed '/[^0-9A-Za-z._/-]/{s/^/"/; s/$/"/;}' | tr '\n' ' ')"
if [ "${SEL:${#SEL}-1}" != " " ] ; then
SEL="$SEL$2 "
fi
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$SEL${READLINE_LINE:$READLINE_POINT}"
READLINE_POINT=$(($READLINE_POINT + ${#SEL}))
fi
rm -f $F
}
ranger-cd() {
local F=$(mktemp)
ranger --choosedir=$F
if [ -s $F ] ; then
if [ "$(cat -- $F)" != "$(echo -n `pwd`)" ] ; then
cd -- "$(cat $F)"
fi
fi
rm -f $F
}