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