Tema AMOLED (Pure Black)
Catatan perubahan tema Kaku dan OpenCode ke hitam penuh.
Ringkasan
| Aplikasi | Sebelum | Sesudah | Cara |
|---|---|---|---|
| Kaku | #15141b | #000000 | Ubah color_schemes['Kaku Dark'].background |
| OpenCode | opencode (bawaan) | vercel | theme.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:
| Pengaturan | Nilai | Fungsi |
|---|---|---|
color_schemes['Kaku Dark'].background | #000000 | Latar terminal jadi hitam penuh |
color_overrides | #15141b, #1f1d28, #29263c | Menurunkan kecerahan permukaan terangkat agar tidak terlihat sebagai abu ungu di atas hitam |
tab_bar.background | #15141b → #000000 | Latar tab bar ikut hitam |
tab_bar.inactive_tab_edge | #15141b → #000000 | Tepi tab tidak aktif ikut hitam |
tab_bar.active_tab.bg_color | #29263c → #141414 | Latar tab aktif |
window_padding.top | 40px → 16px | Jarak tab bar ke konten pertama |
window_background_opacity | 1.0 | Menempelkan latar ke panel OLED |
macos_window_background_blur | 0 | Menghapus 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
endJadi 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.
Sidebar
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:
| Tema | Background | Panel |
|---|---|---|
vercel | #000000 | #0A0A0A |
matrix | #0a0e0a | lebih terang |
carbonfox | #0d0d0d | lebih terang |
Tema amoled
config/opencode/themes/amoled.json adalah salinan tema vercel dengan
seluruh permukaan diubah:
| Token | Nilai | Semula |
|---|---|---|
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:
- Binary memuat fungsi yang memeriksa apakah sebuah objek punya kunci
themeuntuk membedakan format lama. Artinya formatdefsplusthemedengan pasangan hex masih diterima dan dikonversikan sendiri. - 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.