Bad Daemons

Nikola + emacs: Gestionar un blog de contenido estático

Lo de tener un blog siempre es divertido, uno coge, escribe sus mierdas y los demás lo leen o no, eso ya depende de la mierda. Pero oye, siempre se puede intentar, es lo fantastico de internet. Y además es gratis, según cómo se monte. Se puede ir a lo fácil y tirar de wordpress.com o aún peor, blogspot. Entiendo que en ciertos casos hay que tirar del primero (del segundo no hay ningún motivo válido para usarlo, lo siento), no todo el mundo puede o quiere pagar un VPS o puede tener una máquina encendida en casa todo el día. El siguiente articulo es para los que si tienen una máquina disponible.

Nikola es un generador de web estático. Esto tiene distintas ventajas respecto a una web con php tal cómo wordpress, por ejemplo.

  • Más seguras, requiere menos recursos
  • Es rápido, crea el HTML de manera incremental (sólo crea las páginas necesarias cada vez)
  • Acepta distintos formatos: iPython, RST, Markdown, HTML y con el plugin adecuado, org-mode.
  • CLI sencilla

Tiene varios plugins, desde importar articulos de wordpress hasta el ya mencionado org-mode plugin. Es cuestión de probarlo, en realidad es fácil hacerlo. Además tienen bastante documentación, no he visto nada que no estuviese ahí. Así que al lío:

apt-get install python-pip
pip install nikola

Y ya. Ahora viene lo divertido, que es configurarlo. Para hacerlo tenemos que ir al directorio en el que queramos que esté y ejecutar:

nikola init miweb
# la carpeta lisp o la que sea, dentro de .emacs.d
cd ~/.emacs.d/lisp/
git clone https://github.com/redguardtoo/org2nikola.git

Y entonces hará unas cuantas preguntas. Podéis responderlas ahora o podéis modificar el archivo conf.py una vez hayáis terminado, así que cómo queráis. No me extenderé en la configuración por que es bastante sencilla. La configuración que tengo la podéis ver aquí, en el git. Despúes de eso instalaremos el plugin org2nikola, que permite exportar arboles org al directorio que le digas y con formato HTML. Congiguramos el nuevo modo de emacs poniendo en el ~/.emacs o en el ~/.emacs.d/init.el lo siguiente:

org2nikola

Sirve para publicar en nikola con marcado org-mode. Si no está instalado, lo instala mediante el-get. Más información (o no).

(add-to-list 'el-get-sources   '(:name org2nikola
                                       :website "https://github.com/redguardtoo/org2nikola.git"
                                       :description "Export org into HTML used by static blog generator nikola."
                                       :type git
                                       :url "https://github.com/redguardtoo/org2nikola.git"
                                       :load-path ("./")
                                       ))

(if (not (el-get-package-installed-p 'org2nikola))
    (el-get 'sync 'org2nikola)
  )

Las funciones cutres son mías, si me animo algún día las mejoraré.

;; Se instala el htmlize de melpa, el de org-mode es demasiado viejo
(use-package htmlize :ensure t)

(use-package org2nikola
  :load-path "el-get/org2nikola/"
  :config
  (setq org2nikola-output-root-directory "~/Documentos/blog/")
  (setq org2nikola-use-verbose-metadata t)

  (defun org2nikola-build ()
    (interactive)
    (compile (format "source ~/.env/blog/bin/activate; cd '/home/drymer/Documentos/blog/'; bash scripts/construir.sh; deactivate") t))

  (defun org2nikola-serve ()
    (interactive )
    (compile (format "source ~/.env/blog/bin/activate; cd '/home/drymer/Documentos/blog/'; qutebrowser --target tab-bg-silent http://localhost:8000 2> /dev/null &; nikola serve; deactivate;") t))

  (defun org2nikola-clean ()
    (interactive )
    (compile (format "source ~/.env/blog/bin/activate; cd '/home/drymer/Documentos/blog/'; nikola clean; deactivate")) t)

  (defun org2nikola-deploy ()
    (interactive )
    (compile (format "source ~/.env/blog/bin/activate; cd '/home/drymer/Documentos/blog'; nikola deploy; deactivate;") t))

En las funciones opcionales quedaria mucho mejor pasarle la variable del directorio de root de nikola, pero no he conseguido hacer que 'shell-command la coja, así que se queda en modo cutre. Hecho esto, ya podremos escribir articulos. La idea de este plugin es tener todos los articulos en un sólo org, tal que así:

* Primer Articulo
** Subtitulo del primer articulo
  ola ka se
* Segundo articulo
  loremp ipsum bla bla bla

Para exportar tenemos que situarnos en el sub-arbol que queremos exportar y ejecutar M-x org2nikola-export-subtree. Esto, cómo hemos dicho, creará un articulo con formato HTML en el directorio 'org2nikola-output-root-directory.

La sección pertinente en mi configuración.