<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dimas Rangga</title>
    <description>The latest articles on DEV Community by Dimas Rangga (@derangga).</description>
    <link>https://dev.to/derangga</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F527413%2Fa75dd1b6-3fc7-4982-aecc-a648ca2c1033.jpg</url>
      <title>DEV Community: Dimas Rangga</title>
      <link>https://dev.to/derangga</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/derangga"/>
    <language>en</language>
    <item>
      <title>Nix Series: Introduction</title>
      <dc:creator>Dimas Rangga</dc:creator>
      <pubDate>Tue, 02 Jun 2026 08:34:53 +0000</pubDate>
      <link>https://dev.to/derangga/nix-series-introduction-5cba</link>
      <guid>https://dev.to/derangga/nix-series-introduction-5cba</guid>
      <description>&lt;p&gt;Pada series ini aku akan membahas apa itu Nix, NixOS, dan bagaimana menggunakan NixOS di server. Nix punya cara berpikir yang cukup berbeda dari package manager pada umumnya, jadi kita mulai dari dasarnya dulu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sedikit Sejarah Nix
&lt;/h2&gt;

&lt;p&gt;Nix dikenalkan oleh &lt;strong&gt;Eelco Dolstra&lt;/strong&gt;, seorang peneliti asal Belanda yang mana ia frustasi dengan cara kerja package manager yang tidak bisa menjamin konsistensi software environment. Analogi permasalahan yang coba diselesaikan oleh Dolstra sederhananya seperti ini, bayangkan kamu sedang mengerjakan sebuah project di komputermu dan semuanya berjalan lancar. Lalu kamu pindah ke komputer lain, menginstal ulang semua dependency yang kamu butuhkan dan tiba-tiba terjadi error. Error bermunculan saat install dependency, padahal kamu sudah melakukan hal yang sama persis di komputer sebelumnya. Masalah ini sering terjadi dengan sebutan "&lt;em&gt;works on my machine&lt;/em&gt;". &lt;/p&gt;

&lt;p&gt;Dolstra mengerjakan Nix sebagai bagian dari disertasi PhD-nya yang dipublikasikan pada &lt;strong&gt;2006&lt;/strong&gt;, berjudul &lt;em&gt;"The Purely Functional Software Deployment Model"&lt;/em&gt;. Tesis ini membahas tentang bagaimana cara deploy sebuah software yang &lt;em&gt;reliable&lt;/em&gt;, di mana input yang sama selalu menghasilkan output yang sama. Nix pertama kali dirilis pada &lt;strong&gt;2003&lt;/strong&gt; sebagai bagian dari riset tersebut, dan kini telah berkembang menjadi ekosistem dengan lebih dari 100.000 package.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa itu nix
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtpcgrqlz1rs98134poa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frtpcgrqlz1rs98134poa.png" alt="Source: https://www.dgt.is/blog/2025-01-10-nix-death-by-a-thousand-cuts" width="800" height="735"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Saat pertama kali mendengar nix beberapa orang pasti bingung karena nix bisa merujuk ke beberapa konteks sekaligus, nah pada artikel ini kita akan berkenalan dengan nix.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sebagai Bahasa Pemrograman: Nix adalah &lt;em&gt;functional programming language&lt;/em&gt; yang digunakan untuk menulis konfigurasi secara deklaratif. Gimana maksudnya? Sederhananya seperti ini, jika kita menggunakan OS linux seperti ubuntu, debian, arch, dll., untuk installasi sebuah package kita harus menjalankan perintah &lt;code&gt;apt-get install&lt;/code&gt; atau &lt;code&gt;pacman&lt;/code&gt; dan disetiap package yang sudah kita install, lokasi file konfigurasi berada ditempat yang berbeda-beda. Dengan menggunakan nix kita tidak perlu melakukan installasi dan konfigurasi sebuah package secara imperative, kita hanya perlu mendeklarasikan package dan konfigurasi yang kita butuhkan lalu di evaluasi.&lt;/li&gt;
&lt;li&gt;Sebagai Package Manager: Nix adalah &lt;em&gt;package manager&lt;/em&gt; yang mengevaluasi seluruh konfigurasi pada file &lt;code&gt;.nix&lt;/code&gt;. Berbeda dengan package manager lainnya seperti &lt;code&gt;apt&lt;/code&gt; atau &lt;code&gt;pacman&lt;/code&gt;. Nix menyimpan semua &lt;em&gt;package&lt;/em&gt; secara &lt;em&gt;isolate&lt;/em&gt; di &lt;code&gt;/nix/store&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sebagai OS: NixOS adalah linux distribution yang menggunakan nix sebagai package manager yang dikelola secara deklaratif, seluruh konfigurasi sistem pun ditulis dalam nix language, mulai dari networking, user, service, sampai bootloader.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sekarang kita sudah tahu bahwa "Nix" bukan satu hal: ia adalah bahasa, package manager, sekaligus OS. Untuk memahami kenapa tiga hal ini bisa menyatu, kita perlu melihat bagaimana Nix bekerja di balik layar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bagaimana Nix bekerja
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Masalah dengan package manager
&lt;/h3&gt;

&lt;p&gt;Ketika kamu menginstal software dengan &lt;code&gt;apt install&lt;/code&gt; atau &lt;code&gt;brew install&lt;/code&gt;, biasanya file-file program ini ditempatkan di lokasi standar seperti &lt;code&gt;/usr/lib/&lt;/code&gt; atau &lt;code&gt;/usr/bin/&lt;/code&gt;. Ini terlihat tertata dengan rapi, tapi dapat menimbulkan masalah dikemudian hari. Contoh masalah yang bisa saja terjadi adalah &lt;em&gt;dependency hell&lt;/em&gt;, sebuah situasi dimana dua aplikasi butuh versi library yang berbeda tapi tidak bisa berjalan secara bersamaan&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Situasi bermasalah: "Dependency Hell"

Aplikasi A  ──────────────►  butuh Python 3.8
                                    │
                             FILE DI /usr/lib/python3.8/
                                    │
Aplikasi B  ──────────────►  butuh Python 3.11
                                    │
                             ⚠️  KONFLIK!
                             Tidak bisa dua versi
                             di tempat yang sama!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Solusi Nix: Storage Khusus di &lt;code&gt;/nix/store&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Nix mengatasi masalah ini dengan pendekatan yang berbeda. Setiap package disimpan di direktori khusus: &lt;code&gt;/nix/store&lt;/code&gt;. Yang membuatnya unik adalah setiap package memiliki &lt;strong&gt;nama folder yang berisi hash&lt;/strong&gt;, semacam &lt;em&gt;identifier&lt;/em&gt; unik berdasarkan isi package itu sendiri.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;/nix/store/
│
├── 9xgd3k2lmn7pqrs123abc456def7890z-firefox-120.0/  ← Firefox versi 120
│   ├── bin/firefox
│   └── lib/...
│
├── 7hqw8p9rst456mnop789qrs012tuv3456-firefox-119.0/ ← Firefox versi 119
│   ├── bin/firefox                         (bisa hidup berdampingan!)
│   └── lib/...
│
├── 2abc4d5efg789wxyz012345abc678def90-python-3.8.18/ ← Python 3.8
│   └── lib/...
│
└── 5jkl6m7nop012ghi345jkl678mno9012p-python-3.11.6/ ← Python 3.11
    └── lib/...                             (keduanya ada sekaligus!)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dua versi Python, dua versi Firefox; semuanya bisa diinstall dan digunakan tanpa konflik, karena masing-masing punya &lt;em&gt;identifier&lt;/em&gt; yang unik.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sistem Hash: Unique Signature Build
&lt;/h3&gt;

&lt;p&gt;Hash sebagai &lt;em&gt;unique identifier&lt;/em&gt; (deretan 32 karakter seperti &lt;code&gt;9xgd3k2lmn7pqrs123abc456def7890z&lt;/code&gt;) ini dihitung dari &lt;strong&gt;seluruh definisi&lt;/strong&gt; pembuatan package mulai dari: source code, dependency, compiler yang digunakan, bahkan environment variable yang dipakai saat build. Jika ada satu hal yang berbeda maka hashnya akan berbeda juga.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────┐
│            CARA NIX MEMBERI NAMA SEBUAH PACKAGE             │
│                                                             │
│  Input:                                                     │
│  ┌─────────────────────────────────┐                        │
│  │ • Source code Firefox 120.0     │                        │
│  │ • Versi GCC yang dipakai        │    ──► HASH ──         │
│  │ • Semua library dependency-nya  │   9xgd3k2l...          │
│  │ • Versi library-library itu     │   (32 karakter)        │
│  └─────────────────────────────────┘                        │
│                                                             │
│  Hasilnya:                                                  │
│  /nix/store/9xgd3k2lmn7pqrs123abc456def7890z-firefox-120.0/ │
│                                                             │
│  Ubah SATU hal kecil → hash BERBEDA →                       │
│  folder BERBEDA → tidak akan pernah bentrok!                │
└─────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ini disebut &lt;strong&gt;content-addressed storage&lt;/strong&gt;. Jika apapun berubah dari inputs → hashnya berbeda → path di store berbeda → package yang berbeda&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Karena hash inilah yang membuat nix menjamin reproducibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reproducible Builds: Kunci Utama Nix
&lt;/h3&gt;

&lt;p&gt;Inilah keunggulan terbesar Nix: &lt;strong&gt;reproducibility&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Karena setiap package dibuild dari definisi yang &lt;em&gt;deterministic&lt;/em&gt;, siapapun yang menjalankan build yang sama akan mendapat hasil yang identik, di komputer mana pun.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Tanpa Nix:
┌──────────┐         ┌──────────┐         ┌──────────┐
│ Laptop A │         │ Laptop B │         │  Server  │
│ Python   │         │ Python   │         │ Python   │
│ 3.11.2   │  ≠ ≠ ≠  │ 3.11.6   │  ≠ ≠ ≠  │ 3.11.8   │
│ pip 22.x │         │ pip 23.x │         │ pip 24.x │
│ numpy    │         │ numpy    │         │ numpy    │
│ 1.24.0   │         │ 1.25.1   │         │ 1.26.0   │
└──────────┘         └──────────┘         └──────────┘
"Works on my machine!" 😩

─────────────────────────────────────────────────────

Dengan Nix:
┌──────────┐         ┌──────────┐         ┌──────────┐
│ Laptop A │         │ Laptop B │         │  Server  │
│ Python   │         │ Python   │         │ Python   │
│ 3.11.6   │  = = =  │ 3.11.6   │  = = =  │ 3.11.6   │
│ numpy    │         │ numpy    │         │ numpy    │
│ 1.25.1   │         │ 1.25.1   │         │ 1.25.1   │
└──────────┘         └──────────┘         └──────────┘
Works perfectly! ✅
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Binary vs Source: Bagaimana Nix Memutuskan?
&lt;/h3&gt;

&lt;p&gt;Saat kamu menggunakan nix dan melakukan installasi sebuah package, kamu bisa melihat ada proses copy atau build from source pada package tersebut. Nix tidak selalu melakukan build dari source dan nix memiliki mekanisme yang disebut substituters (atau binary cache).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Nix evaluate expression → dapat hash/
└── Nix lookup ke binary cache: "Ada /nix/store/&lt;span class="nt"&gt;&amp;lt;hash&amp;gt;&lt;/span&gt;-nodejs-20.11.0 ?"/
    ├── Ada → Download binary langsung (substitute)
    └── Tidak ada → Build dari source secara lokal
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default binary cache untuk NixOS/nixpkgs adalah &lt;strong&gt;&lt;code&gt;cache.nixos.org&lt;/code&gt;&lt;/strong&gt; yang dimanage oleh Hydra (Nix's CI system). Hydra secara otomatis build semua package di &lt;code&gt;nixpkgs&lt;/code&gt; dan menyimpan hasilnya ke cache, sehingga mayoritas package populer sudah tersedia sebagai binary dan tidak perlu di-build ulang dari source.&lt;/p&gt;

&lt;p&gt;Perlu dicatat: jika kamu menggunakan &lt;code&gt;nixpkgs-unstable&lt;/code&gt; (channel yang lebih baru), ada kemungkinan binary cache untuk package tertentu belum tersedia karena Hydra belum selesai build-nya, sehingga Nix akan fall back ke build dari source secara lokal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alasan Nix Lebih Unggul dari Package Manager Lain
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tidak ada lagi “Dependency Hell”&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Seperti yang sudah dijelaskan diatas, Nix memungkinkan berbagai versi package terinstall secara bersamaan. Dengan &lt;code&gt;apt&lt;/code&gt; atau &lt;code&gt;brew&lt;/code&gt;, kamu tidak bisa melakukan installasi secara native untuk dua package dengan versi yang berbeda.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Bisa Rollback sistem&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Saat melakukan upgrade sistem, Nix tidak langsung menggantikan package yang sudah terinstall. Sebaliknya, Nix membangun &lt;strong&gt;generation baru&lt;/strong&gt; yang berisi versi package yang sudah diperbarui, sementara generation lama tetap utuh di sistem.&lt;/p&gt;

&lt;p&gt;Setiap kali kamu menjalankan perintah berikut, Nix secara otomatis membuat generation baru:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# NixOS&lt;/span&gt;
sudo nixos-rebuild switch

&lt;span class="gh"&gt;# Nix Darwin&lt;/span&gt;
sudo darwin-rebuild switch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Konsep generation inilah yang membuat Nix aman untuk diupgrade. Jika sesuatu berjalan tidak semestinya setelah upgrade, kamu bisa rollback ke generation sebelumnya tanpa perlu reinstall atau konfigurasi ulang apapun. Cukup dengan satu command atau memilih generation dari boot menu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Rollback ke generation sebelumnya&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nixos-rebuild switch &lt;span class="nt"&gt;--rollback&lt;/span&gt;

&lt;span class="c"&gt;# Atau pilih generation spesifik dari daftar&lt;/span&gt;
nix-env &lt;span class="nt"&gt;--list-generations&lt;/span&gt;
nix-env &lt;span class="nt"&gt;--switch-generation&lt;/span&gt; 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Berikut ilustrasinya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Riwayat "generasi" sistemmu:

  gen 1          gen 2          gen 3 (sekarang)
┌────────┐     ┌────────┐     ┌────────┐
│Firefox │     │Firefox │     │Firefox │
│ 118    │     │ 119    │     │ 120    │
│Python  │     │Python  │     │Python  │
│ 3.10   │     │ 3.10   │     │ 3.11   │
└────────┘     └────────┘     └────────┘
                   ▲                │
                   │                │ ada yang salah?
                   └────────────────┘
          rollback → kembali ke gen 2
          atau pilih gen 1 dari boot menu!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Development Environment yang Terisolasi
&lt;/h3&gt;

&lt;p&gt;Nix memiliki fitur &lt;code&gt;nix develop&lt;/code&gt; dan &lt;code&gt;nix shell&lt;/code&gt; yang memungkinkan kita untuk membuat development environment yang terisolasi per-project, mirip &lt;code&gt;virtualenv&lt;/code&gt; di python atau &lt;code&gt;node_modules&lt;/code&gt; di Node.js.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Project A butuh Node 18 + PostgreSQL 14:
$ cd project-a &amp;amp;&amp;amp; nix develop
→ Masuk environment: Node 18, PostgreSQL 14 ✓

Project B butuh Node 20 + PostgreSQL 16:
$ cd project-b &amp;amp;&amp;amp; nix develop
→ Masuk environment: Node 20, PostgreSQL 16 ✓

Keduanya terisolasi, tidak saling mengganggu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Environment ini didefinisikan dalam file &lt;code&gt;flake.nix&lt;/code&gt; (cara modern) atau &lt;code&gt;shell.nix&lt;/code&gt; (cara lama). Dengan &lt;strong&gt;Nix Flakes&lt;/strong&gt; (fitur yang kini menjadi standar de facto), kamu bisa mendefinisikan seluruh dependency project dalam satu file &lt;code&gt;flake.nix&lt;/code&gt; yang ter-lock (mirip &lt;code&gt;package-lock.json&lt;/code&gt; di Node.js), sehingga siapapun yang clone project tersebut akan mendapat environment yang sama persis.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nix"&gt;&lt;code&gt;&lt;span class="c"&gt;# Contoh flake.nix sederhana&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nv"&gt;inputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;nixpkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"github:NixOS/nixpkgs/nixos-24.05"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nv"&gt;flake-utils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"github:numtide/flake-utils"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="nv"&gt;outputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;nixpkgs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;flake-utils&lt;/span&gt; &lt;span class="p"&gt;}:&lt;/span&gt;
    &lt;span class="nv"&gt;flake-utils&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;eachDefaultSystem&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;system&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;nixpkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;legacyPackages&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;system&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt; &lt;span class="kn"&gt;in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;devShells&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;default&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;mkShell&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nv"&gt;packages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nv"&gt;pkgs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;nodejs_20&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="p"&gt;};&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tidak Mengotori Sistem
&lt;/h3&gt;

&lt;p&gt;Berbeda dengan package manager konvensional, Nix menyimpan setiap package di lokasi terisolasi di bawah &lt;code&gt;/nix/store&lt;/code&gt;. Tidak ada file yang tersebar ke berbagai direktori sistem seperti &lt;code&gt;/usr/lib&lt;/code&gt; atau &lt;code&gt;/etc&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Dengan struktur penyimpanan yang terisolasi seperti ini, Nix tahu persis mana yang masih dibutuhkan dan mana yang sudah tidak. Jadi saat kamu menjalankan &lt;code&gt;nix-collect-garbage&lt;/code&gt;, hanya package yang benar-benar tidak dibutuhkan oleh siapapun yang akan dihapus. Tidak ada file sisa (&lt;em&gt;leftover&lt;/em&gt;) yang tertinggal di sudut-sudut sistem, seperti yang sering terjadi setelah &lt;code&gt;apt remove&lt;/code&gt; di Ubuntu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Penutup
&lt;/h2&gt;

&lt;p&gt;Dependency hell sudah jadi masalah lama di dunia software, dan Nix adalah salah satu jawaban tepat untuk masalah tersebut. Lahir dari frustasi nyata seorang peneliti pada 2003, Nix kini telah berkembang menjadi ekosistem yang mencakup lebih dari 100.000 package, dengan komunitas yang aktif dan terus bertumbuh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Empat hal yang perlu diingat:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nix adalah bahasa&lt;/strong&gt; untuk mendeskripsikan software secara deklaratif.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nix adalah package manager&lt;/strong&gt; yang menyimpan setiap package secara terisolasi di &lt;code&gt;/nix/store&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reproducibility&lt;/strong&gt;: build yang sama menghasilkan output yang identik di mesin mana pun.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NixOS adalah OS&lt;/strong&gt; di mana seluruh konfigurasi sistem (dari networking hingga bootloader) ditulis dalam Nix language.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Learning curve Nix memang curam, dan bagian terberatnya bukan di syntax melainkan perubahan mental model dari imperatif ke deklaratif. Tapi kabar baiknya: begitu kamu "klik" dengan cara berpikirnya, kamu akan sulit kembali ke cara lama. Di artikel berikutnya, kita akan menginstall NixOS di VirtualBox sebagai langkah awal yang aman untuk bereksperimen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Referensi:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://nixos.org/guides/how-nix-works/" rel="noopener noreferrer"&gt;https://nixos.org/guides/how-nix-works/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/5D3nUU1OVx8?si=1PkrPetk5Kp8RBe8" rel="noopener noreferrer"&gt;https://youtu.be/5D3nUU1OVx8?si=1PkrPetk5Kp8RBe8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/9OMDnZWXjn4?si=Ql5E_gBe-D-lvrcy" rel="noopener noreferrer"&gt;https://youtu.be/9OMDnZWXjn4?si=Ql5E_gBe-D-lvrcy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nix</category>
      <category>linux</category>
    </item>
  </channel>
</rss>
