Una forma de organizar la configuración de la shell

A medida que voy instalando herramientas de desarrollo como por ejemplo SDKMAN!, Anaconda, Node Version Manager, el fichero .zshrc va aumentando en tamaño y complejidad.

Para mantener cada una de estas configuraciones de forma independiente y poder compartirlas entre varios equipos lo que hago es tener un directorio ~/.aliases donde voy añadiendo un fichero *.aliases para cada configuración. Hay que remarcar que no hay problema en aplicar esta solución si en lugar de zsh usamos bash.

Este directorio lo tengo sincronizado entre varios equipos a través de git y gitlab.com.

En el fichero ~/.zshrc, al final de todo, he añadido las siguientes líneas. Estas línea le indican a la shell que ejecute todos los scripts con extensión *.aliases que se encuentran en el directorio ~/.aliases:

for file in $(ls -1 ~/.aliases/*.aliases | sort); do
	source $file
done

Además los scripts se ejecutan de forma ordenada por nombre.

Estos son los ficheros que tengo dentro de la carpeta ~/.aliases actualmente.

ls -1 .aliases/*
.aliases/android.aliases
.aliases/conda.aliases
.aliases/custom.aliases
.aliases/nvm.aliases
.aliases/sdkman.aliases
.aliases/tilix.aliases
.aliases/venv.aliases

En los siguientes apartados se muestra el contenido de los diferentes ficheros de configuración:

sdkman.aliases

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"

conda.aliases

# added by Anaconda3 2018.12 installer
# >>> conda init >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$(CONDA_REPORT_ERRORS=false '/opt/anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
if [ $? -eq 0 ]; then
    \eval "$__conda_setup"
else
    if [ -f "/opt/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/opt/anaconda3/etc/profile.d/conda.sh"
        CONDA_CHANGEPS1=false conda activate base
    else
        \export PATH="/opt/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda init <<<

conda deactivate

nvm.aliases

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

tilix.aliases

if [ $TILIX_ID ] || [ $VTE_VERSION ]; then
        source /etc/profile.d/vte.sh
fi

android.aliases

export PATH=$PATH:$HOME/Android/Sdk/tools:$HOME/Android/Sdk/platform-tools

venv.aliases

venv-activate() {
        if [ ! -f "$HOME/.virtualenvs/$1/bin/activate" ]; then
                echo "virtual environment '$1' doesn't exists"
                return 1
        fi
        source $HOME/.virtualenvs/$1/bin/activate
}

custom.aliases

source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh

alias src="cd $HOME/Src"
alias doc="cd $HOME/Qsync/Documents"

Deja un comentario

Deja un comentario