IRC Bouncer

From Project Segfault Wiki

Along with your pubnix account, you get access to our IRC bouncer, soju. Soju is a modern IRC bouncer, which supports the new IRCv3 extensions.

Our soju instance uses the pubnix's PAM for authentication, meaning it uses the same password as your pubnix user.

Getting started

Your current password can be found at ~/pass. Just like any other services, you can get it with cat ~/pass command. You can change it by running passwd.

The IRC client we recommend is weechat. However, there are many other clients out there as well which you can try out.

Weechat is pre-installed on the pubnix. After running it, you will be presented with a TUI (text user interface).

Now, you can add the server with the following command:

/server add soju p.projectsegfau.lt/6697 -ssl -username=YOUR_USERNAME -password=YOUR_PASSWORD -autoconnect

Now, install soju.py plugin, which will pre-configure a lot of stuff for you

/set script.scripts.download_enabled on /script install soju.py

You can also install the following plugins that help a lot with daily usage of weechat:

/script install go.py /script install autosort.py

Past this, you need to enable the IRCv3 features:

/set irc.server_default.capabilities account-notify,away-notify,cap-notify,chghost,extended-join,invite-notify,multi-prefix,server-time,userhost-in-names /save

Now, close weechat with /quit, and re-open it. At this point, you will be connected to our soju instance and see the MOTD.

Adding new servers

To do so, you have to message the BouncerServ. The example below is for libera.chat, one of the most popular IRC networks. It shouldn't be very different for other networks

/msg BouncerServ network create -addr irc.libera.chat -name LiberaChat -username YOUR_USERNAME_ON_IRC_NETWORK -pass YOUR_IRC_NETWORK_PASS -realname "Self Explanatory" -enabled true

After creating all your networks, re-open weechat again, and it should be loaded. Switch to the pane of the specific network or a channel in that network to join other rooms in that network. You can easily do this with go.py:

/go <autocomplete>

After adding all your channels, you can sort them using autosort.py:

/autosort

By default, it sorts network-wise + alphabetically.

Using IRC clients without bouncer support

If you want to use an IRC client that does not directly support bouncer connections, you can use it as a regular IRC server to connect to and add a connection for each network you connect to and use chat messages to configure everything.

The table below contains the necessary details on connecting via your client of choice without the required IRCv3 extensions for bouncer support. See also the upstream project's documentation about client-specific configurations and workarounds.

IRC configuration for clients without bouncer support
Host p.projectsegfau.lt
Port 6697 (with TLS enabled)
Username username/networkname@preferred-client-name (for example user/irc.libera.chat@observatory)
Password Your pubnix user password (differs from your SSO account)

This will autoconfigure an IRC connection to the network and set up the username mapping to automatically remove the networkname prefix from the messages. If you are using multiple connections at the same time, use a different client name for each connection so that the history playback works for each, and you do not get the messages mixed up.

When connecting to the network via the bouncer, you will get a "local" connection to the bouncer and the bouncer will connect to the actual network (e.g. irc.libera.chat) and not log you in yet since it has no information about your user. Also, the connection is plain by default, but you can change all that later, and it will remember the settings.

Configuring the bouncer

You can manage the bouncer with BouncerServ

You can configure NickServ login, use SASL or configure a certfp login (in this case the bouncer will simply create a new cert for each connection you use), also you can query the user (sasl status) and network status (network status) and make the bouncer connect to the network again (network update).

Anything that the bouncer does not connect will reflect in the network status of the actual connection so when you type /whois username to the IRC client console, you will what connection you have to the actual network like TLS status, registered user, hostname cloak and so on.

Known issues

In the rare case when the IRC client does not support setting an ident string, you cannot set the target networkname at all, then you still can connect to multiple networks and use the different messages and channels, however the channels and users will be prefixed by the networkname so that you get everything in a single client connection. The only IRC client I have observed this behaviour is Revolution IRC on Android, there is no known way to configure the bouncer connection correctly (if anybody knows one, please let me know)

See also