nixpkgs/nixos/modules/services/networking/quassel.nix
Joachim Fasting f9f354faad
nixos/modules: use defaultText where applicable
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.
2016-11-21 16:35:15 +01:00

110 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;
};
};
};
}