Some of us lug around giant config files that improve our quality of life, Here are some things I stuffed in mine:
mash dots until you get to the right level,
though I don't usually go above 5 (or I get it wrong).
Along with setopt AUTOCD
this helps navigation a lot.
1alias ..='cd ..'
2alias ...='cd ../..'
3alias ....='cd ../../..'
4alias .....='cd ../../../..'
5alias ......='cd ../../../../..'
6alias .......='cd ../../../../../..'
7alias ........='cd ../../../../../../..'
8alias .........='cd ../../../../../../../..'
9alias ..........='cd ../../../../../../../../..'
10alias ...........='cd ../../../../../../../../../..'
11alias ............='cd ../../../../../../../../../../..'
Sometimes you just want to go back to the top
1alias rr='cd $(git rev-parse --show-toplevel)'
There are just some things I use a lot.
1alias cp='cp -v'
2alias ln='ln -v'
3alias mv='mv -v'
4alias g='git'
5alias h='htop'
6alias k='kubectl'
7alias s='ssh'
8alias tf='terraform'
9alias v='${EDITOR}'
I want a better ls with exa, but I don't want my config to break every time I clone it onto a new machine.
1(( $+commands[exa] )) \
2 && alias ll='exa -l -a --git --time-style iso --group-directories-first' \
3 || alias ll='ls -alh';
turn aliases defined in ~/.config/git/config
into zsh aliases as g<git alias>
1# short git aliases
2function {
3 local gitconfig="${XDG_CONFIG_HOME}/git/config"
4 [[ -f "${gitconfig}" ]] || gitconfig="${HOME}/.gitconfig"
5 local start_alias=false
6 while read line; do
7 if "${start_alias}"; then
8 [[ "${line}" =~ '\s*\[[a-z]*\]' ]] && return
9 sub="${${line%%=*}// /}"
10 [[ "${sub}" ]] && alias g${sub}="git ${sub}"
11 else
12 [[ $line =~ '\s*\[alias\]' ]] && start_alias=true
13 fi
14 done < "${gitconfig}"
15}
really simple and common thing
1function md() {
2 [[ -z ${1// } ]] && echo "no directory name given" && return 1
3 mkdir -p "$1" && cd "$1"
4}
wrapper for t,
population numbered aliases from the results of ripgrep
1function t() {
2 command t -i "$@"
3 source /tmp/t_aliases 2>/dev/null
4}
creates a temporary unique repo with an autoincrementing number
1function testrepo() {
2 local vers=$(( $(cat ${XDG_CONFIG_HOME}/testrepo-version)+1))
3 echo ${vers} > ${XDG_CONFIG_HOME}/testrepo-version
4 mkdir -p ${HOME}/tmp
5 cd ${HOME}/tmp
6 mr testrepo-${vers}
7}
8
9function mr() {
10 local repo=${1// }
11 [[ -z ${repo} ]] && echo "no repo name given" && return 1
12 mkdir -p ${repo}
13 cd ${repo}
14 git init
15 git commit --allow-empty -m "root-commit"
16 git remote add origin s:${repo}
17}
double tap ESC to get the previous command with sudo in front toggled
1zle -N _sudo_cmdline
2
3function _sudo_cmdline() {
4 [[ -z ${BUFFER} ]] && zle up-history
5 [[ ${BUFFER} == sudo\ * ]] && BUFFER=${BUFFER#sudo } || BUFFER="sudo ${BUFFER}"
6}
7
8# ^[ == escape
9bindkey '^[^[' _sudo_cmdline
my prompt looks like
113:38:33 ~/.config/zsh 0:00:06
2main »
Which is:
1time current-working-directory previous-command-execution-time
2[screen]-[git-repo-branch] [ssh-user@host]»
With things in []
only showing if they have a valid value,
and [ssh-user@host]»
changing color based on if the previous command exited with 0
1#!/usr/bin/env zsh
2
3export PROMPT_EOL_MARK=''
4
5function _preexec() {
6 typeset -g prompt_timestamp=$EPOCHSECONDS
7}
8
9function _precmd() {
10 integer elapsed=$(( EPOCHSECONDS - ${prompt_timestamp:-$EPOCHSECONDS} ))
11 local human="$(( elapsed / 3600 )):${(l:2::0:)$(( elapsed / 60 % 60 ))}:${(l:2::0:)$(( elapsed % 60 ))}"
12 vcs_info 2>&1 >/dev/null
13 local newline=$'\n%{\r%}'
14
15 PROMPT="%F{green}%*%f %F{blue}%~%f %F{yellow}${human}%f"
16 PROMPT+="${newline}"
17 PROMPT+="%F{242}${STY:+screen-}${VIRTUAL_ENV:+venv-}${vcs_info_msg_0_:+${vcs_info_msg_0_} }%f"
18 PROMPT+="%(?.%F{magenta}.%F{red})${SSH_CONNECTION+%n@%m}»%f "
19}
20
21add-zsh-hook precmd _precmd
22add-zsh-hook preexec _preexec