Di episode 26 ini kita menyiapkan setup production-ready: repo dotfiles yang ter-version control, script bootstrap lintas mesin, conditional config untuk Linux/macOS, serta checklist konfigurasi aman dan deterministic.

Di episode 25 sebelumnya kita membahas integrasi dengan editor & developer ecosystem — menghubungkan tmux dengan Neovim/VS Code, lazygit, dan session switcher fzf. Semua setup itu berharga, tetapi ada satu pertanyaan yang belum terjawab: bagaimana membawanya ke mesin lain? Setup yang hebat tidak ada artinya jika tidak bisa direproduksi — dan reproduksibilitas adalah definisi kerja dari "production-ready".
Ini adalah masalah yang dialami setiap engineer yang pindah mesin: laptop baru, workstation kantor, server baru, atau container CI. Tanpa persiapan, setiap pindahan berarti membangun kembali konfigurasi dari nol, mengulang kesalahan yang sama, dan kehilangan keybinding yang sudah nyaman. Konfigurasi yang tidak ter-version control adalah pengetahuan yang hilang setiap kali mesin berganti.
Pada episode ini kita akan membangun fondasi yang menyelesaikan semua itu: menyimpan ~/.tmux.conf dan plugin di repo dotfiles, script instalasi otomatis (bootstrap) yang siap jalan di mesin kosong, conditional config untuk menangani perbedaan Linux/macOS, lalu checklist production-ready — backup/restore session, konfigurasi aman dan deterministic, standarisasi workflow di tim, serta dokumentasi keybinding untuk onboarding.
~/.tmux.conf adalah aset yang sama berharganya dengan kode aplikasi — ia menyimpan jam-jam keputusan: keybinding yang disesuaikan, tema yang dipilih, plugin yang disaring. Perlakukan ia seperti kode:
Prinsip intinya sederhana: jangan pernah mengandalkan konfigurasi yang hanya hidup di satu mesin. File yang tidak pernah keluar dari mesin aslinya adalah file yang siap menghilang.
Dotfiles tidak harus satu file raksasa. Konfigurasi yang dipisah per bagian lebih mudah di-maintain dan di-review. Untuk tmux, pola conf.d yang disource berurutan sangat efektif: file 10-basics.conf dimuat lebih dulu, lalu 20-theme.conf, lalu 30-platform-*.conf — nama dengan angka memberikan urutan yang eksplisit dan deterministik.
Mesin baru seharusnya siap dalam hitungan menit: git clone repo, jalankan satu script, selesai. Script bootstrap melakukan tiga hal: membuat symlink dari repo ke ~, menginstal TPM beserta plugin, dan memverifikasi bahwa tmux memuat konfigurasi tanpa error. Jika salah satu langkah gagal, script berhenti — tidak ada setengah-setengah.
Satu konfigurasi yang sama untuk semua OS jarang berjalan mulus. Perbedaan yang paling umum: clipboard (di macOS, pbcopy/pbpaste; di Linux, xclip/xsel), dan kadang perbedaan pada default-terminal dan binding copy. Solusinya bukan dua file yang berbeda total, melainkan satu konfigurasi inti yang identik di semua mesin, plus satu file kecil khusus platform yang dimuat bersyarat.
if-shell memungkinkan tmux memuat konfigurasi yang berbeda berdasarkan kondisi eksternal — misalnya hasil uname -s:
~/.dotfiles/
├── .tmux.conf
├── .tmux/
│ ├── conf.d/
│ │ ├── 10-basics.conf
│ │ ├── 20-theme.conf
│ │ ├── 30-platform-macos.conf
│ │ └── 30-platform-linux.conf
│ └── plugins/
├── install.sh
├── bin/
│ └── tmux-cleanup.sh
└── README.mdBaca dari kiri ke kanan: repo menyimpan satu ~/.tmux.conf yang isinya konfigurasi inti; conf.d menampung bagian-bagian yang disource berurutan; if-shell memilih file platform yang tepat; dan file platform masing-masing hanya berisi perbedaan kecil — di contoh ini, perintah copy yang menulis ke clipboard sistem. Konfigurasi inti tetap satu, perbedaan diisolasi ke file kecil yang mudah di-review.
Warning
Uji konfigurasi di kedua platform sebelum menyimpannya. pbcopy tidak ada di Linux dan xclip tidak selalu ada di macOS. Pola yang benar: file platform hanya berisi perintah yang tersedia di platform itu, dan jika sebuah perintah bergantung pada paket eksternal (xclip), pastikan ia diinstal di bagian bootstrap mesin tersebut. Konfigurasi yang mengasumsikan satu OS adalah konfigurasi yang akan gagal di mesin lain.
Konfigurasi yang bisa direproduksi adalah awal; konfigurasi yang bisa diandalkan di production adalah tujuan. Berikut area yang harus kalian tutup.
Session tmux adalah state kerja kalian — dan state harus bisa diselamatkan. Dua plugin yang kita singgung di episode 12:
Keduanya dimasukkan lewat TPM seperti plugin lain. Yang sering dilupakan: uji restore-nya. Konfigurasi restore yang tidak pernah diuji adalah konfigurasi yang akan gagal di saat paling dibutuhkan — persis seperti backup database yang tidak pernah diuji restore-nya.
Deterministic berarti: mesin yang sama, langkah yang sama, hasil yang sama. Praktik yang mendukungnya:
10-, 20-, 30- pada conf.d menjamin urutan tanpa ambiguitas.~ dan $HOME agar konfigurasi portabel antar user dan mesin.renumber-windows on: window selalu bernomor berurutan, tidak bergantung pada urutan pembuatan — output script yang bergantung pada nomor window menjadi lebih stabil.Ketika tmux dipakai bersama di sebuah tim (misalnya untuk akses bersama ke server production, episode 17), standarisasi mengurangi kesalahan. Tetapkan satu konfigurasi sebagai acuan, review perubahan seperti review kode, dan simpan di repo tim (atau fork dari dotfiles pribadi). Perbedaan kecil antar anggota tidak masalah selama prefix, keybinding inti, dan pola session naming konsisten — karena itulah yang dipakai saat kolaborasi dan saat onboarding orang baru.
Keybinding yang tidak terdokumentasi adalah pengetahuan tersembunyi. Untuk tim, buatlah cheatsheet singkat di README repo dotfiles: tabel prefix, navigasi pane, window/session, copy mode, dan custom binding. Untuk diri sendiri, ada cara otomatis yang bagus — tmux sendiri bisa mencetak semua binding:
tmux list-keys > ~/.dotfiles/docs/tmux-keys.txttmux list-keys mencetak seluruh keybinding yang aktif. Simpan outputnya ke repo sebagai referensi yang selalu sinkron dengan konfigurasi — tidak pernah ketinggalan seperti dokumentasi manual.
Gunakan checklist berikut sebagai tolok ukur kesiapan setup kalian:
conf.d disource berurutan, urutan eksplisit dan deterministik.30-platform-*.conf dan teruji di kedua OS.tmux list-keys) untuk onboarding.tmux source-file tanpa error sebelum dipakai./home/arman/.tmux.conf di dalam config atau script membuat setup gagal di user lain. Solusi: gunakan ~ dan $HOME, dan jadikan repo path sebagai variabel di script.bind-key ... copy-pipe-and-cancel "pbcopy" langsung di ~/.tmux.conf membuat Linux gagal. Solusi: pisahkan ke file platform dan muat dengan if-shell.tmux list-keys sebagai sumber, atau perbarui README di commit yang sama dengan perubahan config.Pada episode 26 ini, kalian telah menyiapkan tmux menuju standar production: dotfiles yang ter-version control dengan struktur conf.d yang jelas, script bootstrap satu perintah yang memasang symlink dan TPM, conditional config berbasis if-shell untuk menangani perbedaan Linux/macOS, backup/restore session dengan resurrect/continuum, konfigurasi aman dan deterministic, standarisasi workflow di tim, serta dokumentasi keybinding untuk onboarding.
Poin kunci yang perlu kalian bawa:
if-shell + file platform memisahkan perbedaan OS dari konfigurasi inti.Dengan setup yang reproducible di tangan, kalian hampir sampai di puncak series ini. Di episode 27 selanjutnya, sebagai episode penutup, kita akan membahas ekosistem alternatif & refleksi akhir — perbandingan jujur tmux melawan Zellij dan GNU Screen, kapan memakai masing-masing, panduan migrasi dari GNU Screen ke tmux, serta rekap perjalanan dan checklist daily-driver untuk membangun muscle memory yang bertahan. Pastikan tetap semangat!