CATGIRL(1)

πŸ“¦
version 2.2a Β· 4 versions
, in alpine 3.24, debian trixie, nixos 26.05, nixpkgs unstable, ubuntu questing, ubuntu resolute, ubuntu stonking

πŸ’– NAME πŸ’–

catgirl β€” IRC client

aka catgirl(1) πŸ’…βœ¨


✨ SYNOPSIS ✨

okay so here's the vibe when you run it:

       catgirl [-Relqv] [-C copy] [-H hash] [-I highlight] [-N notify]
               [-O open] [-S bind] [-T[timestamp]] [-a plain] [-c cert]
               [-h host] [-i ignore] [-j join] [-k priv] [-m mode] [-n nick]
               [-p port] [-r real] [-s save] [-t trust] [-u user] [-w pass]
               [config ...]
       catgirl -o [-S bind] [-h host] [-p port] [config ...]
       catgirl -g cert

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so the catgirl IRC client gives you a curses interface for TLS-only Internet Relay Chat. The only required option is <code>-h</code>, the host name to connect to. Peep the β€œEXAMPLES” section for managing further configuration. Type <code>/help</code> in catgirl to view the list of β€œCOMMANDS” and β€œKEY BINDINGS” πŸ’–

Options can be loaded from files listed on the command line. Files are searched for in <code>$XDG_CONFIG_DIRS/catgirl</code> (usually <code>~/.config/catgirl</code>) unless the path starts with β€˜/’, β€˜./’ or β€˜../’. Files and flags listed later on the command line take precedence over those listed earlier. No cap.

Each option is placed on a line, and lines beginning with β€˜#’ are ignored. The options are listed below following their corresponding flags. Periodt.

Here's every flag and config line, fr fr:

  • -C util | copy = util β€” sets the utility used by /copy. Subsequent copy options append arguments to util. The URL to copy is provided to util on standard input. The default is the first available of pbcopy(1), wl-copy(1), xclip(1), xsel(1). πŸ’…
  • -H seed,bound | hash = seed,bound β€” sets the initial seed of the nick and channel color hash function and the maximum IRC color value produced by the function. The default is 0,75. To use only colors from the 16-color terminal set, use 0,15. To disable nick and channel colors, use 0,0. 🎨
  • -I pattern | highlight = pattern β€” adds a case-insensitive message highlight pattern, which may contain β€˜*’, β€˜?’ and β€˜[]’ wildcards as in glob(7). The format of the pattern is: nick[!user@host [command [channel [message]]]]. The commands which can be matched are: INVITE, JOIN, NICK, NOTICE, PART, PRIVMSG, QUIT, SETNAME. ✨
  • -N util | notify = util β€” sends notifications using a utility. Subsequent notify options append arguments to util. The window name and message are provided to util as two additional arguments, appropriate for notify-send(1). πŸ””
  • -O util | open = util β€” sets the utility used by /open. Subsequent open options append arguments to util. The URL to open is provided to util as an argument. The default is the first available of open(1), xdg-open(1). 🫢
  • -R | restrict β€” disables the /copy, /exec and /open commands, the notify option, and viewing this manual with /help. πŸ”’
  • -S host | bind = host β€” binds to source address host when connecting to the server. To connect from any address over IPv4 only, use 0.0.0.0. To connect from any address over IPv6 only, use ::. 🌐
  • -T[format] | timestamp [= format] β€” shows timestamps by default, in the specified strftime(3) format. The format string may contain raw IRC formatting codes. The default format is "%X". ⏰
  • -a user:pass | sasl-plain = user:pass β€” authenticates as user with pass using SASL PLAIN. Leave pass blank to prompt for the password. πŸ”
  • -c path | cert = path β€” loads the TLS client certificate from path. The path is searched for in the same manner as configuration files. If the private key is in a separate file, it is loaded with priv. With sasl-external, authenticate using SASL EXTERNAL. Certificates can be generated with -g. πŸ“œ
  • -e | sasl-external β€” authenticates using SASL EXTERNAL, also known as CertFP. The TLS client certificate is loaded with cert. See β€œConfiguring CertFP”. πŸͺͺ
  • -g path β€” generates a TLS client certificate using openssl(1) and writes it to path. πŸ› οΈ
  • -h host | host = host β€” connects to host. πŸ“‘
  • -i pattern | ignore = pattern β€” adds a case-insensitive message ignore pattern, which may contain β€˜*’, β€˜?’ and β€˜[]’ wildcards as in glob(7). The format of the pattern is: nick[!user@host [command [channel [message]]]]. The commands which can be matched are: INVITE, JOIN, NICK, NOTICE, PART, PRIVMSG, QUIT, SETNAME. πŸ™ˆ
  • -j channels [keys] | join = channels [keys] β€” joins the comma-separated list of channels with the optional comma-separated list of channel keys. πŸšͺ
  • -k path | priv = priv β€” loads the TLS client private key from path. The path is searched for in the same manner as configuration files. πŸ”‘
  • -l | log β€” logs chat events to files in paths $XDG_DATA_HOME/catgirl/log/network/channel/YYYY-MM-DD.log. πŸ“
  • -m mode | mode = mode β€” sets the user mode. πŸŽ›οΈ
  • -n nick [...] | nick = nick [...] β€” sets nickname to nick. The default nickname is the value of the environment variable USER. Additional space-separated nicks will be tried in order if the first is not available, and all nicks are treated as highlight words. πŸ‘‘
  • -o β€” prints the server certificate chain to standard output in PEM format and exits. πŸ–¨οΈ
  • -p port | port = port β€” connects to port. The default port is 6697. πŸ”Œ
  • -q | quiet β€” raises the default message visibility threshold for new windows, hiding general events (joins, quits, etc.). 🀫
  • -r real | real = real β€” sets realname to real. The default realname is the same as the nickname. πŸͺž
  • -s name | save = name β€” saves and loads the contents of windows from name in $XDG_DATA_DIRS/catgirl, or an absolute or relative path if name starts with β€˜/’, β€˜./’, or β€˜../’. πŸ’Ύ
  • -t path | trust = path β€” trusts the self-signed certificate loaded from path and disables server name verification. The path is searched for in the same manner as configuration files. See β€œConnecting to Servers with Self-signed Certificates”. 🀝
  • -u user | user = user β€” sets username to user. The default username is the same as the nickname. πŸ§‘β€πŸ’»
  • -v | debug β€” logs raw IRC messages to the <debug> window as well as standard error if it is not a terminal. πŸ›
  • -w pass | pass = pass β€” logs in with the server password pass. Leave pass blank to prompt for the password. πŸ”‘

πŸŽ€ Configuring CertFP πŸŽ€

  1. Generate a new TLS client certificate:
$ catgirl -g ~/.config/catgirl/example.pem
  1. Connect to the server using the certificate:
cert = example.pem
# or: $ catgirl -c example.pem
  1. Identify with services or use sasl-plain, then add the certificate fingerprint to your account:
/ns CERT ADD
  1. Enable SASL EXTERNAL to require successful authentication when connecting (not possible on all networks):
cert = example.pem
sasl-external
# or: $ catgirl -e -c example.pem

🌈 Connecting to Servers with Self-signed Certificates 🌈

  1. Connect to the server and write its certificate to a file:
$ catgirl -o -h irc.example.org > ~/.config/catgirl/example.pem
  1. Configure catgirl to trust the certificate:
trust = example.pem
# or: $ catgirl -t example.pem

🌸 INTERFACE 🌸

The catgirl interface is split into three areas. 🫧

✨ Status Line ✨

The top line of the terminal shows window statuses. Only the currently active window and windows with activity are listed. The status line for a window might look like this:

1+ #ascii.town +3 ~7 @

The number on the left is the window number. Following it may be one of β€˜-’, β€˜+’, β€˜++’, as well as β€˜=’. These indicate the message visibility threshold and mute status of the window.

On the right side, the number following β€˜+’ indicates the number of unread messages. The number following β€˜~’ indicates how many lines are below the scroll position. An β€˜@’ indicates that there is unsent input in the window's β€œInput Line”.

catgirl will also set the terminal title, if possible, to the name of the network and active window, followed by the unread count for that window, and the unread count for all other windows in parentheses. πŸ’…

πŸ’¬ Chat Area πŸ’¬

The chat area shows messages and events. Regular messages are shown with the nick between β€˜<>’ angle brackets. Actions are shown with the nick preceded by β€˜*’. Notices are shown with the nick between β€˜-’ hyphens.

Blank lines are inserted into the chat as unread markers.

While scrolling, the most recent 5 lines of chat are kept visible below a marker line. πŸ“œ

🎀 Input Line 🎀

The bottom line of the terminal is where messages and commands are entered. When entering a message, action or notice, your nick appears on the left, as it would in the β€œChat Area”. When entering a command, no nick is shown.

Formatting codes are shown in the input line as reverse-video uppercase letters. These will not appear in the sent message.

Input that is too long to send as a single message will have a red background starting at the point where it will be split into a second message. βœ‚οΈ

🌸 COMMANDS 🌸

Okay bestie, this is the good part. Every command can be shortened to any unique prefix β€” so /join can just be /j. Type less, slay more πŸ’…


πŸ’¬ Chat Commands

  • /away [message] β€” Sets your away status, or clears it if you don't give a message. Poof, gone, bye ✨
  • /cs command β€” Sends a command straight to ChanServ.
  • /invite nick β€” Invites a user to the channel. Bringing your bestie in, iconic behavior 🫢
  • /join [channel [key]] β€” Joins the channel you named, the current channel, or the one you got invited to. The key is if it's locked, iykyk πŸ”‘
  • /list [channel] β€” Lists channels.
  • /me [action] β€” Sends an action message. You know, the * username does a thing vibe.
  • /msg nick message β€” Sends a private message. DMs, but make it IRC.
  • /names β€” Lists the users in the channel.
  • /nick nick β€” Changes nicknames. New name, new era, main character energy πŸ‘‘
  • /notice message β€” Sends a notice.
  • /ns command β€” Sends a command to NickServ.
  • /ops β€” Lists the channel operators.
  • /part [message] β€” Leaves the channel. Not me leaving but leaving dramatically 😭
  • /query nick β€” Starts a private conversation.
  • /quit [message] β€” Quits IRC. The final exit, the closing credits πŸ’€
  • /quote command β€” Sends a raw IRC command. Fr fr, use M-- to show unknown replies.
  • /say message β€” Sends a regular message.
  • /setname name β€” Updates realname, if the server supports it.
  • /topic [topic] β€” Shows or sets the channel topic. Pro tip bestie: press Tab twice to copy the current topic πŸŽ€
  • /whois [nick] β€” Queries info about a user, or about yourself. Self-obsessed? We call that research ✨
  • /whowas nick β€” Queries past info about a user. The lore πŸ¦‹

πŸ–₯️ UI Commands

  • /close [name | num] β€” Closes the named, numbered, or current window.
  • /copy [nick | substring] β€” Copies the most recent URL from that nick, or from a matching substring.
  • /debug β€” Toggles logging in the <debug> window.
  • /exec command β€” Runs command with SHELL and treats its output as input to the current window β€” including as commands. Very much giving "automation queen" πŸ”₯
  • /help β€” Views this manual. Type q to come back to catgirl.
  • /help topic β€” Lists the server help for a topic. Try /help index for a list of topics.
  • /highlight [pattern] β€” Lists message highlight patterns, or temporarily adds one. Wanna make it permanent? Use the highlight option.
  • /ignore [pattern] β€” Lists message ignore patterns, or temporarily adds one. Same deal β€” for permanent, use the ignore option.
  • /move [name] num β€” Moves the named or current window to that number.
  • /o ... β€” Alias of /open.
  • /open [count] β€” Opens each of the count most recent URLs.
  • /open nick | substring β€” Opens the most recent URL from that nick or matching substring.
  • /unhighlight pattern β€” Temporarily removes a message highlight pattern.
  • /unignore pattern β€” Temporarily removes a message ignore pattern.
  • /window β€” Lists all windows.
  • /window name | substring β€” Switches to a window by name or matching substring.
  • /window num | /num β€” Switches to a window by number.

πŸ‘‘ Operator Commands

  • /ban [mask ...] β€” Lists or bans masks from the channel.
  • /deop [nick ...] β€” Revokes channel operator status from users, or from yourself.
  • /devoice [nick ...] β€” Revokes voice from users in the channel, or from yourself.
  • /except [mask ...] β€” Lists or adds masks to the channel ban exception list.
  • /invex [mask ...] β€” Lists or adds masks to the channel invite list.
  • /kick nick [message] β€” Kicks a user from the channel. The audacity, the drama πŸ’€
  • /mode [modes] [param ...] β€” Shows or sets channel modes. In the <network> window, it shows or sets user modes instead.
  • /op [nick ...] β€” Grants channel operator status to users, or to yourself. Power up ✨
  • /unban mask ... β€” Unbans masks from the channel.
  • /unexcept mask ... β€” Removes masks from the channel ban exception list.
  • /uninvex mask ... β€” Removes masks from the channel invite list.
  • /voice [nick ...] β€” Grants voice to users in the channel, or to yourself.

⌨️ KEY BINDINGS ⌨️

The catgirl interface gives you emacs(1)-like line editing, plus keys for IRC formatting. The prefixes C- and M- mean the control and meta (alt) modifiers, respectively. Muscle memory, but make it cute 🧚

Line Editing

  • C-a β€” Move to the beginning of the line.
  • C-b β€” Move left.
  • C-d β€” Delete the next character.
  • C-e β€” Move to the end of the line.
  • C-f β€” Move right.
  • C-k β€” Delete to the end of the line.
  • C-t β€” Transpose characters.
  • C-u β€” Delete to the beginning of the line.
  • C-w β€” Delete the previous word.
  • C-x β€” Expand a text macro that begins with \.
  • C-y β€” Paste the text you previously deleted.
  • M-Enter β€” Insert a newline without sending a command.
  • M-b β€” Move to the previous word.
  • M-d β€” Delete the next word.
  • M-f β€” Move to the next word.
  • M-q β€” Collapse all whitespace.
  • Tab β€” Complete a nick, channel, command, or macro.

Arrow keys and navigation keys also work as expected. Obviously πŸ’…

Window Keys

  • C-l β€” Redraw the UI.
  • C-n β€” Switch to the next window.
  • C-p β€” Switch to the previous window.
  • C-r β€” Scroll to the previous line matching your input.
  • C-s β€” Scroll to the next line matching your input.
  • C-v β€” Scroll down a page.
  • M-+ β€” Raise the message visibility threshold, hiding ignored messages, general events (joins, quits, etc.), or non-highlighted messages.
  • M-- β€” Lower the message visibility threshold, showing ignored messages and unknown replies.
  • M-= β€” Toggle mute. Muted windows don't show up in the status line unless you're mentioned. 🀫
  • M-/ β€” Switch to the previously selected window.
  • M-< β€” Scroll to the top.
  • M-> β€” Scroll to the bottom.
  • M-n β€” Switch to window by number 0–9.
  • M-a β€” Cycle through unread windows.
  • M-l β€” List the contents of the window without word-wrapping and with timestamps. Press Enter to return to catgirl.
  • M-m β€” Insert a blank line in the window.
  • M-n β€” Scroll to the next highlight.
  • M-p β€” Scroll to the previous highlight.
  • M-s β€” Reveal spoiler text.
  • M-t β€” Toggle timestamps.
  • M-u β€” Scroll to the first unread line.
  • M-v β€” Scroll up a page.
Not me noticing M-n shows up twice in this list. Bestie, I promise I'm not duplicating it β€” it's really in there twice. I don't make the rules πŸ™ˆ

IRC Formatting

  • C-z C-v β€” Insert the next input character literally.
  • C-z b β€” Toggle bold.
  • C-z c β€” Set or reset color.
  • C-z i β€” Toggle italics.
  • C-z o β€” Reset formatting.
  • C-z p β€” Manually toggle paste mode.
  • C-z r β€” Toggle reverse color.
  • C-z s β€” Set spoiler text (black on black).
  • C-z u β€” Toggle underline.

Some color codes can be inserted with these:

  • C-z A β€” gray
  • C-z B β€” blue
  • C-z C β€” cyan
  • C-z G β€” green
  • C-z K β€” black
  • C-z M β€” magenta
  • C-z N β€” brown (dark red)
  • C-z O β€” orange (dark yellow)
  • C-z P β€” pink (light magenta)
  • C-z R β€” red
  • C-z W β€” white
  • C-z Y β€” yellow

Wanna set other colors? Follow C-z c with one or two digits for the foreground color, and optionally follow that with a comma and one or two digits for the background color. To reset the color, follow C-z c with a non-digit. ✨

The color numbers are as follows:

  • 0 β€” white
  • 1 β€” black
  • 2 β€” blue
  • 3 β€” green
  • 4 β€” red
  • 5 β€” brown (dark red)
  • 6 β€” magenta
  • 7 β€” orange (dark yellow)
  • 8 β€” yellow
  • 9 β€” light green
  • 10 β€” cyan
  • 11 β€” light cyan
  • 12 β€” light blue
  • 13 β€” pink (light magenta)
  • 14 β€” gray
  • 15 β€” light gray
  • 99 β€” default

🌍 ENVIRONMENT 🌍

  • SHELL β€” The shell used by /exec. The default is /bin/sh.
  • USER β€” The default nickname.

πŸ“ FILES πŸ“

  • $XDG_CONFIG_DIRS/catgirl β€” Configuration files are searched for first in $XDG_CONFIG_HOME, usually ~/.config, followed by the colon-separated list of paths in $XDG_CONFIG_DIRS, usually /etc/xdg.
  • ~/.config/catgirl β€” The most likely location of configuration files. Honestly, probably where yours live πŸŽ€
  • $XDG_DATA_DIRS/catgirl β€” Save files are searched for first in $XDG_DATA_HOME, usually ~/.local/share, followed by the colon-separated list of paths in $XDG_DATA_DIRS, usually /usr/local/share:/usr/share.
  • ~/.local/share/catgirl β€” The most likely location of save files.

πŸšͺ EXIT STATUS πŸšͺ

The catgirl client exits 0 if the user requested it, EX_UNAVAILABLE (69) if the connection is lost, and >0 if any other error occurs.

The connection getting dropped and taking exit code 69 with it? It's giving comedy, and honestly I'm obsessed 😭

✨ EXAMPLES ✨

Join #ascii.town straight from the command line:

$ catgirl -h irc.tilde.chat -j '#ascii.town'

Create a configuration file in ~/.config/catgirl/tilde:

host = irc.tilde.chat
join = #ascii.town

Load that configuration file:

$ catgirl tilde

✨ STANDARDS ✨

okay bestie, gather round, these are the receipts πŸ“šβœ¨ the whole bibliography of specs catgirl is vibing with. every single one, no skipping, no cap:


πŸ¦‹ Extensions πŸ¦‹

bestie, catgirl implements the causal.agency/consumer vendor-specific IRCv3 capability that pounce(1) offers ✨. and the consumer position? it's stored in the save file, periodt πŸ’Ύ.

πŸ‘‘ AUTHORS πŸ‘‘

the icon, the legend, the main character: June McEnroe <june@causal.agency> πŸ’–.

πŸ’€ BUGS πŸ’€

found a gremlin? Send mail to ⟨list+catgirl@causal.agency⟩ or join #ascii.town on irc.tilde.chat 🫢.


this page is Debian, dated October 11, 2023, and it's CATGIRL(1) β€” mwah, bye bestie πŸ’…πŸŽ€

πŸ“¦ where this page comes from