Rules
=====

0. Participation in darwin requires a real-world connection to the community
   (you must be a current or former colleague of an existing member, or have
   an invitation from one).
1. Be nice.
2. Don't bridge any darwin.network channels with Slack or Discord (IRCCloud is
   OK because they are friends of ours).
3. darwin is not a testnet. For testing features of Ergo, or demonstrating
   IRCv3 client code, please use the official Ergo testnet:
   testnet.ergo.chat

Account registration FAQ
========================

1. How do I register my nickname / account?

Use this command, substituting your desired password and e-mail address:

/msg NickServ register mySecretPassword validEmailAddress@example.com

The server will dispatch a verification code and further instructions to
your e-mail address. Ask in #darwin if you have problems.

2. How do I authenticate to my nickname?

You should enable SASL in your client. Libera.Chat's guide covers many popular
clients:

https://libera.chat/guides/sasl

If your client is not listed, it may have its own documentation or help pages.

If you are using our Kiwi web client, check the "I have a password" box
and enter your account password.

If your client doesn't support SASL, you can authenticate using the `PASS`
command, which is normally used to support server passwords. Find the
"PASS" or "server password" configuration in your client, and set the value
to `myUsername:mySecretPassword`.

3. What are the benefits of registering my nickname?

The primary benefit of nickname registration is that the server can act
as an "IRC bouncer" on your behalf. Specifically:

  a. No one else will be able to use your nickname
  b. If all your clients are configured to use SASL, they can all use the same
     nickname (as though they were connected to the same ZNC instance)
  c. Optionally, the server can keep you present on the server even if
     you have no connected clients. To enable this, use the following command:
     `/msg NickServ set always-on true`
  d. You will be able to receive history playback (see below).

4. How does server-side history work?

darwin.network retains up to 14 days of chat history on the server side,
stored in an on-disk database. All messages are purged once they
reach the age limit. Furthermore, access to history is restricted
so that users can only replay messages that they could have received
normally when they were sent. Specifically:

  a. Anonymous users cannot view messages sent more than 1 hour before
     they connected to the server. This allows people to join and see
     the context of the current discussion, but not to probe into past
     conversations.
  b. Logged-in users cannot view messages sent more than 1 hour before
     their account was registered. This is equivalent to having had a
     personal IRC client or bouncer connected since the time of registration.

By default:

  c. Messages sent to an unregistered channel are stored in-memory
     ("ephemeral history"), but not in the database.
  d. Messages sent to a registered channel are stored in the database.
     As the owner of a registered channel, you can disable this with
     `/msg ChanServ set history ephemeral` (or `set history off`).
  e. Direct messages for logged-out clients are stored in-memory.
  f. Direct messages for logged-in clients are stored in the database.
     You can disable this with `/msg NickServ set dm-history ephemeral`
     (or `set history off`).

Unfortunately, client support for history playback is lagging behind our
server-side support:

  g. The most convenient way to access server-side history
     is with our fully self-hosted Kiwi IRC instance, which can play back
     history on request.
  h. If your client supports ZNC's playback module, you can use it
     to replay only the lines you missed. For example, in Textual,
     go to "Server properties", select "Vendor specific", uncheck "Do not
     automatically join channels on connect", and check "Only play back messages
     you missed". Other clients with support are listed on ZNC's wiki page.
  i. You can set your client to always-on, then use per-device missed message
     tracking. To do this, first enable always-on:
     /msg NickServ set always-on true
     then set your SASL username to include a device ID, e.g., if your account
     name is 'alice', set it to 'alice@laptop' or 'alice@phone'. The server
     will track which messages you received and replay missed messages on
     each login.
  j. You can manually request recent channel history by issuing the command:
     /quote history #channel
  k. If you are not using the multi-client feature, you can set your account
     to auto-replay messages that were sent while you were logged out
     (similar to the default behavior of ZNC). To enable this, send:
     /msg NickServ set always-on true
     /msg NickServ set autoreplay-missed true

5. I'm trying to use a client certificate, but it doesn't work --- why not?

First, connect on port 6698 instead of port 6697 (keep TLS enabled).

Then you can either:

a. Register a new account by sending `*` as the password, e.g.,
       /msg NickServ register * validEmailAddress@example.com
   This account will then use your current client certificate as its only
   authentication credential.
b. If you already have a password-based account, compute its SHA-256
   fingerprint, e.g., with `openssl`:
       openssl x509 -noout -fingerprint -sha256 -inform pem -in client.crt
   then add the fingerprint to your account with `/msg NickServ cert`:
       /msg NickServ cert add 12:34:56:78:90:AB:CD:EF...

Then, enable SASL EXTERNAL in your client so that you will be logged in
automatically on each reconnection.