CATGIRL(1)                BSD General Commands Manual               CATGIRL(1)

NAME
    catgirl — IRC client

SYNOPSIS
    catgirl [-KRelqv] [-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
    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 (usually ~/.config/catgirl) un‐
    less the path starts with ‘/’, ‘./’ or ‘../’.  Files and flags listed
    later on the command line take precedence over those listed earlier.

    Each option is placed on a line, and lines beginning with ‘#’ are ig‐
    nored.  The options are listed below following their corresponding flags.

    -C util | copy = util
            Set the utility used by /copy.  Subsequent copy options append
            arguments to util.  The URL to copy is provided to util on stan‐
            dard input.  The default is the first available of pbcopy(1),
            wl-copy(1), xclip(1), xsel(1).

    -H seed,bound | hash = seed,bound
            Set 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
            Add a case-insensitive message highlight pattern, which may con‐
            tain ‘*’, ‘?’ 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.  Replace the username with a hash
            of its original value.

    -N util | notify = util
            Send notifications using a utility.  Subsequent notify options
            append arguments to util.  The window name and message are pro‐
            vided to util as two additional arguments, appropriate for
            notify-send(1).

    -O util | open = util
            Set the utility used by /open.  Subsequent open options append
            arguments to util.  The URL to open is provided to util as an ar‐
            gument.  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 re‐
            quires the account password in plain text, it is recommended to
            use CertFP instead.  See Configuring CertFP.

    -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, au‐
            thenticate 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.  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 channels [keys] | join = channels [keys]
            Join the comma-separated list of channels with the optional
            comma-separated list of channel keys.

    -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.

    -m mode | mode = mode
            Set the user mode.

    -n nick | nick = nick
            Set nickname to nick.  The default nickname is the value of the
            environment variable USER.

    -o      Print the server certificate chain to standard output in PEM for‐
            mat and exit.

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

    -q | quiet
            Raise the default message visibility threshold for new windows,
            hiding general events.

    -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:

               /ns CERT ADD

    4.   Enable SASL EXTERNAL to require successful authentication when con‐
         necting (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

    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 [key]]
            Join the named channel, the current channel, or the channel
            you've been invited to.

    /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 or yourself.

    /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 the named or current 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
            List all windows.

    /window name | substring
            Switch to window by name or matching substring.

    /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, gen‐
            eral 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 un‐
            less 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 back‐
    ground 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 any other error occurs.

EXAMPLES
    Join #ascii.town 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 the configuration file:

          catgirl tilde

STANDARDS
    Adam and 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, and 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, and 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, and 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, and 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 and D. Reed, Internet Relay Chat Protocol, IETF, RFC 1459,
    https://tools.ietf.org/html/rfc1459, May 1993.

    William Pitcock and 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.

    James Wheare, Reply Client Tag, IRCv3 Working Group,
    https://ircv3.net/specs/client-tags/reply.

    James Wheare, Message IDs, IRCv3 Working Group,
    https://ircv3.net/specs/extensions/message-ids.

    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 implements the causal.agency/consumer vendor-specific
    IRCv3 capability offered by pounce(1).  The consumer position is stored
    in the save file.

AUTHORS
    June Bug <[email protected]>

BUGS
    Send mail to ⟨[email protected]⟩ or join #ascii.town on
    irc.tilde.chat.

BSD                              July 20, 2021                             BSD