2021-02-06 12:11:55 +01:00
|
|
|
# An IRC client daemon
|
|
|
|
{ config, lib, ... }:
|
|
|
|
let
|
|
|
|
cfg = config.my.services.quassel;
|
|
|
|
domain = config.networking.domain;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
options.my.services.quassel = with lib; {
|
|
|
|
enable = mkEnableOption "Quassel IRC client daemon";
|
|
|
|
port = mkOption {
|
|
|
|
type = types.port;
|
|
|
|
default = 4242;
|
|
|
|
example = 8080;
|
|
|
|
description = "The port number for Quassel";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
|
|
services.quassel = {
|
|
|
|
enable = true;
|
|
|
|
portNumber = cfg.port;
|
|
|
|
# Let's be secure
|
|
|
|
requireSSL = true;
|
|
|
|
certificateFile = config.security.acme.certs."${domain}".directory + "/full.pem";
|
|
|
|
# The whole point *is* to connect from other clients
|
|
|
|
interfaces = [ "0.0.0.0" ];
|
|
|
|
};
|
|
|
|
|
|
|
|
# Allow Quassel to read the certificates.
|
|
|
|
users.groups.acme.members = [ "quassel" ];
|
|
|
|
|
|
|
|
# Open port for Quassel
|
|
|
|
networking.firewall.allowedTCPPorts = [ cfg.port ];
|
2021-02-15 22:29:11 +01:00
|
|
|
|
|
|
|
# Create storage DB
|
|
|
|
services.postgresql = {
|
|
|
|
enable = true;
|
|
|
|
ensureDatabases = [ "quassel" ];
|
|
|
|
ensureUsers = [
|
|
|
|
{
|
|
|
|
name = "quassel";
|
|
|
|
ensurePermissions."DATABASE quassel" = "ALL PRIVILEGES";
|
|
|
|
}
|
|
|
|
];
|
2021-02-15 23:03:28 +01:00
|
|
|
# Insecure, I don't care.
|
|
|
|
# Because Quassel does not use the socket, I simply trust its connection
|
|
|
|
authentication = "host quassel quassel localhost trust";
|
2021-02-15 22:29:11 +01:00
|
|
|
};
|
2021-02-06 12:11:55 +01:00
|
|
|
};
|
|
|
|
}
|