Skip to Content
AMOLED

Tema AMOLED (Pure Black)

Catatan perubahan tema Kaku dan OpenCode ke hitam penuh.

Ringkasan

AplikasiSebelumSesudahCara
Kaku#15141b#000000Ubah color_schemes['Kaku Dark'].background
OpenCodeopencode (bawaan)verceltheme.name di cli.jsonc

Kaku

Kaku Dark memakai KAKU.BLACK = #15141b, yaitu biru-ungu sangat gelap, bukan hitam. Tiga hal diubah di config/kaku/kaku.lua:

PengaturanNilaiFungsi
color_schemes['Kaku Dark'].background#000000Latar terminal jadi hitam penuh
color_overrides#15141b, #1f1d28, #29263cMenurunkan kecerahan permukaan terangkat agar tidak terlihat sebagai abu ungu di atas hitam
tab_bar.background#15141b → #000000Latar tab bar ikut hitam
tab_bar.inactive_tab_edge#15141b → #000000Tepi tab tidak aktif ikut hitam
tab_bar.active_tab.bg_color#29263c → #141414Latar tab aktif
window_padding.top40px → 16pxJarak tab bar ke konten pertama
window_background_opacity1.0Menempelkan latar ke panel OLED
macos_window_background_blur0Menghapus sisa blur yang membuat hitam tidak bersih

Catatan penting soal color_overrides: nilainya disisipkan ke tabel bawaan, bukan menggantikannya. Kaku menyediakan empat entri bawaan untuk menjaga kontras beberapa aplikasi, dan menugaskan tabel baru akan membuang semuanya.

Tabel skema diubah di tempat, bukan diganti dengan tabel baru. Alasannya, Kaku membuat alias color_schemes['Kaku Theme'] saat memuat konfigurasi bawaan, dan alias itu menunjuk ke tabel yang sama. Kalau tabelnya diganti, alias tersebut tertinggal menunjuk ke nilai lama.

Titlebar

Kaku memakai KAKU.BLACK untuk warna titlebar juga, lewat fungsi get_window_frame_colors pada berkas bawaannya. Warna titlebar tidak melewati color_overrides, karena itu diteruskan langsung ke bingkai jendela sistem. Akibatnya, color_overrides saja tidak cukup dan muncul garis setinggi titlebar yang warnanya masih #15141b.

Penanganannya: config.window_frame didefinisikan sendiri di kaku.lua, dengan active_titlebar_bg dan inactive_titlebar_bg sama-sama #000000.

Yang penting diketahui: Kaku mendeteksi bingkai milik pengguna dengan memindai teks kaku.lua, bukan dengan memeriksa tabel hasil load:

if trimmed:match('^config%.window_frame%s*=') then user_has_custom_window_frame = true end

Jadi baris config.window_frame = harus berada di awal baris agar polanya cocok. Kalau ditulis menyatu dengan baris lain, Kaku tidak akan mendeteksinya dan bingkai otomatisnya akan menimpa.

Border bingkai disetel seluruhnya ke 0 mengikuti cabang gelap bawaan Kaku, supaya tidak ada garis tepi yang tersisa. Warna teks dipertahankan dari bawaan: #d5d4d6 untuk aktif dan #6d6d6d untuk tidak aktif, karena keduanya bukan latar dan tidak memengaruhi blackness.

OpenCode

Tema TIDAK ditulis di opencode.json. Dokumentasi V2 menyatakan tema milik terminal client dan harus berada di cli.json.

Latar utama

Awalnya memakai tema bawaan vercel. Dari definisi tema yang tertanam di dalam binary, vercel sudah memakai background200 = "#000000" untuk mode gelap, jadi tidak perlu berkas tema kustom untuk latar utama.

vercel masih memakai gray100 = "#0A0A0A" untuk panel, dan itulah yang tampak sebagai bidang lebih terang di sisi kanan. Tidak ada tema bawaan lain yang lebih gelap:

TemaBackgroundPanel
vercel#000000#0A0A0A
matrix#0a0e0alebih terang
carbonfox#0d0d0dlebih terang

Tema amoled

config/opencode/themes/amoled.json adalah salinan tema vercel dengan seluruh permukaan diubah:

TokenNilaiSemula
background#000000#000000
backgroundPanel#000000#0A0A0A
backgroundElement#0a0a0a#292929
border#141414#1F1F1F
borderSubtle#141414#0A0A0A
diffContextBg#000000#000000

Palet warna aksen tidak diubah: primary tetap blue700, accent tetap purple700, dan seterusnya. Warnanya sama persis dengan vercel, hanya permukaannya yang jadi hitam.

Cara tema ini dibuat

Definisi vercel diambil langsung dari binary OpenCode, lalu ditulis ulang dengan mengubah token permukaannya. Dua hal yang membuat ini bisa dikerjakan tanpa menebak format:

  1. Binary memuat fungsi yang memeriksa apakah sebuah objek punya kunci theme untuk membedakan format lama. Artinya format defs plus theme dengan pasangan hex masih diterima dan dikonversikan sendiri.
  2. Objek di dalam binary adalah literal JavaScript, bukan JSON, karena kuncinya tidak diapit tanda kutip. Konverter yang menghormati batas string dibutuhkan, supaya isi string tidak ikut berubah.

Cara membuat tema dari nol tidak dicoba. Dokumentasi menyatakan setiap tema V2 harus punya pohon token base yang lengkap beserta palet hue, dan menulis itu dengan tangan rawan salah. Menyalin definisi yang sudah jadi dijamin valid.

Berkas tema kustom, bila suatu saat dibutuhkan, diletakkan di ~/.config/opencode/themes/<nama>.json. OpenCode hanya membaca berkas .json.

Menarik perubahan

Kaku: hapus blok -- ===== Pure black (AMOLED) ===== beserta tiga blok config setelahnya dari kaku.lua, lalu simpan. Kaku memuat ulang otomatis.

OpenCode: ubah theme.name di config/opencode/cli.jsonc, atau hapus seluruh blok theme. Perubahan tema pada TUI yang sedang berjalan memerlukan memulai ulang TUI.

Last updated on