summaryrefslogtreecommitdiff
path: root/README.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'README.adoc')
-rw-r--r--README.adoc210
1 files changed, 210 insertions, 0 deletions
diff --git a/README.adoc b/README.adoc
new file mode 100644
index 0000000..3c09ba7
--- /dev/null
+++ b/README.adoc
@@ -0,0 +1,210 @@
+xK
+==
+
+'xK' (chat kit) is an IRC software suite consisting of a daemon, bot, terminal
+client, and a web frontend for the client. It's all you're ever going to
+need for chatting, so long as you can make do with slightly minimalist software.
+
+They're all lean on dependencies, and offer a maximally permissive licence.
+
+xC
+--
+The IRC client, and the core of 'xK'. It is largely defined by building on top
+of GNU Readline or BSD Editline that have been hacked to death. Its interface
+should feel somewhat familiar for weechat or irssi users.
+
+image::xC.webp[align="center"]
+
+It has most features you'd expect of an IRC client, such as being multiserver,
+a powerful configuration system, integrated help, text formatting, automatic
+message splitting, multiline editing, bracketed paste support, word wrapping
+that doesn't break links, autocomplete, logging, CTCP queries, auto-away,
+command aliases, SOCKS proxying, SASL EXTERNAL authentication using TLS client
+certificates, a remote relay interface, or basic support for Lua scripting.
+As a unique bonus, you can launch a full text editor from within.
+
+xP
+--
+The web frontend for 'xC', making use of its networked relay interface.
+It intentionally differs in that it uses a sans-serif font, and it shows
+the list of all buffers in a side panel. Otherwise it is a near replica,
+including link:xC.adoc#_key_bindings[keyboard shortcuts].
+
+image::xP.webp[align="center"]
+
+xD
+--
+The IRC daemon. It is designed for use as a regular user application rather
+than a system-wide daemon, and follows the XDG Base Directory Specification.
+If all you want is a decent, minimal IRCd for testing purposes or a small
+network of respectful users (or bots), this one will do it just fine.
+
+It autodetects TLS on incoming connections (I'm still wondering why everyone
+doesn't have this), authenticates operators via TLS client certificate
+fingerprints, and supports a number of IRCv3 capabilities.
+
+What it notably doesn't support is online changes to configuration, any limits
+besides the total number of connections and mode `+l`, or server linking
+(which also means no services).
+
+This program has been https://git.janouch.name/p/haven/src/branch/master/hid[
+ported to Go] in a different project, and development continues over there.
+
+xB
+--
+The IRC bot. While originally intended to be a simple rewrite of my old GNU AWK
+bot in C, it fairly quickly became a playground, and it eventually got me into
+writing the rest of this package.
+
+Its main characteristic is that it runs plugins as coprocesses, allowing for
+enhanced reliability and programming language freedom. Moreover, it recovers
+from any crashes, and offers native SOCKS support (even though socksify can add
+that easily to any program).
+
+Packages
+--------
+Regular releases are sporadic. git master should be stable enough. You can get
+a package with the latest development version from Archlinux's AUR.
+
+Building
+--------
+Build-only dependencies: CMake, pkg-config, awk, liberty (included),
+ asciidoctor or asciidoc (recommended but optional) +
+Common runtime dependencies: openssl +
+Additionally for 'xC': curses, libffi, readline >= 6.0 or libedit >= 2013-07-12,
+ lua >= 5.3 (optional) +
+
+ $ git clone --recursive https://git.janouch.name/p/xK.git
+ $ mkdir xK/build
+ $ cd xK/build
+ $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RelWithDebInfo \
+ -DWANT_READLINE=ON -DWANT_LIBEDIT=OFF -DWITH_LUA=ON
+ $ make
+
+To install the application, you can do either the usual:
+
+ # make install
+
+Or you can try telling CMake to make a package for you:
+
+ $ cpack -G DEB # also supported: RPM, FreeBSD
+ # dpkg -i xK-*.deb
+
+Usage
+-----
+'xC' has in-program configuration. Just run it and read the instructions.
+Consult its link:xC.adoc[man page] for details about the interface.
+
+For the rest you might want to generate a configuration file:
+
+ $ xB --write-default-config
+ $ xD --write-default-config
+
+After making any necessary edits to the file (there are comments to aid you in
+doing that), simply run the appropriate program with no arguments:
+
+ $ xB
+ $ xD
+
+'xB' stays running in the foreground, therefore I recommend launching it inside
+a Screen or tmux session.
+
+'xD', on the other hand, immediately forks into the background. Use the PID
+file or something like `killall` if you want to terminate it. You can run it
+as a `forking` type systemd user service.
+
+xP
+~~
+The precondition for running 'xC' frontends is enabling its relay interface:
+
+ /set general.relay_bind = "127.0.0.1:9000"
+
+To build the web server, you'll need to install the Go compiler, and run `make`
+from the _xP_ directory. Then start it from the _public_ subdirectory,
+and navigate to the adress you gave it as its first argument--in the following
+example, that would be http://localhost:8080[]:
+
+ $ ../xP 127.0.0.1:8080 127.0.0.1:9000
+
+For remote use, it's recommended to put 'xP' behind a reverse proxy, with TLS,
+and some form of HTTP authentication. Pass the external URL of the WebSocket
+endpoint as the third command line argument in this case.
+
+Client Certificates
+-------------------
+'xC' will use the SASL EXTERNAL method to authenticate using the TLS client
+certificate specified by the respective server's `tls_cert` option if you add
+`sasl` to the `capabilities` option and the server supports this.
+
+'xD' uses SHA-1 fingerprints of TLS client certificates to authenticate users.
+To get the fingerprint from a certificate file in the required form, use:
+
+ $ openssl x509 -in public.pem -outform DER | sha1sum
+
+Custom Key Bindings in xC
+-------------------------
+The default and preferred frontend used in 'xC' is GNU Readline. This means
+that you can change your bindings by editing '~/.inputrc'. For example:
+
+....
+# Preload with system-wide settings
+$include /etc/inputrc
+
+# Make M-left and M-right reorder buffers
+$if xC
+"\e\e[C": move-buffer-right
+"\e\e[D": move-buffer-left
+$endif
+....
+
+Consult the source code and the GNU Readline manual for a list of available
+functions. Also refer to the latter for the exact syntax of this file.
+Beware that you can easily break the program if you're not careful.
+
+How do I make xC look like the screenshot?
+------------------------------------------
+With the defaults, 'xC' doesn't look too fancy because I don't want to have
+a hard dependency on either Lua for the bundled script that provides an easily
+adjustable enhanced prompt, or on 256-colour terminals. Moreover, it's nearly
+impossible to come up with a colour theme that would work well with both
+black-on-white and white-on-black terminals, or anything wild in between.
+
+Assuming that your build supports Lua plugins, and that you have a decent,
+properly set-up terminal emulator, it suffices to run:
+
+ /set general.pager = Press Tab here and change +Gb to +Gb1d
+ /set general.date_change_line = "%a %e %b %Y"
+ /set general.plugin_autoload += "fancy-prompt.lua"
+ /set theme.userhost = "109"
+ /set theme.join = "108"
+ /set theme.part = "138"
+ /set theme.external = "248"
+ /set theme.timestamp = "250 255"
+ /set theme.read_marker = "202"
+
+Configuration profiles
+----------------------
+Even though the applications don't directly support configuration profiles,
+they conform to the XDG standard, and thus you can change the location they
+load configuration from via XDG_CONFIG_HOME (normally '~/.config') and the
+location where store their data via XDG_DATA_HOME (normally '~/.local/share').
+
+It would be relatively easy to make the applications assume whatever name you
+run them under (for example by using symbolic links), and load different
+configurations accordingly, but I consider it rather messy and unnecessary.
+
+Contributing and Support
+------------------------
+Use https://git.janouch.name/p/xK to report any bugs, request features,
+or submit pull requests. `git send-email` is tolerated. If you want to discuss
+the project, feel free to join me at ircs://irc.janouch.name, channel #dev.
+
+Bitcoin donations are accepted at: 12r5uEWEgcHC46xd64tt3hHt9EUvYYDHe9
+
+License
+-------
+This software is released under the terms of the 0BSD license, the text of which
+is included within the package along with the list of authors.
+
+Note that 'xC' becomes GPL-licensed when you link it against GNU Readline,
+but that is not a concern of this source package. The licenses are compatible.