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