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
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
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
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
Penjelasan setiap perintah:
| Perintah | Fungsi |
|---|---|
mklabel 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
📝 Pesan
You may need to update /etc/fstabsetelah setiap perintah adalah normal, bukan error.
Verifikasi hasil partisi:
lsblk
Harusnya muncul sda1 dan sda2 di bawah sda.

Kenapa GPT, bukan MBR? Karena GPT (GUID Partition Table) adalah pengganti MBR (Master Boot Record) dan berikut adalah perbedaannya: Karena 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 systemKenapa parted dengan GPT + EFI?
Kenapa parted dengan Skema GPT + EFI? Karena parted lebih straightforward untuk ditulis sebagai langkah-langkah sequential.
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 disk
4. Format Partition
Jalankan perintah berikut:
mkfs.ext4 -L nixos /dev/sda1
mkfs.fat -F 32 -n boot /dev/sda2
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
6. Generate Nix Configuration
nixos-generate-config --root /mnt
Perintah ini menghasilkan dua file:
/mnt/etc/nixos/
├── configuration.nix # konfigurasi utama
└── hardware-configuration.nix # auto-detected hardware
7. Edit Configuration
Ubah konfigurasi pada /mnt/etc/nixos/configuration.nix, kita bisa menggunakan nano atau vim
vim /mnt/etc/nixos/configuration.nix
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;
# Aktifkan flakes (persiapan post-install)
nix.settings.experimental-features = [ "nix-command" "flakes" ];
system.stateVersion = "25.11"; # sesuaikan dengan versi NixOS yang diinstall
}
8. Install NixOS
nixos-install
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
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)
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
Tambahkan baris ini:
...
system.stateVersion = "25.11";
# Enable flakes
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
Lalu apply sebagai default boot
nixos-rebuild switch
Setelah flakes aktif, kita bisa memindahkan konfigurasi NixOS dari root ke home dengan cara berikut:
cp -r /etc/nixos ~/
mv nixos nix
cd nix
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 "johndoe@example.com" # gunakan emailmu
git config --global user.email "johndoe" # gunakan user gitmu
Kamu juga bisa setup remote origin dan dipush ke githubmu
3. Setup Flake
Tambahkan file flake.nix
touch flake.nix
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
];
};
};
}
Stage flake.nix dengan cara git add flake.nix atau git add ., kemudian verify konfigurasi dengan cara
nix flake check
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
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
NixOS Rollback
Disinilah keungglan nix, kita bisa melakukan rollback ke versi sebelumnya dengan cara
sudo nixos-rebuild --rollback switch
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
];
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
Perintah ini memiliki sytax seperti ini:
sudo nixos-rebuild switch --flake {path_flake}#{hostname}
6. Bonus: install lazyvim
git clone https://github.com/LazyVim/starter ~/.config/nvim
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";
};
};
⚠️ 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 vboxuser@127.0.0.1
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";
}
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;
}
];
};
};
}
3. Rebuild
Rebuild NixOS system.
sudo nixos-rebuild switch --flake ~/nix#nixos-server
source ~/.bashrc # reload bash untuk agar bisa rebuild dengan alias
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









Top comments (0)