Automatizar Hugo Localmente
===========================
29 de Diciembre, 2020

Ya he descrito como se automatiza y mantiene un blog de Hugo 
remotamente, ahora voy a hacer lo propio para el entorno local, de 
esa manera haciendo un poco mas rápido el proceso de creación de 
contenido.

Para escribir un nuevo articulo tenemos que ir al directorio raíz 
de nuestro blog, usar el comando `hugo new` para crear el archivo y 
luego abrirlo con un editor de texto para empezar a escribirlo.
Esto es demasiado trabajoso así que hice no uno sino dos shell 
scripts: uno para la creación de contenido y otro para subir dicho 
contenido al repo.

En realidad adapté un script que ya estaba usando para escribir 
notas localmente incluyendo lo necesario para también manejar mis 
varios blogs.

La parte relevante de este script[1] se ve así:

```
articulo() {
    menuArticulo=$(printf "Fuckup\\nMuert.o\\nDotfiles\\nTextArt" | listar -p " ")
    case $menuArticulo in
    "Fuckup") cd "$ARTDIR/fuckup/blog" || exit ;;
    "Dotfiles") cd "$ARTDIR/club/the-dot-files" || exit ;;
    "TextArt") cd "$ARTDIR/town/textarrrgh" || exit ;;
    "Muert.o") cd "$ARTDIR/texto-plano/muert.o" || exit ;;
    esac
    [ -z "$menuArticulo" ] && exit
    nombre="$(listar -theme dprompt -p "Titulo: ")" 2>/dev/null
    [ -z "$nombre" ] && exit
    nombreForm="$(echo "$nombre" | tr ' ' '-')"
    if [ "$PWD" = "$ARTDIR/texto-plano/muert.o" ]; then
        hugo new articulos/"$nombreForm".md
        sleep 1
        abrir "$PWD/content/articulos/$nombreForm.md"
    else
        hugo new posts/"$nombreForm".md
        sleep 1
        abrir "$PWD/content/posts/$nombreForm.md"
    fi
}
```

`$ARTDIR` es la parte inmutable de la ruta en mi maquina donde 
guardo mis archivos de Hugo.
`listar` es una función que uso para crear menúes gráficos usando 
Rofi[2]. Con mínimas modificaciones, se lo podría reemplazar por 
FZF o por una opción puramente shell como ser `select` o algo con 
funcionalidad similar.
`abrir` es otra función que abre el archivo creado en un editor de 
texto en una ventana de terminal flotante.

El script que uso para subir el contenido a repos es 
considerablemente mas simple, así que lo puedo reproducir en su 
totalidad:

```
#!/bin/sh

MAINDIR="$HOME/doc/paginas/tilde"

subir() {
	if [ "$PWD" = "$MAINDIR/texto-plano/muert.o" ] || [ "$PWD" = "$MAINDIR/town/textarrrgh" ]; then
		hugo
	fi
	git add . && git commit -m "nuevo post"
}

listar() { rofi -dmenu "$@"; }

MENU="$(printf "Fuckup\\nMuerto\\nDotfiles\\nTextArt" | listar -p " ")"
case $MENU in
'Fuckup') cd "$MAINDIR/fuckup/blog" && subir || exit ;;
'Muerto') cd "$MAINDIR/texto-plano/muert.o" && subir || exit ;;
'Dotfiles') cd "$MAINDIR/club/the-dot-files" && subir || exit ;;
'TextArt') cd "$MAINDIR/town/textarrrgh" && subir || exit ;;
esac
```

No sera de lo mas lindo, pero logra su cometido. En algún momento 
me pondré en campaña para crear algo no tan repetitivo y que este 
mejor escrito, pero por ahora esto es lo mejor que tengo.
El funcionamiento es bastante evidente, entramos al directorio 
relevante usando `cd` y llamamos a una función que ejecuta comandos 
de git.
La razón por la cual `git push` esta ausente es que cree un 
post-commit hook (perdón, no encontré una forma satisfactoria de 
traducir esto) en los repos de mis blogs que ejecuta el push 
automáticamente después de enviar el mensaje de commit.

[1] https://tildegit.org/dgy/hexagons/src/branch/dots/.local/bin/escribir
[2] https://github.com/davatorium/rofi