Zedのターミナルを透明にして、壁紙がうっすら見えるのが気に入ってます。
で、codex は素直に透けるのに、opencode は真っ黒い背景で主張してくる。あれ、なんで?というところから始まりました。
端末の透過が「効く条件」
結論から言うと、透明に“見える”ための条件はシンプルです。
- 端末側(Zed)が透明になっている
- アプリ側(opencode)が背景を塗らない(= 端末のデフォルト背景を使う)
Zedがいくら透明でも、アプリが黒で塗ったら透けません。
OpenCodeはテーマで背景を塗る
OpenCodeはテーマを持っていて、デフォルトは opencode テーマです。
そしてテーマによっては背景を塗ります。だから透けない。
逆に、テーマの色指定で none(terminal default)を使うと、端末の背景がそのまま見えるようになります。
まずは system テーマを試す
手っ取り早いのは /theme で system を選ぶこと。
system は terminal defaults を尊重する設計なので、これだけで期待どおりになることがあります。
どうしても透けたいなら、カスタムテーマ
「背景は絶対に塗らない」ことを担保するために、カスタムテーマを作りました。
ポイントはこれだけ。
background/backgroundPanel/backgroundElementを"none"にする- 文字色はZedの
experimental.theme_overridesを参考に寄せる
Zed側で半透明(#RRGGBBAA)を使っていても、OpenCodeのテーマは基本的にアルファ付きHEXを扱わないので、透過は "none" に任せる方が安定です。
テーマファイル(グローバル)
ユーザーグローバルで使うなら、ここに置きます。
~/.config/opencode/themes/zed-transparent.json
{
"$schema": "https://opencode.ai/theme.json",
"defs": {
"fg": "#e4e4ef",
"niagara": "#96a6c8",
"yellow": "#ffdd33",
"green": "#73c936",
"red": "#f43841",
"quartz": "#95a99f",
"brightBlack": "#453d41"
},
"theme": {
"primary": "niagara",
"secondary": "quartz",
"accent": "niagara",
"error": "red",
"warning": "yellow",
"success": "green",
"info": "niagara",
"text": "fg",
"textMuted": "quartz",
"background": "none",
"backgroundPanel": "none",
"backgroundElement": "none",
"border": "brightBlack",
"borderActive": "yellow",
"borderSubtle": "brightBlack"
}
}
OpenCodeのグローバル設定
~/.config/opencode/opencode.json にテーマ名を指定します。
{
"$schema": "https://opencode.ai/config.json",
"theme": "zed-transparent"
}
これで、Zedの透明ターミナルの上にOpenCodeが“乗る”ようになります。
repo固有設定は作らない
プロジェクト直下に opencode.json を置くと、それがグローバルより優先されます。
「このrepoだけ」になってほしくない場合は、設定とテーマは ~/.config/opencode/ にまとめるのが吉です。