# Aliases ## Variables de ambiente export EDITOR=vim export PATH=$HOME/.local/bin:$PATH export PATH=$HOME/.cargo/bin:$PATH export VENV=.venv export LENGTH=79 export FONT_DIR=$HOME/.fonts export BASH_ALIAS=$HOME/.bash_aliases export RLOC_ALIAS=$HOME/Repositorios/aliases/aliases.sh export REPO_ALIAS=https://gitlab.com/perritotuerto/codigo/aliases/-/raw/no-masters/aliases.sh export FLINSTALL=/usr export FREELINGDIR=$FLINSTALL ## Eliminación de alias previos unalias -a ## Atajos alias .1='cd ..' alias .2='cd ../..' alias .3='cd ../../..' alias e='v' alias g='geany' alias l='lsd -al --permission octal' alias o='okular' alias s='scribus' alias t='tree' alias v='vim' alias cpd='docker cp' alias cdr='cd ~/Repositori*' alias docs='cd ~/Document*' alias repos='cdr' alias cloud='nube' alias descargas='cdd' alias documentos='docs' alias permisos='stat -c "Permiso %a | Creación %w | Modificación %y | %n" *' alias stats='zsh_stats' ## Atajos SSH alias adjetiva='ssh adjetiva' alias agroteso='ssh agroteso' alias aml='ssh aml' alias aml-stats='ssh aml "docker stats -a"' alias cel='ssh cel' alias clientes='ssh clientes' alias colimapress='ssh colimapress' alias cuates='ssh cuates' alias de='ssh -X de' alias pc='ssh -X pc' alias perro='ssh -X perro' alias ppp='ssh ppp' alias prolibreros='ssh prolibreros' alias vpn='ssh vpn' alias vpn-stats='ssh vpn "docker stats -a"' alias zearn='ssh zearn' ## Personalizaciones alias mv='mv -v' alias rm='rm -v' alias cp='cp -rv' alias df='df -hT' alias du='du -sh' alias sed='sed -zr' alias ssh='ssh -o ServerAliveInterval=30' alias bat='bat --paging never' alias batcat='batcat --paging never' alias free='free -h' alias diff='diff --color' alias mkdir='mkdir -p' alias rsync='rsync -varuchz --progress' alias rdiff-backup='rdiff-backup -v 5' alias perl-rename='perl-rename -v' alias pip='pip3' alias python='python3' alias ipython='ipython3' alias selene="selene --config $HOME/.config/selene/config.toml" alias stylua="stylua --config-path $HOME/.config/stylua/config.toml" ## Acciones alias buscar="grep -REin --color=always --exclude-dir={.git,.venv,.pytest_cache,__pycache__,\*egg-info} --exclude=\*.min\*" alias search="buscar" alias pdfbuscar="pdfgrep --color=always --page-number=label -PRe" alias pdfsearch="pdfbuscar" alias rastrear='find . -iname' alias trace='rastrear' alias rastrear-todo='find / -iname' alias trace-all='rastrear-todo' alias copiar='xclip -selection clipboard <' alias copy='copiar' alias refresh='recargar' alias install='instalar' alias uninstall='desinstalar' alias remove='desinstalar' alias update='actualizar' alias upgrade='actualizar' alias enlistar='find . -type f' alias list='enlistar' alias comparar='compare' ## A modo de programitas alias alv='rm -rf' alias doc2md='pandoc --markdown-headings=atx -V lang=es' alias mi-ip='curl https://ipapi.co/json' alias my-ip='mi-ip' alias pecas-legacy="sudo docker start pecas && sudo docker exec -it pecas /bin/zsh -l" alias pacman-limpiar='echo "Limpiando caché…" && sudo pacman -Scc && echo "\nEliminando paquetes huérfanos…" && sudo pacman -Rs $(pacman -Qqdt)' alias pacman-clean='pacman-limpiar' alias docker-limpiar='sudo docker system prune -a' alias docker-clean='docker-limpiar' alias añadir-fuentes='font-add' alias tiempo='/usr/bin/t' alias untar='tar -xvf' alias untargz='tar -xvzf' alias timestamp='date +%s' ## Monerías alias arcoiris='journalctl --no-pager | dotacat' alias matrix='tmatrix --mode=dense -f 0,5 -C magenta' alias acuario='asciiquarium' alias tren='sl' alias fantasma='oneko &' ## Funciones ### Detecta tipo de distribución distro-name () { echo $(awk -F= '/^NAME/{print $2}' /etc/os-release) | sed 's/"//g' } ### Imprime errores echo-error () { echo "ERROR: $1" return 1 } ### Actualizador actualizar () { case $1 in alias | aliases) echo "Actualizando alias" aliases actualizar ;; paquetes | packages) echo "Actualizando paquetes" if [[ $(distro-name) = "Arch Linux" ]]; then sudo pacman -Syy sudo pacman -S archlinux-keyring else sudo apt update fi ;; todo | sistema | all | system) echo "Actualizando sistema" if [[ $(distro-name) = "Arch Linux" ]]; then yay -Su else sudo apt upgrade fi ;; -h | --help | help | ayuda) actualizar-help ;; *) actualizar alias actualizar paquetes actualizar sistema ;; esac } actualizar-help () { echo "actualizar: utilidad para hacer actualizaciones. Uso: actualizar [OPT] Opciones: alias | aliases Actualiza alias. paquetes | packages Actualiza repositorio de paquetes. -h | --help | help | ayuda Despliega esta ayuda. todo | sistema | all | system Actualiza el sistema. vacío Actualiza el sistema con actualización previa de paquetes. Ejemplos: actualizar alias actualizar paquetes actualizar -h actualizar todo actualizar" } ### Instalador instalar () { if [[ $(distro-name) = "Arch Linux" ]]; then yay -Syy $@ else sudo apt install $@ fi } ### Desinstalador desinstalar () { if [[ $(distro-name) = "Arch Linux" ]]; then yay -Rss $@ else sudo apt purge $@ sudo apt clean sudo apt autoremove fi } ### Gestión del home home () { if [ -d "$HOME/.git" ]; then case $1 in estado | status) git -C $HOME status ;; editar | edit) e $HOME/.gitignore ;; guardar | save) git -C $HOME add . git -C $HOME commit -m "Actualización" ;; empujar | push) if output=$(git -C $HOME status --porcelain) && [ ! -z "$output" ]; then home guardar fi unset output git -C $HOME pushall ;; -h | --help | help | ayuda) home-help ;; *) if [ -z "$1" ]; then echo-error "al menos un argumento es necesario; por ejemplo 'home -h'" else echo-error "comando '$1' inválido" fi ;; esac else echo-error "el home '$HOME' no es un directorio git" fi } home-help () { echo "home: utilidad para gestionar el home. Home: $HOME Estado: $(if [ -d "$HOME/.git" ]; then echo "OK"; else echo "requiere ser un repositorio git"; fi) Uso: home [OPT] Opciones: estado | status Muestra el estado del home. editar | edit Edita el archivo .gitignore del home. guardar | save Guarda el estado del home. empujar | push Empuja el estado del home al repositorio. -h | --help | help | ayuda Despliega esta ayuda. Ejemplos: home estado home editar home guardar home empujar home -h" } ### Gestión de alias aliases () { case $1 in actualizar | update) if [ -f "$RLOC_ALIAS" ]; then aliases link else curl -o $BASH_ALIAS $REPO_ALIAS fi recargar ;; ver | see) echo $BASH_ALIAS c $BASH_ALIAS ;; editar | edit) e $BASH_ALIAS ;; empujar | push) repo=$(parent $RLOC_ALIAS) if [ -f "$RLOC_ALIAS" ]; then if [ -f "$BASH_ALIAS" ] && [ ! -L "$BASH_ALIAS" ]; then cp -u $BASH_ALIAS $RLOC_ALIAS fi if output=$(git -C $repo status --porcelain) && [ ! -z "$output" ]; then git -C $repo add . git -C $repo commit -m "Actualización" fi git -C $repo pushall unset output repo recargar else echo-error "no se pudo empujar al repositorio; no existe el archivo '$RLOC_ALIAS'" fi ;; enlazar | link) if [ -f "$RLOC_ALIAS" ]; then if [ -f "$BASH_ALIAS" ]; then ln -fs $RLOC_ALIAS $BASH_ALIAS fi recargar else echo-error "no se encontró archivo '$RLOC_ALIAS' para copia." fi ;; -h | --help | help | ayuda) aliases-help ;; *) alias ;; esac } aliases-help () { echo "aliases: utilidad para hacer gestionar alias. Uso: aliases [OPT] Opciones: actualizar | update Actualiza aliases. ver | see Muestra contenido de archivo de aliases. editar | edit Edita aliases. empujar | push Empuja los cambios locales al repositorio. enlazar | link Genera enlace simbólico entre repo 'aliases' y archivo de aliases. -h | --help | help | ayuda Despliega esta ayuda. vacío Uso regular de 'alias'. Ejemplos: aliases ver aliases editar aliases -h aliases" } ### Recarga aliases recargar () { if [ -f "$HOME/.zshrc" ]; then source $HOME/.zshrc else source $HOME/.bashrc fi } ### Respalda discos bak () { echo -n "¿Respaldar $1 en $2? [y/N] " read REPLY if [[ $REPLY =~ ^[Yy]$ ]]; then sudo dd if=$1 of=$2 bs=64K conv=noerror,sync status=progress else echo "No se realizó respaldo" fi } ### Descarga información de sitios web dump () { dump_domain=${@: -1} if [ "$1" = "mirror" ] || [ "$1" = "--mirror" ]; then wget --no-clobber --timestamping --continue --page-requisites --html-extension --convert-links \ --mirror $dump_domain else wget --no-clobber --timestamping --continue --page-requisites --html-extension --convert-links \ --recursive --follow-tags=a --domains=$dump_domain \ --reject '*.js,*.css,*.ico,*.txt,*.gif,*.jpg,*.jpeg,*.png,*.mp3,*.pdf,*.tgz,*.flv,*.avi,*.mpeg,*.iso,*.epub' \ $dump_domain fi unset dump_domain } ### Entra a descargas cdd () { if [ -d "$HOME/Descargas" ]; then cd $HOME/Descargas else cd $HOME/Downloads fi } ### Entra a nubes nube () { if [ -d "$HOME/Nube" ]; then cd $HOME/Nube else cd $HOME/Cloud fi } ### Instalador de fuentes font-add () { if [ ! -d "$FONT_DIR" ]; then mkdir $FONT_DIR fi cp $@ $FONT_DIR fc-cache -fv } ### Conversor de imágenes o documentos con ImageMagick o Pandoc convertir () { echo "convertir FORMATO1 a FORMATO2 [con pandoc]" for file in *.$1; do echo "$file => $file.$3" if [ "$#" -eq 5 ]; then doc2md $file -o $file.$3 else convert -flatten $file $file.$3 fi done } ### Gestiona archivos MD md () { format () { pandoc --reference-links --reference-location=document \ --columns=$LENGTH -o $1 $1 } case $1 in formatear | format | f) for arg in "${@:2}"; do if [ -d "$arg" ]; then for file in $arg/*.md; do format $file; done else format $arg fi done ;; convertir | convert) pandoc --standalone -V lang=es -o $4 $2 ;; leer | read | ver | cat | c) glow -w $LENGTH -p $2 ;; editar | edit | e) $EDITOR $2 ;; -h | --help | help | ayuda) md-help ;; esac } md-help () { echo "md: utilidad para hacer gestionar archivos Markdown. Uso: md [OPT] MD Opciones: formatear | format | f Da formato a uno o más archivos. convertir | convert Convierte el archivo. leer | read | ver | cat | c Muestra el archivo. editar | edit | e Edita el archivo con $EDITOR. -h | --help | help | ayuda Despliega esta ayuda. Ejemplos: md formatear archivo.md md convertir archivo.md a archivo.html md leer archivo.md md editar archivo.md md ayuda" } ### Obtiene directorio padre parent () { if [ $# -eq 0 ]; then curr="$PWD"; else curr=$1; fi echo $(python3 -c """ from pathlib import Path print(Path('$curr').resolve().parent) """) unset curr } ### Desactiva o activa virtualenv check-venv () { if [ $# -eq 0 ]; then curr="$PWD"; else curr=$1; fi if [ -f "$curr/$VENV/bin/activate" ]; then source $curr/$VENV/bin/activate elif [[ $(parent $1) != "/" ]]; then check-venv $(parent $1) else type deactivate &>/dev/null && deactivate fi unset curr } check-venv # Ejecuta cuando se carga ### Agrega y arranca virtualenv venv () { virtualenv $VENV check-venv } ### Modifica comportamiento de cd cd () { builtin cd $1 check-venv } ### Modifica comportamiento de git git () { if [ "$#" -lt 3 ] && [ "$1" = "push" ] && ( [ -z "$2" ] || [ "$2" = "--tags" ] ); then /usr/bin/git pushall if [ "$2" = "--tags" ]; then /usr/bin/git pushtags fi else /usr/bin/git $@ fi } ### Embellece y verifica código pymp () { if [ ! -d "${@:$#}" ] && [ ! -f "${@:$#}" ]; then pympath=$(pwd) else pympath=${@:$#} fi case $1 in -f | formatear | format) ruff format --config $HOME/.config/ruff/config.toml ;; -h | --help | help | ayuda) pymp-help ;; esac ruff check --config $HOME/.config/ruff/config.toml unset pympath } pymp-help () { echo "pymp: utilidad para enchular código de Python. Uso: pymp [OPT] [FILE|DIR] Opciones: -f | formatear | format Da formato a los archivos. -h | --help | help | ayuda Despliega esta ayuda. Ejemplos: pymp archivo.py pymp formatear . pymp ayuda" return 0 } ### Muesta contenido de archivo embellecido c () { if [[ $1 == *.json ]]; then if [[ $(distro-name) = "Arch Linux" ]]; then cat $@ | jq | bat --file-name $1 --language json else cat $@ | jq | batcat --file-name $1 --language json fi else if [[ $(distro-name) = "Arch Linux" ]]; then bat $@ else batcat $@ fi fi } ### Da formato a archivos format () { if [[ $1 == *.md ]]; then md format $1 elif [[ $1 == *.py ]]; then pymp format $1 elif [[ $1 == *.lua ]]; then stylua $1 elif [[ $1 == *.rs ]]; then rustfmt $1 fi } ### Compara archivos compare () { if [[ $(md5sum "$1" | cut -d " " -f1) == $(md5sum "$2" | cut -d " " -f1) ]] then echo "true" && true else echo "false" && false fi } ### Emula gitlab-runner sobre docker; cfr. https://stackoverflow.com/a/65920577 runner () { runner=gitlab-runner case $1 in -h | --help) runner-help ;; -i | --init) sudo docker run -d --name $runner -w $PWD -v $PWD:$PWD \ -v /var/run/docker.sock:/var/run/docker.sock \ gitlab/gitlab-runner:latest 1>/dev/null ;; -rm | --remove) sudo docker rm -f $runner ;; *) sudo docker exec -it -e STAGE=$1 -w $PWD $runner \ bash -c 'git config --global --add safe.directory "*" ; gitlab-runner exec docker $STAGE' ;; esac unset runner } runner-help () { echo "runner: utilidad para usar gitlab-runner en un contenedor. Uso: runner [OPT] Opciones: -h | --help Despliega esta ayuda. -i | --init Inicializa contenedor $runner en $PWD -rm | --remove Elimina contenedor $runner * Stage de $runner a probar Ejemplos: runner --init runner build runner test runner deploy runner -h runner -rm" } ### Convierte STDOUT a TSV al reemplazar todos los códigos ANSI por tabuladores totsv () { rgx_ansi_codes="\(\x1b\[[0-9;]*[mGKHF]\)\+" rgx_trim="s/^\s*//g;s/\s*$//g" if command -v gsed > /dev/null; then cmd=gsed; else cmd=sed; fi $cmd -u -e 's/\t/\\t/g' -e "s/$rgx_ansi_codes/\t/g" -e $rgx_trim unset cmd rgx_ansi_codes rgx_trim }