<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="uz">
    <title>Qora Sayohat - Nix</title>
    <subtitle>Orzklv&#x27;ning qora sayohati va hikoyalari.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://orzklv.uz/uz/tags/nix/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://orzklv.uz"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2024-09-27T00:00:00+00:00</updated>
    <id>https://orzklv.uz/uz/tags/nix/atom.xml</id>
    <entry xml:lang="uz">
        <title>Flake orqali statik veb-sayt</title>
        <published>2024-09-27T00:00:00+00:00</published>
        <updated>2024-09-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            Orzklv
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://orzklv.uz/uz/blog/static-flake/"/>
        <id>https://orzklv.uz/uz/blog/static-flake/</id>
        
        <content type="html" xml:base="https://orzklv.uz/uz/blog/static-flake/">&lt;h2 id=&quot;docker-ni-ishlatish-yo-ishlatmaslik&quot;&gt;Dockerʼni ishlatish yo ishlatmaslik&lt;&#x2F;h2&gt;
&lt;p&gt;Agar siz bu postni o’qiyotgan bo’lsangiz, katta ehtimol bilan docker nima ekanligini bilishingiz va uni real ilovalaringizda, shaxsiy loyihalaringizda yoki hatto statik veb-saytni docker konteynerida host qilish kabi oddiy narsalarni bajarishda foydalanayotgan boʻlishingiz mumkin. Insonlar dockerʼni virtualizatsiyaga solishtirib yengil deb aytishadi, lekin u baribir konteynerizatsiya asosidagi virtualizatsiyani ishlatmoqda, bu esa baʼzi nuqtalarda virtualizatsiya hisoblanadi. Docker konteynerlaridan foydalanish uchun, siz konteyneringiz uchun asos sifatida maʼlum bir linux distro bilan borishingiz kerak, shunda siz oxirgi natijangizni biror narsaga asoslangan holda joʻnata olasiz. Biroq, bu har doim &lt;strong&gt;ubuntu&lt;&#x2F;strong&gt; yoki &lt;strong&gt;debian&lt;&#x2F;strong&gt; kabi distroʼlar bilan ishlatish anʼanasiga aylana boshladi, bu koʻpincha keraksiz ortiqchaliklarni oʻz ichiga oladi. Qiziq tomoni shundaki, kun oxirida sizda 500mb qiymatidagi tasvir qoladi, holbuki sizning statik veb-saytingiz faqat 5mb atrofida va “caddy” proksisi ustida yana bitta “nginx” ishlatish gʻalati fikrga o’xshaydi.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mening-docker-bilan-muammom&quot;&gt;Mening “docker” bilan muammom&lt;&#x2F;h2&gt;
&lt;p&gt;Bu 2024-yil sentyabrda, men kolyma veb-saytining rasmini github registriga yuklashga harakat qilayotganimda boʻldi. Qarangki, mendagi statik veb-sayt repoʼni olib, keyin uni “nginx”, “docker” konteynerida saqlaydigan “CI” bor edi, keyinchalik esa registrʼga yuborilardi. Masala shundaki, men arm64 tasvirini x86_64 dan keyin registrga yuborganda, x86_64 tasviri oʻchiriladi. Men kp’plab muqobil yechimlarni sinab koʻrdim va oxir-oqibat dockerʼdan foydalanishni toʻxtatdim. Yaxshiyamki, barcha serverlarimda NixOS oʻrnatilgan edi va ularning konfiguratsiyasi jamoatchilik foydalanishi uchun GitHubʼda &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kolyma-labs&#x2F;instances&quot;&gt;kolyma-labs&#x2F;instances&lt;&#x2F;a&gt; manzilida ochiq holda mavjud edi. Shunday qilib, men dedim: “Nima uchun “flake” ga “nginx” ulab ishlatishni oʻrniga “docker” konteyner ishlatish kerak?“&lt;&#x2F;p&gt;
&lt;h2 id=&quot;keling-flake-qilaylik&quot;&gt;Keling “flake” qilaylik&lt;&#x2F;h2&gt;
&lt;p&gt;Bu qoʻllanmada biz tajriba zonamiz boʻlgan Kolymaʼning statik saytini “flake” qilishni oʻrganamiz: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kolyma-labs&#x2F;gate&quot;&gt;kolyma-labs&#x2F;gate&lt;&#x2F;a&gt;. Boshlash uchun, bizda Nix paket menejeri oʻrnatilganligiga ishonch hosil qilishimiz kerak.&lt;&#x2F;p&gt;
&lt;p&gt;Agar sizda biror joyda shunday ko’rinadigan loyihangiz bor deb faraz qilsangiz:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;└── src&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ├── assets&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    │   └── favicon&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ├── index.html&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ├── libs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    │   └── something&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    │       └── *.js&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    └── styles&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        └── *.css&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Ushbu statik veb-saytga nginx yordamida xizmat koʻrsatish uchun biz “root“ni “src” katalogiga qoʻyishimiz kerak va nginx bizning veb-saytimizga mamnuniyat bilan xizmat qiladi. NixOS-da biz bir xil mantiqqa amal qilamiz, lekin biz loyihani paketlashimiz kerak, shuning uchun nginx “root” yoʻli loyihamizning paketlangan versiyasiga o’rnatiladi.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;paketlash&quot;&gt;Paketlash&lt;&#x2F;h3&gt;
&lt;p&gt;Biz ushbu buyruqni bajarish orqali flakeʼni boshlashimiz kerak:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#DCDCAA, #DCDCAA);&quot;&gt;nix&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; flake&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu bizning loyihamizning asosiy papkasida flake.nix faylini yaratadi. Agar biz uni ochsak, biz quyidagilarni koʻramiz :&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  description&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;Juda oddiy flake&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  inputs&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;    nixpkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;url&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;github:nixos&#x2F;nixpkgs?ref=nixos-unstable&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  outputs&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; self&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; nixpkgs&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;    packages&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;x86_64-linux&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;hello&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; nixpkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;legacyPackages&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;x86_64-linux&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;hello&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;    packages&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;x86_64-linux&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;default&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; self&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;packages&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;x86_64-linux&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;hello&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Koʻrayotganingizdek, nix biz uchun flake.nix nomli yozuvni yaratdi, bu loyiha uchun takrorlanadigan muhitlar va paketlarni koʻrsatish uchun ishlatiladi. Hozirda, &lt;code&gt;inputs&lt;&#x2F;code&gt; &lt;code&gt;nixpkgs&lt;&#x2F;code&gt;-ning eng soʻnggi kanali­ni oʻz ichiga oladi, bu esa bizga &lt;code&gt;nixpkgs&lt;&#x2F;code&gt;da chiqarilgan eng soʻnggi va eng aʼlo dasturlardan bahramand boʻlish imkonini beradi, &lt;code&gt;outputs&lt;&#x2F;code&gt; esa faqat 2 ta boshqa mavjud paketga havoladir. Biz qiladigan narsalarimiz shunday…&lt;&#x2F;p&gt;
&lt;h3 id=&quot;flake-utils&quot;&gt;Flake Utils&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;code&gt;flake-utils&lt;&#x2F;code&gt; nomli foydali kutubxonadan foydalanamiz, bu bizning kodimizning boilerplate qismini kamaytirishga yordam beradi. Buni aytishning eng oson yoʻli shundaki, agar siz hozirgi paketlar roʻyxatiga qarasangiz, &lt;code&gt;x86_64-linux&lt;&#x2F;code&gt; kabi biror narsani ko’rishingiz mumkin, bu esa faqat &lt;code&gt;x86_64-linux&lt;&#x2F;code&gt; mashinalari ushbu paketi qurish va ishga tushirishlari mumkinligini anglatadi. Biroq, biz bunday cheklovlarni xohlamaymiz, chunki statik sahifa platforma bilan bogʻliq emas yoki har bir turdagi platforma uchun takroran paketlarni eʼlon qilish emas. Shuning uchun biz bunday narsalar uchun &lt;code&gt;flake-utils&lt;&#x2F;code&gt; tomonidan taqdim etilgan maxsus foydali funksiyalardan foydalanamiz.&lt;&#x2F;p&gt;
&lt;p&gt;Birinchidan, biz &lt;code&gt;flake-utils&lt;&#x2F;code&gt; repositoriyasini quyidagicha &lt;code&gt;inputs&lt;&#x2F;code&gt;-ga qo’shishimiz kerak:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  description&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;Bizning vebsaytimiz&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  inputs&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;    nixpkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;url&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;github:nixos&#x2F;nixpkgs?ref=nixos-unstable&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; Qani boshladik&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;    flake-utils&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;url&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;github:numtide&#x2F;flake-utils&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Keyin, biz &lt;code&gt;outputs&lt;&#x2F;code&gt; chiqishini quyidagi holatga oʻzgartirishimiz kerak:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;outputs&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#F44747, #F44747);&quot;&gt; =&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; nixpkgs&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; flake-utils&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  ,&lt;&#x2F;span&gt;&lt;span&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; flake-utils&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;lib&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;eachDefaultSystem&lt;&#x2F;span&gt;&lt;span&gt; (&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;system&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;  let&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;    pkgs&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; nixpkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;legacyPackages&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;system&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;  in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; Chiqarish paketlari&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;    packages&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;default&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;callPackage&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; .&#x2F;.&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#F44747, #F44747);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Bu yerda, har bir standartlashtirilgan platforma uchun &lt;code&gt;default&lt;&#x2F;code&gt; paketini ishlab chiqarish uchun &lt;code&gt;flake-utils&lt;&#x2F;code&gt; dan taqdim etilgan &lt;code&gt;eachDefaultSystem&lt;&#x2F;code&gt;-dan foydalanamiz. Agar biz &lt;code&gt;nix repl&lt;&#x2F;code&gt;-ni ishga tushirsak va uning nima qilganini tekshirsak, bunday narsani koʻramiz:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$ nix repl&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Nix 2.28.3&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Type :? for help.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nix-repl&amp;gt; :lf . # hozirgi ish papkasidan flake yuklaydi&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Added 15 variables.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nix-repl&amp;gt; outputs.packages&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  aarch64-darwin = { ... };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  aarch64-linux = { ... };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  x86_64-darwin = { ... };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  x86_64-linux = { ... };&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;nix-repl&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I know, you expected to see only &lt;code&gt;default&lt;&#x2F;code&gt; because in &lt;code&gt;flake.nix&lt;&#x2F;code&gt;, we declared our package as &lt;code&gt;packages.default&lt;&#x2F;code&gt;, but we ended up getting things like &lt;code&gt;aarch64-darwin&lt;&#x2F;code&gt; or &lt;code&gt;x86_64-linux&lt;&#x2F;code&gt;. The thing is, &lt;code&gt;default&lt;&#x2F;code&gt; is there, just right after each of these platform declaration. Remember the default &lt;code&gt;x86_64-linux&lt;&#x2F;code&gt; only package references? Well, &lt;code&gt;eachDefaultSystem&lt;&#x2F;code&gt; took &lt;code&gt;packages.default&lt;&#x2F;code&gt; and inserted every default platform following this template &lt;code&gt;packages.&amp;lt;arch&amp;gt;.default&lt;&#x2F;code&gt; and now, we don’t have to write default package reference for every platform manually.&lt;&#x2F;p&gt;
&lt;p&gt;Announcement of our package is done, and now, let’s proceed to actual packaging process.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;packaging&quot;&gt;Packaging&lt;&#x2F;h3&gt;
&lt;p&gt;All we need to do here, is to explain nix to take whatever inside &lt;code&gt;src&lt;&#x2F;code&gt; and copy somewhere else. So this new place will be &lt;code&gt;package&lt;&#x2F;code&gt; itself. This is what we will be doing here in this process. If we refer to &lt;code&gt;flake.nix&lt;&#x2F;code&gt;, we have &lt;code&gt;pkgs.callPackage .&#x2F;. { }&lt;&#x2F;code&gt; which means:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Lookup for a file named &lt;code&gt;default.nix&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Refer to it as a &lt;code&gt;package&lt;&#x2F;code&gt; that has instructions to build it inside.&lt;&#x2F;li&gt;
&lt;li&gt;Execute this &lt;code&gt;build&lt;&#x2F;code&gt; instructions and present the package.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So, as you may have guessed, we need to create a file at the root of our project named &lt;code&gt;default.nix&lt;&#x2F;code&gt;. Afterwards, we need to declare whatever about our package. You see, nix is a functional language and is all about declarativeness, so, our package is a function which will produce a set of attributions (think of it as an object or json). Our function follows this sample syntax:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; arg1&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; arg2&lt;&#x2F;span&gt;&lt;span&gt; ?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;defaulted-value&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; }&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;let&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;  #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; Whatever temporary should be here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  computated-value&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;arg1&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;name&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt; ${&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;arg2&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;in&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;  #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; You can&amp;#39;t write temporary values here&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;  #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; This is where you should return only results&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  full-name&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; computated-value&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;I very very hope you get the idea of it. And now, we will start writing our package, so first, we need to declare what kind of parameters we need:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pkgs&lt;&#x2F;span&gt;&lt;span&gt; ?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#DCDCAA, #DCDCAA);&quot;&gt; import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;lt;nixpkgs&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This translates to: “expect an argument named &lt;code&gt;pkgs&lt;&#x2F;code&gt; passed to this function that’s a registry of packages which holds all packages and helpful functions, in case this parameter is missing or not passed, use system’s package registry by default”. We will need functions delivered inside package’s registry while packaging. So, next step is to say that our function will return a &lt;code&gt;package&lt;&#x2F;code&gt; as a result which is translated to:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pkgs&lt;&#x2F;span&gt;&lt;span&gt; ?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#DCDCAA, #DCDCAA);&quot;&gt; import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;lt;nixpkgs&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;stdenv&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;mkDerivation&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#F44747, #F44747);&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now, nix knows that this function returns a package, but package’s properties are missing and it doesn’t still know the name, version or build steps of this package. We will start right off by stating package’s name and version like this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pkgs&lt;&#x2F;span&gt;&lt;span&gt; ?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#DCDCAA, #DCDCAA);&quot;&gt; import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;lt;nixpkgs&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;stdenv&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;mkDerivation&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pname&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;ourweb&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  version&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;0.1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Alright, looks good! Now, let’s say to Nix where it should locate all source code of our static website. Well, as I’ve shown you before, I got my website inside &lt;code&gt;src&lt;&#x2F;code&gt; folder at the root of our project. So, this will be my path for source code:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pkgs&lt;&#x2F;span&gt;&lt;span&gt; ?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#DCDCAA, #DCDCAA);&quot;&gt; import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;lt;nixpkgs&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;stdenv&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;mkDerivation&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pname&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;ourweb&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  version&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;0.1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  src&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; .&#x2F;src&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Now, nix knows where to get the source code from, but still it has no idea what to do with it. Therefore, the next thing is going to be explaining what to do with it:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pkgs&lt;&#x2F;span&gt;&lt;span&gt; ?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#DCDCAA, #DCDCAA);&quot;&gt; import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;lt;nixpkgs&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;stdenv&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;mkDerivation&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pname&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;ourweb&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  version&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;0.1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  src&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; .&#x2F;src&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  installPhase&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;    mkdir -p $out&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;    mv .&#x2F;* $out&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;  &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;If you have some experience on packaging for nix, you may have expected me to define &lt;code&gt;buildPhase&lt;&#x2F;code&gt;, but I straight proceeded to &lt;code&gt;installPhase&lt;&#x2F;code&gt;. Our website is static and doesn’t need to be built. We only need to say nix to take all source code and place it inside package. &lt;code&gt;$out&lt;&#x2F;code&gt; in install phase refers to path where our package will be initiated by nix, we don’t know exact location as nix decides it, so we will refer to it via &lt;code&gt;$out&lt;&#x2F;code&gt; variable and move all contents of our website to inside package. Phases are merely bash scripts with necessary values passed as envrionmental variables, not some magic voo-doo.&lt;&#x2F;p&gt;
&lt;p&gt;Noooow, let’s attempt to build our package! Just call build command of nix for this and wait till it finishes:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#DCDCAA, #DCDCAA);&quot;&gt;nix&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; .#default&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; &amp;quot;.&amp;quot; means -&amp;gt; refer to flake.nix at current working directory&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; &amp;quot;#default&amp;quot; means -&amp;gt; refer to `default` value in `packages`&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; or, simply&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#DCDCAA, #DCDCAA);&quot;&gt;nix&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; build&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; both are default values, so no need to indicate it&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Upon finishing it, a new directory will popup at the root path of our project namely &lt;code&gt;result&lt;&#x2F;code&gt; and if you open it, you’ll see contents of your website. Yay, buuuut it took some very long time to do it… Why?!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;optimizing-tricks&quot;&gt;Optimizing tricks&lt;&#x2F;h3&gt;
&lt;p&gt;The thing is, &lt;code&gt;pkgs.stdenv.mkDerivation&lt;&#x2F;code&gt; loads whole c&#x2F;c++ toolchain by default which weighs quite a lot just for building a static website package, in order to tell nix not to do that, we need to use another specific function which doesn’t load &lt;code&gt;cc&lt;&#x2F;code&gt; toolchain which is &lt;code&gt;pkgs.stdenvNoCC.mkDerivation&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pkgs&lt;&#x2F;span&gt;&lt;span&gt; ?&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#DCDCAA, #DCDCAA);&quot;&gt; import&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;lt;nixpkgs&amp;gt;&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;span&gt; ...&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;stdenvNoCC&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;mkDerivation&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  pname&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;ourweb&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  version&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;0.1.0&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  src&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; .&#x2F;src&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  installPhase&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;    mkdir -p $out&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;    mv .&#x2F;* $out&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;  &amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Build it again and it will finish very fast!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;usage&quot;&gt;Usage&lt;&#x2F;h2&gt;
&lt;p&gt;As this tutorial expects you to have some experience on NixOS and a production NixOS configuration used by a server, you may want to go through &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nixos.wiki&#x2F;wiki&#x2F;Nginx&quot;&gt;Nginx wiki page&lt;&#x2F;a&gt; at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;nixos.wiki&quot;&gt;nixos.wiki&lt;&#x2F;a&gt; to get more idea on hosting websites on NixOS via Nginx.&lt;&#x2F;p&gt;
&lt;p&gt;First, we need to add our static website repository to the inputs section of our working nixos configurations. Remember adding &lt;code&gt;flake-utils&lt;&#x2F;code&gt; to inputs? The process is pretty same, but we need to change link to the repo here:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  description&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;My NixOS configuration&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  inputs&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;    nixpkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;url&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;github:nixos&#x2F;nixpkgs&#x2F;nixos-25.05&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;    #&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; Yup, just like that&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;    our-website&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;url&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;github:someone&#x2F;ourweb&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  .&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Assuming you have a working NixOS machine with some nginx config in it, we want to tell nginx to host our static website under a certain domain name, so basic template for this would be like this &lt;strong&gt;(borrowed from nixos.wiki)&lt;&#x2F;strong&gt;:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;services&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;nginx&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;virtualHosts&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;myhost.org&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#F44747, #F44747);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  addSSL&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  enableACME&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  root&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&#x2F;var&#x2F;www&#x2F;myhost.org&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#F44747, #F44747);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;So, now we need to change domain name of our future website to something else, let’s say &lt;code&gt;myblog.com&lt;&#x2F;code&gt; and tell nix that &lt;code&gt;root&lt;&#x2F;code&gt; is packaged version of our website that looks something like this:&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#D4D4D4, #D4D4D4); background-color: light-dark(#1E1E1E, #1E1E1E);&quot;&gt;&lt;code data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt;#&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#6A9955, #6A9955);&quot;&gt; Assuming you have `pkgs` and `inputs` exposed in this part of configuration&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;services&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;nginx&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;virtualHosts&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;myblog.com&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#CE9178, #CE9178);&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#F44747, #F44747);&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  addSSL&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  enableACME&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt; true&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;  root&lt;&#x2F;span&gt;&lt;span&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt; inputs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;our-website&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;packages&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;${&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;pkgs&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;stdenv&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;hostPlatform&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;system&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#569CD6, #569CD6);&quot;&gt;}&lt;&#x2F;span&gt;&lt;span&gt;.&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#9CDCFE, #9CDCFE);&quot;&gt;default&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;span style=&quot;color: light-dark(#F44747, #F44747);&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;This will build our package and store contents at &lt;code&gt;&#x2F;nix&#x2F;store&#x2F;blablasomehashsum-ourweb-0.1.0&lt;&#x2F;code&gt; and then nix will point root for our &lt;code&gt;myblog.com&lt;&#x2F;code&gt; website to the very same location automatically.&lt;&#x2F;p&gt;
&lt;p&gt;Next, we apply the configuration, you may mention nix generating &lt;code&gt;acme-myblog.com.service&lt;&#x2F;code&gt; like services as nixos automatically handles all certification generation by itself and make sure everything works just as expected without having to touch anything. Upon completion, open your browser with &lt;code&gt;myblog.com&lt;&#x2F;code&gt; address and you’ll see your website.&lt;&#x2F;p&gt;
&lt;p&gt;I have my own working production at &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kolyma.uz&quot;&gt;kolyma.uz&lt;&#x2F;a&gt; if you want to check out.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;This tutorial also includes very basics of packaging on nix, so I can assure you that you got fundamentals after completing this tutorial. I’ll write more of these posts as soon as I’ll have more time. Writing a post is quite fun and not a problem for me, its just I have hard times translating every post to 2 other languages after finishing it which ends up taking waaaaay lotta time, not to mention re-reading it to fix typos later. If only I had someone to help with that, I could have published more posts.&lt;&#x2F;p&gt;
&lt;p&gt;With that being said, I wish you all good luck in your NixOS voyage and hopefully this guide will become beginning of your great packaging journey!&lt;&#x2F;p&gt;
</content>
        
    </entry>
</feed>
