# My alias for bash and zsh alias al="$EDITOR $SETTING_DIR/alias && source $SETTING_DIR/alias" # SHELL {{{ alias eof='IGNOREEOF=10' path() { echo $PATH | tr : '\n' } eval "${shell}rc(){ local RCFILE=$XDG_CONFIG_HOME/${shell}/.${shell}rc vim \$RCFILE && source \$RCFILE }" ps1.swap() { if [ -z "$PS1_bak" ]; then PS1_bak="$PS1" PS1="${1:->}" PS1="${PS1%% } " else PS1="$PS1_bak" unset PS1_bak fi } alias zsh.sourced='zsh -o SOURCE_TRACE' # }}} # CUSTOM HELPER {{{ cdh() { IFS=/; cd ~/helper/"$*"; IFS=' '; } alias chh="tig -C $SETTING_DIR status" alias profile='$EDITOR ~/helper/profile' # }}} # Text Encode/Decode{{{ big52utf8() { iconv -f BIG-5 -t UTF-8 } utf82big5() { iconv -t BIG-5 -f UTF-8 } urldecode() { encoded="$(cat)" echo ${encoded//\%/\\x} } urlencode() { perl -lpe 's/([^A-Za-z0-9.\/:])/sprintf("%%%02X", ord($1))/seg' # Alternative: # curl -Gso /dev/null -w %{url_effective} --data-urlencode @- "" } # }}} # ADMIN {{{ alias etc.passwd='sudo vim /etc/passwd' alias s='sudo -i systemctl' alias j='sudo -i journalctl -xeu' alias jf='sudo -i journalctl -xfeu' alias fb{.,''}conf='sudo vim /etc/fail2ban/jail.d/jail.local' alias fb='sudo -i fail2ban-client' alias vps.test='curl -sL https://yabs.sh | bash' # }}} # Nginx{{{ alias vgx='sudo vim /etc/nginx/sites-enabled/vps -c "autocmd BufWritePost * !nginx -t && sudo systemctl reload nginx"' alias ng{.,''}conf='sudo vim /etc/nginx/nginx.conf -c "autocmd BufWritePost * !nginx -t && sudo systemctl reload nginx"' ng.log() { setterm --linewrap off; tail -n ${1:-30} -f /var/log/nginx/access.log; setterm --linewrap on; } alias ng.error='setterm --linewrap off; tail -f /var/log/nginx/error.log; setterm --linewrap on' alias cdngx='cd /etc/nginx' # }}} # Web {{{ alias cdsrv='cd /srv' alias cdcgi='cd /srv/cgi' alias cdgit='cd /srv/git' alias cdhttp='cd /srv/http' alias cdrss='cd /srv/rss' alias www.git='/srv/git/create.sh' alias www='make -f ~/site/www/Makefile' alias www.rss='make -f ~/site/www/Makefile rss' alias www{.,''}conf='vim ~/site/www/scripts/build.sh' alias cdwww='cd ~/site/www' cds() { cd ~/site/${*// //}; } vp() { [[ $HOST = vultr ]] || PREFIX='ssh -qt vps' filename="${1%.md}.md" post=$(eval $PREFIX find ~/blog/content -name $filename | head -1 | sed 's/\r//') if [ -z "$post" ]; then echo "sh -c 'cd ~/blog && hugo new posts/$filename'" | eval ${PREFIX} post="~/blog/content/posts/$filename" fi shift if [[ $HOST = vultr ]]; then vim $@ "$post" else # Copy from vps tmpfile=$(mktemp --suffix .md) scp vps:"$post" $tmpfile # Edit locally vim $tmpfile --cmd "autocmd BufWritePost $tmpfile silent! :!setsid scp % vps:$post &" && \ cat $tmpfile | ssh vps "cd ~/blog && cat >$post && git add $post && git commit -m 'Update with vim'" && \ rm $tmpfile fi } # }}} # UNIX {{{ rm() { target=${@: -1} list=~/helper/.unremovable if [[ $@ =~ '-rf' ]] && [ -f "${list}" ]; then grep target $list && echo target unremovable && exit 1 fi /bin/rm $@ } config(){ cd ~/.config/$1; } alias sound="echo -ne '\a'" alias hg='history | grep' prompt-vim() { TMPFILE=$(mktemp) echo -e "$@" >$TMPFILE \ && vim $TMPFILE \ && sed -i '$ q; s/$/ \\/' $TMPFILE \ && eval $(<$TMPFILE tee /dev/tty) rm $TMPFILE } alias wcl='wc -l' alias battery='cat /sys/class/power_supply/CMB0/capacity' # ls alias ll='ls -lh' alias lla='ls -lha' alias lld='ls -lh -d */' alias ls='ls --color' alias lsd='ls -d */' llw() { which $1 | xargs ls -alh; } # process pst(){ pstree -ps ${1:-$$}; } alias k='kill %1' fd() { echo /proc/$$/fd; ls -l /proc/$$/fd; } # date alias iso8601='date --iso-8601=minutes' alias clock.reset='hwclock --systohc' date.reset() { sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z" } # grep alias grep='grep --color' unalias gr &>/dev/null gr() { grep --exclude-dir='\.git' -r $@ . | sed '/^.\{2048\}./d'; } grep.color() { grep --color -E "$1|\$"; } # cron alias ce='crontab -e' alias cl='crontab -l' # file system port() { sudo lsof -i :$1; } alias ports='sudo lsof -i -Pn | grep LISTEN' alias duu='du -hd 1 . | sort -hr' _move_to_tmp() { mv $@ /tmp; } alias latest='find . -type f | xargs ls -ltr | tail' alias lock='sudo chattr +i' # Make file undeletable alias unlock='sudo chattr -i' alias chx='chmod +x' alias chr='chmod +r' alias findn='find . -iname' name() { find . -iname "$1"; } trash() { mv $@ /tmp/ 2>/dev/null || rm -rf $@; } rmrf() { rm -rf $@; } alias df='df -h' bak() { cp $1 $1.bak; } cdp() { [[ ! -d $1 ]] && mkdir -p $1 cd $1 } 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) }' } # }}} # TTY {{{ alias tma='tmux a' alias tmux{.,''}conf="$EDITOR ~/.tmux.conf" alias terminal.color='printf "\e[%dm%d dark\e[0m \e[%d;1m%d bold\e[0m\n" {30..37}{,,,}' # }}} # NETWORK {{{ alias dig.detail='dig +noall +answer +multiline' alias co='curl -O' alias curl.code='curl -o /dev/null --silent -Iw "%{http_code}"' alias p8='ping -c 3 8.8.8.8' alias curl.google='curl -v google.com' alias curl.wifi='curl -I google.com | grep -E "^Location:" | cut -d" " -f2 | xsel -ib' ip.neigh() { INTERFACES=$(ifconfig | sed -nE 's/^([^ :]+).*$/\1/p') test -z "$1" && echo $INTERFACES && return 0 ifconfig | sed -nE "/^${1}/,/^$/ s/^ +inet ([0-9.]+) .*$/\1/p" } # }}} # GPG {{{ alias gpg.bye='gpg-connect-agent reloadagent /bye' alias gpg{.,''}conf="$EDITOR ~/.gnupg/gpg-agent.conf" # }}} # MAIL {{{ alias smtp{.,''}conf='sudo vim /etc/smtpd/smtpd.conf -c "autocmd BufWritePost * !sudo smtpd -n && systemctl restart smtpd.service"' alias mu='mailutils' alias mail.pass='sudo vim /etc/mail/passwd' alias smtp.queue='sudo smtpctl show queue' alias smtp.show='sudo smtpctl show' alias smtp.ctl='sudo smtpctl' alias sieve='vim ~/sieve' alias imap{.,''}conf='sudo vim /etc/dovecot/dovecot.conf && doveconf >/dev/null && sudo systemctl restart dovecot' alias cdmail='cd ~/Maildir' alias m='mutt' alias mutt{.,''}rc="$EDITOR ~/.config/mutt/muttrc" alias h='himalaya' alias gmail="mutt -F $SETTING_DIR/mutt/muttrc.gmail" alias ntu="mutt -F $SETTING_DIR/mutt/muttrc.b97602041" imap.save() { curl "imaps://mail.topo.tw/$1" \ --user pham:`pass mail/pham@mail.topo.tw` \ -T $2 } imap.save_attachment() { #TEMPFILE=$(mktemp) trap 'rm $TEMPFILE' EXIT mail -a $1 -Sexpandaddr /dev/stdout | \ curl imaps://mail.topo.tw/INBOX \ --user pham:`pass mail/pham@mail.topo.tw` \ -T /dev/stdin } imap.search.subject() { curl "imaps://mail.topo.tw/$1" \ --user pham:`pass mail/pham@mail.topo.tw` \ --request "SEARCH SUBJECT $2" } imap.fetch() { curl "imaps://mail.topo.tw/$1;MAILINDEX=$2" \ --user pham:`pass mail/pham@mail.topo.tw` | \ dos2unix | \ sed -E '0,/^ *$/d' } # }}} # SSH {{{ alias ssh{.,''}conf{ig,''}="$EDITOR ~/.ssh/config" alias sshd{.,''}conf{ig,''}="sudo vim /etc/ssh/sshd_config" alias ssh.auth="$EDITOR ~/.ssh/authorized_keys" alias ssh.known="$EDITOR ~/.ssh/known_hosts" alias ssh.pub="cat ~/.ssh/id_ed25519.pub" alias cdssh='cd ~/.ssh' alias ptt='ssh ptt' alias sshv='ssh -t vps' ssh.tar() { prompt-vim "FOLDER=foo TARGET=~/Downloads tar cf - $FOLDER | pv -s $(du -sb $FOLDER | cut -f1) | ssh vps \"cd $TARGET; tar xf -\" \nssh vps 'tar czf - --directory=/working/path target' | tar xvzf -" } ssh.up() { set -o pipefail filename=${3:-`basename $1`} # Upload to absolution path if [[ $2 =~ '^/' ]]; then folder=${2%/} cat $1 | ssh vps "mkdir -p $folder; cat >${folder}/${filename}" || return 1 echo Uploaded to ${folder}/${filename} # Upload to relative in ~/public/ else folder='~/public/'${2%/} cat $1 | ssh vps "mkdir -p $folder; cat >${folder}/${filename}" || return 1 echo https://topo.tw/p/${2%/}/${filename} fi } ssh.up.today() { DATE=$(date --iso-8601) ssh vps mkdir -p ~/public/$DATE ssh.up $1 $DATE } ssh.down() { ssh -t vps rm -rf -i ~/public/"$1" } # }}} # Distro: 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' pss(){ pacman -Ss $@ | grep $1 -C2; } yss(){ yay -Ss $@ | grep $1 -C2; } alias pqi='pacman -Qi' alias pql='pacman -Qlq' alias pqe='pacman -Qqe' pqlb() { pacman -Qlq $1 | grep bin } alias yql='yay -Ql' alias pf='pacman -F' alias yf='yay -F' alias pfl='pacman -Fl' alias pR='sudo pacman -R' psi() { [[ $(pacman -Qqe $1) != '' ]] 2>/dev/null && echo -e "$(tput setaf 13)[Installed]$(tput sgr0)" pacman -Si $1 } pkgbuild() { git clone https://aur.archlinux.org/$1.git; } # }}} # X11: Alacritty{{{ alias ala{critty,''}{.,''}rc="$EDITOR ~/.config/alacritty/alacritty.toml" # }}} # X11: Clipboard{{{ alias xi='xsel -ib' alias xii='`fc -ln -1` | head -1 | 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' # }}} # X11: Misc {{{ alias cdD='cd ~/Documents' alias cdP='cd ~/Pictures' alias cdV='cd ~/Videos' alias cdM='cd ~/Music' alias x='xdg-open' alias ob{.,''}rc='vim ~/.config/openbox/rc.xml' desktop() { $EDITOR ~/.local/share/applications/${1}.desktop } # }}} # EDITOR: VIM {{{ alias editor='select-editor' alias vim{.,''}rc='vim ~/.config/vim/vimrc' if which nvim &>/dev/null; then alias vim='nvim' alias v='nvim' alias vv='/usr/bin/vim' else alias v='vim' fi alias vu='vim -u NONE "+set nowrap"' alias sv='sudo vim' alias vr='vim -R' alias vm='vim Makefile' # Edit last file alias vl="vim -c 'norm '" # Use Telescope to select recent files vll() { vim -c 'Telescope oldfiles'; } # Apply defaut session alias vS="vim -S /tmp/vim.session" alias cdv='cd ~/.config/nvim' vs() { which $1 && vim $(which $1); } [ ${0##*/} = 'zsh' ] && compdef vs=which alias vim.dos2unix="vim '+set ff=unix' '+x'" vvv() { while true; do vim -c 'norm ' if [ $? -ne 0 ]; then break fi echo "restarting vim..."; done } # }}} # CD {{{ alias ..='cd ..' alias ...='cd ../..' alias ld='cd -' # last directory alias cda='mkdir -p ~/data && cd ~/data' cde() { cd /etc/$@; } alias cdetc='cde' alias cdpu='cd ~/public' alias cdd='cd ~/Downloads' alias cdtrash='cd ~/.local/share/Trash' # }}} # GIT: config {{{ alias git.config="$EDITOR ~/.gitconfig" unalias gc &> /dev/null # override zsh plugin alias gc() { git clone $@; if [ $# = 1 ]; then cd $(basename ${1%.git}); fi } gc1() { git clone --depth=1 $1 && cd $(basename $1); } alias gls='git log -S' cdg() { target=$(sed 's# #/#g' <<<"$@") cd ~/git/$target || cd ~/git } 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 alias ch="/home/pham/helper/bin/git/check-repos.sh" alias git.check="/home/pham/helper/bin/git/check-repos.sh" alias cgit{.,''}rc='sudo vim /etc/cgitrc' # }}} # GIT: TIG {{{ alias cdt='cd ~/git/tig' alias t='tig' alias ts='tig status' alias tig{.,''}rc="$EDITOR ~/.tigrc" 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 } # }}} # GIT: GIST {{{ alias g='gist' alias gl='gist last' unalias gg &>/dev/null alias gg='gist grep' # }}} # GIT: 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 } # }}} # GIS {{{ alias oo='ogr2ogr' alias oi='ogrinfo -al -so' alias oseq='ogr2ogr -f GEOJSONSeq /vsistdout/' 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' pbf() { protoc --decode_raw } mvt.decode() { if [[ ! -t 0 ]]; then cat >$tmp tmp=$(mktemp) else tmp=$1 fi mvt_decode.py $tmp | tr \' \" | sed 's/True/true/g; s/False/false/g' } wrap2geojson() { jq -s '{ type: "FeatureCollection", features: . }'; } # }}} # DEV: 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/" | tee /dev/tty | jq '.results[]["name"]' | sort; } # }}} # DEV: 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 } # }}} # sample file{{{ 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' alias sample.text='curl http://metaphorpsum.com/paragraphs/3/5' alias sample.bible='curl https://cdn.jsdelivr.net/gh/wldeh/bible-api/bibles/bibles.json | jq .; echo https://github.com/wldeh/bible-api' 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.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 sample.lorem='curl -s http://metaphorpsum.com/paragraphs/4/16' lorem() { paragraph=${1:-4} sentences=${2:-6} curl -s http://metaphorpsum.com/paragraphs/$paragraph/$sentences } alias sample.wmts='curl -O https://gis.sinica.edu.tw/tileserver/wmts' sample.image() { curl -Lo random.png https://picsum.photos/seed/`date +%s`/${1:-500}/${2:-500}; } 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' alias data.ical='curl -LO http://www.google.com/calendar/ical/zh-tw.taiwan%23holiday%40group.v.calendar.google.com/public/basic.ics' 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 (from internet){{{ 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 } # https://data.gov.tw/dataset/7441 alias data.taiwan_town='curl -o town.zip -L https://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 -' # }}} # PASS {{{ alias chp='tig -C ~/.password-store' alias chpass='tig -C ~/.password-store' alias cdpass='cd ~/.password-store' alias p='pass' alias pc='pass -c' alias pe='pass edit' alias pgn='pass generate --in-place --clip' alias pgc='pass generate --clip' words() { cat /usr/share/dict/usa | grep -E "^[a-z]{4,8}$" | shuf | head -40 | xargs -n${1:-2} } # }}} # Beancount{{{ alias cdB='cd $HOME/bean' alias b='vim $HOME/bean/main.bean' # }}} # python{{{ alias pip3='python3 -m pip' # }}} # Misc{{{ alias yl='youtube-dl' alias yla='youtube-dl -x --audio-format mp3' yt.audio() { yt-dlp --verbose -x --audio-format mp3 --add-metadata $1 } alias hp='http-prompt' alias clocg='cloc --vcs=git' trash() { mv $@ ~/.local/share/Trash; } alias ge='graph-easy --boxart' alias ffmpeg='ffmpeg -hide_banner' alias npm='pnpm' fix() { which $1 && grep -Po 'FIXME.*' $(which $1); } alias monitor.light='ddcutil --permit-unknown-feature setvcp 10' alias cdosm='cd /srv/osm' alias y='yazi' acme.issue() { acme.sh --issue -d $1 -w $2 } alias recall='cd /srv/recall' alias river='rclone mount r2:/river ~/Downloads/river' # }}} # vim:fdm=marker fdl=0