CATGIRL(1)

NAME
catgirl - IRC client

SYNOPSIS
catgirl [-KRelv] [-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] [-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
The catgirl IRC client provides a curses interface for TLS-only Internet Relay Chat. The only required option is -h, the host name to connect to. See EXAMPLES for managing further configuration. Type /help 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 $XDG_CONFIG_DIRS/catgirl unless the path starts with ‘/’, ‘./’ or ‘../’. Each option is placed on a line, and lines beginning with ‘#’ are ignored. The options are listed below following their corresponding flags.

The arguments are as follows:

-C util, copy = util
    Set the utility used by /copy. Use more than once to add arguments to util. The default is the first available of pbcopy(1), wl-copy(1), xclip(1), xsel(1).

-H init,bound, hash = init,bound
    Set the initial value of the nick and channel color hash function and the maximum IRC color value used. 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
    Add a case-insensitive message highlight pattern, which may contain ‘*’, ‘’? and ‘[]’ wildcards as in glob(7). The format of the pattern is as follows:

    nick[!user@host [command [channel [message ]]]]

    The commands which can be filtered are: INVITE, JOIN, NICK, NOTICE, PART, PRIVMSG, QUIT, SETNAME.

-K, kiosk
    Disable the /copy, /debug, /exec, /join, /list, /msg, /open, /part, /query, /quote commands.

-N util, notify = util
    Send notifications using a utility. Use more than once to add arguments to util. Two additional arguments are passed to util: a title and a description, appropriate for notify-send(1).

-O util, open = util
    Set the utility used by /open. Use more than once to add arguments to util. The default is the first available of open(1), xdg-open(1).

-R, restrict
    Disable the /copy, /exec and /open commands, the -N option, and viewing this manual with /help.

-S host, bind = host
    Bind to source address host when connecting to the server.

-T format, timestamp [= format]
    Show timestamps by default, in the specified strftime(3) format. The default format is "%X".

-a user:pass, sasl-plain = user:pass
    Authenticate as user with pass using SASL PLAIN. Since this requires the account password in plain text, it is recommended to use SASL EXTERNAL instead with -e.

-c path, cert = path
    Load 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 -k. With -e, authenticate using SASL EXTERNAL. Certificates can be generated with -g.

-e, sasl-external
    Authenticate using SASL EXTERNAL, also known as CertFP. The TLS client certificate is loaded with -c. For more information, see Configuring CertFP.

-g path
    Generate a TLS client certificate using openssl(1) and write it to path.

-h host, host = host
    Connect to host.

-i pattern, ignore = pattern
    Add a case-insensitive message ignore pattern, which may contain ‘*’, ‘’? and ‘[]’ wildcards as in glob(7). The format of the pattern is as follows:

    nick[!user@host [command [channel [message ]]]]

    The commands which can be filtered are: INVITE, JOIN, NICK, NOTICE, PART, PRIVMSG, QUIT, SETNAME.

-j join, join = join
    Join the comma-separated list of channels join.

-k path, priv = priv
    Load the TLS client private key from path. The path is searched for in the same manner as configuration files.

-l, log
    Log chat events to files in paths $XDG_DATA_HOME/catgirl/log/network/channel/YYYY-MM-DD.log.

-n nick, nick = nick
    Set nickname to nick. The default nickname is the user's name.

-o  Print the server certificate chain to standard output in PEM format and exit.

-p port, port = port
    Connect to port. The default port is 6697.

-r real, real = real
    Set realname to real. The default realname is the same as the nickname.

-s name, save = name
    Save and load 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
    Trust the self-signed certificate loaded from path and disable 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
    Set username to user. The default username is the same as the nickname.

-v, debug
    Log raw IRC messages to the <debug> window as well as standard error if it is not a terminal.

-w pass, pass = pass
    Log in with the server password pass.

  Configuring CertFP

1.  Generate a new TLS client certificate:

        catgirl -g ~/.config/catgirl/example.pem

2.  Connect to the server using the certificate:

        cert = example.pem
        # or: catgirl -c example.pem

3.  Identify with services or use sasl-plain, then add the certificate fingerprint to your account:

        /msg NickServ CERT ADD

4.  Enable SASL EXTERNAL to require successful authentication when connecting:

        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

2.  Configure catgirl to trust the certificate:

        trust = example.pem
        # or: catgirl -t example.pem

COMMANDS
Any unique prefix can be used to abbreviate a command. For example, /join can be typed /j.

  Chat Commands

/away [message]
    Set or clear your away status.

/cs command
    Send a command to ChanServ.

/invite nick
    Invite a user to the channel.

/join channel
    Join a channel.

/list [channel]
    List channels.

/me [action]
    Send an action message.

/msg nick message
    Send a private message.

/names
    List users in the channel.

/nick nick
    Change nicknames.

/notice message
    Send a notice.

/ns command
    Send a command to NickServ.

/ops
    List channel operators.

/part [message]
    Leave the channel.

/query nick
    Start a private conversation.

/quit [message]
    Quit IRC.

/quote command
    Send a raw IRC command. The /debug command is likely needed for command output.

/say message
    Send a regular message.

/setname name
    Update realname if supported by the server.

/topic [topic]
    Show or set the topic of the channel. Press Tab twice to copy the current topic.

/whois nick
    Query information about a user.

/whowas nick
    Query past information about a user.

  UI Commands

/close [name | num]
    Close the named, numbered or current window.

/copy [nick | substring]
    Copy the most recent URL from nick or matching substring.

/debug
    Toggle logging in the <debug> window.

/exec command
    Run command with SHELL and interpret its output as input to the current window, including as commands.

/help
    View this manual. Type q to return to catgirl.

/help topic
    List the server help for a topic. Try /help index for a list of topics.

/highlight [pattern]
    List message highlight patterns or temporarily add a pattern. To permanently add a pattern, use -I.

/ignore [pattern]
    List message ignore patterns or temporarily add a pattern. To permanently add a pattern, use -i.

/move [name] num
    Move named window to number.

/open [count]
    Open each of count most recent URLs.

/open nick | substring
    Open the most recent URL from nick or matching substring.

/unhighlight pattern
    Temporarily remove a message highlight pattern.

/unignore pattern
    Temporarily remove a message ignore pattern.

/window name
    Switch to window by name.

/window num, /num
    Switch to window by number.

  Operator Commands

/ban [mask ...]
    List or ban masks from the channel.

/deop [nick ...]
    Revoke channel operator status from users or yourself.

/devoice [nick ...]
    Revoke voice from users or yourself in the channel.

/except [mask ...]
    List or add masks to the channel ban exception list.

/invex [mask ...]
    List or add masks to the channel invite list.

/kick nick [message]
    Kick a user from the channel.

/mode [modes] [param ...]
    Show or set channel modes. In the <network> window, show or set user modes.

/op [nick ...]
    Grant users or yourself channel operator status.

/unban mask ...
    Unban masks from the channel.

/unexcept mask ...
    Remove masks from the channel ban exception list.

/uninvex mask ...
    Remove masks from the channel invite list.

/voice [nick ...]
    Grant users or yourself voice in the channel.

KEY BINDINGS
The catgirl interface provides emacs(1)-like line editing as well as keys for IRC formatting. The prefixes C- and M- represent the control and meta (alt) modifiers, respectively.

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

Arrow and navigation keys also work as expected.

  Window Keys
C-l Redraw the UI.
C-n Switch to next window.
C-p Switch to previous window.
C-r Scroll to previous line matching input.
C-s Scroll to next line matching input.
C-v Scroll down a page.
M-+ Raise message visibility threshold, hiding ignored messages, general events, or non-highlighted messages.
M-- Lower message visibility threshold, showing ignored messages.
M-= Toggle mute. Muted windows do not appear in the status line unless you are mentioned.
M-/ Switch to previously selected window.
M-< Scroll to top.
M-> Scroll to 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 next highlight.
M-p Scroll to previous highlight.
M-t Toggle timestamps.
M-u Scroll to first unread line.
M-v Scroll up a page.

  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 u
    Toggle underline.

Some color codes can be inserted with the following:
C-z A | gray | C-z N | brown (dark red)
C-z B | blue | C-z O | orange (dark yellow)
C-z C | cyan | C-z P | pink (light magenta)
C-z G | green | C-z R | red
C-z K | black | C-z W | white
C-z M | magenta | C-z Y | yellow

To set other colors, follow C-z c by one or two digits for the foreground color, optionally followed by a comma and one or two digits for the background color. To reset color, follow C-z c by a non-digit.

The color numbers are as follows:
0 | white | 8 | yellow
1 | black | 9 | light green
2 | blue | 10 | cyan
3 | green | 11 | light cyan
4 | red | 12 | light blue
5 | brown (dark red) | 13 | pink (light magenta)
6 | magenta | 14 | gray
7 | orange (dark yellow) | 15 | light gray
99 | default | |

ENVIRONMENT

SHELL
    The path executed by /exec with -c command. If unset, /bin/sh is used.

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 $XDG_CONFIG_DIRS, usually /etc/xdg.

~/.config/catgirl
    The most likely location of configuration files.

$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 $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 requested by the user, EX_UNAVAILABLE (69) if the connection is lost, and >0 if an error occurs.

EXAMPLES
Join #ascii.town from the command line:

    catgirl -h chat.freenode.net -j '#ascii.town'

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

    host = chat.freenode.net
    join = #ascii.town

Load the configuration file:

    catgirl freenode

STANDARDS

Adam, Attila Molnar, IRCv3.2 invite-notify Extension, IRCv3 Working Group, https://ircv3.net/specs/extensions/invite-notify-3.2.

Jack Allnutt, Modern IRC Client Protocol, ircdocs, https://modern.ircdocs.horse/index.html.

Kiyoshi Aman, Kyle Fuller, Stéphan Kochen, Alexey Sokolov, James Wheare, IRCv3 Message Tags, IRCv3 Working Group, https://ircv3.net/specs/extensions/message-tags.

Kiyoshi Aman, IRCv3.1 extended-join Extension, IRCv3 Working Group, https://ircv3.net/specs/extensions/extended-join-3.1.

Waldo Bastian, Ryan Lortie, Lennart Poettering, XDG Base Directory Specification, https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html, November 24, 2010.

Christine Dodrill, IRCv3.2 chghost Extension, IRCv3 Working Group, https://ircv3.net/specs/extensions/chghost-3.2.

Kyle Fuller, Stéphan Kochen, Alexey Sokolov, James Wheare, IRCv3.2 server-time Extension, IRCv3 Working Group, https://ircv3.net/specs/extensions/server-time-3.2.

Lee Hardy, Perry Lorier, Kevin L. Mitchell, William Pitcock, IRCv3.1 Client Capability Negotiation, IRCv3 Working Group, https://ircv3.net/specs/core/capability-negotiation-3.1.html.

S. Josefsson, The Base16, Base32, and Base64 Data Encodings, IETF, RFC 4648, https://tools.ietf.org/html/rfc4648, October 2006.

C. Kalt, Internet Relay Chat: Client Protocol, IETF, RFC 2812, https://tools.ietf.org/html/rfc2812, April 2000.

Janne Mareike Koschinski, IRCv3 setname Extension, IRCv3 Working Group, https://ircv3.net/specs/extensions/setname.

Mantas Mikulėnas, IRCv3.2 userhost-in-names Extension, IRCv3 Working Group, https://ircv3.net/specs/extensions/userhost-in-names-3.2.

Daniel Oaks, Standard Replies Extension, IRCv3 Working Group, https://ircv3.net/specs/extensions/standard-replies.

Daniel Oaks, IRC Formatting, ircdocs, https://modern.ircdocs.horse/formatting.html.

J. Oikarinen, D. Reed, Internet Relay Chat Protocol, IETF, RFC 1459, https://tools.ietf.org/html/rfc1459, May 1993.

William Pitcock, Jilles Tjoelker, IRCv3.1 SASL Authentication, IRCv3 Working Group, https://ircv3.net/specs/extensions/sasl-3.1.html.

William Pitcock, IRCv3.1 multi-prefix Extension, IRCv3 Working Group, https://ircv3.net/specs/extensions/multi-prefix-3.1.

K. Zeilenga, Ed., The PLAIN Simple Authentication and Security Layer (SASL) Mechanism, IETF, RFC 4616, https://tools.ietf.org/html/rfc4616, August 2006.

  Extensions
The catgirl client can take advantage of the causal.agency/consumer vendor-specific IRCv3 capability implemented by pounce(1). The consumer position is stored in the save file.

AUTHORS
June Bug <june@causal.agency>

BUGS
Send mail to <list+catgirl@causal.agency> or join #ascii.town on chat.freenode.net.