Add claude.theme (ports Claude Code's default dark palette)

claude.theme: a dark irssi theme whose colours map 1:1 to the roles
Claude Code uses in its default dark UI:

  #8c8c8c  dim        timestamps, brackets, connective text
  #f85149  red        errors, netsplits, parts, private msg frames
  #56d364  green      joins, ctcp, dcc, netjoins, quiet activity
  #e3b341  yellow     messages-to-me, /me, statusbar chatter
  #4a9eff  blue       channel names, pubnicks, diff-style accents
  #c9a3ff  magenta    own nick / prompt / notices / hilights
  #4ec9b0  cyan       whois field names, info lines

Uses 24-bit true-colour escapes (%z<rrggbb>) so the shades land
exactly regardless of terminal palette. Requires irssi 1.2+ and a
truecolour-capable terminal (modern xterm/tmux both are).

irssi/config: switch the active theme from rainbow-dark to claude.
This commit is contained in:
2026-04-21 09:15:42 -07:00
parent 92b9e0ec99
commit dcde950329
2 changed files with 216 additions and 1 deletions

215
.irssi/claude.theme Normal file
View File

@@ -0,0 +1,215 @@
# claude.theme — irssi theme that ports the Claude Code default "dark"
# palette to IRC.
#
# Colour role → 24-bit RGB used here:
# dim / secondary #8c8c8c timestamps, brackets, connective text
# red (destructive) #f85149 errors, netsplits, parts, private msg
# green (additive) #56d364 joins, ctcp, dcc, netjoins, quiet activity
# yellow (warn) #e3b341 messages-to-me, actions (/me), chatter
# blue (info) #4a9eff channel names, pubnick, diff-style accents
# magenta (emphasis) #c9a3ff own nick / prompt, notices, hilights
# cyan (accent) #4ec9b0 whois field names, info lines
#
# Activate:
# /set theme claude ; /save ; /reload
#
# Requires irssi 1.2+ and a 24-bit-colour-capable terminal. Format codes:
# %z<rrggbb> — 24-bit foreground colour
# %Z<rrggbb> — 24-bit background colour
default_color = "-1";
info_eol = "false";
# Dim all bracket/punctuation glyphs so the palette accents stay the focus.
replaces = { "[]=()<>" = "%z8c8c8c$*%n"; };
abstracts = {
##
## generic
##
# Subtle dim dash prefix on non-message lines (was "%B-%n!%B-%n ").
line_start = "%z8c8c8c-!-%n ";
# Timestamps in the dim secondary colour.
timestamp = "%z8c8c8c$*%n";
# Highlight = bold + yellow (the "user-directed" Claude Code colour).
hilight = "%_%ze3b341$*%n%_";
# Errors: bold + red (Claude's destructive colour).
error = "%_%zf85149$*%n%_";
# Channel names in link-blue + bold.
channel = "%_%z4a9eff$*%n%_";
# Nicks: default (plain + bold).
nick = "%_$*%_";
# Nick-host in dim brackets.
nickhost = "[%z8c8c8c$*%n]";
# Server names in cyan accent.
server = "%_%z4ec9b0$*%n%_";
# Generic comment: dim grey in brackets.
comment = "[%z8c8c8c$*%n]";
reason = "{comment $*}";
mode = "{comment $*}";
##
## channel-specific messages
##
# Joins → green (additive).
channick_hilight = "%z56d364$*%n";
chanhost_hilight = "{nickhost %z56d364$*%n}";
# Parts / quits → red (destructive).
channick = "%zf85149$*%n";
chanhost = "{nickhost %z8c8c8c$*%n}";
# Highlighted channel reference → blue.
channelhilight = "%z4a9eff$*%n";
# Ban masks → red.
ban = "%zf85149$*%n";
##
## messages
##
# Bracket framing in dim grey; body text falls through to terminal default
# (claude-code renders conversation text in #e5e5e5 which is very close to
# terminal default on most dark schemes, so no need for a %z wrap here —
# that avoids the whitespace-background issue from earlier attempts).
msgnick = "%z8c8c8c<%n$0$1-%z8c8c8c>%n %|";
# Own nick = magenta (Claude's "user/prompt" colour) + bold.
ownmsgnick = "{msgnick $0 $1-}";
ownnick = "%_%zc9a3ff$*%n%_";
# Public message nick = blue (info/link colour).
pubmsgnick = "{msgnick $0 $1-}";
pubnick = "%z4a9eff$*%n";
# Messages addressed to you → yellow nick (user-directed warn colour).
pubmsgmenick = "{msgnick $0 $1-}";
menick = "%_%ze3b341$*%n%_";
# Hilighted message in channel.
pubmsghinick = "{msgnick $1 $0$2-%n}";
# ":#chan" suffix on targeted messages.
msgchannel = "%z8c8c8c:%z4a9eff$*%n";
# Private messages: magenta framing so queries stand apart from public.
privmsg = "[%_%zc9a3ff$0%_%z8c8c8c(%zc9a3ff$1-%z8c8c8c)%n] ";
ownprivmsg = "[%_%zc9a3ff$0%_%z8c8c8c(%zc9a3ff$1-%z8c8c8c)%n] ";
# Private message within a query window.
ownprivmsgnick = "{msgnick $*}";
ownprivnick = "%_%zc9a3ff$*%n%_";
privmsgnick = "{msgnick %_%zc9a3ff$*%n%_}";
##
## Actions (/ME)
##
# Bold yellow asterisk — actions read as "warning"-ish urgency.
action_core = "%_%ze3b341 * %n$*%n";
action = "{action_core $*} ";
ownaction = "{action $*}";
ownaction_target = "{action_core $0}%z8c8c8c:%zc9a3ff$1%n ";
pvtaction = "%_%ze3b341 (*) %n$*%n ";
pvtaction_query = "{action $*}";
pubaction = "{action $*}";
##
## other IRC events
##
whois = "%z4ec9b0%# $[8]0 : %n$1-";
# Notices — magenta (emphasis).
ownnotice = "[%_%zc9a3ff$0%_%z8c8c8c(%zc9a3ff$1-%z8c8c8c)]%n ";
notice = "%z8c8c8c-%_%zc9a3ff$*%_%z8c8c8c-%n ";
pubnotice_channel = "%z8c8c8c:%zc9a3ff$*";
pvtnotice_host = "%z8c8c8c(%zc9a3ff$*%z8c8c8c)";
# Server notices — green bang (informational).
servernotice = "%_%z56d364!%n$*%n ";
# CTCPs — green.
ownctcp = "[%_%z56d364$0%_%z8c8c8c(%z56d364$1-%z8c8c8c)] ";
ctcp = "%_%z56d364$*%n%_";
# Wallops — yellow (broadcast alert).
wallop = "%_%ze3b341$*%n%_: ";
wallop_nick = "%z8c8c8c$*%n";
wallop_action = "%_%ze3b341 * %n$*%n ";
# Netsplits / netjoins — the classic red/green pair.
netsplit = "%_%zf85149$*%n%_";
netjoin = "%_%z56d364$*%n%_";
# /names list
names_prefix = "";
names_nick = "[%_%z4a9eff$0%n%_$1-] ";
names_nick_op = "{names_nick $*}";
names_nick_halfop = "{names_nick $*}";
names_nick_voice = "{names_nick $*}";
names_users = "[%z56d364$*%n]";
names_channel = "%_%z4a9eff$*%n%_";
# DCC — green family (network, transfer flavoured).
dcc = "%_%z56d364$*%n%_";
dccfile = "%_%z4ec9b0$*%n%_";
# DCC chat, own msg/action
dccownmsg = "[%_%zc9a3ff$0%_%z8c8c8c($1-%z8c8c8c)%n] ";
dccownnick = "%_%zc9a3ff$*%n%_";
dccownquerynick = "%_%zc9a3ff$*%n%_";
dccownaction = "{action $*}";
dccownaction_target = "{action_core $0}%z8c8c8c:%zc9a3ff$1%n ";
# DCC chat, others
dccmsg = "[%_%z56d364$1-%_%z8c8c8c(%z56d364$0%z8c8c8c)%n] ";
dccquerynick = "%_%z56d364$*%n%_";
dccaction = "%_%ze3b341 (*dcc*) %n$*%n %|";
##
## statusbar
##
# Explicit black background with light-grey foreground. Rainbow of
# accent colours from individual items below.
sb_background = "%0%ze5e5e5";
sb_prompt_bg = "%n";
sb_info_bg = "%0";
sbstart = "";
sbend = " ";
topicsbstart = "{sbstart $*}";
topicsbend = "{sbend $*}";
prompt = "%_%zc9a3ff[%n$*%_%zc9a3ff]%n%_ ";
sb = " %z4a9eff[%n$*%z4a9eff]%n";
sbmode = "(%z56d364+%n$*)";
sbaway = " (%ze3b341zZzZ%n)";
sbservertag = ":%z4ec9b0$0%n (^X)";
sbnickmode = "%zc9a3ff$0%n";
# Activity indicators — escalate in colour:
# dim → green (normal chat) → yellow (message) → red (hilight)
sb_act_sep = "%z8c8c8c$*";
sb_act_text = "%z56d364$*";
sb_act_msg = "%ze3b341$*";
sb_act_hilight = "%zf85149$*";
sb_act_hilight_color = "$0$1-%n";
};
formats = {
"fe-common/core" = { pubmsg = "{pubmsgnick $2 {pubnick \00305$0}}$1"; };
};

View File

@@ -471,7 +471,7 @@ statusbar = {
}; };
}; };
settings = { settings = {
core = { real_name = "g"; user_name = "g"; nick = "`"; theme = "rainbow-dark"; }; core = { real_name = "g"; user_name = "g"; nick = "`"; theme = "claude"; };
"fe-text" = { actlist_sort = "refnum"; }; "fe-text" = { actlist_sort = "refnum"; };
"irc/core" = { cmds_max_at_once = "999999"; cmd_queue_speed = "0ms"; }; "irc/core" = { cmds_max_at_once = "999999"; cmd_queue_speed = "0ms"; };