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"

Almacenar las credenciales de docker registry de forma más segura

Cuando haces login en un docker registry por defecto almacena las credenciales (basic auth) en un fichero de texto sin encriptar en $HOME/.docker/config.json.

Para que no almacene las credenciales ahí y utilice el almacen del sistema (por ejemplo gnome-keyring):

Descargar una release de este proyecto:

https://github.com/docker/docker-credential-helpers/

En este momento la versión es 0.6.0 y puede ser descargada de aquí:

https://github.com/docker/docker-credential-helpers/releases/download/v0.6.0/docker-credential-secretservice-v0.6.0-amd64.tar.gz

Extraer el fichero docker-credential-secretservice y colocarlo en algún sitio en el $PATH.

Hacer logout de los registry a los que estés logado actualmente:

$ docker logout docker.registry.url

Modificar $HOME/.docker/config.json añadiendo la clave credStore con el valor secretservice.

{
  "auths": {
    "docker.registry.url": {}
  },
  "HttpHeaders": {
    "User-Agent": "Docker-Client/18.09.1 (linux)"
  },
  "credsStore": "secretservice"
}

Esto es para GNU/Linux, para el resto de sistemas ver el siguiente enlace ya que no lo he probado:

https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Crear el lanzador de Android Studio en GNU/Linux

Me gusta poder ejecutar las apps que tengo instaladas desde el lanzador de aplicaciones de gnome (unity, o en mac spotlight) sin ayuda del ratón, únicamente teclando su nombre.

Hasta ahora, en GNU/Linux, venía utilizando menulibre para crear manualmente la entrada de Android Studio (o cualquier otro programa no instalado vía gestor de paquetes del sistema).

Hoy he descubierto que existe una opción de menú para hacerlo:

tools -> Create Desktop Entry...

Bueno es saberlo 😀

img_20160930_073546

JDK 8, Android Studio en Ubuntu

Aprovechando que ha salido Ubuntu 16.04 LTS, he actualizado mi máquina linux. Dejo aquí los pasos para montar el entorno de desarrollo de Android.

Crear directorios de instalación

Como este equipo lo voy a usar yo solo por el momento cambio el propietario a mi usuario para facilitar las cosas (tengo que ver aún como gestionar esto).

    sudo mkdir -p /opt/repository/sdk
    sudo mkdir -p /opt/repository/tools
    sudo chown -R edu: /opt/repository

Oracle JDK 8

Descargar Oracle JDK 8 de la página de descargas oficial de descargas.

    cp ~/Descargas/jdk-8u91-linux-x64.tar.gz /opt/repository/sdk
    cd /opt/repository/sdk
    tar xvzf jdk-8u91-linux-x64.tar.gz
    ln -s /opt/repository/sdk/jdk-8u91-linux-x64.tar.gz /opt/repository/java

Variables de entorno

Definir las variables de entorno a nivel de sistema. Para ello crearemos un nuevo fichero dev.sh en /etc/profile.d donde almacenaremos nuestra configuración:

    sudo vi /etc/profile.d/dev.sh

El contenido del fichero será:

    export REPOSITORY=/opt/repository
    export JAVA_HOME=$REPOSITORY/sdk/java
    export ANDROID_HOME=$REPOSITORY/sdk/android
    export PATH=$PATH:$JAVA_HOME/bin:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

Este es un buen lugar para definir las variables de entorno y que estás tengan efecto en todo el sistema.

Una vez hecho esto, reiniciar el sistema para que los cambios surjan efecto.

Android Studio

Descargar Android Studio.

    cp ~/Descargas/android-studio-ide-143.2739321-linux.zip $REPOSITORY/tools
    cd $REPOSITORY/tools
    unzip android-studio-ide-143.2739321-linux.zip

Ejecutaremos Android Studio, desde la línea de comandos:

    $REPOSITORY/tools/android-studio/bin/studio.sh

Durante la primera ejecución nos solicitará en qué ruta queremos ubicar los SDK de android. Seleccionaremos:

    /opt/repository/sdk/android

Instalaremos los SDKs que consideremos y cerraremos AS.

Añadir Android Studio al menú del sistema

Actualización Ahora, con versiones más recientes de Android Studio (2.2+) hay una opción en el menú Tools para hacer esto.

Para poder ejecutar Android Studio cómodamente desde el lanzador / menú del sistema, crearemos el fichero:

    vi ~/.local/share/applications/android-studio.desktop

Con el siguiente contenido:

    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=Android Studio
    Comment=IDE Android
    Icon=/opt/repository/tools/android-studio/bin/studio.png
    Exec=/opt/repository/tools/android-studio/bin/studio.sh
    NoDisplay=false
    Categories=Development;
    StartupNotify=false
    Terminal=false

También es posible añadir esta entrada utilizando un frontend gráfico para editar los menús como MenuLibre.