From dcde9503293e7a0032885fee6610fa4718ad8063 Mon Sep 17 00:00:00 2001 From: dissimulo Date: Tue, 21 Apr 2026 09:15:42 -0700 Subject: [PATCH] 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) 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. --- .irssi/claude.theme | 215 ++++++++++++++++++++++++++++++++++++++++++++ .irssi/config | 2 +- 2 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 .irssi/claude.theme diff --git a/.irssi/claude.theme b/.irssi/claude.theme new file mode 100644 index 00000000..0072e555 --- /dev/null +++ b/.irssi/claude.theme @@ -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 — 24-bit foreground colour +# %Z — 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"; }; +}; diff --git a/.irssi/config b/.irssi/config index 188c0a25..69635411 100644 --- a/.irssi/config +++ b/.irssi/config @@ -471,7 +471,7 @@ statusbar = { }; }; 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"; }; "irc/core" = { cmds_max_at_once = "999999"; cmd_queue_speed = "0ms"; };