sirc

A simple tui multi server irc client
git clone git://git.emmett1.my/sirc.git
Log | Files | Refs | README | LICENSE

sirc.1 (10498B)


      1 .TH SIRC 1 "2026" "sirc" "User Commands"
      2 .SH NAME
      3 sirc \- simple terminal IRC client
      4 .SH SYNOPSIS
      5 .B sirc
      6 [\fIOPTIONS\fR]
      7 .SH DESCRIPTION
      8 .B sirc
      9 is a multi-server terminal IRC client written in C.
     10 It connects to one or more IRC servers simultaneously, each in its own
     11 thread, and presents a three-panel TUI: a channel list on the left grouped
     12 by server, a chat area in the centre, and a user list on the right.
     13 The top bar shows the current channel topic.
     14 .PP
     15 Dependencies are ncurses, OpenSSL, and pthreads only.
     16 .SH OPTIONS
     17 .TP
     18 .BI \-\-host " HOST"
     19 IRC server hostname.
     20 Default:
     21 .IR irc.libera.chat .
     22 .TP
     23 .BI \-\-port " PORT"
     24 Server port number.
     25 Default:
     26 .IR 6697 .
     27 .TP
     28 .BI \-\-nick " NICK"
     29 Nickname to use.
     30 Default:
     31 .IR circ_user .
     32 Applied to all configured servers when no
     33 .B \-\-host
     34 is given.
     35 .TP
     36 .BI \-\-channel " CHAN"
     37 Comma-separated list of channels to join on connect.
     38 Example:
     39 .IR "#python,#linux" .
     40 .TP
     41 .B \-\-tls
     42 Enable TLS (default).
     43 .TP
     44 .B \-\-no\-tls
     45 Disable TLS.
     46 Use with plain-text servers, typically on port 6667.
     47 .TP
     48 .BI \-\-sasl\-user " USER"
     49 SASL PLAIN username.
     50 .TP
     51 .BI \-\-sasl\-pass " PASS"
     52 SASL PLAIN password.
     53 .TP
     54 .BI \-\-config " FILE"
     55 Path to a configuration file.
     56 Overrides the default search paths.
     57 .TP
     58 .B \-\-help
     59 Print a short usage summary and exit.
     60 .SH CONFIGURATION
     61 .B sirc
     62 reads its configuration from
     63 .I ~/.sirc
     64 or
     65 .I ~/.config/sirc/config
     66 (first found wins).
     67 Command-line flags always override config file values.
     68 .PP
     69 The file uses
     70 .B key = value
     71 pairs.
     72 Lines beginning with
     73 .B #
     74 are comments.
     75 .PP
     76 .B Multiple servers
     77 are configured with
     78 .B [server]
     79 section blocks.
     80 Each block defines one independent connection.
     81 All configured servers connect simultaneously on startup.
     82 Global keys placed before any
     83 .B [server]
     84 block apply as defaults to all servers.
     85 .SS Global keys
     86 .TP
     87 .B nick
     88 Default nickname inherited by all servers.
     89 .TP
     90 .B ignore
     91 Comma-separated list of nicks to ignore globally.
     92 .SS Per-server keys
     93 .TP
     94 .B host
     95 Server hostname.
     96 .TP
     97 .B port
     98 Port number.
     99 .TP
    100 .B nick
    101 Nickname for this server (overrides the global default).
    102 .TP
    103 .B channel
    104 Comma-separated channels to auto-join on connect.
    105 .TP
    106 .B tls
    107 .BR true " or " false .
    108 .TP
    109 .B sasl_user
    110 SASL PLAIN username.
    111 .TP
    112 .B sasl_pass
    113 SASL PLAIN password.
    114 .SS Example configuration
    115 .PP
    116 .nf
    117 nick    = kky
    118 ignore  = badbot,spammer
    119 
    120 [server]
    121 host      = irc.libera.chat
    122 port      = 6697
    123 tls       = true
    124 channel   = #python,#linux
    125 sasl_user = kky
    126 sasl_pass = hunter2
    127 
    128 [server]
    129 host    = irc.oftc.net
    130 port    = 6697
    131 tls     = true
    132 channel = #debian
    133 
    134 [server]
    135 host    = irc.rizon.net
    136 port    = 6667
    137 tls     = false
    138 nick    = kky_rizon
    139 channel = #rice
    140 .fi
    141 .SH COMMANDS
    142 All commands are entered in the input bar and begin with
    143 .BR / .
    144 Commands act on the current server (the server of the active channel).
    145 .SS Messaging
    146 .TP
    147 .BI /msg " nick text"
    148 Send a private message.
    149 Opens a dedicated buffer for the conversation.
    150 .TP
    151 .BI /notice " target text"
    152 Send a NOTICE.
    153 .TP
    154 .BI /me " text"
    155 Send a CTCP ACTION message
    156 .RI "( " "* nick text" " )."
    157 .TP
    158 .BI /ctcp " nick command"
    159 Send a raw CTCP request.
    160 .SS Channels
    161 .TP
    162 .BI /join " [#chan]"
    163 Join a channel.
    164 .TP
    165 .BI /part " [#chan]"
    166 Leave a channel.
    167 Defaults to the current channel.
    168 .TP
    169 .BI /cycle " [#chan]"
    170 Part and immediately rejoin a channel.
    171 .TP
    172 .BI /names " [#chan]"
    173 Request the user list for a channel.
    174 .TP
    175 .BI /topic " [text]"
    176 With no argument, display the current topic.
    177 With an argument, set a new topic.
    178 .TP
    179 .BI /invite " nick [#chan]"
    180 Invite a user to a channel.
    181 Defaults to the current channel.
    182 .TP
    183 .BI /kick " nick [reason]"
    184 Kick a user from the current channel.
    185 .TP
    186 .BI /mode " [target] [modes]"
    187 Get or set channel or user modes.
    188 .SS Users
    189 .TP
    190 .B /nick
    191 Display your current nickname.
    192 .TP
    193 .BI /nick " newnick"
    194 Request a nickname change.
    195 .TP
    196 .BI /whois " nick"
    197 Perform a WHOIS lookup.
    198 Results appear in the server status buffer.
    199 .TP
    200 .BI /who " [target]"
    201 Send a WHO query for a channel or nick.
    202 .TP
    203 .BI /away " [message]"
    204 Set an away message.
    205 With no argument, clears away status (same as
    206 .BR /back ).
    207 .TP
    208 .B /back
    209 Clear away status.
    210 .TP
    211 .BI /ignore " [nick]"
    212 Add a nick to the ignore list.
    213 With no argument, lists all ignored nicks.
    214 Ignored nicks' messages are silently dropped.
    215 .TP
    216 .BI /unignore " nick"
    217 Remove a nick from the ignore list.
    218 .SS Server
    219 .TP
    220 .BI /list " [pattern]"
    221 Request a list of channels on the current server.
    222 Results appear in the status buffer.
    223 .TP
    224 .BI /raw " line"
    225 Send a raw IRC line directly to the server.
    226 Alias:
    227 .BR /quote .
    228 .TP
    229 .BI /server " host [port]"
    230 Connect to an additional server at runtime.
    231 Inherits the current nick.
    232 .TP
    233 .B /connect
    234 Reconnect the current server.
    235 .TP
    236 .BI /quit " [message]"
    237 Disconnect all servers and exit.
    238 .SS UI
    239 .TP
    240 .B /clear
    241 Clear the scrollback of the current channel.
    242 .TP
    243 .B /help
    244 Print the command reference to the status buffer.
    245 .SH KEYS
    246 .TP
    247 .B Tab
    248 Nick completion.
    249 Matches the word before the cursor against the current channel's user list.
    250 Repeated Tab cycles through matches.
    251 At the start of a line the completed nick is followed by
    252 .BR ": " .
    253 .TP
    254 .BR Ctrl\-N
    255 Switch to the next channel in visual order.
    256 .TP
    257 .BR Ctrl\-P
    258 Switch to the previous channel in visual order.
    259 .TP
    260 .BR PgUp
    261 Scroll the chat area up.
    262 .TP
    263 .BR PgDn
    264 Scroll the chat area down.
    265 .TP
    266 .BR Ctrl\-W
    267 Delete the word to the left of the cursor.
    268 .TP
    269 .BR Up / Down
    270 Step through the input history.
    271 .TP
    272 .BR Left / Right
    273 Move the cursor within the input line.
    274 .TP
    275 .BR Home / End
    276 Jump to the start or end of the input line.
    277 .TP
    278 .BR Delete
    279 Delete the character under the cursor.
    280 .SH LAYOUT
    281 .nf
    282 +------------------+------------------------------------------+----------------+
    283 | CHANNELS         | topic (or blank)                         | USERS (n)      |
    284 |                  +------------------------------------------+                |
    285 | irc.libera.chat  | 12:34 -> alice joined                    | @alice         |
    286 |   *status*       | 12:34 <kky> hello                        | +bob           |
    287 | > #python        | 12:34 <alice> hey!                       |  charlie       |
    288 | + #linux         |                                          |                |
    289 |                  |                                          |                |
    290 | irc.oftc.net     | > _                                      |                |
    291 |   *status*       |                                          |                |
    292 |   #debian        |                                          |                |
    293 +------------------+------------------------------------------+----------------+
    294 .fi
    295 .PP
    296 .B Header bar
    297 .RS
    298 Displays the topic of the active channel, starting from the left edge of the
    299 chat area.
    300 Truncated on the right if too long.
    301 Blank when no topic is set.
    302 .RE
    303 .PP
    304 .B Channel list (left panel)
    305 .RS
    306 Channels are grouped under their server's full hostname.
    307 A
    308 .B ~
    309 prefix on the server name indicates a disconnected server.
    310 The
    311 .B *status*
    312 buffer under each server receives system messages and server output.
    313 .PP
    314 Channel state indicators:
    315 .RS
    316 .TP
    317 .B >
    318 Active channel.
    319 .TP
    320 .B +
    321 Unread messages.
    322 .TP
    323 .B !
    324 Unread mention of your nick.
    325 .RE
    326 .RE
    327 .PP
    328 .B Chat area (centre panel)
    329 .RS
    330 Messages use the following colour scheme:
    331 .RS
    332 .TP
    333 .B <nick>
    334 Per-nick colour derived from a hash of the nick name (bold).
    335 .TP
    336 message body
    337 Plain white.
    338 .TP
    339 own messages
    340 Yellow bold.
    341 .TP
    342 mentions
    343 Red bold.
    344 .TP
    345 actions (/me)
    346 Magenta italic.
    347 .TP
    348 join/part/quit
    349 Gray (dimmed).
    350 .TP
    351 URLs
    352 Blue underline.
    353 .RE
    354 .PP
    355 IRC formatting codes (bold \fB^B\fR, colour \fB^C\fR, italic, underline, reset)
    356 are stripped from all text before display.
    357 .RE
    358 .PP
    359 .B User list (right panel)
    360 .RS
    361 Users are sorted by privilege level, then alphabetically within each group.
    362 Mode symbols are displayed before the nick:
    363 .RS
    364 .TP
    365 .B ~
    366 Founder / owner (red bold).
    367 .TP
    368 .B &
    369 Protected op (red bold).
    370 .TP
    371 .B @
    372 Channel op (red bold).
    373 .TP
    374 .B %
    375 Halfop (yellow bold).
    376 .TP
    377 .B +
    378 Voice (yellow bold).
    379 .TP
    380 (space)
    381 Regular user (white).
    382 .RE
    383 .RE
    384 .PP
    385 .B Input bar (bottom)
    386 .RS
    387 Displays a
    388 .B ">\ "
    389 prompt followed by the input text and a blinking cursor.
    390 .RE
    391 .SH FEATURES
    392 .TP
    393 Multiple simultaneous servers
    394 Each server runs in its own thread with an independent nick, channel set,
    395 and credentials.
    396 .TP
    397 TLS
    398 Connections are encrypted using OpenSSL with full certificate verification
    399 .RB ( SSL_VERIFY_PEER ).
    400 .TP
    401 SASL PLAIN
    402 Per-server authentication before nick registration.
    403 Negotiated via
    404 .BR "CAP REQ :sasl" .
    405 .TP
    406 Auto-reconnect
    407 On disconnect,
    408 .B sirc
    409 waits five seconds then reconnects and rejoins all open channels.
    410 .TP
    411 Per-nick colours
    412 Each nick is assigned a consistent colour derived from a djb2 hash of the
    413 nick string, used in both the chat area and the user list.
    414 .TP
    415 IRC formatting
    416 All mIRC/IRC formatting codes are stripped from incoming text before it is
    417 stored or displayed.
    418 .TP
    419 Topic display
    420 The current channel topic is shown in the header bar and updated live
    421 whenever a
    422 .B TOPIC
    423 message is received.
    424 .TP
    425 URL highlighting
    426 Strings beginning with
    427 .BR http:// ,
    428 .BR https:// ,
    429 or
    430 .B www.\&
    431 are rendered with a blue underline.
    432 .TP
    433 Nick completion
    434 Tab-completion matches the typed prefix against the current channel's user
    435 list.
    436 Cycling with repeated Tab wraps around.
    437 .TP
    438 Ring-buffer scrollback
    439 Each channel stores the last 500 lines in a fixed-size ring buffer with O(1)
    440 insertion.
    441 .TP
    442 Global ignore list
    443 Ignored nicks are dropped across all servers.
    444 The list persists for the session and can be pre-populated in the config file.
    445 .SH LIMITS
    446 .TS
    447 l l.
    448 Max servers	8
    449 Max channels (total)	128
    450 Max users per channel	512
    451 Scrollback per channel	500 lines
    452 Input line length	480 characters
    453 Input history	256 lines
    454 Ignore list	64 nicks
    455 Auto-join channels per server	16
    456 .TE
    457 .SH FILES
    458 .TP
    459 .I ~/.sirc
    460 Primary configuration file.
    461 .TP
    462 .I ~/.config/sirc/config
    463 Alternative configuration file location.
    464 Consulted if
    465 .I ~/.sirc
    466 does not exist.
    467 .SH EXAMPLES
    468 Connect to Libera.Chat with TLS and SASL:
    469 .PP
    470 .nf
    471 sirc --host irc.libera.chat --nick kky --sasl-user kky --sasl-pass hunter2
    472 .fi
    473 .PP
    474 Connect without TLS on the standard plain-text port:
    475 .PP
    476 .nf
    477 sirc --host irc.libera.chat --port 6667 --no-tls --nick kky
    478 .fi
    479 .PP
    480 Join multiple channels on connect:
    481 .PP
    482 .nf
    483 sirc --host irc.libera.chat --nick kky --channel '#python,#linux'
    484 .fi
    485 .PP
    486 Use a custom configuration file:
    487 .PP
    488 .nf
    489 sirc --config ~/work/irc.conf
    490 .fi
    491 .SH BUILDING
    492 .nf
    493 make
    494 make install          # installs to ~/.local/bin/sirc
    495 PREFIX=/usr/local make install
    496 .fi
    497 .SH SEE ALSO
    498 .BR irssi (1),
    499 .BR weechat (1),
    500 .BR nc (1),
    501 .BR openssl (1)
    502 .SH AUTHORS
    503 Emmett and Claude.
    504 .SH LICENSE
    505 MIT