GemlogTXT - Sistema completo para gemlogs y blogs
¿QUÉ ES ESTO?
Un conjunto de scripts bash que convierten un archivo de texto simple en múltiples formatos:
- Gemini (.gmi) - Para servidores Gemini
- HTML5 moderno - Con modo claro/oscuro automático
- HTML3 retro - Estilo clásico compatible con navegadores antiguos
- Feed Atom - Para sindicación de contenido
LA IDEA
Escribir tu contenido debería ser tan fácil como escribir en un cuaderno. Sin bases de datos, sin interfaces web, solo texto plano que se convierte automáticamente en múltiples formatos.
CÓMO USARLO
Gemini (Gemlog) v2.4
./gemlogtxt.sh mi_gemlog.txt
HTML5 Moderno
./gemlogtxt2html.sh mi_gemlog.txt
HTML3 Retro
./gemlogtxt2html3.sh mi_gemlog.txt
Generar Feed Atom
./createatom.sh html/ https://misitio.com
FORMATO DEL ARCHIVO (Común para todos)
' Comentarios con comilla simple 2024-01-15 nombre_entrada Título de la entrada #gemini #tutorial #linux Contenido de la entrada puede tener múltiples líneas y formato gemtext completo => enlaces.gmi Enlaces útiles * Listas con asterisco > Citas con mayor que ``` alt text Bloques de código con triple backtick ```
CARACTERÍSTICA EXCLUSIVA GEMINI: ENLACES EXTERNOS
Solo en gemlogtxt.sh (formato Gemini), puedes crear enlaces externos/minisites usando corchetes:
AAAA-MM-DD [gemini://misitio.com] Título del Enlace Externo #enlace #externo Este es un enlace externo que aparecerá con símbolo especial en el índice principal. Este texto es sólo informativo y no se procesa.
NUEVAS CARACTERÍSTICAS (v2.4)
✨ Borradores (MEJORADO en v2.4)
Usa 'draft', 'DRAFT' o 'Draft' como fecha (case-insensitive):
draft borrador Entrada en progreso #borrador Este contenido no aparecerá en los índices. Se genera el archivo pero no se publica.
📅 Entradas Programadas Mejoradas (MEJORADO en v2.4)
- Se muestran ordenadas por fecha (más cercana primero)
- Calcula y muestra días restantes automáticamente con fórmula precisa
- Incluye manejo especial para "Hoy", "Dentro de 1 día", "Dentro de X días"
- Ejemplo de salida:
=== ENTRADAS PROGRAMADAS ===
⏰ navidad.gmi - Visible el 2024-12-25 (Dentro de 15 días)
⏰ año_nuevo.gmi - Visible el 2024-12-31 (Hoy)
🗓️ Fechas formateadas en español (NUEVO en v2.4)
- Opción para mostrar fechas formateadas en español en entradas individuales
- Configurable con variable `MOSTRARFECHA="ON"` (ON/OFF)
- Formato: "domingo, 30 de noviembre de 2025"
- Ejemplo en salida:
Título de la entrada
domingo, 30 de noviembre de 2025
Contenido de la entrada...
📊 Separación por años en el índice (NUEVO en v2.4)
- El índice principal ahora agrupa entradas por año
- Usa encabezados ### para cada año
- Organización cronológica descendente (más reciente primero)
- Ejemplo en index.gmi:
2024
2023
🎨 HTML5 con Modo Claro/Oscuro
- Diseño responsive moderno
- Modo oscuro automático según preferencias del sistema
- CSS elegante con variables CSS
- Texto justificado para mejor legibilidad
🕹️ HTML3 Retro
- Compatible con navegadores antiguos
- Estilo clásico con colores anaranjados/ocre
- Usa HTML 3.2 Final DTD
- Tablas para layout (estilo retro auténtico)
📡 Feed Atom Automático
- Genera atom.xml automáticamente
- Soporta tanto HTML5 como HTML3
- Incluye resúmenes de contenido
- Configurable con base URL
ESTRUCTURA COMÚN
- Fecha (AAAA-MM-DD) o 'draft' para borradores
- Nombre del archivo (sin extensión) o [URL] para enlaces externos (solo Gemini)
- Título de la entrada
- Línea de etiquetas (opcional, empieza con #)
- Contenido (multilínea, soporta formato gemtext)
- <END> (separador de entradas)
CARACTERÍSTICAS DESTACADAS
Comunes a todos los formatos
✓ Preserva formato ASCII art y espacios en blanco
✓ Sistema de etiquetas automático y navegable
✓ Entradas programadas para fechas futuras
✓ Validación robusta de fechas
✓ Índice ordenado por fecha (más reciente primero)
✓ Soporte para borradores
Exclusivas de Gemini (v2.4)
✓ Enlaces externos/minisites con [URL]
✓ Tags ordenados por popularidad
✓ Generación automática de navegación
✓ Compatible con cualquier servidor Gemini
✓ Símbolo especial (- ⤷) para enlaces externos en el índice
✓ **NUEVO:** Separación por años en el índice
✓ **NUEVO:** Fechas formateadas en español opcionales
✓ **NUEVO:** Cálculo preciso de días restantes para entradas programadas
Específicas de HTML5
✓ Modo claro/oscuro automático
✓ Diseño responsive moderno
✓ Texto justificado
✓ CSS con variables
Específicas de HTML3
✓ Compatibilidad retro
✓ Estilo clásico de los 90s
✓ Colores anaranjados/ocre
✓ HTML 3.2 válido
SISTEMA DE ETIQUETAS AVANZADO
- Cada etiqueta genera páginas individuales en 'tags/'
- Las etiquetas se ordenan por uso (de más a menos popular)
- Navegación completa entre etiquetas y entradas
- Conteo automático de entradas por etiqueta
- Las etiquetas de entradas programadas se activan automáticamente al publicarse
- Los borradores no procesan etiquetas para índices
- Los enlaces externos SÍ procesan etiquetas para el índice
ARCHIVOS GENERADOS
Gemini v2.4
gemlog/
├── index.gmi (Índice principal por fecha, agrupado por años)
├── tags.gmi (Índice de etiquetas ordenadas por popularidad)
├── entrada1.gmi (Tus entradas individuales, con fecha formateada opcional)
├── entrada2.gmi
└── tags/ (Directorio de etiquetas)
├── gemini.gmi (Página de etiqueta #gemini)
├── linux.gmi (Página de etiqueta #linux)
└── ...
HTML5
html/
├── index.html (Índice principal)
├── tags.html (Índice de etiquetas)
├── styles.css (CSS moderno con modo claro/oscuro)
├── entrada1.html (Entradas individuales)
├── entrada2.html
└── tags/ (Directorio de etiquetas)
├── gemini.html (Página de etiqueta #gemini)
└── ...
HTML3
html3/
├── index.html (Índice estilo retro)
├── tags.html (Índice de etiquetas)
├── styles.css (CSS retro anaranjado)
├── entrada1.html (Entradas individuales)
├── entrada2.html
└── tags/ (Directorio de etiquetas)
├── gemini.html (Página de etiqueta #gemini)
└── ...
VALIDACIÓN DE FECHAS (MEJORADA en v2.4)
El script valida que:
✓ La fecha tenga formato AAAA-MM-DD
✓ La fecha exista en el calendario
✓ No se aceptan fechas como 2024-02-30 o 2024-13-01
✓ 'draft' (en cualquier capitalización) se acepta para borradores
✓ Las fechas futuras se procesan como entradas programadas
Si una fecha es inválida:
❌ La entrada NO se procesa
❌ Se muestra un error específico
❌ El script termina con código de error 1
❌ Se muestra contador de errores al final
BORRADORES (MEJORADO en v2.4)
Si usas 'draft' como fecha:
- Se crea el archivo inmediatamente
- NO aparece en ningún índice
- NO se procesan las etiquetas para los índices
- Se muestra en la sección "BORRADORES" del output
- Perfecto para trabajar en contenido sin publicarlo
- **NUEVO:** Case-insensitive (funciona con Draft, DRAFT, draft)
ENLACES EXTERNOS (Exclusivo Gemini v2.4)
Si usas [URL] como nombre de archivo:
- Se detecta automáticamente como enlace externo
- Aparece en el índice con símbolo especial (- ⤷)
- NO se genera archivo .gmi local
- SÍ se procesan las etiquetas para el índice
- Perfecto para enlazar minisites externos o recursos
- Se muestra en la sección "ENLACES EXTERNOS" del output
ENTRADAS PROGRAMADAS (MEJORADO en v2.4)
Si pones una fecha futura:
- Se crea el archivo inmediatamente
- No aparece en el índice hasta esa fecha
- Los tags NO se procesan hasta la fecha de publicación
- El día indicado, aparecerá automáticamente
- **NUEVO:** Se muestran ordenadas con días restantes calculados con precisión
- **NUEVO:** Mensajes especiales para "Hoy" y "Dentro de 1 día"
- Perfecto para escribir contenido con anticipación
FECHAS FORMATEADAS EN ESPAÑOL (NUEVO en v2.4)
Característica opcional activable con `MOSTRARFECHA="ON"`:
- Muestra fecha formateada en español entre el título y el contenido
- Formato: "domingo, 30 de noviembre de 2025"
- **NUEVO:** Compatible con nombres de meses y días en español
- **NUEVO:** Elimina ceros iniciales de los días (ej: 05 → 5)
- **NUEVO:** Validación de fecha antes de formatear
- Configurable: `MOSTRARFECHA="ON"` o `MOSTRARFECHA="OFF"`
SEPARACIÓN POR AÑOS EN EL ÍNDICE (NUEVO en v2.4)
Mejora en la organización del índice principal:
- Agrupa entradas por año usando encabezados ###
- Orden descendente (año más reciente primero)
- Dentro de cada año, orden cronológico inverso
- **NUEVO:** Facilita navegación en gemlogs con muchos años de contenido
- **NUEVO:** Mejora la legibilidad del índice
CONFIGURACIÓN PERSONALIZABLE (v2.4)
gemlogtxt.sh (Gemini v2.4)
# Textos del índice TITULO_INDICE="Gemlog de _-~Caleb~-_ 📝" BIENVENIDA_INDICE="Este es el gemlog del sitio, espero disfrutes de él:" # Textos de los archivos de entrada TEXTO_VOLVER_INDICE="Volver al índice" # Footer personalizado TEXTO_FOOTER="Este gemlog fue generado automáticamente con gemlog.txt" # Símbolo para enlaces externos/minisites SIMBOLO_ENLACE_EXTERNO="- ⤷" # Mostrar fecha formateada en entradas individuales # Valores: ON (mostrar fecha formateada) / OFF (no mostrar) MOSTRARFECHA="ON" # Directorios ARCHIVO_ENTRADAS="blog.gemlog" DIRECTORIO_SALIDA="gemlog"
gemlogtxt2html.sh (HTML5)
TITULO_INDICE="Blog de _-~Caleb~-_ 📝" BIENVENIDA_INDICE="Este es el blog del sitio, espero disfrutes de él:" TEXTO_FOOTER="Este blog fue generado automáticamente con gemlogtxt2html.sh"
gemlogtxt2html3.sh (HTML3)
TITULO_INDICE="Blog de _-~Caleb~-_ 📝" BIENVENIDA_INDICE="Este es el blog del sitio, espero disfrutes de él:" TEXTO_FOOTER="Este blog fue generado automáticamente con gemlogtxt2html3.sh"
createatom.sh (Atom Feed)
TITULO_FEED="Blog de _-~Caleb~-_ 📝" AUTOR_NOMBRE="Caleb" AUTOR_EMAIL="caleb@misitio.com" DESCRIPCION_FEED="Blog personal con entradas sobre tecnología, pensamientos y más"
AUTOMATIZACIÓN CON CRON
Para regenerar automáticamente tu contenido diariamente:
1. Edita tu crontab: 'crontab -e'
2. Añade estas líneas (ajusta las rutas):
# Regenerar gemlog v2.4 cada día a las 6:00 AM 0 6 * * * /ruta/completa/gemlogtxt.sh # Regenerar HTML5 0 6 * * * /ruta/completa/gemlogtxt2html.sh /ruta/completa/mi_gemlog.txt # Regenerar HTML3 0 6 * * * /ruta/completa/gemlogtxt2html3.sh /ruta/completa/mi_gemlog.txt # Regenerar Atom feed 0 7 * * * /ruta/completa/createatom.sh /ruta/completa/html/ https://misitio.com
Esto ejecutará los scripts cada día, haciendo que:
- Las entradas programadas para hoy aparezcan automáticamente
- Los índices se actualicen con nuevas entradas
- Los tags se regeneren incluyendo nuevas publicaciones
- El feed Atom se mantenga actualizado
- **NUEVO:** Las fechas formateadas se actualicen correctamente
FLUJO DE TRABAJO RECOMENDADO (v2.4)
1. Escribe nuevas entradas al final de tu archivo
2. Usa 'draft' para borradores en progreso (case-insensitive)
3. Usa [URL] para enlaces externos (solo Gemini)
4. Programa para fechas futuras si es necesario
5. El cron diario se encarga de publicarlas automáticamente
6. ¡Genera múltiples formatos simultáneamente!
7. **NUEVO:** Aprovecha las fechas formateadas en español para mejor presentación
8. **NUEVO:** Disfruta de la organización por años en el índice
EJEMPLOS DE USO COMPLETO (v2.4)
Ejemplo con todas las características nuevas
' Borrador en progreso (case-insensitive) Draft tutorial-avanzado Tutorial Avanzado de Bash #bash #tutorial #avanzado Este contenido está en desarrollo... Necesito añadir más ejemplos.' Enlace externo a minisite 2024-01-20 [gemini://misitio.com/proyecto] Mi Proyecto Externo #proyecto #externo #gemini Este es un enlace a mi minisite externo. ' Entrada programada con fecha futura 2024-12-25 navidad Especial de Navidad 2024 #navidad #reflexiones #festivo ¡Feliz Navidad! Esta entrada se publicará automáticamente. => gemini://ejemplo.com/navidad Más sobre Navidad ' Entrada normal con fecha formateada 2024-11-30 reflexion-diaria Reflexiones de un día cualquiera #reflexiones #personal Hoy fue un día interesante... * Aprendí algo nuevo * Conocí gente interesante * Reflexioné sobre la vida > La vida es lo que pasa mientras estás ocupado haciendo otros planes
Salida del script v2.4
=== PROCESAMIENTO COMPLETADO === Versión del script: 2.4 Configuración MOSTRARFECHA: ON Archivos creados en: gemlog/ Entradas en el índice: 15 Enlaces externos: 1 Entradas programadas: 1 Borradores: 1 Etiquetas procesadas: 8 Errores de fecha: 0 Índice generado: gemlog/index.gmi Índice de etiquetas: gemlog/tags.gmi Archivos de etiquetas: gemlog/tags/ === BORRADORES === 📝 tutorial-avanzado.gmi === ENLACES EXTERNOS === 🔗 gemini://misitio.com/proyecto === ENTRADAS PROGRAMADAS === ⏰ navidad.gmi - Visible el 2024-12-25 (Dentro de 15 días)
Ejemplo de salida con MOSTRARFECHA="ON"
En el archivo `reflexion-diaria.gmi`:
# Reflexiones de un día cualquiera sábado, 30 de noviembre de 2024 Hoy fue un día interesante... * Aprendí algo nuevo * Conocí gente interesante * Reflexioné sobre la vida > La vida es lo que pasa mientras estás ocupado haciendo otros planes --- (resto del archivo)
Ejemplo de índice con separación por años
En `gemlog/index.gmi`:
# Gemlog de _-~Caleb~-_ 📝 Este es el gemlog del sitio, espero disfrutes de él: => tags.gmi Explorar por etiquetas ### 2024 => reflexion-diaria.gmi 2024-11-30 - Reflexiones de un día cualquiera => proyecto.gmi 2024-01-20 - Mi Proyecto Externo - ⤷ ### 2023 => entrada-antigua.gmi 2023-08-15 - Una entrada del año pasado => otra-antigua.gmi 2023-05-10 - Otra entrada antigua ### 2022 => primera.gmi 2022-12-01 - Mi primera entrada
CONSEJOS ÚTILES (v2.4)
✓ Usa nombres de archivo descriptivos y consistentes
✓ Las etiquetas con múltiples palabras usan guiones: #mi-etiqueta
✓ Programa entradas para mantener consistencia
✓ Usa borradores para trabajo en progreso (case-insensitive)
✓ Usa [URL] para enlazar minisites externos (solo Gemini)
✓ El cron diario es tu mejor amigo para automatizar
✓ Los ASCII art conservan su formato perfectamente en todos los formatos
✓ Genera los tres formatos para llegar a diferentes audiencias
✓ **NUEVO:** Activa `MOSTRARFECHA="ON"` para mejor presentación
✓ **NUEVO:** Aprovecha la separación por años para gemlogs con historia
✓ **NUEVO:** Revisa la sección "ENTRADAS PROGRAMADAS" para saber qué se publicará pronto
FILOSOFÍA
Menos es más. Escribe una vez, publica en múltiples formatos. Tu contenido importa, no la tecnología.
VENTAJAS CLAVE (v2.4)
Para Escritores
- Escribe en tu editor de texto favorito
- Formato simple y humano
- Sin distracciones, solo contenido
- Sistema de borradores integrado (case-insensitive)
- Enlaces externos sin generar archivos locales (Gemini)
- **NUEVO:** Fechas formateadas automáticamente
- **NUEVO:** Organización por años en el índice
Para Desarrolladores
- Scripts bash puros, sin dependencias
- Fácil de modificar y extender
- Código bien comentado
- Validación robusta
- **NUEVO:** Cálculo preciso de días entre fechas
- **NUEVO:** Manejo mejorado de errores
Para Administradores
- Generación automática diaria
- Múltiples formatos desde una fuente
- Estructura de archivos organizada
- Fácil de versionar y respaldar
- **NUEVO:** Informes detallados de procesamiento
- **NUEVO:** Configuración flexible
Para Lectores
- Contenido disponible en múltiples formatos
- Navegación intuitiva por etiquetas
- Diseños adaptados a cada plataforma
- Feed Atom para suscripciones
- Enlaces externos claramente identificados (Gemini)
- **NUEVO:** Índice organizado por años
- **NUEVO:** Fechas legibles en español
SOPORTE MULTIPLATAFORMA
Los scripts funcionan en:
- Linux (todas las distribuciones)
- macOS (con date GNU)
- BSD (con ajustes menores)
- WSL (Windows Subsystem for Linux)
- Haiku-OS
HISTORIAL DE VERSIONES
v2.4 (Actual)
- **NUEVO:** Separación por años en el índice principal
- **NUEVO:** Opción para mostrar fechas formateadas en español
- **NUEVO:** Cálculo preciso de días restantes para entradas programadas
- **MEJORADO:** Borradores ahora son case-insensitive
- **MEJORADO:** Mensajes especiales para "Hoy" y "1 día"
- **MEJORADO:** Validación mejorada de fechas
- **MEJORADO:** Informes más detallados de procesamiento
v2.3
- Sistema de enlaces externos/minisites
- Símbolo especial para identificar enlaces externos
- Mejor procesamiento de contenido preservando formato
v2.2
- Sistema de borradores
- Entradas programadas con días restantes
- Validación robusta de fechas
v2.1
- Soporte para múltiples formatos (HTML5, HTML3)
- Sistema de etiquetas mejorado
- Feed Atom automático
v2.0
- Versión inicial con soporte Gemini básico
- Sistema de tags simple
- Generación de índice automática
LICENCIA
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org/>