diff --git a/zsh/zshrc.d/10_shellopts.sh b/zsh/zshrc.d/10_shellopts.sh deleted file mode 100644 index 1422272..0000000 --- a/zsh/zshrc.d/10_shellopts.sh +++ /dev/null @@ -1,45 +0,0 @@ -setopt EXTENDED_HISTORY -setopt HIST_EXPIRE_DUPS_FIRST -setopt HIST_VERIFY -setopt INC_APPEND_HISTORY -setopt SHARE_HISTORY -setopt AUTO_CD -setopt APPEND_HISTORY -setopt HIST_IGNORE_DUPS -setopt NOHIST_IGNORE_ALL_DUPS -setopt HIST_IGNORE_SPACE -setopt CORRECT -setopt RM_STAR_SILENT -setopt BG_NICE -setopt CHECK_JOBS -setopt HUP -setopt LONG_LIST_JOBS - -setopt share_history - -bindkey -e - -autoload -U promptinit -promptinit - -autoload -U colors -colors - -autoload -U compinit -compinit -zstyle ':completion:*' menu select -setopt completealiases - -autoload -U edit-command-line -zle -N edit-command-line -bindkey '^xe' edit-command-line -bindkey '^x^e' edit-command-line - -HISTSIZE=10000 -SAVEHIST=10000 -HISTFILE="$HOME/.zsh_history" - -autoload -Uz vcs_info -zstyle ':vcs_info:*' enable git hg -zstyle ':vcs_info:*' check-for-changes true -zstyle ':vcs_info:git*' formats "%{${fg[cyan]}%}[%{${fg[green]}%}%s%{${fg[cyan]}%}][%{${fg[blue]}%}%r/%S%%{${fg[cyan]}%}][%{${fg[blue]}%}%b%{${fg[yellow]}%}%m%u%c%{${fg[cyan]}%}]%{$reset_color%}" diff --git a/zsh/zshrc.d/20_aliases.sh b/zsh/zshrc.d/20_aliases.sh deleted file mode 100644 index fd5569d..0000000 --- a/zsh/zshrc.d/20_aliases.sh +++ /dev/null @@ -1,312 +0,0 @@ -alias vim="nvim" - -### BETTER COMMANDS -alias ls="exa --oneline --icons --group-directories-first" -alias ll='ls --all --long --classify --group --modified --time-style=long-iso --git' -alias la='ls --all' - -alias spm="sudo pacman" - -alias tml="tmux list-sessions" -alias tma="tmux ls 2>/dev/null && tmux attach-session || tmux" -alias tmn="tmux new-session -A -s" - -alias clipc="xclip -selection primary" -alias clipo="xclip -out -selection clipboard" - -alias rgrep="grep -r" - -alias vimrc="vim -c ':e \$MYVIMRC'" -alias zshrc="vim -c ':e ~/.zshrc' ; source ~/.zshrc" - -alias calc='python3 -ic "from math import *; import cmath"' - -alias le_haxxor_1='clear && dmesg | pv -qL 20' -alias le_haxxor_2='clear && hexdump -C /dev/urandom | pv -qlL 2' - -alias root='sudo -sE' - -### USEFUL DEFAULT OPTIONS -alias tmux="tmux -2" - -alias chmod="chmod -c" -alias chown="chown -c" - -alias diff="diff --color=auto" - -alias grep='grep --color=auto' -alias fgrep='fgrep --color=auto' -alias egrep='egrep --color=auto' - -alias rg='rg --hidden --glob "!.git/**"' - -alias rm='rm -v' -alias cp='cp -vi' -alias mv='mv -vi' -alias ln='ln -v' - -alias du='du -h' -alias df='df -h' - -### SHORTENING COMMAND NAMES -alias cs="cryptsetup" -alias v="vim" -alias g="git" -alias c="cd" -alias l="ls" -alias s="sudo" -alias cl="clear" - -alias nocolor="sed -r \"s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g\"" - -alias ip="ip -color" - -alias vimtask="vim -c :TW" - -alias tw="task" -alias twl="task list" -alias twa="task add" -alias twd="task done" -alias inbox="task add +inbox" - -alias yaml2json="python3 -c 'import sys, yaml, json; json.dump([d for d in yaml.safe_load_all(sys.stdin)][-1], sys.stdout, indent=4)'" -alias json2yaml="python3 -c 'import sys, yaml, json; yaml.safe_dump(json.loads(sys.stdin.read()), stream=sys.stdout)'" - -alias currentbranch='git rev-parse --abbrev-ref HEAD' - -alias issh="ssh -o StrictHostKeyChecking=false -o UserKnownHostsFile=/dev/null" -alias gfix='git commit --amend --no-edit' -alias gfixa='git commit --amend --no-edit --all ' -alias gfixp='git commit --amend --no-edit --patch' - -alias issh="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" - -alias newpw="pwgen --secure 25 1" - -alias sys="systemctl" -alias sysu="systemctl --user" - -alias gpg=gpg2 - -alias alacritty="alacritty --config-file $HOME/.config/alacritty.toml" - -alias d=docker -alias dc=docker-compose - -alias hx=helix -alias h=helix - -gitmaster() { - git stash push -m gitmaster-$(date -uIseconds) -u || return 1 - _branch=$(git rev-parse --abbrev-ref HEAD) - git fe || return 1 - git checkout master || return 1 - git merge origin/master || return 1 - git checkout $_branch - git stash pop -} - -_remote() { - [[ -n "$SSH_CONNECTION" ]] -} - -cd() { - builtin cd "$@" && ls -} - -mount() { - if [[ $# == 0 ]] ; then - command mount | column -t - else - command mount "$@" - fi -} - -extr() -{ - if [[ -f "$1" ]] ; then - case "$1" in - *.tar.bz2 ) tar xvjf "$1" ;; - *.tar.gz ) tar xvzf "$1" ;; - *.tar.xz ) tar xvJf "$1" ;; - *.bz2 ) bunzip2 "$1" ;; - *.rar ) unrar x "$1" ;; - *.gz ) gunzip "$1" ;; - *.tar ) tar xvf "$1" ;; - *.tbz2 ) tar xvjf "$1" ;; - *.tgz ) tar xvzf "$1" ;; - *.zip ) unzip "$1" ;; - *.Z ) uncompress "$1" ;; - *.7z ) 7z x "$1" ;; - *) - echo "$1 cannot be extracted via $0" - ;; - esac - else - echo "$1 is not a valid file" - fi -} - -ruler() { - for s in '....^....|' '1234567890'; do - w=${#s} - str=$(for (( i=1; $i<=$(( ($COLUMNS + $w) / $w )) ; i=$i+1 )); do echo -n $s; done ) - str=$(echo $str | cut -c -$COLUMNS) - echo $str - done -} - -addext() { - [[ -z "$1" ]] || [[ -z "$2" ]] && { echo "Usage: $0 " ; return } - mv "$1" "$1$2" -} - -rmext() { - [[ -e "$1" ]] && mv -i "$1" "${1%.*}" -} - - -ckwww() { - ping -c 3 www.google.com -} - -httpcode() { - curl http://httpcode.info/$1 -} - -bak() { - if ! [[ "$1" ]] ; then - printf '%s\n' "usage: $0 FILE" - return 1 - fi - if ! [[ -e "$1" ]] ; then - printf '%s\n' "\"$1\" not found" - return 1 - fi - name="$1.$(date +%Y%m%d%H%M%S.bak)" - if [[ -e "${name}" ]] ; then - printf '%s\n' "Backup file \"$name\" already exists" - return 1 - fi - cp --archive --verbose --no-clobber "$1" "${name}" -} - -fstab() { - # yeah - expand /etc/fstab | grep -v '^#' | grep -P '^.+$' | tr -s ' ' | tr ' ' '|' | cat <(grep -P '<.+>' /etc/fstab | cut -f 2- -d ' ' | sed 's/>[^<]*|&2 "$(man)" ; return ; } - man -t "$1" | ps2pdf - - | zathura - -} - -myip4() { - curl "http://ipv4.icanhazip.com" -} - -myip6() { - curl "http://ipv6.icanhazip.com" 2>/dev/null || echo "no ip6" -} - -diffdir() { - [[ "$1" ]] && [[ "$2" ]] || { echo "$0 " ; return 1 ; } - diff <(cd "$1" && find -type f -exec md5sum {} \;) <(cd "$2" && find -type f -exec md5sum {} \;) -} - -diffdir2() { - [[ "$1" ]] && [[ "$2" ]] || { echo "$0 " ; return 1 ; } - comm -13 <(cd "$1" && find -type f | sort -g) <(cd "$2" && find -type f | sort -g) -} - -bm() { - case "$1" in - dev) - cd "$HOME/development/projects" - ;; - dot) - cd "$HOME/dotfiles" - ;; - *) - echo "unknown target" - ;; - esac -} - -man() { - env LESS_TERMCAP_mb=$'\E[01;31m' \ - LESS_TERMCAP_md=$'\E[01;38;5;74m' \ - LESS_TERMCAP_me=$'\E[0m' \ - LESS_TERMCAP_se=$'\E[0m' \ - LESS_TERMCAP_so=$'\E[38;5;246m' \ - LESS_TERMCAP_ue=$'\E[0m' \ - LESS_TERMCAP_us=$'\E[04;38;5;146m' \ - man "$@" -} - -resolvecd() { - cd "$(readlink -f $(pwd))" -} - -ssht () { - ssh -t $@ "tmux a || tmux"; -} - -t() { - if [[ "$1" ]] ; then - tmux new-session -A -s "$1" - else - tmux attach-session - fi -} - -b() { - bookmarks=${DOTFILES}/bookmarks - bookmark="$1" - if ! [[ "${bookmark}" ]] ; then - printf 'Need a bookmark' >&2 - return 1 - fi - if ! [[ -r "${bookmark}" ]] ; then - printf 'Invalid bookmark %s' "${bookmark}" >&2 - return 1 - fi - target="$(head -1 ${bookmark})" - if ! [[ -e "${target}" ]] ; then - printf 'Traget not found: %s' "${target}" >&2 - fi - cd "$(eval ${target})" -} - -sb() { - echo $(( $1 * $(cat /sys/class/backlight/intel_backlight/max_brightness) / 100)) | sudo tee /sys/class/backlight/intel_backlight/brightness -} - -clip() { - tee >(xclip -selection clipboard) | tee >(xclip -selection primary) -} - -gb() { - _superproject="$(git rev-parse --show-superproject-working-tree)" - _root="$(git rev-parse --show-toplevel)" - if [[ -n "${_superproject}" ]] ; then - if [[ "$(pwd)" == "${_root}" ]] ; then - builtin cd "${_superproject}" - else - builtin cd "${_root}" - fi - else - builtin cd "${_root}" - fi -} - -meetingnotes() { - [[ "${1}" ]] || return 1 - file="$(date +%Y-%m-%d)-${1}.md" - cp ~/snippets/meetingnotes.md "${file}" - $EDITOR "${file}" -} diff --git a/zsh/zshrc.d/30_variables.sh b/zsh/zshrc.d/30_variables.sh deleted file mode 100644 index e69de29..0000000 diff --git a/zsh/zshrc.d/40_functions.sh b/zsh/zshrc.d/40_functions.sh deleted file mode 100644 index dcef61f..0000000 --- a/zsh/zshrc.d/40_functions.sh +++ /dev/null @@ -1,246 +0,0 @@ -_remote() { - [[ -n "$SSH_CONNECTION" ]] -} - -cd() { - builtin cd "$@" && ls -} - -mount() { - if [[ $# == 0 ]] ; then - command mount | column -t - else - command mount "$@" - fi -} - -extr() -{ - if [[ -f "$1" ]] ; then - case "$1" in - *.tar.bz2 ) tar xvjf "$1" ;; - *.tar.gz ) tar xvzf "$1" ;; - *.tar.xz ) tar xvJf "$1" ;; - *.bz2 ) bunzip2 "$1" ;; - *.rar ) unrar x "$1" ;; - *.gz ) gunzip "$1" ;; - *.tar ) tar xvf "$1" ;; - *.tbz2 ) tar xvjf "$1" ;; - *.tgz ) tar xvzf "$1" ;; - *.zip ) unzip "$1" ;; - *.Z ) uncompress "$1" ;; - *.7z ) 7z x "$1" ;; - *) - echo "$1 cannot be extracted via $0" - ;; - esac - else - echo "$1 is not a valid file" - fi -} - -ruler() { - for s in '....^....|' '1234567890'; do - w=${#s} - str=$(for (( i=1; $i<=$(( ($COLUMNS + $w) / $w )) ; i=$i+1 )); do echo -n $s; done ) - str=$(echo $str | cut -c -$COLUMNS) - echo $str - done -} - -addext() { - [[ -z "$1" ]] || [[ -z "$2" ]] && { echo "Usage: $0 " ; return } - mv "$1" "$1$2" -} - -rmext() { - [[ -e "$1" ]] && mv -i "$1" "${1%.*}" -} - - -ckwww() { - ping -c 3 www.google.com -} - -httpcode() { - curl http://httpcode.info/$1 -} - -bak() { - if ! [[ "$1" ]] ; then - printf '%s\n' "usage: $0 FILE" - return 1 - fi - if ! [[ -e "$1" ]] ; then - printf '%s\n' "\"$1\" not found" - return 1 - fi - name="$1.$(date +%Y%m%d%H%M%S.bak)" - if [[ -e "${name}" ]] ; then - printf '%s\n' "Backup file \"$name\" already exists" - return 1 - fi - cp --archive --verbose --no-clobber "$1" "${name}" -} - -fstab() { - # yeah - expand /etc/fstab | grep -v '^#' | grep -P '^.+$' | tr -s ' ' | tr ' ' '|' | cat <(grep -P '<.+>' /etc/fstab | cut -f 2- -d ' ' | sed 's/>[^<]*|&2 "$(man)" ; return ; } - man -t "$1" | ps2pdf - - | zathura - -} - -myip4() { - curl "http://ipv4.icanhazip.com" -} - -myip6() { - curl "http://ipv6.icanhazip.com" 2>/dev/null || echo "no ip6" -} - -diffdir() { - [[ "$1" ]] && [[ "$2" ]] || { echo "$0 " ; return 1 ; } - diff <(cd "$1" && find -type f -exec md5sum {} \;) <(cd "$2" && find -type f -exec md5sum {} \;) -} - -diffdir2() { - [[ "$1" ]] && [[ "$2" ]] || { echo "$0 " ; return 1 ; } - comm -13 <(cd "$1" && find -type f | sort -g) <(cd "$2" && find -type f | sort -g) -} - -bm() { - case "$1" in - dev) - cd "$HOME/development/projects" - ;; - dot) - cd "$HOME/dotfiles" - ;; - *) - echo "unknown target" - ;; - esac -} - -man() { - env LESS_TERMCAP_mb=$'\E[01;31m' \ - LESS_TERMCAP_md=$'\E[01;38;5;74m' \ - LESS_TERMCAP_me=$'\E[0m' \ - LESS_TERMCAP_se=$'\E[0m' \ - LESS_TERMCAP_so=$'\E[38;5;246m' \ - LESS_TERMCAP_ue=$'\E[0m' \ - LESS_TERMCAP_us=$'\E[04;38;5;146m' \ - man "$@" -} - -embiggen() { - enscript --no-header --media=A4 --landscape --font="DejaVuSansMono30" -o - 2>/dev/null | ps2pdf - | zathura - -} - -resolvecd() { - cd "$(readlink -f $(pwd))" -} - -ssht () { - ssh -t $@ "tmux a || tmux"; -} - -t() { - if [[ "$1" ]] ; then - tmux new-session -A -s "$1" - else - tmux attach-session - fi -} - -b() { - bookmarks=${DOTFILES}/bookmarks - bookmark="$1" - if ! [[ "${bookmark}" ]] ; then - printf 'Need a bookmark' >&2 - return 1 - fi - if ! [[ -r "${bookmark}" ]] ; then - printf 'Invalid bookmark %s' "${bookmark}" >&2 - return 1 - fi - target="$(head -1 ${bookmark})" - if ! [[ -e "${target}" ]] ; then - printf 'Traget not found: %s' "${target}" >&2 - fi - cd "$(eval ${target})" -} - -sb() { - echo $(( $1 * $(cat /sys/class/backlight/intel_backlight/max_brightness) / 100)) | sudo tee /sys/class/backlight/intel_backlight/brightness -} - -journal() { - journaldir=~/sync/journal/ - file="$journaldir/$(date +%Y-%m-%d).md" - if [[ ! -e $file ]] ; then - cp $journaldir/template.md $file || return - fi - $EDITOR $file -} - -syncfolder() { - folder=$1 - mv $folder ~/sync - ln -s ~/sync/$folder ~/$folder -} - -prefix() { - prefix=$2 - file=$1 - mv $file ${prefix}${file} -} - -tmp() { - cd "$(mktemp -d)" -} - -kubectl_pod() { - kubectl-env mycloud get -n "${1}" pods --field-selector=status.phase=Running --selector=${2} -o jsonpath='{.items[*].metadata.name}' -} - -kubectl_deployment() { - kubectl-env mycloud get -n "${1}" deployment --selector=${2} -o jsonpath='{.items[*].metadata.name}' -} - -# The semver_ checks are inspired by -# https://stackoverflow.com/questions/4023830/how-to-compare-two-strings-in-dot-separated-version-format-in-bash -semver_lte() { - v1="${1}" - v2="${2}" - - printf '%s\n%s' "${v1}" "${v2}" | sort --version-sort --check=silent -} - -semver_lt() { - v1="${1}" - v2="${2}" - - semver_lte "${v1}" "${v2}" && [[ ! "${v1}" == "${v2}" ]] -} - -semver_gte() { - v1="${1}" - v2="${2}" - - ! semver_lt "${v1}" "${v2}" -} - -semver_gt() { - v1="${1}" - v2="${2}" - - ! semver_lte "${v1}" "${v2}" -} diff --git a/zsh/zshrc.d/50_prompt.sh b/zsh/zshrc.d/50_prompt.sh deleted file mode 100644 index 2e2941b..0000000 --- a/zsh/zshrc.d/50_prompt.sh +++ /dev/null @@ -1,62 +0,0 @@ -autoload -Uz vcs_info - -_vcsbase="%{$fg[red]%}[%r] %{$fg[blue]%}[%{%B%}%b%{$fg[red]%}%m%{$fg[blue]%}] %{$fg[red]%}%{%B%}%c%u" - -zstyle ':vcs_info:*' stagedstr 'I' -zstyle ':vcs_info:*' unstagedstr 'M' - -zstyle ':vcs_info:*' enable git -zstyle ':vcs_info:*' check-for-changes true -zstyle ':vcs_info:*' get-revision true - -zstyle ':vcs_info:git*' formats "$_vcsbase" -zstyle ':vcs_info:git*' actionformats "%{$fg[red]%}(%a) $_vcsbase" - -zstyle ':vcs_info:git*+set-message:*' hooks git-untracked git-st git-remotebranch - -+vi-git-untracked() { - if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \ - [[ $(git ls-files --other --directory --exclude-standard | sed q | wc -l | tr -d ' ') == 1 ]] ; then - hook_com[unstaged]+='?%f' - fi -} - -+vi-git-st() { - local ahead behind - local -a gitstatus - - ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l) - (( $ahead )) && gitstatus+=( "+${ahead}" ) - - behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l) - (( $behind )) && gitstatus+=( "-${behind}" ) - - hook_com[misc]+=${(j:/:)gitstatus} -} - -+vi-git-remotebranch() { - local remote - - remote=${$(git rev-parse --verify ${hook_com[branch]}@{upstream} \ - --symbolic-full-name 2>/dev/null)/refs\/remotes\/} - - if [[ -n ${remote} ]] ; then - hook_com[branch]="${hook_com[branch]} %b%{$fg[magenta]%}<${remote}>" - fi -} - -precmd() { - vcs_info -} - -_topstr='%{$fg[green]%}%n@%m%{$fg[white]%} ─ %{%B$fg[yellow]%}%~%{%b%} ${vcs_info_msg_0_}%{$fg[white]%} ' -botstr='%B${PINFO}%#%b ' - -if _remote ; then - _topstr="%{$fg[red]%}[remote]%{$fg[white]%} ${_topstr}" -fi - -setopt prompt_subst -PROMPT='%{$fg[white]%}┌─ '"${_topstr}"' -└─ '"${botstr}" -RPROMPT="%{$fg[cyan]%}%*%{$fg[white]%} ─ [%?]" diff --git a/zsh/zshrc.d/60_keybinds.sh b/zsh/zshrc.d/60_keybinds.sh deleted file mode 100644 index 15bba84..0000000 --- a/zsh/zshrc.d/60_keybinds.sh +++ /dev/null @@ -1,29 +0,0 @@ -autoload zkbd - -bindkey "\e[1~" beginning-of-line -bindkey "\e[4~" end-of-line -bindkey "\e[5~" beginning-of-history -bindkey "\e[6~" end-of-history -bindkey "\e[3~" delete-char -bindkey "\e[2~" quoted-insert -bindkey "\e[5C" forward-word -bindkey "\eOc" emacs-forward-word -bindkey "\e[5D" backward-word -bindkey "\eOd" emacs-backward-word -bindkey "\ee[C" forward-word -bindkey "\ee[D" backward-word -bindkey "^H" backward-delete-word -# for rxvt -bindkey "\e[8~" end-of-line -bindkey "\e[7~" beginning-of-line -# for non RH/Debian xterm, can't hurt for RH/DEbian xterm -bindkey "\eOH" beginning-of-line -bindkey "\eOF" end-of-line -# for freebsd console -bindkey "\e[H" beginning-of-line -bindkey "\e[F" end-of-line -# completion in the middle of a line -bindkey '^i' expand-or-complete-prefix - -export FZF_DEFAULT_OPTS='--height 50% --border' -eval "$(fzf --zsh)" diff --git a/zsh/zshrc.j2 b/zsh/zshrc.j2 index 4742b25..384790b 100644 --- a/zsh/zshrc.j2 +++ b/zsh/zshrc.j2 @@ -1,18 +1,10 @@ [[ -z "$PS1" ]] && return -_zshdir="$HOME/.zshrc.d" - {% if user.gpg_agent %} export GPG_TTY=$(tty) export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) {% endif %} -for file in "${_zshdir}"/* ; do - if [[ -e "$file" ]] ; then - source "$file" - fi -done - if [[ -f /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]] ; then source /usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh elif [[ -f /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh ]] ; then @@ -27,3 +19,459 @@ if [[ ! "$SSH_AUTH_SOCK" ]]; then source "$XDG_RUNTIME_DIR/ssh-agent.env" >/dev/null fi {% endif %} + +{% raw %} + +setopt EXTENDED_HISTORY +setopt HIST_EXPIRE_DUPS_FIRST +setopt HIST_VERIFY +setopt INC_APPEND_HISTORY +setopt SHARE_HISTORY +setopt AUTO_CD +setopt APPEND_HISTORY +setopt HIST_IGNORE_DUPS +setopt NOHIST_IGNORE_ALL_DUPS +setopt HIST_IGNORE_SPACE +setopt CORRECT +setopt RM_STAR_SILENT +setopt BG_NICE +setopt CHECK_JOBS +setopt HUP +setopt LONG_LIST_JOBS + +setopt share_history + +bindkey -e + +autoload -U promptinit +promptinit + +autoload -U colors +colors + +autoload -U compinit +compinit +zstyle ':completion:*' menu select +setopt completealiases + +autoload -U edit-command-line +zle -N edit-command-line +bindkey '^xe' edit-command-line +bindkey '^x^e' edit-command-line + +HISTSIZE=100000 +SAVEHIST=100000 +HISTFILE="$HOME/.zsh_history" + +alias vim="nvim" + +### BETTER COMMANDS +alias ls="exa --oneline --icons --group-directories-first" +alias ll='ls --all --long --classify --group --modified --time-style=long-iso --git' +alias la='ls --all' + +alias spm="sudo pacman" + +alias tml="tmux list-sessions" +alias tma="tmux ls 2>/dev/null && tmux attach-session || tmux" +alias tmn="tmux new-session -A -s" + +alias clipc="xclip -selection primary" +alias clipo="xclip -out -selection clipboard" + +alias rgrep="grep -r" + +alias vimrc="vim -c ':e \$MYVIMRC'" +alias zshrc="vim -c ':e ~/.zshrc' ; source ~/.zshrc" + +alias calc='python3 -ic "from math import *; import cmath"' + +alias le_haxxor_1='clear && dmesg | pv -qL 20' +alias le_haxxor_2='clear && hexdump -C /dev/urandom | pv -qlL 2' + +alias root='sudo -sE' + +### USEFUL DEFAULT OPTIONS +alias tmux="tmux -2" + +alias chmod="chmod -c" +alias chown="chown -c" + +alias diff="diff --color=auto" + +alias grep='grep --color=auto' +alias fgrep='fgrep --color=auto' +alias egrep='egrep --color=auto' + +alias rg='rg --hidden --glob "!.git/**"' + +alias rm='rm -v' +alias cp='cp -vi' +alias mv='mv -vi' +alias ln='ln -v' + +alias du='du -h' +alias df='df -h' + +### SHORTENING COMMAND NAMES +alias cs="cryptsetup" +alias v="vim" +alias g="git" +alias c="cd" +alias l="ls" +alias s="sudo" +alias cl="clear" + +alias nocolor="sed -r \"s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g\"" + +alias ip="ip -color" + +alias vimtask="vim -c :TW" + +alias tw="task" +alias twl="task list" +alias twa="task add" +alias twd="task done" +alias inbox="task add +inbox" + +alias yaml2json="python3 -c 'import sys, yaml, json; json.dump([d for d in yaml.safe_load_all(sys.stdin)][-1], sys.stdout, indent=4)'" +alias json2yaml="python3 -c 'import sys, yaml, json; yaml.safe_dump(json.loads(sys.stdin.read()), stream=sys.stdout)'" + +alias currentbranch='git rev-parse --abbrev-ref HEAD' + +alias issh="ssh -o StrictHostKeyChecking=false -o UserKnownHostsFile=/dev/null" +alias gfix='git commit --amend --no-edit' +alias gfixa='git commit --amend --no-edit --all ' +alias gfixp='git commit --amend --no-edit --patch' + +alias issh="ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" + +alias newpw="pwgen --secure 25 1" + +alias sys="systemctl" +alias sysu="systemctl --user" + +alias gpg=gpg2 + +alias alacritty="alacritty --config-file $HOME/.config/alacritty.toml" + +alias d=docker +alias dc=docker-compose + +alias hx=helix +alias h=helix + +gitmaster() { + git stash push -m gitmaster-$(date -uIseconds) -u || return 1 + _branch=$(git rev-parse --abbrev-ref HEAD) + git fe || return 1 + git checkout master || return 1 + git merge origin/master || return 1 + git checkout $_branch + git stash pop +} + +_remote() { + [[ -n "$SSH_CONNECTION" ]] +} + +cd() { + builtin cd "$@" && ls +} + +mount() { + if [[ $# == 0 ]] ; then + command mount | column -t + else + command mount "$@" + fi +} + +extr() +{ + if [[ -f "$1" ]] ; then + case "$1" in + *.tar.bz2 ) tar xvjf "$1" ;; + *.tar.gz ) tar xvzf "$1" ;; + *.tar.xz ) tar xvJf "$1" ;; + *.bz2 ) bunzip2 "$1" ;; + *.rar ) unrar x "$1" ;; + *.gz ) gunzip "$1" ;; + *.tar ) tar xvf "$1" ;; + *.tbz2 ) tar xvjf "$1" ;; + *.tgz ) tar xvzf "$1" ;; + *.zip ) unzip "$1" ;; + *.Z ) uncompress "$1" ;; + *.7z ) 7z x "$1" ;; + *) + echo "$1 cannot be extracted via $0" + ;; + esac + else + echo "$1 is not a valid file" + fi +} + +ruler() { + for s in '....^....|' '1234567890'; do + w=${#s} + str=$(for (( i=1; $i<=$(( ($COLUMNS + $w) / $w )) ; i=$i+1 )); do echo -n $s; done ) + str=$(echo $str | cut -c -$COLUMNS) + echo $str + done +} + +addext() { + [[ -z "$1" ]] || [[ -z "$2" ]] && { echo "Usage: $0 " ; return } + mv "$1" "$1$2" +} + +rmext() { + [[ -e "$1" ]] && mv -i "$1" "${1%.*}" +} + +ckwww() { + ping -c 3 www.google.com +} + +httpcode() { + curl http://httpcode.info/$1 +} + +bak() { + if ! [[ "$1" ]] ; then + printf '%s\n' "usage: $0 FILE" + return 1 + fi + if ! [[ -e "$1" ]] ; then + printf '%s\n' "\"$1\" not found" + return 1 + fi + name="$1.$(date +%Y%m%d%H%M%S.bak)" + if [[ -e "${name}" ]] ; then + printf '%s\n' "Backup file \"$name\" already exists" + return 1 + fi + cp --archive --verbose --no-clobber "$1" "${name}" +} + +fstab() { + # yeah + expand /etc/fstab | grep -v '^#' | grep -P '^.+$' | tr -s ' ' | tr ' ' '|' | cat <(grep -P '<.+>' /etc/fstab | cut -f 2- -d ' ' | sed 's/>[^<]*|&2 "$(man)" ; return ; } + man -t "$1" | ps2pdf - - | zathura - +} + +myip4() { + curl "http://ipv4.icanhazip.com" +} + +myip6() { + curl "http://ipv6.icanhazip.com" 2>/dev/null || echo "no ip6" +} + +diffdir() { + [[ "$1" ]] && [[ "$2" ]] || { echo "$0 " ; return 1 ; } + diff <(cd "$1" && find -type f -exec md5sum {} \;) <(cd "$2" && find -type f -exec md5sum {} \;) +} + +diffdir2() { + [[ "$1" ]] && [[ "$2" ]] || { echo "$0 " ; return 1 ; } + comm -13 <(cd "$1" && find -type f | sort -g) <(cd "$2" && find -type f | sort -g) +} + +man() { + env LESS_TERMCAP_mb=$'\E[01;31m' \ + LESS_TERMCAP_md=$'\E[01;38;5;74m' \ + LESS_TERMCAP_me=$'\E[0m' \ + LESS_TERMCAP_se=$'\E[0m' \ + LESS_TERMCAP_so=$'\E[38;5;246m' \ + LESS_TERMCAP_ue=$'\E[0m' \ + LESS_TERMCAP_us=$'\E[04;38;5;146m' \ + man "$@" +} + +resolvecd() { + cd "$(readlink -f $(pwd))" +} + +ssht () { + ssh -t $@ "tmux a || tmux"; +} + +t() { + if [[ "$1" ]] ; then + tmux new-session -A -s "$1" + else + tmux attach-session + fi +} + +sb() { + echo $(( $1 * $(cat /sys/class/backlight/intel_backlight/max_brightness) / 100)) | sudo tee /sys/class/backlight/intel_backlight/brightness +} + +clip() { + tee >(xclip -selection clipboard) | tee >(xclip -selection primary) +} + +gb() { + _superproject="$(git rev-parse --show-superproject-working-tree)" + _root="$(git rev-parse --show-toplevel)" + if [[ -n "${_superproject}" ]] ; then + if [[ "$(pwd)" == "${_root}" ]] ; then + builtin cd "${_superproject}" + else + builtin cd "${_root}" + fi + else + builtin cd "${_root}" + fi +} + +bm() { + case "$1" in + dev) + cd "$HOME/development/projects" + ;; + dot) + cd "$HOME/dotfiles" + ;; + *) + echo "unknown target" + ;; + esac +} + +embiggen() { + enscript --no-header --media=A4 --landscape --font="DejaVuSansMono30" -o - 2>/dev/null | ps2pdf - | zathura - +} + +journal() { + journaldir=~/sync/journal/ + file="$journaldir/$(date +%Y-%m-%d).md" + if [[ ! -e $file ]] ; then + cp $journaldir/template.md $file || return + fi + $EDITOR $file +} + +prefix() { + prefix=$2 + file=$1 + mv $file ${prefix}${file} +} + +tmp() { + cd "$(mktemp -d)" +} + +autoload -Uz vcs_info + +_vcsbase="%{$fg[red]%}[%r] %{$fg[blue]%}[%{%B%}%b%{$fg[red]%}%m%{$fg[blue]%}] %{$fg[red]%}%{%B%}%c%u" + +zstyle ':vcs_info:*' stagedstr 'I' +zstyle ':vcs_info:*' unstagedstr 'M' + +zstyle ':vcs_info:*' enable git +zstyle ':vcs_info:*' check-for-changes true +zstyle ':vcs_info:*' get-revision true + +zstyle ':vcs_info:git*' formats "$_vcsbase" +zstyle ':vcs_info:git*' actionformats "%{$fg[red]%}(%a) $_vcsbase" + +zstyle ':vcs_info:git*+set-message:*' hooks git-untracked git-st git-remotebranch + ++vi-git-untracked() { + if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \ + [[ $(git ls-files --other --directory --exclude-standard | sed q | wc -l | tr -d ' ') == 1 ]] ; then + hook_com[unstaged]+='?%f' + fi +} + ++vi-git-st() { + local ahead behind + local -a gitstatus + + ahead=$(git rev-list ${hook_com[branch]}@{upstream}..HEAD 2>/dev/null | wc -l) + (( $ahead )) && gitstatus+=( "+${ahead}" ) + + behind=$(git rev-list HEAD..${hook_com[branch]}@{upstream} 2>/dev/null | wc -l) + (( $behind )) && gitstatus+=( "-${behind}" ) + + hook_com[misc]+=${(j:/:)gitstatus} +} + ++vi-git-remotebranch() { + local remote + + remote=${$(git rev-parse --verify ${hook_com[branch]}@{upstream} \ + --symbolic-full-name 2>/dev/null)/refs\/remotes\/} + + if [[ -n ${remote} ]] ; then + hook_com[branch]="${hook_com[branch]} %b%{$fg[magenta]%}<${remote}>" + fi +} + +precmd() { + vcs_info +} + +autoload -Uz vcs_info +zstyle ':vcs_info:*' enable git hg +zstyle ':vcs_info:*' check-for-changes true + +zstyle ':vcs_info:git*' formats "%{${fg[cyan]}%}[%{${fg[green]}%}%s%{${fg[cyan]}%}][%{${fg[blue]}%}%r/%S%%{${fg[cyan]}%}][%{${fg[blue]}%}%b%{${fg[yellow]}%}%m%u%c%{${fg[cyan]}%}]%{$reset_color%}" + +_topstr='%{$fg[green]%}%n@%m%{$fg[white]%} ─ %{%B$fg[yellow]%}%~%{%b%} ${vcs_info_msg_0_}%{$fg[white]%} ' +botstr='%B${PINFO}%#%b ' + +if _remote ; then + _topstr="%{$fg[red]%}[remote]%{$fg[white]%} ${_topstr}" +fi + +setopt prompt_subst + + +PROMPT='%{$fg[white]%}┌─ '"${_topstr}"' +└─ '"${botstr}" +RPROMPT="%{$fg[cyan]%}%*%{$fg[white]%} ─ [%?]" + +autoload zkbd + +bindkey "\e[1~" beginning-of-line +bindkey "\e[4~" end-of-line +bindkey "\e[5~" beginning-of-history +bindkey "\e[6~" end-of-history +bindkey "\e[3~" delete-char +bindkey "\e[2~" quoted-insert +bindkey "\e[5C" forward-word +bindkey "\eOc" emacs-forward-word +bindkey "\e[5D" backward-word +bindkey "\eOd" emacs-backward-word +bindkey "\ee[C" forward-word +bindkey "\ee[D" backward-word +bindkey "^H" backward-delete-word +# for rxvt +bindkey "\e[8~" end-of-line +bindkey "\e[7~" beginning-of-line +# for non RH/Debian xterm, can't hurt for RH/DEbian xterm +bindkey "\eOH" beginning-of-line +bindkey "\eOF" end-of-line +# for freebsd console +bindkey "\e[H" beginning-of-line +bindkey "\e[F" end-of-line +# completion in the middle of a line +bindkey '^i' expand-or-complete-prefix + +export FZF_DEFAULT_OPTS='--height 50% --border' +eval "$(fzf --zsh)" + +{% endraw %}