テーマ
テーマは配色の定義です。Misskey 本体と同じ形式なので、NoteDeck で作ったテーマは素の Misskey にもそのまま配れます。
配色ではなくレイアウトや要素の表示・非表示を変えたい場合は、見た目を変えるのカスタム CSS を使います。
構造
JSON5 で書きます。キーのクォート省略、末尾カンマ、コメントが使えます。
{
id: '679b3b87-a4e9-4789-8696-b56c15cc33b0', // 上書きのキー。UUID が慣例。無ければ採番される
name: 'テーマ名', // 無ければ 'Untitled'
base: 'dark', // 'light' か 'dark'
desc: '一言説明', // 任意
author: '@user@host', // 任意
props: { /* 色定義 */ }, // 必須
}props に書かなかったキーは base に指定した標準テーマの値が使われます。全部書く必要はなく、変えたいところだけ書けば動きます。
id は上書きのキーです。貼り付けやコードから同じ id で入れ直すと既存のテーマが置き換わるため、新しいテーマには必ず新しい id を振ってください。
NoteDeck だけで使う情報(ストアの id など)は $notedeck の下に入ります。素の Misskey はこのキーを無視します。
値の書き方
リテラル色 — '#f00' '#ff0000' '#ff000080'(8 桁はアルファ付き)'rgb(255, 0, 0)' 'rgba(255, 0, 0, 0.5)' のほか、hsl() / hsla() / oklch() と空白区切りの rgb(r g b / a) も解釈されます。
参照 — '@accent' のように、同じテーマの別の値を使います。参照先がさらに参照や関数でも解決されます。存在しない名前を参照すると空になり、その色が消えます。書き間違いに注意してください。
定数 — props の中に $名前: '#...' と書いた値は、'$名前' で参照できる定数になります。CSS 変数としては出ません(本家と同じ)。
関数 — :関数<引数<値 の形で色を加工します。閉じ括弧は書きません。
| 関数 | 効果 |
|---|---|
:lighten<10<@accent | 明るくする |
:darken<10<@accent | 暗くする |
:alpha<0.3<@accent | 不透明度を置き換える(乗算ではない) |
:hue<20<@accent | 色相を回す |
:saturate<15<@accent | 彩度を上げる(負の数で下げる) |
':alpha<0.5<:lighten<10<@accent' のように入れ子にできます。ここにない関数名は解釈されず、文字列がそのまま出て崩れて見えます。関数の入力に red のような色名は使えません。
生の CSS — 先頭に " を 1 つ置くと、以降がそのまま CSS 値になります。閉じません。他の値は var(--MI_THEME-プロパティ名) で参照できます。
panelBorder: '" solid 1px var(--MI_THEME-divider)',NoteDeck だけで効く prop
accentDarken(アクセントの濃い版)と accentText(アクセントの上に置く文字色)は、書かなければ accent から自動で作られます。素の Misskey には無い prop なので、そちらでは効きません。
保存場所
設定フォルダの themes/ に <slug>.ndtheme.json5 として保存されます。手で置くときは、素の .json5(Misskey からコピーしたテーマなど)をこのフォルダに置くだけでも取り込まれますが、それは一回きりのコピーで、元ファイルを後から編集しても反映されません。取り込み後は新しい id が付き、元の id は使われません。
作る・配る
AI カラムで「〇〇なイメージのテーマを作って」と頼めます(先に MisStore の作者スキルを入れ、権限でテーマの書き込みを許可しておきます。既定ではオフです)。作成と編集の入口は開発者モードで開放されます。作ったものは MisStore で配布できます(提出のしかた / 書式)。