2015-09-27 00:45:50 +02:00
|
|
|
uirc3
|
|
|
|
=====
|
|
|
|
:compact-option:
|
2015-09-27 00:38:20 +02:00
|
|
|
|
2017-12-06 23:45:09 +01:00
|
|
|
The [line-through]#unethical# edgy IRC trinity. This project consists of an
|
|
|
|
experimental IRC client, daemon, and bot. It's all you're ever going to need
|
|
|
|
for chatting, as long as you can make do with minimalist software.
|
2014-06-14 20:26:28 +02:00
|
|
|
|
2015-04-30 01:39:08 +02:00
|
|
|
All of them have these potentially interesting properties:
|
2015-09-27 00:38:20 +02:00
|
|
|
|
2015-04-30 01:39:08 +02:00
|
|
|
- full IPv6 support
|
2015-07-15 22:56:34 +02:00
|
|
|
- TLS support, including client certificates
|
2016-03-06 17:59:45 +01:00
|
|
|
- lean on dependencies (with the exception of 'degesch')
|
2015-12-31 05:06:02 +01:00
|
|
|
- compact and arguably easy to hack on
|
2015-07-15 22:56:34 +02:00
|
|
|
- permissive license
|
2014-06-14 20:26:28 +02:00
|
|
|
|
2015-09-27 00:45:50 +02:00
|
|
|
degesch
|
|
|
|
-------
|
2015-11-21 21:23:59 +01:00
|
|
|
The IRC client. It is largely defined by being built on top of GNU Readline
|
|
|
|
that has been hacked to death. Its interface should feel somewhat familiar for
|
|
|
|
weechat or irssi users.
|
2015-04-30 01:39:08 +02:00
|
|
|
|
2016-10-30 18:49:07 +01:00
|
|
|
image::degesch.png[align="center"]
|
|
|
|
|
2015-11-21 21:23:59 +01:00
|
|
|
This is the largest application within the project. It has most of the stuff
|
|
|
|
you'd expect of an IRC client, such as being able to set up multiple servers,
|
|
|
|
a powerful configuration system, integrated help, text formatting, CTCP queries,
|
|
|
|
automatic splitting of overlong messages, autocomplete, logging to file,
|
2016-10-28 12:46:12 +02:00
|
|
|
auto-away, command aliases and basic support for Lua scripting.
|
2014-06-14 20:26:28 +02:00
|
|
|
|
2015-09-27 00:45:50 +02:00
|
|
|
kike
|
|
|
|
----
|
2015-07-11 17:04:36 +02:00
|
|
|
The IRC daemon. It is designed to be used as a regular user application rather
|
|
|
|
than a system-wide daemon. If all you want is a decent, minimal IRCd for
|
2015-11-21 21:23:59 +01:00
|
|
|
testing purposes or a small network of respectful users (or bots), this one will
|
|
|
|
do it just fine.
|
2014-07-21 05:10:25 +02:00
|
|
|
|
2015-04-30 01:39:08 +02:00
|
|
|
Notable features:
|
2015-09-27 00:38:20 +02:00
|
|
|
|
2015-11-21 21:23:59 +01:00
|
|
|
- TLS autodetection (why doesn't everyone have this?), using secure defaults
|
|
|
|
- IRCop authentication via TLS client certificates
|
|
|
|
- epoll/kqueue support; this means that it should be able to handle quite
|
2015-12-31 05:06:02 +01:00
|
|
|
a number of concurrent user connections
|
2015-07-06 01:54:02 +02:00
|
|
|
- partial IRCv3 support
|
2014-08-10 03:47:50 +02:00
|
|
|
|
2015-07-11 17:04:36 +02:00
|
|
|
Not supported:
|
2015-09-27 00:38:20 +02:00
|
|
|
|
2015-07-11 17:04:36 +02:00
|
|
|
- server linking (which also means no services); I consider existing protocols
|
2015-11-21 21:23:59 +01:00
|
|
|
for this purpose ugly and tricky to implement correctly; I've also found no
|
|
|
|
use for this feature yet
|
|
|
|
- online changes to configuration; the configuration system from degesch could
|
|
|
|
be used to implement this feature if needed
|
2015-09-27 00:38:20 +02:00
|
|
|
- limits of almost any kind, just connections and mode `+l`
|
|
|
|
|
2015-09-27 00:45:50 +02:00
|
|
|
ZyklonB
|
|
|
|
-------
|
2015-04-30 01:39:08 +02:00
|
|
|
The IRC bot. It builds upon the concept of my other VitaminA IRC bot. The main
|
|
|
|
characteristic of these two bots is that they run plugins as coprocesses, which
|
|
|
|
allows for enhanced reliability and programming language freedom.
|
|
|
|
|
2015-11-21 21:23:59 +01:00
|
|
|
While originally intended to be a simple rewrite of the original AWK bot in C,
|
|
|
|
it fairly quickly became a playground, and it eventually got me into writing
|
|
|
|
the rest of the package.
|
2015-04-30 01:39:08 +02:00
|
|
|
|
2015-11-21 21:23:59 +01:00
|
|
|
It survives crashes, server disconnects and timeouts, and also has native SOCKS
|
|
|
|
support (even though socksify can add that easily to any program).
|
2015-04-11 21:05:13 +02:00
|
|
|
|
2016-03-10 20:25:06 +01:00
|
|
|
Packages
|
|
|
|
--------
|
|
|
|
Regular releases are sporadic. git master should be stable enough. You can get
|
2017-12-06 23:45:09 +01:00
|
|
|
a package with the latest development version from Archlinux's AUR.
|
2016-03-10 20:25:06 +01:00
|
|
|
|
2015-09-27 00:45:50 +02:00
|
|
|
Building
|
|
|
|
--------
|
2015-09-27 00:38:20 +02:00
|
|
|
Build dependencies: CMake, pkg-config, help2man, awk, sh, liberty (included) +
|
2016-03-06 17:59:45 +01:00
|
|
|
Runtime dependencies: openssl +
|
|
|
|
Additionally for degesch: curses, libffi, lua >= 5.3 (optional),
|
|
|
|
readline >= 6.0 or libedit >= 2013-07-12
|
2014-07-21 05:10:25 +02:00
|
|
|
|
2017-12-02 13:06:39 +01:00
|
|
|
$ git clone --recursive https://git.janouch.name/p/uirc3.git
|
2015-09-27 00:19:42 +02:00
|
|
|
$ mkdir uirc3/build
|
|
|
|
$ cd uirc3/build
|
2015-05-05 08:46:59 +02:00
|
|
|
$ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug \
|
2015-11-21 19:50:37 +01:00
|
|
|
-DWANT_READLINE=ON -DWANT_LIBEDIT=OFF -DWANT_LUA=ON
|
2014-07-21 05:10:25 +02:00
|
|
|
$ make
|
|
|
|
|
2015-02-11 01:53:19 +01:00
|
|
|
To install the application, you can do either the usual:
|
2015-09-27 00:38:20 +02:00
|
|
|
|
2015-02-26 22:55:25 +01:00
|
|
|
# make install
|
2015-02-11 01:53:19 +01:00
|
|
|
|
|
|
|
Or you can try telling CMake to make a package for you. For Debian it is:
|
2015-09-27 00:38:20 +02:00
|
|
|
|
2015-02-11 01:53:19 +01:00
|
|
|
$ cpack -G DEB
|
2015-04-30 01:39:08 +02:00
|
|
|
# dpkg -i uirc3-*.deb
|
2014-07-21 05:10:25 +02:00
|
|
|
|
2016-03-10 20:25:06 +01:00
|
|
|
Usage
|
|
|
|
-----
|
2015-09-27 00:45:50 +02:00
|
|
|
'degesch' has in-program configuration. Just run it and read the instructions.
|
2015-05-03 19:39:30 +02:00
|
|
|
|
|
|
|
For the rest you might want to generate a configuration file:
|
2015-09-27 00:38:20 +02:00
|
|
|
|
2015-02-11 01:53:19 +01:00
|
|
|
$ zyklonb --write-default-config
|
|
|
|
$ kike --write-default-config
|
2014-07-21 05:10:25 +02:00
|
|
|
|
|
|
|
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:
|
2015-09-27 00:38:20 +02:00
|
|
|
|
2015-02-11 01:53:19 +01:00
|
|
|
$ zyklonb
|
|
|
|
$ kike
|
2014-07-21 05:10:25 +02:00
|
|
|
|
2015-09-27 00:45:50 +02:00
|
|
|
'ZyklonB' stays running in the foreground, therefore I recommend launching it
|
2015-07-11 17:04:36 +02:00
|
|
|
inside a Screen or tmux session.
|
|
|
|
|
2015-09-27 00:45:50 +02:00
|
|
|
'kike', on the other hand, immediately forks into the background. Use the PID
|
2015-09-27 00:38:20 +02:00
|
|
|
file or something like `killall` if you want to terminate it. You can run it
|
|
|
|
as a `forking` type systemd user service.
|
|
|
|
|
2015-09-27 00:45:50 +02:00
|
|
|
Client Certificates
|
|
|
|
-------------------
|
|
|
|
'kike' uses SHA1 fingerprints of TLS client certificates to authenticate users.
|
2014-08-13 19:22:43 +02:00
|
|
|
To get the fingerprint from a certificate file in the required form, use:
|
2015-09-27 00:38:20 +02:00
|
|
|
|
2014-08-13 19:22:43 +02:00
|
|
|
$ openssl x509 -in public.pem -outform DER | sha1sum
|
2014-08-08 01:26:56 +02:00
|
|
|
|
2016-03-10 20:25:06 +01:00
|
|
|
Custom Key Bindings in degesch
|
|
|
|
------------------------------
|
|
|
|
The default and preferred frontend used in 'degesch' is GNU Readline. This
|
|
|
|
means that you can change your bindings by editing '~/.inputrc'. For example:
|
2016-03-12 14:38:19 +01:00
|
|
|
....
|
|
|
|
# Preload with system-wide settings
|
|
|
|
$include /etc/inputrc
|
|
|
|
|
|
|
|
# Make M-left and M-right reorder buffers
|
|
|
|
$if degesch
|
|
|
|
"\e\e[C": move-buffer-right
|
|
|
|
"\e\e[D": move-buffer-left
|
|
|
|
$endif
|
|
|
|
....
|
2016-03-10 20:25:06 +01:00
|
|
|
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.
|
2016-03-12 14:38:19 +01:00
|
|
|
Beware that you can easily break the program if you're not careful.
|
2016-03-10 20:25:06 +01:00
|
|
|
|
2016-10-30 18:49:07 +01:00
|
|
|
How do I make degesch look like the screenshot?
|
|
|
|
-----------------------------------------------
|
|
|
|
First of all, you must build it with Lua support. With the defaults, degesch
|
|
|
|
doesn't look very fancy because some things are rather hackish, and I also don't
|
|
|
|
want to depend on UTF-8 or 256color terminals in the code. In addition to that,
|
|
|
|
I appear to be one of the few people who use black on white terminals.
|
|
|
|
|
|
|
|
/set behaviour.date_change_line = "%a %e %b %Y"
|
|
|
|
/set behaviour.plugin_autoload += "fancy-prompt.lua,thin-cursor.lua"
|
|
|
|
/set behaviour.backlog_helper = "LESSSECURE=1 less -R +Gb -Ps'Backlog ?ltlines %lt-%lb?L/%L. .?e(END):?pB%pB\\%..'"
|
|
|
|
/set behaviour.backlog_helper_strip_formatting = off
|
|
|
|
/set attributes.reset = "\x1b[0m"
|
|
|
|
/set attributes.userhost = "\x1b[38;5;109m"
|
|
|
|
/set attributes.join = "\x1b[38;5;108m"
|
|
|
|
/set attributes.part = "\x1b[38;5;138m"
|
|
|
|
/set attributes.external = "\x1b[38;5;248m"
|
|
|
|
/set attributes.timestamp = "\x1b[48;5;255m\x1b[38;5;250m"
|
|
|
|
|
2016-07-23 20:29:25 +02:00
|
|
|
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.
|
|
|
|
|
2015-09-27 00:45:50 +02:00
|
|
|
Contributing and Support
|
|
|
|
------------------------
|
2017-12-02 13:06:39 +01:00
|
|
|
Use https://git.janouch.name/p/uirc3 to report bugs, request features, or submit
|
|
|
|
pull requests. If you want to discuss this project, or maybe just hang out with
|
|
|
|
the developer, feel free to join me at irc://irc.janouch.name, channel #dev.
|
2015-05-07 20:27:01 +02:00
|
|
|
|
2017-05-13 13:43:15 +02:00
|
|
|
Bitcoin donations: 12r5uEWEgcHC46xd64tt3hHt9EUvYYDHe9
|
|
|
|
|
2015-09-27 00:45:50 +02:00
|
|
|
License
|
|
|
|
-------
|
|
|
|
'uirc3' is written by Přemysl Janouch <p.janouch@gmail.com>.
|
2014-06-14 20:26:28 +02:00
|
|
|
|
|
|
|
You may use the software under the terms of the ISC license, the text of which
|
|
|
|
is included within the package, or, at your option, you may relicense the work
|
|
|
|
under the MIT or the Modified BSD License, as listed at the following site:
|
|
|
|
|
|
|
|
http://www.gnu.org/licenses/license-list.html
|
2016-04-28 23:40:38 +02:00
|
|
|
|
2017-05-13 13:43:15 +02:00
|
|
|
Note that 'degesch' technically becomes GPL-licensed when you statically link it
|
|
|
|
against GNU Readline, but that is not a concern of this source package.
|