summaryrefslogtreecommitdiff
path: root/content/posts/2025-05-19-nxpcms.md
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--content/posts/2025-05-19-nxpcms.md77
1 files changed, 77 insertions, 0 deletions
diff --git a/content/posts/2025-05-19-nxpcms.md b/content/posts/2025-05-19-nxpcms.md
new file mode 100644
index 0000000..d1d30e6
--- /dev/null
+++ b/content/posts/2025-05-19-nxpcms.md
@@ -0,0 +1,77 @@
+---
+date: '2025-05-19T00:00:00+03:00'
+title: NXPCMS — моя CMS'ка (ч.1)
+---
+
+Долгое время я пользовался Hugo (а одно время, даже WordPress!). И в целом, всем
+он меня устраивал. Но недавно, произошло, казалось бы не связанное. Я снова
+воспылал интересом к треккерной музыке. При этом я немного полазал по сети,
+поспрашивал знакомых и собрал достаточно большую (>80Гб!) коллекцию. Но просто
+хранить на диске было скучно и я решил её выложить во внешку. Так появился
+shelter.neonxp.ru (сейчас не работает, почему - объясню ниже).
+
+Сначала список файлов сервил в веб просто Caddy, но у него был недостаток: он не
+мог дать послушать треккерный файл без скачивания. Тогда я накидал простенькую
+программку, которая так же просто отдаёт содержимое директории, но позволяла
+слушать треккерную музыку. Через некоторое время я подумал, а почему бы не
+прикрутить к ней и предпросмотр и других файлов? Сказано-сделано. Прикрутил
+сначала просмотрщик markdown и txt файлов. Дальше, мысль полетела уже по
+накатанной, и подумалось мне, что это же простенькая CMS. В эту сторону проектик
+я и стал развивать. И вот вчера я таки перевёл этот сайт на мою собственную CMS!
+
+Но пишу только сейчас, потому что вчера после переезда уже ничего не хотел
+писать, ибо переезд был непрост. И как я уже выше говорил, пока отключил shelter
+в пользу этого сайта. Позже заведу и shelter. Особенности моей CMS:
+* минимум конфигурации: один бинарник, который при запуске сервит сайт из
+ текущей рабочей директории.
+* структура сайта ~= файловая структура, отсюда и листинг файлов на каждой
+ странице
+* нет какого-то общего файла конфигурации (аля /etc/...), вместо этого для
+ каждой директории можно создать свой файл .config.json (формат hjson, на самом
+ деле), который распространяет своё действие на текущую директорию, и на все
+ вложенные. Вложенные директории могут иметь свои конфиги, которые могут или
+ частично или полностью переопределять родительский конфиг. Например:
+```
+/var/www/neonxp.ru/.config.json
+
+{
+ "title": "NeonXP.log",
+ "description": "Личный сайт Go-разработчика из Казани",
+ "index": [ "index.gmi", "index.md", "index.txt"],
+ "url": "https://neonxp.ru/",
+}
+```
+а для директории постов важно, чтобы сортировка была в обратном порядке, поэтому
+её конфиг выглядит следующим образом:
+```
+/var/www/neonxp.ru/posts/.config.json
+
+{
+ "description": "Блог", # <- перезапись родительского конфига
+ "desc": true,
+}
+```
+Немного напоминает дедушку Apache2 с его .htaccess :) Но мне это кажется весьма
+удачной идеей.
+* Основной формат разметки — gemtext. Просто потому что мне он нравится своим
+ радикальным минимализмом. Минималистично настолько, что его парсер в html для
+ этой CMS я написал примерно за час с нуля.
+
+На самом деле, написать свою CMSку — достаточно старая мечта, и в своём прошлом,
+я неоднократно это делал, ещё на PHP (ну тогда это было модно). Ну и кто мне
+запретит сделать это сейчас, с теми идеями что я указал выше?) По факту
+получилось что-то среднее между веб-сервером аля Apache2 и классическими CMS, и
+мне это нравится.
+
+## Что дальше?
+
+А дальше я буду развивать её в сторону тех фич, что нужны лично мне:
+* Доделать миграцию постов и материалов из старого блога. Сейчас всё
+ импортировано в автоматическом режиме и выглядит откровенно плохо
+* Поддержка предпросмотра большего числа форматов файлов
+* Хотелось бы сделать Basic авторизацию + загрузку файлов по http
+* Раз уж используется gemtext — сделать и поддержку gemini протокола
+* Прикрутить cgi или скрипты на lua? А почему-бы и нет? :) Хотя бы сделаю
+ какую-нибудь олдскульную гостевуху
+* Прикрутить все эти клёвые indieweb штуки, которые было весьма проблемно
+ прикрутить к Hugo блогу в силу его статичности