Compare commits

...

2 commits

21 changed files with 2046 additions and 3 deletions

3
content/_index.md Normal file
View file

@ -0,0 +1,3 @@
---
title: 'Inicio'
---

5
content/about.md Normal file
View file

@ -0,0 +1,5 @@
---
title: 'Sobre Mí'
---
![mr bean](https://vistapointe.net/images/mr-bean-7.jpg)

4
content/archivo.md Normal file
View file

@ -0,0 +1,4 @@
---
title: "Archivo"
layout: "archives"
---

View file

@ -0,0 +1,3 @@
---
title: 'Artículos'
---

44
content/dni.md Normal file
View file

@ -0,0 +1,44 @@
---
title: 'Generador de DNI'
ShowReadingTime: false
---
{{< rawhtml >}}
<button type="button" onclick="newDNI()" style="background-color: rgb(50, 50, 55); border-radius: 5px;">Nuevo DNI</button>
{{< /rawhtml >}}
## Último DNI generado
{{< rawhtml >}}
<pre tabindex="0"><code class="code">
</code><button class="copy-code">copy</button></pre>
{{< /rawhtml >}}
## Historial de DNI generados
{{< rawhtml >}}
<pre tabindex="0"><code class="list">
</code><button class="copy-code">copy</button></pre>
{{< /rawhtml >}}
{{< rawhtml >}}
<script>
function newDNI() {
const letras = "TRWAGMYFPDXBNJZSQVHLCKE";
let numero = Math.floor(Math.random() * 100000000);
let letra = letras.charAt(numero % 23);
let dni = numero.toString().padStart(8, '0') + letra;
const ul = document.querySelector('.list');
const li = document.createElement('p');
li.textContent = dni + "\n";
ul.appendChild(li);
const code = document.querySelector('.code');
code.innerHTML = dni + "\n";
}
</script>
{{< /rawhtml >}}

View file

@ -0,0 +1,41 @@
---
title: 'A la salida de clase'
date: 2024-09-07
tags: ['relato', 'cotidiano']
type: "relatos"
#cover:
#image: "/path"
#alt: "<alt text>" # alt text
#caption: "<text>" # display caption under cover
#relative: false # when using page bundles set this to true
# hidden: true # only hide on current single page
custom_css: ["css/relatos.css"]
---
Sonó la campana y era la hora de que los niños saliesen del colegio. Como todos los días, yo ya estaba preparado con las llaves en la mano para abrir la verja principal. Allí fuera siempre estaba abarrotado. Había muchos padres esperando con ansia la hora de recoger a sus hijos y volver a casa, algunos de ellos incluso con el uniforme de trabajo: recién salidos de trabajar o ya preparados para comenzar el turno de tarde. Además, también había aparcado a la entrada un autobús para todos aquellos muchachos que vivían un poco más lejos. Me giré y vi como los chicos empezaron a salir en estampida.
Durante los próximos minutos aquello fue un caos. Chicos gritando. Padres hablando entre ellos. El conductor del autobús impaciente por salir mientras esperaba a que todos subiesen, ya que no quería dejar a nadie fuera. Poco a poco, aquello se fue despejando mientras los padres iban encontrando a sus respectivos muchachos en la multitud. Los grupos que se habían formado empezaban a disolverse lentamente. Como tenía que esperar a que la calle quedara libre de gente antes de cerrar y poder volver dentro a seguir con mis labores, esperé un rato más. Quince minutos allí de pie junto a la puerta ningún día me los quita nadie. Estaba deseando volver ya al interior del edificio: hoy uno de los extintores se había activado por "accidente" y aún me tocaba dar parte para que lo cambiasen. Eso por no hablar de reparaciones varias que tenía pensadas llevar a cabo por la tarde, como el pomo de la puerta de una de las clases que se había salido. En fin, mucho trabajo.
Había pasado un rato y el autobús ya se había marchado. No quedaba mucha gente en la puerta del colegio. Ya no había padres. Todos se habían ido, y los que iban llegando tarde no tardaban mucho en hacerlo. Es fácil encontrar a tu hijo cuando cuando apenas hay chicos y el tuyo es el macarrilla de dos metros con los pantalones cagados. Modas de jóvenes, supongo. Lentamente, allí de pie vi como quedaban tan solo dos grupos: dos chicas de tercero o cuarto y un grupo algo más numeroso pero bastante más ruidoso que claramente eran los mayores del último curso. Ni que decir cabe que mi amigo el de los pantalones por las rodillas con los bolsillos más cerca de los tobillos que de la cadera pertenecía a este último grupo.
Al poco, llegó un coche al que se subió una de las dos chiquillas saludando a su padre y despidiéndose de su amiga. La otra muchacha se quedó mirando como el coche se alejaba. Cuando ya no estaba a la vista, miró a su alrededor, casi como imaginando a alguno de sus padres aparecer en ese mismo momento por la esquina, pero nada. Por lo que la niña se descolgó la mochila de los hombros y se sentó en el suelo a esperar. Según pasaban los minutos más se fijaba en los coches que circulaban por la carretera frente al colegio. Pasaba uno y rápidamente levantaba la cabeza para tratar de reconocerlo sin éxito. No dejaba ni uno sin escudriñar, los miraba todos. De arriba a abajo y de delante a atrás, pero nada. Nadie venía por ella. El otro grupo de chavales se había marchado hace nada y la verdad, ya me estaba aburriendo de esperar, así que me acerqué:
—Hola, ¿y tus padres, sabes donde están? —le pregunté agachándome para ponerme a su altura y no asustarla.
—No, mi papá siempre me recoge cuando sale de trabajar, pero no ha venido todavía —me respondió.
—Vale, no pasa nada, vamos a esperar un ratito más a que venga tu padre y ya está. Por cierto, ¿cómo te llamas? —dije.
—María.
—¿Y de que trabaja tu padre, María?
—Mi papá vende casas.
—¡Anda, que bien! Bueno, María, no te preocupes, que seguro que ha pillado un atasco y en nada ya está aquí. Espera ahí un poco. Si no viene, entramos y le llamamos, ¿vale? —le dije a la niña mientras me alejaba unos pasos.
Cansado de esperar y asegurándome de estar lo bastante lejos metí la mano en el bolsillo para coger un paquete de cigarros. Lo abrí. Saqué uno, y mientras me lo ponía en la boca, acerqué el mechero con la otra mano. Lo encendí y le dí una fuerte calada. Miré al reloj. Llevaba casi dos horas sin fumar y ya lo estaba empezando a notar. No se quien tenía más ganas de irse a casa, si la niña o yo. Me lo fumé con ganas y cuando estuve a punto de acabarlo apareció un coche por la esquina. María se levantó de un salto cogiendo la mochila con una mano. Esperó unos segundos y echó a correr. No muy lejos de ella el coche paró, se abrió la puerta y María se subió de un salto. El coche arrancó y redujo la velocidad mientras bajaba la ventanilla. Desde dentro un hombre con camisa y corbata se agachó para verme mejor.
—¡Tú, gilipollas, no deberías fumar en la puerta de un colegio! —me bramó.
«Vaya huevos tiene este tío» pensé. No le respondí, por supuesto, pero sí que le hice un gesto con la mano del cigarro mientras le saludé con la cabeza. El tío me miró con cara de pocos amigos mientras arrancaba la marcha refunfuñando por lo bajo. Cuando el coche cruzó la esquina tiré el cigarrillo ya gastado, lo pisé. Cerré la verja y me marché dispuesto a cumplir con mis obligaciones del día.

29
content/relatos/bill.md Normal file
View file

@ -0,0 +1,29 @@
---
title: 'Bill'
date: 2022-05-10
tags: ['relato', 'soledad', 'terror']
type: "relatos"
cover:
image: ""
alt: "<alt text>" # alt text
caption: "<text>" # display caption under cover
relative: false # when using page bundles set this to true
# hidden: true # only hide on current single page
custom_css: ["css/relatos.css"]
---
Al fin sonó. Sonó aquel sonido sinónimo de recompensa que hace una buena lata cerveza al ser abierta tras un largo día. Dio un sorbo. Bien fría, como a Bill le gustaba. Por fin pudo sentarse en el sillón de su casa, si es que a ese piso triste y solitario se le podía llamar casa. Se encontraba cansado, harto de tener que trapichear y buscar chatarra en los contenedores de basura para poder buscarse la vida, apenas conseguía dinero, al menos, no lo suficiente.
Estiró el brazo para coger el mando de la televisión y le dio al botón de encender. Aquella era su rutina de los viernes por la noche, una cerveza y ponerse cualquier programa basura que le entretuviese lo suficiente hasta quedarse dormido, total, no tenía nada más que hacer, no tenía a nadie más. Pasó un par de canales hasta que encontró un programa de esos americanos sobre tipos con barriga, camisa de cuadros y gorra llevando un camión desde una punta de Texas hasta la otra. Fue suficiente para tenerle embobado durante los primeros veinte minutos. Al cabo de ese tiempo decidió que ya era hora de coger de aquello que llevaba todo el día esperando.
Se levantó y se acercó junto a la puerta a por su chaqueta, hurgó en uno de los bolsillos interiores y sacó una pequeña bolsita que contenía un polvo blanquecino. Bill empezó a salivar nada más pensar en lo que le esperaría aquella noche y su corazón se aceleró. No sabía muy bien como había sido capaz de esperarse todo el día con aquello en el bolsillo, lo había estado guardando para aquella ocasión. En el fondo se sentía culpable porque una parte de él quería dejarlo, no quería tener que volver a robar para conseguir aquello y desde luego no quería tener que volver a robar a ancianos por la calle, se prometió esa misma mañana que jamás lo volvería hacer. Aquella era la primera y última vez que se esperaba a que algún señor mayor despistado sacase su pensión del banco para conseguir dinero, pero cuando se le planteó la situación apenas pudo pensar, su cuerpo se movió solo. Llevaba tres días sin consumir y, joder, esa mierda le estaba matando por dentro. Simplemente lo hizo y no tenía sentido darle más vueltas.
Se sentó, tiró la bolsita sobre la mesa y se la quedó mirando unos segundos preguntándose que qué cojones estaba haciendo con su vida. Le dio igual, solo quería descansar y necesitaba aquello. Cogió una cucharilla que tenía sobre la mesa, abrió la bolsa con cuidado y echó un poco de aquel polvo sobre la cuchara. Antes de cerrar la bolsa decidió que aquella vez se merecía más porque tres días con mono no los aguanta cualquiera, y vació el contenido sobre la cuchara, aquello era todo lo que le quedaba. Más que suficiente para mandarle de viaje toda la noche. Con una mano sostuvo la cuchara lo mejor que pudo, mientras, con la otra, buscó un mechero y le dio fuego a la cuchara. Hizo lo mejor que pudo para calentar toda la superficie inferior de la cuchara por igual, pero le costaba un gran esfuerzo mantener el pulso, había notado que desde hacía unos meses no le dejaba de temblar la mano y tampoco podía hacer nada para evitarlo.
Aquel sólido mágico comenzó a volverse viscoso poco a poco. Bill siguió calentándolo hasta que finalmente acabó por fundirse apareciendo un líquido amarillento que a Bill se le hacía como el mismísimo néctar de los dioses, a la vez que su verdugo. Cuando terminó, posó la cuchara sobre la mesa y con movimientos nerviosos, casi espasmódicos, buscó la jeringuilla que tenía tirada por algún lugar del sofá. La encontró tras el cojín, la limpió un poco con la manga y se dispuso a cargarla con el más sumo cuidado que pudo tener en aquel momento. Debía ser rápido, asique una vez cargada la sostuvo delante de sus ojos un pequeño instante para asegurarse de que no tenía aire y llevó la punta afilada directamente a su brazo izquierdo.
Una oleada de calor recorrió todo su brazo, la intensidad aumentaba poco a poco mientras aquel fluido abandonaba la jeringa para adentrarse en su torrente sanguíneo. Increíble. Cuando Bill acabó de inyectárselo todo, más que apoyarse, se dejó caer en el sillón y simplemente cerró los ojos con los brazos extendidos abandonándose al éxtasis que le hizo sentir aquel chute repentino de adrenalina.
El viaje no duró mucho, ya que, de madrugada, el corazón de Bill dejó de latir. Insuficiencia respiratoria, una forma más sutil de decir que se ahogó con su propio vómito al quedarse dormido en la misma posición en la que se había echado en el sofá horas antes. Pero esto no se supo hasta un par de semanas después, cuando un par de agentes de policía irrumpió en su piso alertados por las quejas de unos vecinos sobre el mal olor que se filtraba por debajo de la puerta e iba impregnando todo el rellano de la escalera.
Ni a nadie le extraño ni a nadie le importó lo que le sucedió a aquel hombre, prueba de ello fue que los siguientes inquilinos de aquel piso jamás llegaron a escuchar nada acerca de esta historia. Si lo hubiesen hecho, quizás le habrían encontrado una explicación a por qué la televisión llevaba años encendiéndose sola los fines de semana de madrugada o a por qué aún se escuchaban unos pasos erráticos crujir sobre el parqué dirigiéndose a la puerta buscando un poco más de aquel polvo mágico en los bolsillos de su chaqueta para darse el último viaje y descansar al fin.

27
content/relatos/borsch.md Normal file
View file

@ -0,0 +1,27 @@
---
title: 'Borsch'
date: 2022-02-14
tags: ['relato', 'soledad', 'terror']
type: "relatos"
cover:
image: ""
alt: "<alt text>" # alt text
caption: "<text>" # display caption under cover
relative: false # when using page bundles set this to true
# hidden: true # only hide on current single page
custom_css: ["css/relatos.css"]
---
Sintió un tirón, muy sutil pero suficiente para despertarle. Se había quedado dormido en la barca mientras pescaba. El sol ya se comenzaba a ocultar, por lo que calculaba que había estado ahí un par de horas.
Otro tirón. El hilo de su caña de pescar estaba tenso y se preparó para tirar de ella, no quería perder la oportunidad de cenar pescado aquella noche, ya estaba cansado de comer lo que recolectaba por la zona. Con una mano tiró de la caña mientras que con la otra recogió el sedal, poco a poco fue acortando la distancia entre él y aquel pez que, según pasaba el tiempo parecía encontrarse más cansado. De un último tirón consiguió sacarlo del agua y tirarlo sobre la barca. El pez forcejeo un poco hasta que de un golpe seco dejó de moverse. No era muy grande, pero era suficiente como para poder comer pescado ahumado un par de días.
El sol se estaba poniendo, por lo que lo mejor que podía hacer era dejarlo por hoy y regresar. No se había alejado mucho, solo un par de kilómetros, pero aún podía ver su cabaña desde ahí, una cabaña de madera de una sola planta coronada por una chimenea de piedra que él mismo había construido dos años atrás. Dos años, ya habían pasado dos años…
Al acercarse a la orilla del lago ya era casi de noche. Dejó la barca bien amarrada, cogió el pescado y entró a su casa. El interior de la cabaña no era muy grande, pero lo suficientemente acogedor. Contaba con una mesa y una silla, una chimenea de piedra en la que aún resplandecían rescoldos del fuego que había dejado antes de irse. Se encontraba cansado, cada vez costaba más ignorar el paso del tiempo. Igual que cada vez también eran más difícil de ignorar los estragos que había causado en su cuerpo la exposición a la radiación que poco a poco se iba filtrando desde la central nuclear que se encontraba a unas decenas de kilómetros río arriba del lago junto al que él vivía. Que aquella central nuclear fuese abandonada era solo otro efecto más de los bombardeos masivos a los que la región fue sometida a causa de la guerra.
Se estaba haciendo tarde así que se dispuso a rebuscar para ver con que podría cocinar aquel pescado. Se le estaba acabando la comida, llevaba unas semanas sin salir a buscar comida a la ciudad, pero las últimas veces que fue apenas encontró nada. Los alimentos frescos se pusieron malos prácticamente a la semana, los enlatados no abundaban y la gente, antes de desaparecer, ya habían vaciado las tiendas para almacenar en sus casas a expensas de lo peor, la mayoría de aquellas las casas se encontraban destruidas y las que no estaban cerradas o en lugares de difícil acceso. En previsión de que esto ocurriría, llevaba meses cuidando de huerto que, aunque pequeño, le permitía ser autosuficiente y no depender de tener que alejarse cada vez más de su casa para buscar alimento.
Encontró algunas hortalizas: dos remolachas, zanahorias, un repollo y demás, por lo que decidió preparar un guiso con aquello y el pescado, tal y como le enseñó a preparar su abuela cuando era niño. Aquella vez decidió usar un poquito de todo porque pensó que se merecía darse el homenaje de preparar una comida como Dios manda. No todos los días uno tenía ingredientes tan frescos como aquel pescado. De hecho, últimamente rara vez veía peces por aquellas aguas.
A los cuarenta minutos tuvo preparada la comida. Despejó un poco la mesa de cosas, cogió uno de los pocos platos que aún le quedaban de una pieza, se sirvió. Se llevó una cucharada a la boca que le supo a gloria, pero aun así alguna que otra lágrima le resbaló por la mejilla. No pudo evitar llorar, lloró por él, porque el día había sido largo, porque la soledad cada vez era más dura y sobre todo lloró por todos aquellos que ya no estaban.

View file

@ -0,0 +1,27 @@
---
title: 'El marido'
date: 2021-06-08
tags: ['relato', 'terror']
type: "relatos"
cover:
image: ""
alt: "<alt text>" # alt text
caption: "<text>" # display caption under cover
relative: false # when using page bundles set this to true
# hidden: true # only hide on current single page
custom_css: ["css/relatos.css"]
---
Se encontraba preocupada, era tarde y su marido no había regresado aún del trabajo. Lo más probable era que se hubiese ido con sus compañeros a tomarse una cerveza al bar de turno, últimamente había cogido por costumbre hacer esto los viernes por la noche, pero esta vez no la avisó, por lo que decidió tratar de llamarle al móvil.
Tras escuchar los primeros pitidos y no recibir respuesta decidió dejarlo sonar, pero nada, no contestaba. No sabía muy bien que hacer, ya que como no la había avisado de que saldría, había comenzado pronto a preparar la cena, y ya casi estaba lista. Si no llegaba pronto se iba a enfriar.
Mientras esperaba decidió sentarse en el salón y ponerse una serie. Casi había terminado el capítulo cuando de repente sonó el temporizador del horno. La cena estaba lista y su pareja aún sin regresar a casa, casi por instinto decidió mirar el móvil para ver si tenía algún mensaje o algo, pero nada, por lo que volvió a llamar y de nuevo obtuvo el mismo resultado. Pensó que seguramente se habría olvidado ponerle el sonido a su teléfono después de salir del trabajo, era muy descuidado en ese sentido, pero aun así no tenía excusa para haber olvidado avisarla, no era controladora y no le importaba si tardaba, pero tampoco estaba bien que la dejase con la mesa puesta sin avisarla siquiera.
Dejó la mesa puesta y terminó de ver lo que le quedaba del capítulo para darle tiempo a regresar, ya que se acercaba la hora a la que solía regresar. La serie acabó y él aún no había vuelto. Se estaba empezando a molestar un poco, porque vale que trabajase duro durante toda la semana para poder mantenerlos debido a que ella no encontraba trabajo, pero eso no le daba derecho ninguno a no ayudarla con la casa, y mucho menos a coger y desaparecer con sus compañeros cuando le viniese en gana sin avisar. “Seguro que además se ha pasado bebiendo, porque desde luego no es normal que sean estas horas y aún no haya vuelto a casa” Pensó.
Decidió que, si a él se le olvidaba avisar, ella no se dignaría a esperarle para cenar, así que cenó sola. Aquella vez le había salido el cordero mucho más jugoso que de costumbre, no sabía muy bien si era por la nueva receta que había sacado de internet o porque el carnicero le había dado una pieza buena, pero la carne estaba espectacular.
Al terminar lavó los platos, estaba todo hecho un desastre, había manchado un montón la cocina en comparación con otras veces, pero nada que no pudiese dejar impecable en un par de minutos.
Debido a que su marido aún no regresaba ni la llamaba decidió servirse una copa de vino y continuar viendo la tele tranquilamente. Nada la podría amargar la noche. Pasada la cuarta copa empezó a notarse somnolienta y algo mareada. En vista de que él seguía sin dignarse a dar señales de vida decidió que era hora de irse a dormir, ya hablarían al día siguiente. Tras aquello se levantó del sofá y se dirigió torpemente hacia la habitación, una vez allí se sentó sobre la cama, se quitó las gafas y se acostó junto al cuerpo sin vida de su marido.

View file

@ -0,0 +1,51 @@
---
title: 'Lavandería'
date: 2024-09-23
tags: ['relato']
type: "relatos"
custom_css: ["css/relatos.css"]
---
Había bajado a la lavandería de mi edificio, que se encontraba en el sótano, y estaba esperando a que terminase de lavarse la ropa. Me había llevado un libro para aprovechar el rato mientras allí esperaba. Una vez escuché en algún sitio que el ruido y el silencio no son tan diferentes. Estaba de acuerdo con aquella afirmación, solo era capaz de concentrarme en la lectura en el silencio más absoluto o con ruidos en los que no fuese capaz de distinguir ningún sonido. En aquella ciudad no había silencio a ninguna hora ni en ningún lugar, por lo que el ruido regular de la lavadora me relajaba y me ayudaba a concentrarme. Aquel lugar era perfecto para leer.
A la media hora, alguien entró a la lavandería. Era un hombre menudo, con gafas y bigote. Hacía malabares con un cesto lleno de ropa algo más grande que él.
—¡Hola, vecino! —saludó al entrar, procurando que ningún calcetín cayese al suelo.
Nunca había hablado con él, pero me sonaba mucho su cara. Vivía en el tercero o en el cuarto. Lo saludé y traté de continuar con la lectura. El hombre apoyó su cesto en la mesita que había a un lado de la sala. Al parecer, la mesa estaba coja de una pata, porque empezó a moverla tratando de buscar el punto perfecto donde todas las patas tocasen el suelo de manera simultánea, haciendo un ruido estridente por el camino. Desde que había llegado, tuve que releer el mismo párrafo tres veces. No conseguía enterarme de lo que estaba leyendo. Parece que se quedó a gusto, porque dejó de hacer ruidos y al fin pude volver a concentrarme.
—Vecino, tenemos un problema.
Solo había conseguido leer una hoja cuando aquel hombrecillo me volvió a desconcentrar. Le miré y me hizo un gesto hacia el suelo.
—El agua de la lavadora —dijo—. Se está saliendo.
Tenía razón, debajo de su lavadora apareció un charco.
—Pero ¿qué has hecho? —le pregunté.
—Nada —respondió—. Solo he metido la ropa al chisme y le he dado al botón.
"Lo que me faltaba", pensé.
—No se preocupe, voy a buscar una fregona —dije a la vez que me marchaba.
Junto a lavandería se encontraba la sala de limpieza del edificio. Cogí el primer cubo y fregona que encontré. Al volver, el hombre había movido la lavadora y se encontraba agachado detrás.
—Mira, vecino, he encontrado de donde sale —dijo mientras toqueteaba uno de los tubos de la lavadora.
—Espere, deje eso, no vaya a ser que...
No me dio tiempo a terminar la frase. El hombrecillo tropezó y se quedó con el tubo en la mano, arrancándolo de la máquina. Estaba en el suelo perplejo viendo como el agua brotaba sin cesar.
—Rápido, la llave de paso —le dije a la vez que la señalaba—. Ciérrela.
—¿Qué? Ah, vale, la palanca esta —dijo refiriéndose la llave.
La agarró con la mano y giró. El agua paró, dejando el suelo de la lavandería encharcado. El hombrecillo miró a su alrededor:
—Madre mía, la que he liado.
—Le podría haber pasado a cualquiera —dije sabiendo que era mentira—. Tenga la fregona que voy a buscar otra.
Al regresar, tratamos de limpiar el desastre. Había un desagüe en el centro de la sala, que utilizamos para desalojar el agua. Con los calcetines mojados y una fregona en la mano, allí, en la esquina tirado, encontré el libro que estaba leyendo. Estaba empapado y abierto por el capítulo que había leído momentos antes. Cerré los ojos y respiré profundamente. Aquel día tampoco iba a ser capaz de encontrar tranquilidad para acabarlo.

View file

@ -0,0 +1,113 @@
---
title: 'Ropa sucia'
date: 2024-09-17
tags: ['relato']
type: "relatos"
custom_css: ["css/relatos.css"]
---
Fernando estaba regresando a su casa. Era por la noche y acababa de salir del gimnasio. Se estaba preparando las oposiciones para ser bombero. Poder entrar en el cuerpo era su sueño. Desde pequeño le ha gustado ayudar a la gente y la idea de poder ganarse la vida de ello le fascinaba. Pasaba todo el día estudiando y aquel era el único momento que tenía libre para desconectar. Siempre había sido una persona deportista, pero en este caso, el gimnasio, también le servía para prepararse las pruebas físicas. Solo faltaba un mes para el examen de acceso y llevaba todo el año esforzandose mucho.
Caminaba por las calles de un barrio de Madrid y ya no había tiendas abiertas por las horas que eran. Tampoco había gente por la calle. Todavía le faltaban unos quince minutos para llegar a su casa, había recorrido ese trayecto cientos de veces y se conocía de memoria todos los detalles: los olores propios de las calles, los letreros y carteles de las tiendas, los portales y sus remates de hierro forjado e incluso a las personas que las solían frecuentar. No era un gran conversador, pero sí que observaba con detalle a todo al que se cruzaba.
Dobló la esquina donde se encontraba una lavandería y continuó caminado. Al final de la calle algo llamó su atención. Un hombre caminaba hacia él con un paso errático. Parecía drogado y llevaba gorro negro y unos guantes de lana rotos. Fernando jamás había le había visto. Aquel hombre continuó en la dirección que vino Fernando, se cruzaron y lo perdió de vista. "Qué persona tan rara", pensó.
A los pocos segundos, Fernando escuchó un grito a sus espaldas. Se dio la vuelta y miró la calle vacía. "¿De dónde ha venido ese grito?". No vio a nadie, pero al fijarse un poco más, descubrió que el grito procedía del local de la esquina, aquella lavandería, abierta a todas horas y siempre tan vacía. No dudó en salir disparado. Al llegar a la altura del escaparate se fijó en el interior. Las paredes estaban llenas de lavadoras, de esas mismas que funcionan con un par de monedas. Una de ellas cargada de ropa y funcionando. En el centro, había un par de secadoras, que servían a su vez como una especie de mesa improvisada, donde se apoyaba un cesto de ropa vacío. En una de las esquinas había un carro de tamaño industrial lleno hasta arriba de sábanas y ropa de cama con aspecto sucio y desgastado, posiblemente de alguno de los hoteles de por allí cerca. Fernando no pudo evitar fijarse en que aquel hombre, el mismo con el cual se había cruzado momentos antes, estaba allí, forcejeando con una mujer. Ella era la que estaba gritando.
—¡Ayuda! —gritó la mujer nuevamente.
Fernando no se lo pensó ni un segundo. Entró a la carrera al local.
—¡Eh, para, déjala! —dijo Fernando tratando de convencer al hombre del gorro.
Aquel hombre, al darse cuenta de que no iba a salirse con la suya echo la mano al bolsillo y sacó una navaja. Fernando en aquel momento no fue capaz de pensar, su cuerpo actuaba solo. Se abalanzó sobre el hombre y los tres cayeron al suelo. La navaja salió disparada fuera de su alcance y la mujer, aterrada como estaba, aprovechó la ocasión para refugiarse en una esquina. El hombre se levantó de manera torpe y buscó con la vista la navaja. No la encontró. Arremetió contra Fernando con todas sus fuerzas, pero este fue capaz de eludir la embestida.
—¡Para! —le rogó Fernando— No es necesario que hagas esto.
El hombre no respondió. Ante la imposibilidad de dialogar, Fernando ser preparó para recibir un nuevo golpe. El tipo del gorro corrió hacia él con los brazos en alto, preparándose para dar un puñetazo. En el último momento, Fernando lo empujó y desvió su camino, alejándole de él. El tipo no pudo frenar por la inercia de la carrera, perdió el equilibrio y resbaló. Su cabeza impactó contra una de las secadoras del centro de la sala con tal fuerza que dejó abollada la chapa de la máquina. El hombre cayó tieso al suelo, con el cuello girado en un ángulo extraño. A Fernando se le heló la sangre ante lo que acababa de ocurrir. La mujer, que había estado en una esquina viendo la escena todo el rato le miró con los ojos abiertos como platos:
—¡Lo has matado, voy a llamar a la policía! —dijo.
Fernando asustado y paralizado ante la situación no supo cómo reaccionar. Le podían meter a la cárcel por aquello. En el mejor de los casos no le ocurriría nada, por ser un homicidio en defensa propia, pero es posible que le condenasen por homicidio involuntario. Acababa de estudiar todo aquello para sus oposiciones y aunque la información no le llegaba a la mente con claridad en aquella situación, tenía claro que con antecedentes lo tendía muy complicado para ser admitido en el cuerpo de bomberos. "Mierda".
—Espera, no llames todavía. —respondió Fernando— Necesito pensar.
La mujer le miró sorprendida, pero no hizo ademán de sacar el teléfono. Miró al tipo del gorro. Había quedado tumbado boca abajo y no se movía. Fernando se acercó al cuerpo y trató de tomarle el pulso. Nada, estaba muerto.
—Las cámaras, ¿hay cámaras? —preguntó Fernando.
Si todo se había grabado, en las grabaciones podría verse lo ocurrido y para él sería más fácil defenderse.
—No, no veo ninguna. —respondió la mujer buscando en el techo con la mirada.
Fernando no sabía que hacer, lo correcto era llamar a la policía, pero su cuerpo le pedía salir pitando de allí para que cuando la policía encontrase el cuerpo nadie pudiese relacionarle con lo que había ocurrido. Pero no podía huir, ella le había visto. La única salida posible estaba clara, tenía que deshacerse del cuerpo, y ella le tenía que ayudar.
—¿Estás bien? —le preguntó Fernando a la mujer.
—Sí. No sé qué me habría pasado de no haber sido por ti. El tío entró mientras estaba lavando la ropa y me atacó.
—Menos mal. No podemos llamar a la policía. Estoy estudiando unas oposiciones y no puedo tener antecedentes —dijo señalando al cuerpo.
La mujer el miró entrecerrando los ojos y le dijo:
—¿Y qué sugieres que hagamos?
—Deshacernos del cuerpo y marcharnos. —dijo Fernando.
La idea no le gustaba, pero no quería jugársela y para ello tendría que convencerla. Por la cara que puso, no se la veía muy convencida.
—Estás loco, ¿cómo vamos a hacerlo? Voy a llamar a la policía —respondió la mujer sacándose el móvil del bolsillo.
—Para, nos vas a meter en un lío.
—¿Perdona? Yo no he hecho nada. Has sido tú el que lo ha matado.
—Ha sido por ayudarte, estabas pidiendo ayuda y no quiero echar mi vida a perder por haberte ayudado. Lo ocultamos y nos iremos como si no hubiese pasado nada. Me debes eso al menos —rogó Fernando tratando de sonar convincente.
La mujer dudó unos instantes.
—No nos ha grabado ninguna cámara y la calle está desierta, nadie nos ha visto entrar aquí. Eso quiere decir que tampoco nadie le ha visto entrar a él —dijo señalando al hombre del gorro negro, que seguía sin dar señales de vida—. Ven ayúdame a moverlo para que no se vea desde la calle.
Fernando se acercó al tipo y le levantó una de las piernas dejando la otra para que la mujer le ayudase. Ella se levantó y agarró la otra pierna. Ambos tiraron y movieron el cuerpo detrás de una de las secadoras del centro colocándolo de tal modo que no fuese visible desde la calle.
—¿Qué hacemos con él ahora? —preguntó la mujer.
Fernando dudó unos instantes y miró a su alrededor buscando alguna solución.
—Ya lo tengo, vamos a meterle en el contenedor —dijo señalando cesto de tamaño industrial lleno de sábanas sucias y ropa de cama desgastada que se encontraba en la esquina—. Entre los dos podemos subirlo. Lo tapamos bien y listo. No creo que nadie venga a por estas sábanas hoy y para cuando lo encuentren estaremos ya en casa.
—Vale, deberíamos mirar que no pase nadie por la calle, podrían vernos.
—Me parece buena idea —se alegró al verla cooperar.
Fernando se acercó a la puerta y miró en ambas direcciones. A la luz de las farolas pudo ver un señor caminando hacia su dirección.
—Viene alguien.
—¡Oh, no! ¿Y qué hacemos? —preguntó ella.
—Esperar. Fingiremos que no ha ocurrido nada hasta que se vaya —se le ocurrió a Fernando.
Los dos se apoyaron sobre una de las secadoras y miraron concentrados a la única lavadora en funcionamiento. La de ella. No tenía calor, pero Fernando notó como una gota de sudor le recorría la frente: la espera le estaba matando. A los pocos minutos, el señor llegó a la altura de la lavandería y pudieron verle claramente a través del escaparate. Fernando se quedó mirando la lavadora para no mirar a ningún otro sitio. Aquel señor no se fijó en ellos, continuó caminando y al poco le perdieron.
—Creo que ya se ha ido —dijo Fernando—. Voy a mirar.
Fernando no había estado más nervioso en su vida. Se acercó a la entrada y se asomó.
—No veo a nadie, ya no está. Ahora es el momento, ayúdame a subirlo.
Fernando y la mujer se acercaron al cuerpo, lo levantaron hasta la altura del contenedor y lo lanzaron dentro. Ella se aseguró de taparlo bien con las sábanas para que no se viese mientras Fernando empujaba las piernas al interior.
—¿Estás seguro de que no sabrán que hemos sido nosotros? —dijo la mujer.
—No estoy seguro, pero no se me ocurre otra cosa...
Sonó un pitido. Fernando se sobresaltó y miró en todas direcciones. Tardó unos instantes en darse cuenta la procedencia del sonido. Era la lavadora que hasta hace unos segundos estaba a pleno funcionamiento, ahora estaba parándose. La mujer se acercó y la abrió.
—Parece que ha acabado.
—Podemos irnos ya. Cada uno por su lado y si te he visto no me acuerdo. —dijo Fernando.
La mujer asintió, recogió la ropa y se dirigió con Fernando hacia la salida. Sin intercambiar palabra se miraron una última vez y cada uno se marchó en una dirección diferente.
Fernando continuó caminando, pensando en todas las cosas que podían salir mal si alguien lo descubría, pero también estaba seguro de haber hecho lo correcto. Sabía que no podía ignorar la situación. Antes de darse cuenta ya casi había llegado, su casa estaba a una calle. Al cruzar la esquina y entrar a su portal, Fernando al fin pudo respirar. Lo que esa noche había ocurrido ya no era su problema.

View file

@ -1,3 +0,0 @@
baseURL = 'https://example.org/'
languageCode = 'en-us'
title = 'My New Hugo Site'

219
hugo.yaml Normal file
View file

@ -0,0 +1,219 @@
baseURL: https://sudodnf.com/
languageCode: es
title: sudo dnf
theme: ["PaperMod"]
menu:
main:
- name: Relatos
pageRef: /relatos
weight: 1
- name: Artículos
pageRef: /articulos
weight: 2
- name: Sobre Mí
pageRef: /about
weight: 3
- name: Archivo
pageRef: /archivo
weight: 4
mainSections:
- "relatos"
- "articulos"
params:
homeInfoParams:
Title: "Blog 📖"
Content: 'Tengo pensado subir algún relatillo y artículos de opinión que escriba de vez en cuando. Podeis seguirme en mastodon y hablarme tranquilamente.'
custom_css: ["css/global.css"]
socialIcons:
- name: "mastodon"
url: "https://masto.es/@pepe"
- name: "bookwyrm"
url: "https://bookwyrm.social/user/peps"
- name: "codeberg"
url: "https://codeberg.org/peps"
- name: "github"
url: "https://github.com/pepev-nrt"
env: production # to enable google analytics, opengraph, twitter-cards and schema.
DateFormat: "January 2, 2006"
defaultTheme: auto # dark, light
disableThemeToggle: false
ShowReadingTime: true
ShowShareButtons: true
ShareButtons: ["x", "mastodon", "reddit", "whatsapp", "telegram", "facebook"]
ShowPostNavLinks: true
ShowBreadCrumbs: true
ShowCodeCopyButtons: true
#ShowWordCount: true
ShowRssButtonInSectionTermList: true
UseHugoToc: true
disableSpecial1stPost: false
disableScrollToTop: false
comments: false
hidemeta: false
hideSummary: false
showtoc: false
tocopen: false
# ----------------------------------------- #
# _____ _ #
# | ___| | | #
# | |____ ____ _ _ __ ___ _ __ | | ___ #
# | __\ \/ / _` | '_ ` _ \| '_ \| |/ _ \ #
# | |___> < (_| | | | | | | |_) | | __/ #
# \____/_/\_\__,_|_| |_| |_| .__/|_|\___| #
# | | #
# |_| #
# ----------------------------------------- #
# PaperMod example hugo.yaml https://adityatelange.github.io/hugo-PaperMod/posts/papermod/papermod-installation/
# baseURL: "https://examplesite.com/"
# title: ExampleSite
# paginate: 5
# theme: PaperMod
#
# enableRobotsTXT: true
# buildDrafts: false
# buildFuture: false
# buildExpired: false
#
# googleAnalytics: UA-123-45
#
# minify:
# disableXML: true
# minifyOutput: true
#
# params:
# env: production # to enable google analytics, opengraph, twitter-cards and schema.
# title: ExampleSite
# description: "ExampleSite description"
# keywords: [Blog, Portfolio, PaperMod]
# author: Me
# # author: ["Me", "You"] # multiple authors
# images: ["<link or path of image for opengraph, twitter-cards>"]
# DateFormat: "January 2, 2006"
# defaultTheme: auto # dark, light
# disableThemeToggle: false
#
# ShowReadingTime: true
# ShowShareButtons: true
# ShowPostNavLinks: true
# ShowBreadCrumbs: true
# ShowCodeCopyButtons: false
# ShowWordCount: true
# ShowRssButtonInSectionTermList: true
# UseHugoToc: true
# disableSpecial1stPost: false
# disableScrollToTop: false
# comments: false
# hidemeta: false
# hideSummary: false
# showtoc: false
# tocopen: false
#
# assets:
# # disableHLJS: true # to disable highlight.js
# # disableFingerprinting: true
# favicon: "<link / abs url>"
# favicon16x16: "<link / abs url>"
# favicon32x32: "<link / abs url>"
# apple_touch_icon: "<link / abs url>"
# safari_pinned_tab: "<link / abs url>"
#
# label:
# text: "Home"
# icon: /apple-touch-icon.png
# iconHeight: 35
#
# # profile-mode
# profileMode:
# enabled: false # needs to be explicitly set
# title: ExampleSite
# subtitle: "This is subtitle"
# imageUrl: "<img location>"
# imageWidth: 120
# imageHeight: 120
# imageTitle: my image
# buttons:
# - name: Posts
# url: posts
# - name: Tags
# url: tags
#
# # home-info mode
# homeInfoParams:
# Title: "Hi there \U0001F44B"
# Content: Welcome to my blog
#
# socialIcons:
# - name: x
# url: "https://x.com/"
# - name: stackoverflow
# url: "https://stackoverflow.com"
# - name: github
# url: "https://github.com/"
#
# analytics:
# google:
# SiteVerificationTag: "XYZabc"
# bing:
# SiteVerificationTag: "XYZabc"
# yandex:
# SiteVerificationTag: "XYZabc"
#
# cover:
# hidden: true # hide everywhere but not in structured data
# hiddenInList: true # hide on list pages and home
# hiddenInSingle: true # hide on single page
#
# editPost:
# URL: "https://github.com/<path_to_repo>/content"
# Text: "Suggest Changes" # edit text
# appendFilePath: true # to append file path to Edit link
#
# # for search
# # https://fusejs.io/api/options.html
# fuseOpts:
# isCaseSensitive: false
# shouldSort: true
# location: 0
# distance: 1000
# threshold: 0.4
# minMatchCharLength: 0
# limit: 10 # refer: https://www.fusejs.io/api/methods.html#search
# keys: ["title", "permalink", "summary", "content"]
# menu:
# main:
# - identifier: categories
# name: categories
# url: /categories/
# weight: 10
# - identifier: tags
# name: tags
# url: /tags/
# weight: 20
# - identifier: example
# name: example.org
# url: https://example.org
# weight: 30
# # Read: https://github.com/adityatelange/hugo-PaperMod/wiki/FAQs#using-hugos-syntax-highlighter-chroma
# pygmentsUseClasses: true
# markup:
# highlight:
# noClasses: false
# # anchorLineNos: true
# # codeFences: true
# # guessSyntax: true
# # lineNos: true
# # style: monokai

View file

@ -0,0 +1,83 @@
{{- define "main" }}
<header class="page-header">
<h1>
{{ .Title }}
{{- if (.Param "ShowRssButtonInSectionTermList") }}
{{- $rss := (.OutputFormats.Get "rss") }}
{{- if (eq .Kind `page`) }}
{{- $rss = (.Parent.OutputFormats.Get "rss") }}
{{- end }}
{{- with $rss }}
<a href="{{ .RelPermalink }}" title="RSS" aria-label="RSS">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" height="23">
<path d="M4 11a9 9 0 0 1 9 9" />
<path d="M4 4a16 16 0 0 1 16 16" />
<circle cx="5" cy="19" r="1" />
</svg>
</a>
{{- end }}
{{- end }}
</h1>
{{- if .Description }}
<div class="post-description">
{{ .Description }}
</div>
{{- end }}
</header>
{{- $pages := where site.RegularPages "Type" "in" site.Params.mainSections }}
{{- if site.Params.ShowAllPagesInArchive }}
{{- $pages = site.RegularPages }}
{{- end }}
{{- range $pages.GroupByPublishDate "2006" }}
{{- if ne .Key "0001" }}
<div class="archive-year">
{{- $year := replace .Key "0001" "" }}
<h2 class="archive-year-header" id="{{ $year }}">
<a class="archive-header-link" href="#{{ $year }}">
{{- $year -}}
</a>
<sup class="archive-count">&nbsp;{{ len .Pages }}</sup>
</h2>
{{- range .Pages.GroupByDate "January" }}
<div class="archive-month">
<h3 class="archive-month-header" id="{{ $year }}-{{ .Key }}">
<a class="archive-header-link" href="#{{ $year }}-{{ .Key }}">
{{- .Key -}}
</a>
<sup class="archive-count">&nbsp;{{ len .Pages }}</sup>
</h3>
<div class="archive-posts">
{{- range .Pages }}
{{- if eq .Kind "page" }}
<div class="archive-entry">
<h3 class="archive-entry-title entry-hint-parent">
{{- strings.TrimRight "s" (strings.Title .Type) }} - {{ .Title | markdownify }}
{{- if .Draft }}
<span class="entry-hint" title="Draft">
<svg xmlns="http://www.w3.org/2000/svg" height="15" viewBox="0 -960 960 960" fill="currentColor">
<path
d="M160-410v-60h300v60H160Zm0-165v-60h470v60H160Zm0-165v-60h470v60H160Zm360 580v-123l221-220q9-9 20-13t22-4q12 0 23 4.5t20 13.5l37 37q9 9 13 20t4 22q0 11-4.5 22.5T862.09-380L643-160H520Zm300-263-37-37 37 37ZM580-220h38l121-122-18-19-19-18-122 121v38Zm141-141-19-18 37 37-18-19Z" />
</svg>
</span>
{{- end }}
</h3>
<div class="archive-meta">
{{- partial "post_meta.html" . -}}
</div>
<a class="entry-link" aria-label="post link to {{ .Title | plainify }}" href="{{ .Permalink }}"></a>
</div>
{{- end }}
{{- end }}
</div>
</div>
{{- end }}
</div>
{{- end }}
{{- end }}
{{- end }}{{/* end main */}}

123
layouts/_default/index.html Normal file
View file

@ -0,0 +1,123 @@
{{- define "main" }}
{{- if (and site.Params.profileMode.enabled .IsHome) }}
{{- partial "index_profile.html" . }}
{{- else }} {{/* if not profileMode */}}
{{- if not .IsHome | and .Title }}
<header class="page-header">
{{- partial "breadcrumbs.html" . }}
<h1>
{{ .Title }}
{{- if and (or (eq .Kind `term`) (eq .Kind `section`)) (.Param "ShowRssButtonInSectionTermList") }}
{{- with .OutputFormats.Get "rss" }}
<a href="{{ .RelPermalink }}" title="RSS" aria-label="RSS">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
stroke-linecap="round" stroke-linejoin="round" height="23">
<path d="M4 11a9 9 0 0 1 9 9" />
<path d="M4 4a16 16 0 0 1 16 16" />
<circle cx="5" cy="19" r="1" />
</svg>
</a>
{{- end }}
{{- end }}
</h1>
{{- if .Description }}
<div class="post-description">
{{ .Description | markdownify }}
</div>
{{- end }}
</header>
{{- end }}
{{- if .Content }}
<div class="post-content">
{{- if not (.Param "disableAnchoredHeadings") }}
{{- partial "anchored_headings.html" .Content -}}
{{- else }}{{ .Content }}{{ end }}
</div>
{{- end }}
{{- $pages := union .RegularPages .Sections }}
{{- if .IsHome }}
{{- $pages = where site.RegularPages "Type" "in" site.Params.mainSections }}
{{- $pages = where $pages "Params.hiddenInHomeList" "!=" "true" }}
{{- end }}
{{- $paginator := .Paginate $pages }}
{{- if and .IsHome site.Params.homeInfoParams (eq $paginator.PageNumber 1) }}
{{- partial "home_info.html" . }}
{{- end }}
{{- $term := .Data.Term }}
{{- range $index, $page := $paginator.Pages }}
{{- $class := "post-entry" }}
{{- $user_preferred := or site.Params.disableSpecial1stPost site.Params.homeInfoParams }}
{{- if (and $.IsHome (eq $paginator.PageNumber 1) (eq $index 0) (not $user_preferred)) }}
{{- $class = "first-entry" }}
{{- else if $term }}
{{- $class = "post-entry tag-entry" }}
{{- end }}
<article class="{{ $class }}">
<!-- Esta sección esconde los covers en la página principal
{{- $isHidden := (.Param "cover.hiddenInList") | default (.Param "cover.hidden") | default false }}
{{- partial "cover.html" (dict "cxt" . "IsSingle" false "isHidden" $isHidden) }}
-->
<header class="entry-header">
<h2 class="entry-hint-parent">
{{- strings.TrimRight "s" (strings.Title .Type) }} - {{ .Title }}
{{- if .Draft }}
<span class="entry-hint" title="Draft">
<svg xmlns="http://www.w3.org/2000/svg" height="20" viewBox="0 -960 960 960" fill="currentColor">
<path
d="M160-410v-60h300v60H160Zm0-165v-60h470v60H160Zm0-165v-60h470v60H160Zm360 580v-123l221-220q9-9 20-13t22-4q12 0 23 4.5t20 13.5l37 37q9 9 13 20t4 22q0 11-4.5 22.5T862.09-380L643-160H520Zm300-263-37-37 37 37ZM580-220h38l121-122-18-19-19-18-122 121v38Zm141-141-19-18 37 37-18-19Z" />
</svg>
</span>
{{- end }}
</h2>
</header>
{{- if (ne (.Param "hideSummary") true) }}
<div class="entry-content">
<p>{{ .Summary | plainify | htmlUnescape }}{{ if .Truncated }}...{{ end }}</p>
</div>
{{- end }}
{{- if not (.Param "hideMeta") }}
<footer class="entry-footer">
{{- partial "post_meta.html" . -}}
</footer>
{{- end }}
<a class="entry-link" aria-label="post link to {{ .Title | plainify }}" href="{{ .Permalink }}"></a>
</article>
{{- end }}
{{- if gt $paginator.TotalPages 1 }}
<footer class="page-footer">
<nav class="pagination">
{{- if $paginator.HasPrev }}
<a class="prev" href="{{ $paginator.Prev.URL | absURL }}">
«&nbsp;{{ i18n "prev_page" }}&nbsp;
{{- if (.Param "ShowPageNums") }}
{{- sub $paginator.PageNumber 1 }}/{{ $paginator.TotalPages }}
{{- end }}
</a>
{{- end }}
{{- if $paginator.HasNext }}
<a class="next" href="{{ $paginator.Next.URL | absURL }}">
{{- i18n "next_page" }}&nbsp;
{{- if (.Param "ShowPageNums") }}
{{- add 1 $paginator.PageNumber }}/{{ $paginator.TotalPages }}
{{- end }}&nbsp;»
</a>
{{- end }}
</nav>
</footer>
{{- end }}
{{- end }}{{/* end profileMode */}}
{{- end }}{{- /* end main */ -}}

View file

@ -0,0 +1,138 @@
{{- if not (.Param "hideFooter") }}
<footer class="footer">
{{- if not site.Params.footer.hideCopyright }}
{{- if site.Copyright }}
<span>{{ site.Copyright | markdownify }}</span>
{{- else }}
<span>&copy; {{ now.Year }} <a href="{{ "" | absLangURL }}">{{ site.Title }}</a></span>
{{- end }}
{{- end }}
{{- with site.Params.footer.text }}
{{ . | markdownify }}
{{- print " · "}}
{{- end }}
</footer>
{{- end }}
{{- if (not site.Params.disableScrollToTop) }}
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
<path d="M12 6H0l6-6z" />
</svg>
</a>
{{- end }}
{{- partial "extend_footer.html" . }}
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
{{- if (not site.Params.disableScrollToTop) }}
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
{{- end }}
{{- if (not site.Params.disableThemeToggle) }}
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
</script>
{{- end }}
{{- if (and (eq .Kind "page") (ne .Layout "archives") (ne .Layout "search") (.Param "ShowCodeCopyButtons")) }}
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = '{{- i18n "code_copy" | default "copy" }}';
function copyingDone() {
copybutton.innerHTML = '{{- i18n "code_copied" | default "copied!" }}';
setTimeout(() => {
copybutton.innerHTML = '{{- i18n "code_copy" | default "copy" }}';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
// td containing LineNos
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
// table containing LineNos and code
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
// code blocks not having highlight as parent class
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
{{- end }}

174
layouts/partials/head.html Normal file
View file

@ -0,0 +1,174 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
{{- if hugo.IsProduction | or (eq site.Params.env "production") | and (ne .Params.robotsNoIndex true) }}
<meta name="robots" content="index, follow">
{{- else }}
<meta name="robots" content="noindex, nofollow">
{{- end }}
<!-- Stylesheets -->
{{ range .Site.Params.custom_css -}}
<link rel="stylesheet" href="{{ . | absURL }}">
{{- end }}
{{ if .Params.custom_css }}
{{ range .Params.custom_css }}
<link rel="stylesheet" href="{{ . | relURL }}">
{{ end }}
{{ end }}
<!-- Mastodon verification -->
<link rel="me" href="https://mastodon.social/@pepev_nrt">
<link rel="me" href="https://masto.es/@peps">
<link rel="me" href="https://masto.es/@pepe">
<meta name="fediverse:creator" content="@pepe@masto.es">
{{- /* Title */}}
<title>{{ if .IsHome }}{{ else }}{{ if .Title }}{{ .Title }} | {{ end }}{{ end }}{{ site.Title }}</title>
{{- /* Meta */}}
{{- if .IsHome }}
{{ with site.Params.keywords -}}<meta name="keywords" content="{{- range $i, $e := . }}{{ if $i }}, {{ end }}{{ $e }}{{ end }}">{{ end }}
{{- else }}
<meta name="keywords" content="{{ if .Params.keywords -}}
{{- range $i, $e := .Params.keywords }}{{ if $i }}, {{ end }}{{ $e }}{{ end }} {{- else }}
{{- range $i, $e := .Params.tags }}{{ if $i }}, {{ end }}{{ $e }}{{ end }} {{- end -}}">
{{- end }}
<meta name="description" content="{{- with .Description }}{{ . }}{{- else }}{{- if or .IsPage .IsSection}}
{{- .Summary | default (printf "%s - %s" .Title site.Title) }}{{- else }}
{{- with site.Params.description }}{{ . }}{{- end }}{{- end }}{{- end -}}">
<meta name="author" content="{{ (partial "author.html" . ) }}">
<link rel="canonical" href="{{ if .Params.canonicalURL -}} {{ trim .Params.canonicalURL " " }} {{- else -}} {{ .Permalink }} {{- end }}">
{{- if site.Params.analytics.google.SiteVerificationTag }}
<meta name="google-site-verification" content="{{ site.Params.analytics.google.SiteVerificationTag }}">
{{- end }}
{{- if site.Params.analytics.yandex.SiteVerificationTag }}
<meta name="yandex-verification" content="{{ site.Params.analytics.yandex.SiteVerificationTag }}">
{{- end }}
{{- if site.Params.analytics.bing.SiteVerificationTag }}
<meta name="msvalidate.01" content="{{ site.Params.analytics.bing.SiteVerificationTag }}">
{{- end }}
{{- if site.Params.analytics.naver.SiteVerificationTag }}
<meta name="naver-site-verification" content="{{ site.Params.analytics.naver.SiteVerificationTag }}">
{{- end }}
{{- /* Styles */}}
{{- /* includes */}}
{{- $includes := slice }}
{{- $includes = $includes | append (" " | resources.FromString "assets/css/includes-blank.css")}}
{{- if not (eq site.Params.assets.disableScrollBarStyle true) }}
{{- $ScrollStyle := (resources.Get "css/includes/scroll-bar.css") }}
{{- $includes = (append $ScrollStyle $includes) }}
{{- end }}
{{- $includes_all := $includes | resources.Concat "assets/css/includes.css" }}
{{- $theme_vars := (resources.Get "css/core/theme-vars.css") }}
{{- $reset := (resources.Get "css/core/reset.css") }}
{{- $media := (resources.Get "css/core/zmedia.css") }}
{{- $license_css := (resources.Get "css/core/license.css") }}
{{- $common := (resources.Match "css/common/*.css") | resources.Concat "assets/css/common.css" }}
{{- /* markup.highlight.noClasses should be set to `false` */}}
{{- $chroma_styles := (resources.Get "css/includes/chroma-styles.css") }}
{{- $chroma_mod := (resources.Get "css/includes/chroma-mod.css") }}
{{- /* order is important */}}
{{- $core := (slice $theme_vars $reset $common $chroma_styles $chroma_mod $includes_all $media) | resources.Concat "assets/css/core.css" | resources.Minify }}
{{- $extended := (resources.Match "css/extended/*.css") | resources.Concat "assets/css/extended.css" | resources.Minify }}
{{- /* bundle all required css */}}
{{- /* Add extended css after theme style */ -}}
{{- $stylesheet := (slice $license_css $core $extended) | resources.Concat "assets/css/stylesheet.css" }}
{{- if not site.Params.assets.disableFingerprinting }}
{{- $stylesheet := $stylesheet | fingerprint }}
<link crossorigin="anonymous" href="{{ $stylesheet.RelPermalink }}" integrity="{{ $stylesheet.Data.Integrity }}" rel="preload stylesheet" as="style">
{{- else }}
<link crossorigin="anonymous" href="{{ $stylesheet.RelPermalink }}" rel="preload stylesheet" as="style">
{{- end }}
{{- /* Search */}}
{{- if (eq .Layout `search`) -}}
<link crossorigin="anonymous" rel="preload" as="fetch" href="../index.json">
{{- $fastsearch := resources.Get "js/fastsearch.js" | js.Build (dict "params" (dict "fuseOpts" site.Params.fuseOpts)) | resources.Minify }}
{{- $fusejs := resources.Get "js/fuse.basic.min.js" }}
{{- $license_js := resources.Get "js/license.js" }}
{{- if not site.Params.assets.disableFingerprinting }}
{{- $search := (slice $fusejs $license_js $fastsearch ) | resources.Concat "assets/js/search.js" | fingerprint }}
<script defer crossorigin="anonymous" src="{{ $search.RelPermalink }}" integrity="{{ $search.Data.Integrity }}"></script>
{{- else }}
{{- $search := (slice $fusejs $fastsearch ) | resources.Concat "assets/js/search.js" }}
<script defer crossorigin="anonymous" src="{{ $search.RelPermalink }}"></script>
{{- end }}
{{- end -}}
{{- /* Favicons */}}
<link rel="icon" href="{{ site.Params.assets.favicon | default "favicon.ico" | absURL }}">
<link rel="icon" type="image/png" sizes="16x16" href="{{ site.Params.assets.favicon16x16 | default "favicon-16x16.png" | absURL }}">
<link rel="icon" type="image/png" sizes="32x32" href="{{ site.Params.assets.favicon32x32 | default "favicon-32x32.png" | absURL }}">
<link rel="apple-touch-icon" href="{{ site.Params.assets.apple_touch_icon | default "apple-touch-icon.png" | absURL }}">
<link rel="mask-icon" href="{{ site.Params.assets.safari_pinned_tab | default "safari-pinned-tab.svg" | absURL }}">
<meta name="theme-color" content="{{ site.Params.assets.theme_color | default "#2e2e33" }}">
<meta name="msapplication-TileColor" content="{{ site.Params.assets.msapplication_TileColor | default "#2e2e33" }}">
{{- /* RSS */}}
{{ range .AlternativeOutputFormats -}}
<link rel="{{ .Rel }}" type="{{ .MediaType.Type | html }}" href="{{ .Permalink | safeURL }}">
{{ end -}}
{{- range .AllTranslations -}}
<link rel="alternate" hreflang="{{ .Lang }}" href="{{ .Permalink }}">
{{ end -}}
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
{{- if (and (ne site.Params.defaultTheme "light") (ne site.Params.defaultTheme "dark")) }}
<style>
@media (prefers-color-scheme: dark) {
:root {
--theme: rgb(29, 30, 32);
--entry: rgb(46, 46, 51);
--primary: rgb(218, 218, 219);
--secondary: rgb(155, 156, 157);
--tertiary: rgb(65, 66, 68);
--content: rgb(196, 196, 197);
--code-block-bg: rgb(46, 46, 51);
--code-bg: rgb(55, 56, 62);
--border: rgb(51, 51, 51);
}
.list {
background: var(--theme);
}
.list:not(.dark)::-webkit-scrollbar-track {
background: 0 0;
}
.list:not(.dark)::-webkit-scrollbar-thumb {
border-color: var(--theme);
}
}
</style>
{{- end }}
</noscript>
{{- partial "extend_head.html" . -}}
{{- /* Misc */}}
{{- if hugo.IsProduction | or (eq site.Params.env "production") }}
{{- template "_internal/google_analytics.html" . }}
{{- template "partials/templates/opengraph.html" . }}
{{- template "partials/templates/twitter_cards.html" . }}
{{- template "partials/templates/schema_json.html" . }}
{{- end -}}

954
layouts/partials/svg.html Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,2 @@
<!-- raw html -->
{{.Inner}}

0
static/css/global.css Normal file
View file

6
static/css/relatos.css Normal file
View file

@ -0,0 +1,6 @@
p {
text-align: justify;
text-indent: 20px;
margin-bottom: 0 !important;
line-height: 1.6;
}