f9f354faad
Primarily to fix rendering of these default values in the manual but it's also nice to avoid having to eval these things just to build the manual.
109 lines
2.7 KiB
Nix
109 lines
2.7 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
cfg = config.services.quassel;
|
|
quassel = cfg.package;
|
|
user = if cfg.user != null then cfg.user else "quassel";
|
|
in
|
|
|
|
{
|
|
|
|
###### interface
|
|
|
|
options = {
|
|
|
|
services.quassel = {
|
|
|
|
enable = mkOption {
|
|
default = false;
|
|
description = ''
|
|
Whether to run the Quassel IRC client daemon.
|
|
'';
|
|
};
|
|
|
|
package = mkOption {
|
|
type = types.package;
|
|
default = pkgs.kde4.quasselDaemon;
|
|
defaultText = "pkgs.kde4.quasselDaemon";
|
|
description = ''
|
|
The package of the quassel daemon.
|
|
'';
|
|
example = literalExample "pkgs.quasselDaemon";
|
|
};
|
|
|
|
interfaces = mkOption {
|
|
default = [ "127.0.0.1" ];
|
|
description = ''
|
|
The interfaces the Quassel daemon will be listening to. If `[ 127.0.0.1 ]',
|
|
only clients on the local host can connect to it; if `[ 0.0.0.0 ]', clients
|
|
can access it from any network interface.
|
|
'';
|
|
};
|
|
|
|
portNumber = mkOption {
|
|
default = 4242;
|
|
description = ''
|
|
The port number the Quassel daemon will be listening to.
|
|
'';
|
|
};
|
|
|
|
dataDir = mkOption {
|
|
default = ''/home/${user}/.config/quassel-irc.org'';
|
|
description = ''
|
|
The directory holding configuration files, the SQlite database and the SSL Cert.
|
|
'';
|
|
};
|
|
|
|
user = mkOption {
|
|
default = null;
|
|
description = ''
|
|
The existing user the Quassel daemon should run as. If left empty, a default "quassel" user will be created.
|
|
'';
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
###### implementation
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
users.extraUsers = mkIf (cfg.user == null) [
|
|
{ name = "quassel";
|
|
description = "Quassel IRC client daemon";
|
|
group = "quassel";
|
|
uid = config.ids.uids.quassel;
|
|
}];
|
|
|
|
users.extraGroups = mkIf (cfg.user == null) [
|
|
{ name = "quassel";
|
|
gid = config.ids.gids.quassel;
|
|
}];
|
|
|
|
systemd.services.quassel =
|
|
{ description = "Quassel IRC client daemon";
|
|
|
|
wantedBy = [ "multi-user.target" ];
|
|
after = [ "network.target" ] ++ optional config.services.postgresql.enable "postgresql.service"
|
|
++ optional config.services.mysql.enable "mysql.service";
|
|
|
|
preStart = ''
|
|
mkdir -p ${cfg.dataDir}
|
|
chown ${user} ${cfg.dataDir}
|
|
'';
|
|
|
|
serviceConfig =
|
|
{
|
|
ExecStart = "${quassel}/bin/quasselcore --listen=${concatStringsSep '','' cfg.interfaces} --port=${toString cfg.portNumber} --configdir=${cfg.dataDir}";
|
|
User = user;
|
|
PermissionsStartOnly = true;
|
|
};
|
|
};
|
|
|
|
};
|
|
|
|
}
|