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