if [ -f /etc/bashrc ]; then . /etc/bashrc # --> Read /etc/bashrc, if present. fi # if [ -f /etc/bash_completion ]; then # . /etc/bash_completion # fi ############## # Networking # ############## function proxy() { proxy_url="$(~/proxy.sh)" IFS=' ' read -r -a proxies <<< "$proxy_url" export http_proxy="${proxies[0]}" export https_proxy="${proxies[1]}" export ftp_proxy="${proxies[0]}" echo ${proxies[@]} } function proxy_app() { proxy_url="$(~/proxy_app.sh)" IFS=' ' read -r -a proxies <<< "$proxy_url" export http_proxy="${proxies[0]}" export https_proxy="${proxies[1]}" export ftp_proxy="${proxies[0]}" echo ${proxies[@]} } function noproxy() { export http_proxy="" export https_proxy="" export ftp_proxy="" } # get the current IP adresses on eth0 function myip() { MY_IP=$(/sbin/ifconfig eth0 | awk '/inet/ { print $2 } ' | sed -e s/adr:// | sed -e s/inet6://) echo $MY_IP } # copy a stream in the X clipboard, e.g. "cat file | xcopy" alias xcopy="xclip -i -selection clipboard" # baskcup shortcuts alias rcp='rsync -avz --ignore-existing --progress --rsh "ssh" ' alias rcp_443='rsync -avz --ignore-existing --progress --rsh "ssh -p 443" ' alias rcp_80='rsync -avz --ignore-existing --progress --rsh "ssh -p 80" ' ################### # File management # ################### # Find a file with a pattern in name from the current directory # ff name function ff() { find . -type f -iname "'*'$*'*'" -ls ; } # move to ~/.Trash instead of rm a file function del() { for i in $* ; do mv $i ~/.local/share/Trash/files/ done } # go up n directories up() { local str="" local count=0 while [[ "$count" -lt "$1" ]] ; do str=$str"../" let count=count+1 done cd $str } alias ..='cd ..' alias ...='cd ../../' # move backup files to trash clean() { local globs='*~ .*.swp *.cpp.o' while true; do read -p "Supprimer récursivement les fichiers '$globs' à partir de $(pwd) ?" yn case $yn in [YyOo]* ) break;; [Nn]* ) exit;; * ) echo "Répondez par oui ou par non";; esac done for g in $globs ; do echo -n "$g ..." find . -name "$g" -delete echo " done" done } # Prevents accidentally clobbering files. alias mv='mv -i' alias mkdir='mkdir -p' # The 'ls' family (this assumes you use the GNU ls)) # Mispelling on azerty keyboards alias lks='ls' # alias ks='ls' alias ms='ls' # alias ls='ls -hF --color' # add colors for filetype recognition # alias l='ls -1' # alias la='ls -Al' # show hidden files # alias lx='ls -lXB' # sort by extension # alias lk='ls -lSr' # sort by size # alias lc='ls -lcr' # sort by change time # alias lu='ls -lur' # sort by access time # alias lr='ls -lR' # recursive ls # alias lt='ls -ltr' # sort by date # alias lm='ls -al --color=none|less' # pipe through 'less' # alias ll='ls -l' # alias tree='tree -Csu' # nice alternative to 'ls' export PATH="$PATH:$HOME/.cargo/bin" exadef="--icons --modified " exal="--long --all --group --modified --header --level 2 --time-style=long-iso --binary" alias ls='exa ${exadef}' # add colors for filetype recognition alias l='exa ${exadef} -1 --no-icons' alias la='exa ${exadef} --all' # show hidden files alias lx='exa ${exadef} ${exal} --sort extension' # sort by extension alias lk='exa ${exadef} ${exal} --sort size --reverse' # sort by size alias lc='exa ${exadef} ${exal} --sort modified' # sort by change time alias lm='exa ${exadef} ${exal} --sort=modified --reverse' alias lu='exa ${exadef} ${exal} --sort accessed' # sort by access time alias lt='exa ${exadef} ${exal} --sort created' # sort by date alias lr='exa ${exadef} ${exal} --recurse' # recursive ls alias le='exa ${exadef} ${exal} | kak' # pipe through editor alias ll='exa ${exadef} ${exal}' alias tree='exa ${xadef} ${exal} --tree' # nice alternative to 'ls' # changes the default head/tail behaviour to output x lines, # where x is the number of lines currently displayed on your terminal alias head='head -n $((${LINES:-`tput lines 2>/dev/null||echo -n 12`} - 15))' alias tail='tail -n $((${LINES:-`tput lines 2>/dev/null||echo -n 12`} - 15))' # If the output is smaller than the screen height is smaller, # less will just cat it # + support ANSI colors export LESS="-FX -R" # Syntax coloring with pygments in less, when opening source files export LESSOPEN='|~/code/dotfiles/lessfilter.sh %s' # nautilus file manager in browser mode without destkop management alias Ex='nautilus --no-desktop --browser .' alias k="kanban" # Make a directory and move to it function md() { mkdir $1 cd $1 } # if in an interactive shell if [[ $- == *i* ]]; then # use up/down to search history, matching the current line start bind '"\e[A": history-search-backward' bind '"\e[B": history-search-forward' fi ############# # Processes # ############# function psg() { # do not show grep itself color matching string color the PID ps aux | grep -v grep | grep --ignore-case --color=always $1 | colout '^\S+\s+([0-9]+).*$' blue } function agc() { ag "$1" | colout "$1" } # Notify when a command is completed, with a visual warning. function notify() { cmd=$(echo "$1" | sed 's/&/&/g') if [[ "$1" != "" ]] ; then $@ fi if [[ $? ]] ; then msg="Your \"$cmd\" command is completed" else msg="There was an error in your \"$cmd\" command" fi zenity --info --text "$msg\nin $((e-s)) s\n$(date)" & } # Notify when a command is completed, with an audio and visual warning. function notice() { s=$SECONDS cmd=$(echo "$1" | sed 's/&/&/g') if [[ "$1" != "" ]] ; then $@ fi if [[ $? ]] ; then msg="Your \"$cmd\" command is completed" else msg="There was an error in your \"$cmd\" command" fi zenity --info --text "$msg\nin $((e-s)) s\n$(date)" & # if the command has run more than a minute # then say loudly that it ended e=$SECONDS if [[ $((e-s)) -ge 1 ]] ; then espeak -s 110 "$msg" 2>/dev/null >/dev/null fi } # Notify with a visual warning. function ended() { notify } function forever() { cmd="$1" while [[ 1 ]]; do echo "$cmd" $cmd if [[ $? > 128 ]]; then break; fi done } ########## # Coding # ########## #alias agrep="ag" #alias ag="~/apps/the_silver_searcher/ag" #alias kak="/home/nojhan/code/kakoune/src/kak" # repeat n times command # repeat 10 echo "ok" function repeat() { local i max max=$1; shift; for ((i=1; i <= max ; i++)); do # --> C-like syntax eval "$@"; done } # default editor export EDITOR='kak' # aliases to manage vim in server mode alias latexed="gvim --servername LATEX " # alias ide="gvim --servername IDE " alias ide="kak -s ide -e 'rename-client main'" # print a vim fortune at startup #/usr/games/fortune vimtips # ipython shell with correct default apps alias ipy='ipython -pylab -p scipy --editor="gvim"' # colored cmake/gcc output using the colout command # usage: cm ./build_script function cm() { set -o pipefail $@ 2>&1 | colout -t cmake | colout -t g++ | colout -t ctest #| less } function cpy() { set -o pipefail $@ 2>&1 | colout -t python } function ctex() { set -o pipefail $@ 2>&1 | colout -t latex } function m() { set -o pipefail cm cmake .. && cm make $@ && ./$@ } function ma() { set -o pipefail N=$(($(nproc)-1)) cm cmake .. && cm make -j $N $@ && cm ctest -j $N } # shortcut to display the url config of remote repo in a git root alias git_remotes="grep -A 2 \"\[remote\" .git/config|grep -v fetch|sed \"s/\[remote \\\"//\"|sed ':a;N;\$!ba;s/\"\]\n\s*url = /\t/g'" # Pretty git log alias git_log="git log --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" # ignore all files that are not versioned in a git repository function git_ignore() { if [[ ! -f .gitignore ]] ; then echo ".gitignore" > .gitignore fi git ls-files --other --exclude-standard >> .gitignore } # Take a snapshot of the current git repository and zip it. # The archive file name has the current date in its name. function git_archive() { last_commit_date=$(git log -1 --format=%ci | awk '{print $1"_"$2;}' | sed "s/:/-/g") project=$(basename $(pwd)) branch=$(git rev-parse --abbrev-ref HEAD) name=${project}_${branch}_${last_commit_date} git config tar.tar.xz.command "xz -c" git archive --prefix=$name/ --format tar.xz ${branch} > $name.tar.xz echo $name.tar.xz } # Intuitive calculator on the command line # $ = 3 × 5.1 ÷ 2 # 7,65 calc() { calc="$@" # We can use the unicode signs × and ÷ calc="${calc//×/*}" calc="${calc//÷//}" echo -e "$calc\nquit" | gcalccmd | sed 's/^> //g' } ################# # Configuration # ################# # Note: purge-old-kernels is in the bikeshed package alias upgrade="sudo apt update && sudo apt dist-upgrade -y && sudo apt --purge autoremove -y && sudo apt autoclean -y && sudo apt clean" # alias I want to learn function h() { echo "la : show hidden files" echo "lx : sort by extension" echo "lk : sort by size" echo "lc : sort by change time" echo "lu : sort by access time" echo "lr : recursive ls" echo "lt : sort by date" echo "lm : pipe through 'less'" echo "md : mkdir, cd" echo "tree : nice alternative to 'ls'" echo "ff [pattern] : find a file with a pattern in name" echo "myip : show the IP address of eth0" echo "repeat [n] [command] : repeat n times command" echo "clean : remove backup files (*~)" echo "psg : ps aux | grep " echo "rcp : copy with rsync/ssh" } # do not permits to recall dangerous commands in bash history # export HISTIGNORE='&:[bf]g:exit:*>|*:*rm*-rf*' export HISTIGNORE='&:[bf]g:exit:*>|*' # append history rather than overwrite shopt -s histappend # one command per line shopt -s cmdhist unset HISTFILESIZE HISTSIZE=1000000 # ignore commands that start with a space AND duplicate commands HISTCONTROL=ignoreboth # add the full date and time to lines HISTTIMEFORMAT='%F %T ' # store history immediately #; history -n' # Manually switch to the bépo keyboard layout alias bepo="setxkbmap -layout fr -variant bepo -option" # Import the correct alias for thefuck # eval $(thefuck --alias fuck) # Alias for forcing screen on/off. alias screenon="xset -display :0.0 dpms force on" alias screenoff="xset -display :0.0 dpms force off" # Lock the screens and turn them off. alias afk="cinnamon-screensaver & cinnamon-screensaver-command -l & xset -display :0.0 dpms force off" # Use liquidprompt only if in an interactive shell if [[ $- == *i* ]]; then # Super nice prompt source ~/.liquidprompt --no-activate lp_activate #--no-config JOLLY_SPACE_LINE="‎" # empty character JOLLY_ITEMS=("" "┃" "━") source ~/code/lp-jolly/presets/variant-chevron.conf source ~/code/lp-jolly/jolly.theme && lp_theme jolly fi if [[ $- == *i* ]] ; then for f in /etc/bash_completion.d/* ; do source "$f" done # for f in /usr/share/bash-completion/completions/*; do # source "$f" # done bcp="/usr/share/bash-completion/completions" enabled=("apt" "autossh" "c++" "chmod" "chown" "file-roller" "find" "g++" "git" "gitk" "htop" "inkscape" "iwconfig" "jq" "jsonschema" "kill" "killall" "lftp" "make" "man" "mktemp" "mount" "python" "python3" "pyvenv" "R" "rsync" "sh" "shellcheck" "ssh" "ssh-copy-id" "sudo" "su" "tar" "umount" "useradd" "usermod" "valgrind" "vifm" "wget" "wine") for f in $enabled; do source "$bcp/$f" done fi # Always connect to a tmux session when SSH. if [[ $- =~ i ]] && [[ -z "$TMUX" ]] && [[ -n "$SSH_TTY" ]]; then tmux attach-session -t ssh_tmux || tmux new-session -s ssh_tmux fi # In case of problem, just connect with bash --norc: # ssh -t myname@myserver bash --norc export TCLLIBPATH="~/.local/share/tkthemes" # Add pip bin dir to path: export PATH="$PATH:$HOME/.local/bin/:$HOME/code/colout/colout/" export PATH="$PATH:/home/nojhan/.local/bin/:/home/nojhan/go/bin/" export PATH="$PATH:/home/nojhan/apps/csv-validator-distribution-1.3.0-bin/" alias colout="colout.py" # export PYTHONPATH="$PYTHONPATH:/home/nojhan/code/terminator/" export PYTHONPATH="$PYTHONPATH:/opt/pyAgrum/lib/python3.8/site-packages/" export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 # . "$HOME/.cargo/env" alias t="~/code/taskwarrior-deluxe/taskwarrior-deluxe.py" alias task="TASKDATA=.task task" # Add neo4j path export PATH="$PATH:/home/nojhan/apps/neo4j/packaging/standalone/target/neo4j-community-5.13.0-SNAPSHOT/bin/" export NEO4J_HOME="/home/nojhan/apps/neo4j/packaging/standalone/target/neo4j-community-5.13.0-SNAPSHOT/" export PATH="$PATH:/usr/local/bin/" # export PYTHONPATH="$PYTHONPATH:/home/nojhan/code/terminator/" export PYTHONPATH="$PYTHONPATH:/opt/pyAgrum/lib/python3.8/site-packages/:/home/nojhan/travail/code/biocypher:/home/nojhan/travail/code/ontoweaver/src/" # export TERMINAL="/usr/local/bin/terminator" export TERMINAL="terminator" eval "$(direnv hook bash)" if [[ $- == *i* ]] ; then # Use autojump only if in an interactive shell source /usr/share/autojump/autojump.bash fi export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring ulimit -n 40000 export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion alias cat="/usr/bin/batcat"