Pada artikel ini kita akan memulai berinteraksi dengan nix dengan cara melakukan instalasi NixOS dengan menggunakan VirtualBox. Sebelum memulai instalasi, pastikan kamu sudah membaca series introduction nix terlebih dahulu, agar tau apa itu nix.
Prerequisite
- Download NixOS iso di nixos official dan pilih Minimal ISO image, karena pada artikel ini akan menggunakan versi ISO tersebut
- Download VirtualBox dan install
Setup VirtualBox
- Buat virtual machine baru pada VirtualBox dengan pilih New
- Pilih NixOS yang sudah didownload pada ISO image
- VirtualBox sudah dibuat dengan disk minimal 20GB
- Start VM yang sudah kita buat
Installation Step
1. Boot Live Environment
Saat pertama booting akan ada 2 pilihan NixOS, pilih yang LTS

Tampilan setelah booting ISO NixOS

Setelah berhasil boot ke live environment, masuk sebagai root terlebih dahulu
sudo su
Enter fullscreen mode Exit fullscreen mode
Prompt akan berubah dari [nixos@nixos:~]$ menjadi [root@nixos:/home/nixos]#.
⚠️ Semua perintah partisi dan instalasi harus dijalankan sebagai root. Tanpa ini akan muncul error Permission denied.
2. Check Disk Information
lsblk
Enter fullscreen mode Exit fullscreen mode
Disk VirtualBox biasanya terdeteksi sebagai /dev/sda. Pastikan sebelum lanjut karena perintah berikutnya akan menghapus semua isi disk.
Pastikan outputnya seperti ini:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
sr0 11:0 1 1.6G 0 rom /iso
Enter fullscreen mode Exit fullscreen mode
3. Disk Partition
Kita pakai parted dengan skema GPT + EFI:
parted /dev/sda -- mklabel gpt
parted /dev/sda -- mkpart primary 512MB 100%
parted /dev/sda -- mkpart ESP fat32 1MB 512MB
parted /dev/sda -- set 2 esp on
Enter fullscreen mode Exit fullscreen mode
Penjelasan setiap perintah:
Perintah Fungsimklabel gpt
Membuat partition table baru bertipe GPT (standar modern, pengganti MBR)
mkpart primary 512MB 100%
Membuat partisi root / dari 512MB sampai akhir disk
mkpart ESP fat32 1MB 512MB
Membuat EFI System Partition dari 1MB sampai 512MB, format FAT32
set 2 esp on
Memberi flag esp pada partisi ke-2 agar UEFI firmware mengenalinya sebagai boot partition
Layout akhir:
/dev/sda
├── sda1 (512MB → 100%) = / → ext4, sistem NixOS
└── sda2 (1MB → 512MB) = /boot → FAT32, bootloader EFI
Enter fullscreen mode Exit fullscreen mode
📝 Pesan
You may need to update /etc/fstabsetelah setiap perintah adalah normal, bukan error.
Verifikasi hasil partisi:
lsblk
Enter fullscreen mode Exit fullscreen mode
Harusnya muncul sda1 dan sda2 di bawah sda.

Kenapa parted dengan Skema GPT + EFI? Karena
parted lebih straightforward untuk ditulis sebagai langkah-langkah sequential.
Kenapa GPT, bukan MBR? Karena GPT (GUID Partition Table) adalah pengganti MBR (Master Boot Record) dan berikut adalah perbedaannya:
MBR GPT Maks partisi 4 primary 128 partisi Maks ukuran disk 2TB 9.4ZB Pasangan firmware BIOS/Legacy UEFI Ketahanan Partition table hanya satu salinan Ada backup partition table di akhir diskKarena saat membuat VM baru secara default UEFI pada VirtualBox akan aktif dan skema GPT adalah pasangan naturalnya. UEFI secara teknis bisa booting dari MBR, tapi GPT adalah standar modern dan yang direkomendasikan untuk UEFI. Kamu bisa melihat pada settings dibagian system
4. Format Partition
Jalankan perintah berikut:
mkfs.ext4 -L nixos /dev/sda1
mkfs.fat -F 32 -n boot /dev/sda2
Enter fullscreen mode Exit fullscreen mode
Flag -L dan -n memberikan label pada partisi. Label ini yang dipakai saat mounting (by-label) agar lebih readable dibanding UUID.
5. Mount Partition
mount /dev/disk/by-label/nixos /mnt
mkdir -p /mnt/boot
mount -o umask=077 /dev/disk/by-label/boot /mnt/boot
Enter fullscreen mode Exit fullscreen mode
6. Generate Nix Configuration
nixos-generate-config --root /mnt
Enter fullscreen mode Exit fullscreen mode
Perintah ini menghasilkan dua file:
/mnt/etc/nixos/
├── configuration.nix # konfigurasi utama
└── hardware-configuration.nix # auto-detected hardware
Enter fullscreen mode Exit fullscreen mode
7. Edit Configuration
Ubah konfigurasi pada /mnt/etc/nixos/configuration.nix, kita bisa menggunakan nano atau vim
vim /mnt/etc/nixos/configuration.nix
Enter fullscreen mode Exit fullscreen mode
Untuk proses instalasi saat ini, kita hanya edit seminimal mungkin.
{ config, pkgs, ... }:
{
imports = [ ./hardware-configuration.nix ];
# Boot loader — gunakan systemd-boot untuk UEFI
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
# Networking
networking.hostName = "nixos-server";
networking.networkmanager.enable = true;
# Timezone
time.timeZone = "Asia/Jakarta";
# User
users.users.vboxuser = {
isNormalUser = true;
extraGroups = [ "wheel" ]; # wheel = akses sudo
initialPassword = "qwerty123";
};
# Package dasar
environment.systemPackages = with pkgs; [
curl
git
neovim
wget
];
# SSH — penting untuk server
services.openssh.enable = true;
system.stateVersion = "25.11"; # sesuaikan dengan versi NixOS yang diinstall
}
Enter fullscreen mode Exit fullscreen mode
8. Install NixOS
nixos-install
Enter fullscreen mode Exit fullscreen mode
Saat proses instalasi, NixOS akan memberikan prompt input password.
⚠️ Password yang muncul saat prompt instalasi adalah password untuk
rootsedangkan password yang sudah kita deklarasikan padaconfiguration.nixdibagianinitialPasswordadalah password untukvboxuser.
Setelah instalasi selesai, kita bisa melakukan reboot.
reboot
Enter fullscreen mode Exit fullscreen mode
9. Post Installation
Setelah proses reboot selesai, kamu bisa login dengan user vboxuser dengan password yang sudah diberikan pada initialPassword
❄ Nix Flakes ❄
Flakes adalah fitur di Nix yang mengubah cara kita mendefinisikan dan berbagi konfigurasi Nix. Sebelum Flakes ada, konfigurasi NixOS bergantung pada Nix channels. Ini semacam subscription ke versi nixpkgs tertentu yang disimpan di sistem. Permasalahannya adalah channels tidak di-lock per project, jadi dua orang yang menjalankan konfigurasi yang sama bisa mendapat hasil berbeda karena versi nixpkgs tidak identik.
Dengan Flakes, setiap konfigurasi punya file flake.nix sebagai entry point yang mendefinisikan inputs (dependency seperti nixpkgs dan home-manager) dan outputs (hasil build seperti NixOS configuration). Semua input di-lock di file flake.lock, mirip seperti package-lock.json di Node.js atau go.sum di Go, sehingga siapapun yang pakai konfigurasi yang sama akan mendapat hasil yang identik.
flake.nix → mendefinisikan dependency dan konfigurasi
flake.lock → mengunci versi semua dependency (auto-generated)
Enter fullscreen mode Exit fullscreen mode
Flakes juga membuat konfigurasi lebih portable dan tidak terikat ke /etc/nixos, bisa disimpan di mana saja termasuk di GitHub sebagai dotfiles.
ℹ️ Flakes masih berstatus “experimental” secara resmi, tapi sudah dipakai luas di komunitas Nix dan dianggap sebagai cara yang direkomendasikan untuk mengelola konfigurasi modern.
1. Enable Flakes
Aktifkan flakes dengan cara edit configuration.nix. Gunakan nano atau nvim untuk edit file.
nvim /etch/nixos/configuration.nix
Enter fullscreen mode Exit fullscreen mode
Tambahkan baris ini:
...
system.stateVersion = "25.11";
# Enable flakes
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
Enter fullscreen mode Exit fullscreen mode
Lalu apply sebagai default boot
nixos-rebuild switch
Enter fullscreen mode Exit fullscreen mode
Setelah flakes aktif, kita bisa memindahkan konfigurasi NixOS dari root ke home dengan cara berikut:
cp -r /etc/nixos ~/
mv nixos nix
cd nix
Enter fullscreen mode Exit fullscreen mode
Nah.. dengan ini kita tidak perlu membutuhkan root lagi untuk melakukan perubahan konfigurasi pada system NixOS kita.
2. Git Setup
Langkah selanjutnya adalah initialize git, karena nix flake hanya membaca file yang sudah ditambahkan pada git (git add).
git init
git config --global user.email "[email protected]" # gunakan emailmu
git config --global user.email "johndoe" # gunakan user gitmu
Enter fullscreen mode Exit fullscreen mode
Kamu juga bisa setup remote origin dan dipush ke githubmu
3. Setup Flake
Tambahkan file flake.nix
touch flake.nix
Enter fullscreen mode Exit fullscreen mode
Lalu deklarasikan minimum konfigurasi berikut
{
description = "NixOS Server Configuration";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
};
outputs =
{
self,
nixpkgs,
}:
{
# nixos-server adalah hostname
nixosConfigurations.nixos-server = nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
modules = [
./configuration.nix
];
};
};
}
Enter fullscreen mode Exit fullscreen mode
Stage flake.nix dengan cara git add flake.nix atau git add ., kemudian verify konfigurasi dengan cara
nix flake check
Enter fullscreen mode Exit fullscreen mode
Melakukan konfigurasi akan generate flake.lock
Setelah verify sukses, kita bisa rebuild dan apply sebagai default boot:
sudo nixos-rebuild switch --flake ~/nix#nixos-server
Enter fullscreen mode Exit fullscreen mode
Setiap kali kita melakukan nixos-rebuild, NixOS akan generate konfigurasi system baru kemudian apply as default dan kita bisa melihatnya dengan cara:
sudo nixos-rebuild list-generations
Enter fullscreen mode Exit fullscreen mode
NixOS RollbackDisinilah keungglan nix, kita bisa melakukan rollback ke versi sebelumnya dengan cara
sudo nixos-rebuild --rollback switch
Enter fullscreen mode Exit fullscreen mode
4. Add New Package
Untuk saat ini semua konfigurasi package yang kita install ada di configuration.nix, jadi kita butuh edit file ini dan menambahkan package yang dibutuhkan.
Pada artikel ini aku akan menggunakan lazyvim sebagai code editor
...
environment.systemPackages = with pkgs; [
curl
git
neovim
tree
wget
# untuk neovim
fnm # node version manager
gcc
nixd
nixfmt
];
Enter fullscreen mode Exit fullscreen mode
Perlu diingat, setiap kali melakukan penambahan package atau melakukan perubahan konfigurasi, kita butuh melakuakan rebuild dan apply sebagai default boot.
5. Nix Rebuild Command
Seperti yang kamu ketahui, untuk melakukan rebuild flake kita menjalankan perintah berikut:
sudo nixos-rebuild switch --flake ~/nix#nixos-server
Enter fullscreen mode Exit fullscreen mode
Perintah ini memiliki sytax seperti ini:
sudo nixos-rebuild switch --flake {path_flake}#{hostname}
Enter fullscreen mode Exit fullscreen mode
6. Bonus: install lazyvim
git clone https://github.com/LazyVim/starter ~/.config/nvim
Enter fullscreen mode Exit fullscreen mode
Enable SSH
Kita akan melakukan setup minimum ssh untuk VirtualBox ini agar dapat kita remote dari terminal laptop. Edit configuration.nix lalu jalankan perintah nixos-rebuild
services.openssh = {
enable = true;
ports = [
222
];
settings = {
PermitRootLogin = "no";
};
};
Enter fullscreen mode Exit fullscreen mode
⚠️ Konfigurasi ini hanya diperuntukkan praktik saja, untuk best practices konfigurasi ssh dapat dilihat pada NixOS Wiki
Agar dapat akses VirtualBox dari terminal laptop, kita membutuhkan port-forwarding. Lakukan konfigurasi port forwarding dengan cara
- Shutdown VM terlebih dahulu. Kamu bisa klik close bar pada VM dan pilih shutdown
- Pilih VMmu dan klik Settings
- Pilih Network -> port forwarding
- Tambahkan port VM: Host IP 127.0.0.1, Host Port 2222, Guest Port 222. Host port adalah target port laptop kita dan guest port adalah port dari ssh VM kita.
- Apply Settings dan nyalakan VM dan pilih latest generations
- Buka terminal pada laptopmu dan lakukan ssh ke VM
ssh -p 2222 [email protected]
Enter fullscreen mode Exit fullscreen mode
Home Manager
Home Manager adalah tool dari komunitas Nix yang memungkinkan kita mengelola konfigurasi user secara deklaratif, seperti yang NixOS lakukan untuk konfigurasi sistem. Tanpa Home Manager, konfigurasi seperti ~/.gitconfig, ~/.bashrc, atau ~/.config/nvim/init.lua ditulis manual dan tidak reproducible.
Dengan Home Manager, semua konfigurasi user dideklarasikan di home.nix dan bisa di-reproduce di mesin manapun hanya dengan satu perintah.
configuration.nix
home.nix
Scope
System-wide
Per user
Contoh
nginx, SSH, kernel
git config, shell aliases, dotfiles
Butuh sudo
✅
❌
Lokasi install
/run/current-system
~/.nix-profile
1. Add home.nix
home.nix
{ config, pkgs, ... }:
{
home.username = "vboxuser";
home.homeDirectory = "/home/vboxuser";
home.packages = with pkgs; [
ripgrep
fd
jq
];
programs = {
bash = {
enable = true;
shellAliases = {
rebuild = "sudo nixos-rebuild switch --flake ~/nix#nixos-server";
};
};
lazygit = {
enable = true;
enableBashIntegration = true;
};
};
home.stateVersion = "25.11";
}
Enter fullscreen mode Exit fullscreen mode
2. Update flake.nix
flake.nix
{
description = "NixOS Server Configuration";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
home-manager.url = "github:nix-community/home-manager/release-25.11";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
};
outputs =
{
self,
nixpkgs,
home-manager,
}:
{
nixosConfigurations.nixos-server = nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
modules = [
./configuration.nix
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.vboxuser = import ./home.nix;
}
];
};
};
}
Enter fullscreen mode Exit fullscreen mode
3. Rebuild
Rebuild NixOS system.
sudo nixos-rebuild switch --flake ~/nix#nixos-server
source ~/.bashrc # reload bash untuk agar bisa rebuild dengan alias
Enter fullscreen mode Exit fullscreen mode
Karena kita sudah menambahkan alias pada shellAliases di home.nix, maka untuk selanjutnya kita tidak perlu mengetik perintah nixos-rebuild yang panjang itu, kita hanya tinggal menjalankan perintah rebuild
Penutup
Bagaimana menurutmu setelah melewati proses yang cukup panjang untuk install dan konfigurasi NixOS, sangat menarik bukan?
Kita bisa menambahkan package dengan mudah, melakukan konfigurasi secara deklaratif, dan bisa rollback system jika tidak cocok dengan konfigurasinya.
Berikut adalah referensi yang sangat membantu untuk melakukan explorasi nix
- Nix Wiki
- Nix Store: adalah situs official untuk nix package
- Nix Home manager: situs untuk melihat konfigurasi package di home manager









답글 남기기