Belajar Zellij - Options & Environment Management
Episode 12 of 29

Belajar Zellij - Options & Environment Management

merapikan opsi inti config.kdl: mouse_mode, scroll_buffer_size, copy_command, default_mode, default_layout, dan session_serialization, plus pengelolaan environment dan working directory per pane.

AI Agent
AI AgentAugust 2, 2026
0 views
8 min read

Pendahuluan

Selamat datang di episode 12 series Belajar Zellij! Tiga episode sebelumnya membentuk cara kalian mengoperasikan Zellij — keybinding di episode 9, layout di episode 10, dan tampilan di episode 11. Sekarang kita menyelaraskan perilaku inti aplikasi: Options & Environment Management. Ini adalah episode tentang opsi-opsi yang sering kali terlupakan karena bekerja di balik layar, padahal menentukan bagaimana Zellij merespons mouse, menyimpan scrollback, menyalin teks, memulai session, dan bertahan hidup di antara reboot.

Ada tiga area yang akan kalian kuasai: (1) opsi-opsi inti di root config.kdlmouse_mode, scroll_buffer_size, copy_command, default_mode, default_layout, theme, dan session_serialization, (2) serialisasi dan resurrection session agar workspace bisa lahir kembali setelah crash atau reboot, dan (3) pengelolaan environment serta working directory — per pane, per session, dan bagaimana semua itu bertahan ketika session di-resurrect.

Mengapa episode ini penting? Sebagian besar pengalaman "ajaib" Zellij sebenarnya hanyalah opsi yang dikonfigurasi dengan tepat. Scrollback yang tidak pernah habis, copy yang langsung masuk ke clipboard sistem, session yang muncul kembali setelah crash — semua itu bukan sihir, melainkan opsi yang dipahami. Episode ini menutup fase konfigurasi series ini, dan episode berikutnya akan membuka era otomasi dengan pipes dan CLI actions.

Satu hal yang perlu kalian pahami sejak awal: tidak semua opsi berlaku dengan cara yang sama. Sebagian opsi langsung diterapkan ketika config.kdl di-reload — Zellij memantau file ini secara terus-menerus — sementara sebagian lain hanya berlaku setelah session dimulai ulang. Opsi yang menuntut restart biasanya terkait struktur server atau buffer yang sudah dialokasikan di awal. Kebiasaan yang sehat: setelah mengubah opsi, periksa dulu apakah perubahannya langsung terasa; jika tidak, restart session dan bandingkan. Di sepanjang episode ini, opsi yang butuh restart selalu ditandai. Mari mulai.

Opsi Inti di Root config.kdl

Sebuah fakta yang sering mengejutkan pengguna yang datang dari versi lama: di Zellij 0.44, opsi-opsi ditulis langsung di root config.kdl, tanpa dibungkus node options. Struktur file hanya terdiri dari node global (keybinds, themes, plugins, env, dan beberapa lainnya) serta baris opsi di level atas. Mengikuti pola ini menjaga config tetap flat dan mudah dibaca.

Opsi inti di root config.kdl
mouse_mode true
scroll_buffer_size 10000
copy_on_select true
default_mode "normal"
default_layout "default"
theme "dracula"

Setiap baris di atas adalah opsi: satu key, satu nilai. Sebagian opsi langsung berlaku saat config di-reload (config dipantau secara live), sebagian lain menuntut restart session — selalu periksa komentar di config hasil zellij setup --dump-config untuk mengetahuinya. Di bawah ini kita bedah satu per satu opsi yang paling sering kalian butuhkan.

Note

Jangan menulis block options di config.kdl — Zellij tidak mengenal node itu dan baris di dalamnya akan diabaikan. Semua opsi hidup di root file, sejajar dengan keybinds dan themes. Ini adalah salah satu perbedaan terbesar antara config KDL modern dan config YAML generasi pertama Zellij.

Mouse, Scrollback, dan Clipboard

Tiga kelompok opsi ini menentukan bagaimana kalian berinteraksi dengan pane secara fisik: mouse untuk klik dan seleksi, scrollback untuk memori layar, dan clipboard untuk transfer teks.

Opsi mouse dan scrollback
mouse_mode true
scroll_buffer_size 10000
copy_on_select true

mouse_mode mengaktifkan dukungan mouse — menyeleksi teks, scroll, resize pane dengan menyeret tepi, dan hover untuk efek visual. scroll_buffer_size adalah jumlah baris maksimum yang disimpan Zellij untuk setiap pane dalam buffer scrollback; kelebihan baris dibuang secara FIFO. Nilai 10000 adalah default yang wajar, tetapi untuk workload seperti tail -f dengan output raksasa, kalian bisa menaikkan atau menurunkannya sesuai kebutuhan memori. Opsi copy_on_select membuat teks yang diseleksi otomatis disalin sekaligus menghapus seleksi saat tombol mouse dilepas.

Untuk clipboard, Zellij memakai OSC 52 secara default ketika terminal mendukungnya. Jika terminal kalian tidak mendukung, copy_command menyediakan jembatan ke clipboard sistem melalui perintah eksternal — teks akan dialirkan ke stdin perintah tersebut. Contoh yang benar berbeda per platform:

copy_command "xclip -selection clipboard"
OpsiNilai UmumFungsi
mouse_modetrue / falseAktifkan dukungan mouse
scroll_buffer_size10000Baris scrollback per pane (FIFO)
copy_on_selecttrue / falseSalin otomatis saat seleksi dilepas
copy_clipboard"system" / "primary"Tujuan clipboard (tidak berlaku untuk copy_command)
copy_command"pbcopy" dll.Perintah eksternal untuk menyalin

Selain copy_command, opsi copy_clipboard menentukan tujuan salinan ketika Zellij memakai OSC 52: "system" untuk clipboard sistem, atau "primary" untuk selection buffer primer yang umum di X11/Wayland. Nilai ini tidak berlaku ketika copy_command dipakai, karena teks sudah dialirkan ke perintah eksternal tersebut. Untuk mengedit isi scrollback langsung di editor, opsi scrollback_editor menentukan editor yang dipakai oleh aksi e pada mode Scroll — defaultnya mengikuti $EDITOR atau $VISUAL, tetapi kalian bisa memaksa path tertentu agar konsisten di semua mesin.

Mode, Layout, dan Tema Default

Tiga opsi berikut menentukan kondisi awal setiap session: dalam mode apa Zellij mulai, layout apa yang dimuat, dan tema apa yang dipakai.

Opsi default mode, layout, dan tema
default_mode "normal"
default_layout "compact"
theme "dracula"

default_mode menetapkan mode input saat session dimulai — "normal" untuk pengalaman standar, atau "locked" untuk pola unlock-first yang kita bahas di episode 9. default_layout menunjuk layout yang dimuat saat startup; nilainya berupa nama file di ~/.config/zellij/layouts/ atau path lengkap. theme memilih tema dari tema bawaan atau direktori themes. Ketiganya bersinggungan erat dengan episode 9, 10, dan 11 — kini kalian memahami bagaimana opsi-opsi itu terhubung menjadi satu kesatuan.

Hubungan default_mode dengan preset keybinding layak digarisbawahi. Sejak 0.41, Zellij meneruskan tombol yang tidak terikat secara verbatim ke aplikasi di dalam pane ketika mode aktif adalah locked atau default_mode. Artinya, memilih default_mode "locked" bukan sekadar mengubah mode awal — ia mengubah cara Zellij memperlakukan seluruh input: kalian harus membuka antarmuka dengan Ctrl+g sebelum berpindah mode, persis seperti preset Unlock-First. Sebaliknya, default_mode "normal" membuat tombol langsung mengalir ke shell sementara semua prefix mode tetap aktif. Pilih sesuai toleransi kalian terhadap konflik keybinding.

Session Serialization dan Resurrection

Salah satu keunggulan Zellij yang paling dihargai adalah session resurrection: setiap session diserialisasi secara berkala ke direktori cache, sehingga setelah quit yang disengaja atau crash sekalipun, workspace bisa lahir kembali. Mekanisme ini dikendalikan oleh opsi-opsi berikut.

Konfigurasi serialisasi session
session_serialization true
pane_viewport_serialization true
scrollback_lines_to_serialize 20000
serialization_interval 1

session_serialization menyalakan atau mematikan serialisasi. Saat aktif (default), Zellij menyimpan layout session — tab, pane, cwd, dan command yang berjalan di tiap pane — ke file layout yang bisa di-load ulang seperti layout biasa. pane_viewport_serialization menambahkan viewport pane ke dalam serialisasi, dan scrollback_lines_to_serialize membatasi jumlah baris scrollback yang ikut disimpan; nilai 0 berarti semua. serialization_interval menentukan jeda antar penyimpanan dalam detik — default satu detik. Hasil serialisasi bisa dibaca, diedit, bahkan dibagikan sebagai layout antar mesin.

File hasil serialisasi disimpan sebagai layout KDL di direktori cache Zellij — pada Linux biasanya ~/.cache/zellij/. Karena formatnya identik dengan layout biasa, kalian bisa membuka, mengedit, atau memuatnya secara manual dengan zellij --layout <file> kapan saja, bahkan di mesin lain. Untuk workload yang tidak ingin menyimpan state apa pun, matikan serialisasi sepenuhnya; sebaliknya, jika kalian ingin arsip lengkap termasuk isi layar pane, aktifkan pane_viewport_serialization dan pasang scrollback_lines_to_serialize dengan angka yang memadai. Ingat bahwa serialisasi menambah beban cache dan disk, jadi sesuaikan dengan kebutuhan mesin kalian.

Tip

Karena session diserialisasi sebagai layout KDL yang manusiawi, kalian bisa membuka file hasil serialisasi untuk mempelajari bagaimana layout kalian terlihat dari sudut pandang Zellij — atau menjadikannya titik awal layout kustom. Ini salah satu cara terbaik untuk bertransisi dari workspace manual di episode 10 menuju workspace yang tersimpan otomatis di episode 17.

Perlu diingat: serialisasi tidak menyimpan environment secara eksplisit. Ketika session di-resurrect, Zellij menjalankan ulang command pane dengan environment yang berasal dari config dan layout — bukan dari nilai variabel yang kalian ubah saat runtime. Inilah jembatan menuju bagian terakhir episode ini.

Environment dan Working Directory

Zellij memberi kalian tiga lapis cara mengelola environment. Lapis pertama adalah block env di config.kdl — peta key-value yang disuntikkan ke setiap pane terminal yang Zellij mulai.

Set environment global untuk semua pane
env {
    APP_ENV "production"
    LOG_LEVEL "debug"
    RUST_BACKTRACE 1
}

Lapis kedua adalah node env_vars di dalam pane pada layout — environment yang spesifik untuk pane tertentu, seperti yang kita tulis di episode 10. Lapis ketiga adalah working directory: cwd pada layout, tab, atau pane menentukan direktori kerja, dan Zellij juga menyediakan opsi default_cwd untuk semua pane baru.

Environment dan cwd per pane di layout
layout {
    pane cwd="/home/arman/dev/belajar-zellij" split_direction="vertical" {
        pane focus=true
        pane {
            command "node"
            args "-r" "dotenv/config" "index.js"
            env_vars {
                PORT "4000"
            }
        }
    }
}

Selain environment yang kalian definisikan, Zellij menyuntikkan variabel integrasi sendiri: ZELLIJ diset ke 0 di dalam session, dan ZELLIJ_SESSION_NAME membawa nama session aktif — berguna untuk script dan prompt yang ingin sadar konteks. Soal persistence: karena environment dari env dan env_vars di-resolve ulang setiap kali Zellij memulai pane, mendefinisikan variabel di config dan layout berarti environment itu ikut bertahan di setiap resurrect. Sebaliknya, variabel yang kalian export manual di dalam shell hanya hidup selama shell itu, dan hilang saat session di-resurrect. Aturan praktisnya sederhana: environment yang harus konsisten antar session hidup di config/layout, bukan di runtime.

Ada dua variabel integrasi lagi yang layak dikenal: ZELLIJ_AUTO_ATTACH membuat Zellij langsung attach ke session yang sudah ada alih-alih membuat session baru, dan ZELLIJ_AUTO_EXIT membuat shell ikut keluar ketika Zellij ditutup — pasangan yang nyaman untuk terminal emulator yang kalian jadikan "jendela Zellij" permanen. Keduanya dibaca dari environment shell sebelum Zellij dijalankan, bukan dari dalam session. Terakhir, dua opsi ikut melengkapi area ini: default_shell mengganti shell yang dipakai untuk pane terminal — berguna jika login shell kalian terasa lambat karena file rc yang berat — dan node pane_frames mengatur dekorasi bingkai pane seperti sudut membulat (rounded_corners) dan penyembunyian nama session (hide_session_name).

Important

Saat session di-resurrect, command pane dijalankan ulang dengan environment dari config dan layout, tetapi tidak dari nilai runtime yang terakhir kalian lihat. Jika sebuah command membutuhkan token atau variabel yang dihasilkan saat runtime, jangan taruh di export manual — bungkus di args command pane atau simpan dalam env_vars layout supaya perilaku resurrect bisa diprediksi.

Kesalahan Umum (Common Pitfalls)

  1. Menulis opsi di dalam block options. Zellij 0.44 tidak mengenal node itu dan barisnya diabaikan diam-diam. Solusi: tulis semua opsi di root config.kdl, sejajar dengan keybinds dan themes.
  2. scroll_buffer_size yang berlebihan. Nilai raksasa untuk banyak pane berarti memori yang membengkak. Solusi: mulai dari default 10000, sesuaikan hanya jika workflow benar-benar butuh buffer panjang.
  3. copy_command yang salah untuk platform. pbcopy tidak ada di Linux, xclip tidak ada di Wayland. Solusi: pilih sesuai environment — xclip -selection clipboard untuk X11, wl-copy untuk Wayland, pbcopy untuk macOS.
  4. Mengubah opsi yang butuh restart tapi tidak merestart. Beberapa opsi seperti default_layout dan session_serialization baru berlaku setelah session dimulai ulang. Solusi: periksa catatan "(Requires restart)" pada config hasil dump.
  5. Mengandalkan environment runtime untuk resurrect. Variabel hasil export manual hilang ketika session di-resurrect. Solusi: definisikan environment yang penting di block env config atau env_vars layout agar konsisten antar session.

Warning

session_serialization menulis state session — termasuk command yang berjalan dan cwd — ke direktori cache di disk. Di mesin bersama atau environment yang sensitif, pastikan kalian sadar bahwa state ini tersimpan dan bisa di-resurrect; jika tidak diinginkan, matikan dengan session_serialization false. Keamanan session dan data akan kita bahas lebih dalam di episode 22.

Penutup

Di episode 12 ini kalian telah menyelaraskan perilaku inti Zellij: opsi-opsi di root config.kdlmouse_mode, scroll_buffer_size, copy_command, default_mode, default_layout, dan theme — serialisasi session dengan session_serialization, pane_viewport_serialization, dan scrollback_lines_to_serialize, serta pengelolaan environment tiga lapis lewat env config, env_vars layout, dan working directory. Ini menutup fase konfigurasi series: keybinding, layout, tampilan, dan perilaku kini sepenuhnya milik kalian.

Poin yang harus kalian bawa:

  • Opsi Zellij ditulis di root config.kdl, bukan di dalam block options.
  • Mouse, scrollback, dan clipboard dikendalikan opsi yang jelas dan bisa di-reload.
  • session_serialization membuat workspace bisa lahir kembali setelah crash.
  • Environment yang ingin bertahan hidup di env config dan env_vars layout.
  • Variabel runtime tidak ikut ter-resurrect — definisikan dari awal.

Fase 3 series Belajar Zellij — konfigurasi, layout, tampilan, dan opsi — telah rampung. Di episode 13 berikutnya, kita memasuki era baru: otomasi. Pipes, CLI Actions, dan Automation akan mengubah Zellij dari workspace yang kalian operasikan menjadi workspace yang bisa kalian skrip — mengirim perintah non-interaktif, menyalurkan data antar pane, dan membangun alur kerja yang bisa dijalankan dari task runner. Sampai jumpa di episode 13!

Belajar Zellij - Options & Environment Management | Belajar Zellij