kirc

KISS for IRC, a tiny IRC client written in POSIX C99.

Packaging status Codacy status

## Features * Excellent cross-platform compatibility. * No dependencies other than a C99 compiler. * Native SASL PLAIN and EXTERNAL authentication support. * TLS/SSL protocol capable (via external TLS utilities). * Full chat history logging. * Multi-channel joining at server connection. * Simple command aliases and full support for all RFC 2812 commands. * Easy color scheme definition via ANSI 8-bit colors. ## Installation & Usage Building and installing on **KISS Linux** using the Community repository: ```shell kiss b kirc kiss i kirc ``` Building and installing on **Arch** and **Arch-based** distros using the AUR: ```shell git clone https://aur.archlinux.org/kirc-git.git cd kirc makepkg -si ``` Building and installing from source (works on **Raspbian**, **Debian**, **Ubuntu** and many other Unix distributions): ```shell git clone https://github.com/mcpcpc/kirc.git cd kirc make make install ``` ### Usage Consult `man kirc` for a full list and explanation of available `kirc` arguments. ```shell kirc [-s hostname] [-p port] [-c channels] [-n nickname] [-r realname] [-u username] [-k password] [-a token] [-x command] [-w nick_width] [-o logfile] [-e|v|V] ``` ### Command Aliases ```shell Send a PRIVMSG to the current channel. @ Send a message to a specified channel or nick / Send command to IRC server (see RFC 2812 for full list). /# Assign new default message channel. ``` ### User Input Key Bindings * **CTRL+B** or **LEFT ARROW** moves the cursor one character to the left. * **CTRL+F** or **RIGHT ARROW** moves the cursor one character to the right. * **CTRL+A** moves the cursor to the end of the line. * **CTRL+E** or **HOME** moves the cursor to the start of the line. * **CTRL+W** deletes the previous word. * **CTRL+U** deletes the entire line. * **CTRL+K** deletes the from current character to end of line. ## Transport Layer Security (TLS) Support There is no native TLS/SSL support. Instead, users can achieve this functionality by using third-party utilities (e.g. stunnel, [socat](https://linux.die.net/man/1/socat), ghosttunnel, etc). * Example using `socat`. Remember to replace items enclosed with `<>`. ```shell socat tcp-listen:6667,reuseaddr,fork,bind=127.0.0.1 ssl::6697 kirc -s 127.0.0.1 -c 'channel' -n 'name' -r 'realname' ``` ## SASL PLAIN Authentication In order to connect using `SASL PLAIN` mechanism authentication, the user must provide the required token during the initial connection. If the authentication token is base64 encoded and, therefore, can be generated a number of ways. For example, using Python, one could use the following: ```shell python -c 'import base64; print(base64.encodebytes(b"nick\x00nick\x00password"))' ``` For example, lets assume an authentication identity of `jilles` and password `sesame`: ```shell $ python -c 'import base64; print(base64.encodebytes(b"jilles\x00jilles\x00sesame"))' b 'amlsbGVzAGppbGxlcwBzZXNhbWU=\n' $ kirc -n jilles -a amlsbGVzAGppbGxlcwBzZXNhbWU= ``` ## SASL EXTERNAL Authentication Similar to `SASL PLAIN`, the `SASL EXTERNAL` mechanism allows us to authenticate using credentials by external means. An example where this might be required is when trying to connect to an IRC host through [Tor](https://www.torproject.org/). To do so, we can using third-party utilities (e.g. stunnel, socat, ghosttunnel, etc). * Example using `socat`. Remember to replace items enclosed with `<>`. ```shell socat TCP4-LISTEN:1110,fork,bind=0,reuseaddr SOCKS4A:127.0.0.1::,socksport=9050 socat TCP4-LISTEN:1111,fork,bind=0,reuseaddr 'OPENSSL:127.0.0.1:1110,verify=0,cert=' kirc -e -s 127.0.0.1 -p 1111 -n -x 'wait 5000' ``` ## Color Scheme Definition Applying a new color scheme is easy! One of the quickest ways is to use an application, such as [kfc](https://github.com/mcpcpc/kfc), to apply pre-made color palettes. Alternatively, you can manually apply escape sequences to change the default terminal colors. * Example using `kfc` ```shell kfc -s gruvbox ``` * Example using ANSI escape sequences ```shell printf -e "\033]4;;#" # Replace with the desired Hex code (e.g. #FFFFFF is white). # Replace with the one of the numbers below: # 0 - Regular Black # 1 - Regular Red # 2 - Regular Green # 3 - Regular Yellow # 4 - Regular Blue # 5 - Regular Magenta # 6 - Regular Cyan # 7 - Regular White # 8 - Bright Black # 9 - Bright Red # 10 - Bright Green # 11 - Bright Yellow # 12 - Bright Blue # 13 - Bright Magenta # 14 - Bright Cyan # 15 - Bright White ``` ## Contact For any further questions or concerns, feel free to reach out to me, [mcpcpc](https://github.com/mcpcpc), on `#kirc` or `#kisslinux` Freenode IRC channels.