nixtml؛ ساخت سایت استاتیک با خودِ Nix
خلاصهٔ کاملتر
nixtml یه static site generator (یعنی ابزاری که از فایلهای مارکداون، سایت HTML آماده میسازه) هست که کامل با زبان Nix نوشته شده. تو صفحهٔ پروژه اومده که الهامش رو از Hugo گرفته، ولی برخلاف Hugo هیچ فایل کانفیگ جدایی نداری: کل سایت یه ماژول Nixه که توی flake پروژه تعریف میشه.
راهاندازیش اینه که nixtml رو به inputs فلیکت اضافه کنی و با nixtml.lib.mkWebsite سایت رو بسازی. همونجا name و baseURL و یه سری metadata دلخواه میدی، content.dir رو به پوشهٔ مارکداونها وصل میکنی و static.dir رو به فایلهای ثابت. هر فایل مارکداون با همون مسیر خودش HTML میشه، مثلاً about.md میشه about/index.html.
برای محتوای گروهی هم collections داری: یه پوشه رو بهعنوان مجموعه معرفی میکنی و nixtml خودش صفحهبندی و فید RSS میسازه.
website.collections.blog = {
path = "blog/posts";
pagination.perPage = 5;
rss.enable = true;
};با کلید taxonomies میتونی پستها رو بر اساس چیزهایی مثل tags یا series گروهبندی کنی و nixtml برای هر برچسب صفحهٔ جدا و صفحهبندیشده میسازه. مقدارها رو هم توی frontmatter همون فایل مارکداون مینویسی.
قالبها زیر website.layouts میشینن و هر کدوم کار خودشون رو دارن: base اسکلت کل صفحه، home و page برای صفحههای مارکداون، collection و taxonomy برای صفحههای لیستی و partials برای تکههای تکراری. نوشتنشون دو مدل داره: یا با توابع آمادهٔ lib.tags مثل html و head و div، یا همون HTML معمولی داخل رشتهٔ Nix. خروجی هر دو یکیه.
چون خروجی نهایی یه derivation عادی Nixه، بیلد سایت هم مثل بقیهٔ پکیجهات تکرارپذیر میشه و با nix run .#serve سریع لوکال بالا میاد. تم هم چیز خاصی نیست، فقط یه ماژول Nix که با imports اضافهش میکنی. چند نمونهٔ آماده هم توی مخزن هست که با nix build .#examples.simple و نسخهٔ blog ساخته میشن.
نکات کلیدی:
- کل پیکربندی سایت داخل flake پروژه تعریف میشه، بدون فایل کانفیگ جدا
- content.dir مارکداونها رو به HTML تبدیل میکنه و static.dir فایلهای ثابت رو سر جاشون میذاره
- collections صفحهبندی و RSS خودکار میده و taxonomies گروهبندی با tags یا series
- قالبها یا با توابع lib.tags نوشته میشن یا با رشتهٔ ساده Nix
- پیشنمایش لوکال با nix run .#serve و تم بهشکل ماژول با imports




