# 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"; };
};
