# My alias for bash and zsh # config alias al="vim $SETTING_DIR/alias && source $SETTING_DIR/alias" alias zshrc="vim ~/.zshrc && source ~/.$(basename $SHELL)rc" alias bashrc="vim ~/.bashrc && source ~/.$(basename $SHELL)rc" alias vimrc='vim ~/.vimrc' alias tigrc="vim ~/.tigrc" alias muttrc='vim ~/.config/mutt/muttrc' alias gitconfig='vim ~/.gitconfig' alias gpgconfig='vim ~/.gnupg/gpg-agent.conf' alias sshconfig='vim ~/.ssh/config' alias sshauth='vim ~/.ssh/authorized_keys' alias sshknown='vim ~/.ssh/known_hosts' alias cdconfig='cd ~/config' alias txconfig='vim ~/.tmux.conf' # vim alias v='vim' alias vi='vim' alias sv='sudo vim' alias vl="vim -c 'norm '" #alias vl="vim $(sed -n '/^[^#]/{p;q}' ~/.vim_mru_files)" alias ve="vim -c 'e! ~/.vim_runtime/my_configs.vim'" alias vro='vim -R' alias vu='vim -u NONE' alias vv='vim ~/vimwiki/index.md' alias vq='vim ~/buffer' alias cdvim='cd ~/.vim_runtime' # amix/vimrc repo # ssh alias cdssh='cd ~/.ssh' alias ptt='ssh bbsu@ptt.cc' sshtar() { prompt "tar cf - foo | ssh topo 'cd ~/Downloads; tar xf -' \nssh topo 'tar czf - --directory=/home/public dir' | tar xvzf -" } ssh.up() { scp $1 topo:~/public/${2:-$1} echo https://topo.tw/p/$2${2:+/}$1 } ssh.up.today() { DATE=$(date --iso-8601) ssh topo mkdir -p ~/public/$DATE ssh.up $1 $DATE } ssh.down() { ssh -t topo rm -rf -i ~/public/"$1" } # for custom scripts vs() { which $1 && vim $(which $1) } todo() { which $1 && grep -Po 'TODO.*' $(which $1) } fix() { which $1 && grep -Po 'FIXME.*' $(which $1) } alias g='gist' alias gl='gist last' unalias gg &>/dev/null alias gg='gist grep' # unix alias chx='chmod +x' alias s='sudo systemctl' alias j='sudo journalctl -xe' alias m='mutt' alias ju='sudo journalctl -u' path() { echo $PATH; } # Should not use alias, because $PATH is not initialized fd() { echo /proc/$$/fd; ls -l /proc/$$/fd; } port() { sudo lsof -i :$1; } alias ports='sudo lsof -i -Pn | grep LISTEN' .() { source ${@:-$HOME/.$(basename $SHELL)rc} } alias ll='ls -lh' alias lla='ls -lha' llw() { which $1 | xargs ls -alh; } alias hg='history | grep' alias rmrf='[[ `pwd` =~ ^$HOME.* ]] && rm -rf' alias rr='_move_to_tmp' alias sound="echo -ne '\a'" pst(){ pstree -ps ${1:-$$}; } alias duu='du -hd 1 . | sort -hr' alias latest='find . -type f | xargs ls -ltr | tail' cdp() { [[ ! -d $1 ]] && mkdir -p $1 cd $1 } _move_to_tmp() { mv $@ /tmp; } prompt() { TMPFILE=$(mktemp) echo -e "$@" >$TMPFILE \ && vim $TMPFILE \ && sed -i '$ q; s/$/ \\/' $TMPFILE \ && eval $(<$TMPFILE tee /dev/tty) rm $TMPFILE } file.sort() { find $1 -type f -print0 |\ xargs -0 ls --sort=size -lh |\ head -20 } file.size() { find $1 -type f -print0 |\ xargs -0 ls -l |\ awk '{ n=int(log($5)/log(2)); if (n<10) n=10; size[n]++ } END { for (i in size) printf("%d %d\n", 2^i, size[i]) }' |\ sort -n |\ awk 'function human(x) { x[1]/=1024; if (x[1]>=1024) { x[2]++; human(x) }} { a[1]=$1; a[2]=0; human(a); printf("%3d%s: %6d\n", a[1],substr("kMGTEPYZ",a[2]+1,1),$2) }' } # pacman alias pac='sudo pacman -S' # pacman install alias psy='sudo pacman -Syy' alias ys='yay -S' alias pqs='pacman -Qs' alias pqi='pacman -Qi' alias ysi='yay -Si' alias pss='pacman -Ss' alias yss='yay -Ss' alias pqi='pacman -Qi' alias pql='pacman -Qlq' pqlg() { pacman -Qlq $1 | grep bin } alias yql='yay -Ql' alias pf='pacman -F' alias yf='yay -F' alias pfl='pacman -Fl' alias pqe='pacman -Qqe' alias pR='sudo pacman -R' psi() { [[ $(pacman -Qqe $1) != '' ]] 2>/dev/null && echo -e "$(tput setaf 13)[Installed]$(tput sgr0)" pacman -Si $1 } # cd to DIRs alias ..='cd ..' alias ld='cd -' # last directory cdg() { target=$(sed 's# #/#g' <<<"$@") cd ~/git/$target || cd ~/git } alias cda='mkdir -p ~/data && cd ~/data' alias cdd='cd ~/Downloads' alias cdD='cd ~/Documents' alias cdP='cd ~/Pictures' alias cdpu='cd ~/public' alias cdV='cd ~/Videos' alias cdM='cd ~/Musics' # blog alias cdb='cd ~/blog' vp() { cd ~/blog filename="${1%.md}.md" post="$(find content -name "$filename")" if [ -z "$post" ]; then hugo new posts/"$filename" post="content/posts/$filename" fi shift vim $@ "$post" } # git unalias gc &> /dev/null # override zsh plugin alias gc() { git clone $1 && cd $(basename ${1%.git}); } gc1() { git clone --depth=1 $1 && cd $(basename $1); } gcv() { gc topo:$1; } alias gls='git log -S' alias cdgg='cd $(git rev-parse --show-toplevel)' alias cdgw='cdgg && cd .github/workflows' alias cdgs='cd $(git submodule status | sed "s/^.//" | cut -d" " -f2)' # cd to first submodule check_repo() { cd $1 2>/dev/null || return 0 echo check $1 git status -s [[ -n $(git cherry origin) ]] 2>/dev/null && print "\e[31m[ahead]\e[0m" } check() { check_repo $SETTING_DIR check_repo $HOME/.password-store check_repo $HOME/vimwiki } alias ch='check' # github export GITHUB_API='https://api.github.com' export GITHUB_API_TOKEN="~/.ssh/tokens/github 2>/dev/null)" alias hub="GITHUB_TOKEN=$GITHUB_API_TOKEN hub" github() { xdg-open https://github.com/$1/$2 } github_api() { curl --header "Authorization: token $GITHUB_API_TOKEN" $GITHUB_API/$@ } gcg() { local user=$1; local repo=$2; shift; shift git clone git@github.com:$user/$repo.git $@ && cd $(basename $repo) } release() { command="github-release.sh\n github_api_token=$GITHUB_API_TOKEN\n repo=typebrook/mapstew\n tag=daily-taiwan-pbf\n type=asset\n filename=taiwan-latest.osm.pbf\n action=upload|overwrite|rename|delete\n extra=" prompt "$command" } github.asset() { curl -LO https://github.com/$1/$2/releases/download/$3/$4 } github.raw() { curl -O https://raw.githubusercontent.com/$1/$2/$3 } # tig alias cdt='cd ~/git/tig' alias t='tig' alias ts='tig status' alias ta='tig --all' upload_tig() { github-release.sh \ github_api_token=$GITHUB_API_TOKEN \ repo=typebrook/tig \ tag=LATEST \ type=asset \ filename=$(which tig) action=overwrite } # about custom settings alias cds="cd $SETTING_DIR" alias chs="tig -C $SETTING_DIR status" cdss() { cd $SETTING_DIR/tools/$1 || cd $SETTING_DIR/tools } # about vimwiki alias cdw='cd ~/vimwiki' alias chw='tig -C ~/vimwiki' alias today='vim -c Goyo ~/vimwiki/diary/`date +'%Y-%m-%d'`.md' alias to='today' ww() { entry="${1:-guideline}"; vim ~/vimwiki/${entry%%.md}.md; } wg() { grep -r "$@" --exclude-dir=logseq/ ~/vimwiki; } wi() { cat ~/vimwiki/${1%%.md}.md; } # crontab alias ce='crontab -e' # lf alias r='_lf_cd' alias l='_lf_cd' _lf_cd() { tempfile=$(mktemp -t tmp.XXXXXX) lf --last-dir-path $tempfile test -f "$tempfile" && \ cd -- "$(cat "$tempfile")" && \ rm -f -- "$tempfile" } # disk alias df='df -h' # docker alias dk='docker' alias dc='docker-compose' alias dis='docker images' alias dps='docker ps' alias dpsa='docker ps -a' docker.sh() { docker run --rm -it --entrypoint /bin/sh $@; } docker.bash() { docker run --rm -it --entrypoint /bin/bash $@; } docker.tags() { curl -s -S "https://registry.hub.docker.com/v2/repositories/$@/tags/" | jq '.results[]["name"]' | sort; } # Android alias debug='./gradlew app:installDebug && adb shell am start -n com.geothings.geobingan/.MainActivity_' alias adb.view='adb shell am start -a android.intent.action.VIEW -d' alias adb.default='adb shell dumpsys package domain-preferred-apps' alias adb.list='adb shell dumpsys package d' alias rmcache='rm -rf ~/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib-jdk7/*' alias adb.screenshot='DIR=/sdcard/Pictures/Screenshots/; adb pull $DIR/`adb shell ls -t $DIR | head -1` .' alias adb.camera='DIR=/sdcard/DCIM/Camera; adb pull $DIR/`adb shell ls -t $DIR | head -1` .' alias adb.camera='DIR=/sdcard/DCIM/Camera; adb pull $DIR/`adb shell ls -t $DIR | head -1` .' alias adb.input='adb shell input text' adb.push() { adb push $1 /sdcard/Download } # curl alias co='curl -O' alias curl.code='curl -o /dev/null --silent -Iw "%{http_code}"' # python alias pip3='python3 -m pip' # gdal alias oo='ogr2ogr' alias oi='ogrinfo -al -so' # sample file alias sample.gpx='curl -O https://docs.mapbox.com/help/data/run.gpx' alias sample.geojson='curl -O https://docs.mapbox.com/help/data/stations.geojson' alias sample.gpkg='curl -O http://www.geopackage.org/data/sample1_1.gpkg' alias sample.shapefile='curl -O https://docs.mapbox.com/help/data/stations.zip && unzip stations.zip' alias sample.geotiff='curl -O https://docs.mapbox.com/help/data/landsat.tif' alias sample.csv='curl -O https://docs.mapbox.com/help/data/airports.csv' alias sample.svg='curl -O https://docs.mapbox.com/help/data/bicycle-24.svg' alias sample.mbtiles='curl -O https://docs.mapbox.com/help/data/trails.mbtiles' alias sample.kml='curl -O https://docs.mapbox.com/help/data/farmers_markets.kml' alias sample.osm='curl https://api.openstreetmap.org/api/0.6/node/3428095932' alias sample.poly='curl -O http://download.geofabrik.de/asia/taiwan.poly' alias sample.image='curl -O https://file-examples-com.github.io/uploads/2017/10/file_example_JPG_100kB.jpg' alias sample.gpkg='curl -O http://www.geopackage.org/data/sample1_1.gpkg' alias sample.mvt='curl -O https://demotiles.maplibre.org/tiles/5/25/14.pbf' alias proto.mvt='curl -O https://raw.githubusercontent.com/mapbox/vector-tile-spec/master/2.1/vector_tile.proto' alias proto.osm='curl -O https://raw.githubusercontent.com/openstreetmap/OSM-binary/master/src/osmformat.proto' alias proto.geobuf='curl -O https://raw.githubusercontent.com/mapbox/geobuf/master/geobuf.proto' taiwan_dem() { <<<"http://dtm.moi.gov.tw/不分幅_全台及澎湖.zip" perl -lpe 's/([^A-Za-z0-9.\/:])/sprintf("%%%02X", ord($1))/seg' |\ xargs curl -Lo taiwan_dem.zip unzip -p taiwan_dem.zip dem_20m.tif >20m.tif } # data file alias taiwan='curl -O http://download.geofabrik.de/asia/taiwan-latest.osm.pbf' alias data_rudymap='curl -O https://raw.githubusercontent.com/alpha-rudy/taiwan-topo/master/styles/mapsforge_style/MOI_OSM.xml' alias data_rudymap_ele='curl -O http://moi.kcwu.csie.org/osm_elevations/ele_taiwan_10_50_100_500_marker-2019.7.o5m' data_osm_diff_min() { curl https://planet.openstreetmap.org/replication/minute/state.txt \ | sed -n 2p | cut -d'=' -f2 | sed -r 's#(.{1})(.{3})#00\1/\2#' \ | xargs -I{} echo 'https://planet.openstreetmap.org/replication/minute/{}'.osc.gz \ | xargs curl -O } data_osm_diff_hour() { curl https://planet.openstreetmap.org/replication/hour/state.txt \ | sed -n 2p | cut -d'=' -f2 | sed -r 's#(.{2})(.{3})#000/0\1/\2#' \ | xargs -I{} echo 'https://planet.openstreetmap.org/replication/hour/{}'.osc.gz \ | xargs curl -O } alias data_taiwan_town='curl -o town.zip -L http://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx\?DATA\=CD02C824-45C5-48C8-B631-98B205A2E35A' alias data_taiwan_village='curl -o village.zip -L http://data.moi.gov.tw/MoiOD/System/DownloadFile.aspx\?DATA\=B8AF344F-B5C6-4642-AF46-1832054399CE' alias data_taiwan_poly='curl -O http://download.geofabrik.de/asia/taiwan.poly' alias data_taiwan_county_code='curl --silent https://www.ris.gov.tw/documents/data/5/1/RSCD0101.txt | iconv -f BIG-5 -t UTF-8 -' # clipboard alias xi='xsel -ib' alias xo='xsel -ob' alias xl='history | tail -1 | grep -oP "^\s*[0-9]+\s\s\K.*" | xsel -ib && echo Copied to clipboard && xsel -ob' # image image.vertical() { suffix=${1##*.} convert "$@" -append $(basename -s .$suffix $1)-$(basename -s .$suffix ${@: -1}).${format:-$suffix} } image.horizontal() { convert "$@" +append output.png } image.from_data_url() { [[ $1 == '' ]] && echo File name needed && return 1 xsel -ob | sed -E 's/^.+,//' | base64 -d >$1 identify $1 } image.text() { convert \ -size 230x130 \ -background lightblue \ -font Noto-Sans-Bold \ -pointsize 25 \ -fill black \ -gravity Center \ caption:"${1:=foo}" \ -flatten \ "${2:=foo}".jpg } # Reset clock date-reset() { sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z" } alias clock-reset='hwclock --systohc' # misc alias foo='echo bar > foo && echo File foo is created && ls -lh foo' alias bar='echo foo > bar && echo File bar is created && ls -lh bar' token() { cd $SETTING_DIR/tokens && [[ -e $1 ]] && cat $1 || ls -l } unalias gr &>/dev/null gr() { grep -IR $1 . } alias wcl='wc -l' alias findn='find . -iname' alias x='xdg-open' alias yl='youtube-dl' alias yla='youtube-dl -x --audio-format mp3' alias editor='select-editor' alias hp='http-prompt' alias clocg='cloc --vcs=git' alias tma='tmux a' alias mm='mkvmerge -o out.webm -w 01.webm + 02.webm' alias we='weechat' alias p8='ping 8.8.8.8' pbf() { protoc --decode_raw } mvt_decode() { if [[ ! -t 0 ]]; then tmp=$(mktemp) cat >$tmp else tmp=$1 fi mvt_decode.py $tmp | tr \' \" | sed 's/True/true/g' | jq . } big52utf8() { iconv -f BIG-5 -t UTF-8 } utf82big5() { iconv -t BIG-5 -f UTF-8 } urlencode() { perl -lpe 's/([^A-Za-z0-9.\/:])/sprintf("%%%02X", ord($1))/seg' # Alternative: # curl -Gso /dev/null -w %{url_effective} --data-urlencode @- "" } bak() { cp $1 $1.bak } wrap2geojson() { jq -s '{ type: "FeatureCollection", features: . }' } alias cdtrash='cd ~/.local/share/Trash' trash() { mv $@ ~/.local/share/Trash } # task alias tk='task' alias tkn='task next' alias tkc='task cont' alias tkrc='vim ~/.taskrc' alias cdtk='cd ~/.task' alias li='tasksh' tt() { taskwarrior-tui ( cd ~/.task && git add --all && git commit -m 'update' && git push origin & ) &>/dev/null } # upload with 0x0.st up() { curl -F"file=@${1}" http://0x0.st #curl -F "file=@${1}" https://api.anonfiles.com/upload } short() { curl -F"shorten=${1}" http://0x0.st } # pass alias chp='tig -C ~/.password-store' alias cdpass='cd ~/.password-store' alias p='pass' alias pc='pass -c' alias pe='pass edit' alias pgc='pass generate -c' words() { cat /usr/share/dict/usa | egrep "^[a-z]{4,8}$" | shuf | head -40 | xargs -n${1:-2} } # Nginx alias vgx='sudo vim /etc/nginx/sites-enabled/* && sudo nginx -t && sudo systemctl reload nginx' alias cdngx='cd /etc/nginx' # tmp alias cdS='cd ~/git/StreetComplete' alias cdm='cd ~/git/mapstew' alias cdma='cd ~/git/mapstew-android' alias cdT='cd ~/git/tilemaker' alias stew='cd ~/git/mapstew' alias vc='vultr-cli' alias jl='jrnl' #hugo(){ # docker run --rm \ # -u `id -u`:`id -g` \ # -v `pwd`:/src \ # $EXTRA \ # klakegg/hugo \ # $@ #} TAIWAN_BBOX='118.1036,20.72799,122.9312,26.60305' TAIWAN_BBOX_V='20.72799,118.1036,26.60305,122.9312' TAIPEI_BBOX='121.346,24.926,121.676,25.209' TAIPEI_BBOX_V='24.926,121.346,25.209,121.676'