Bitlbee: updated for systemd; added more options like AuthMode

This commit is contained in:
Pascal Wittmann 2013-03-29 10:28:54 +01:00
parent fbde5e027e
commit 4af26d582c

View File

@ -4,9 +4,13 @@ with pkgs.lib;
let let
cfg = config.services.bitlbee;
bitlbeeUid = config.ids.uids.bitlbee; bitlbeeUid = config.ids.uids.bitlbee;
inherit (config.services.bitlbee) portNumber interface; authModeCheck = v:
v == "Open" ||
v == "Closed" ||
v == "Registered";
in in
@ -43,6 +47,45 @@ in
''; '';
}; };
user = mkOption {
default = "bitlbee";
description = ''
The user that executes the BitlBee daemon.
'';
};
authMode = mkOption {
default = "Open";
check = authModeCheck;
description = ''
The following authentication modes are available:
Open -- Accept connections from anyone, use NickServ for user authentication.
Closed -- Require authorization (using the PASS command during login) before allowing the user to connect at all.
Registered -- Only allow registered users to use this server; this disables the register- and the account command until the user identifies himself.
'';
};
configDir = mkOption {
default = "/var/lib/bitlbee";
description = ''
Specifyies the directory that stores all the per-user configuration files.
'';
};
extraSettings = mkOption {
default = "";
description = ''
Will be inserted in the Settings section of the config file.
'';
};
extraDefaults = mkOption {
default = "";
description = ''
Will be inserted in the Default section of the config file.
'';
};
}; };
}; };
@ -53,41 +96,54 @@ in
config = mkIf config.services.bitlbee.enable { config = mkIf config.services.bitlbee.enable {
users.extraUsers = singleton users.extraUsers = singleton
{ name = "bitlbee"; { name = "${cfg.user}";
uid = bitlbeeUid; uid = bitlbeeUid;
description = "BitlBee user"; description = "BitlBee user";
home = "/var/empty"; home = "/var/empty";
}; };
users.extraGroups = singleton users.extraGroups = singleton
{ name = "bitlbee"; { name = "${cfg.user}";
gid = config.ids.gids.bitlbee; gid = config.ids.gids.bitlbee;
}; };
jobs.bitlbee = systemd.services.bitlbee =
{ description = "BitlBee IRC to other chat networks gateway"; { description = "BitlBee IRC to other chat networks gateway";
name = "bitlbee"; after = [ "network.target" ];
wantedBy = [ "multi-user.target" ];
startOn = "ip-up"; preStart =
preStart =
'' ''
if ! test -d /var/lib/bitlbee if ! test -d ${cfg.configDir}
then then
mkdir -p /var/lib/bitlbee mkdir -p ${cfg.configDir}
chown bitlbee:bitlbee /var/lib/bitlbee chown ${cfg.user}:${cfg.user} ${cfg.configDir}
fi chmod 750 ${cfg.configDir}
''; fi
'';
exec = serviceConfig.ExecStart = "${pkgs.bitlbee}/sbin/bitlbee -F -n -c /etc/bitlbee.conf";
''
${pkgs.bitlbee}/sbin/bitlbee -F -p ${toString portNumber} \
-i ${interface} -u bitlbee
'';
}; };
environment.systemPackages = [ pkgs.bitlbee ]; environment.systemPackages = [ pkgs.bitlbee ];
environment.etc =
[
{ source = pkgs.writeText "bitlbee.conf"
''
[settings]
RunMode = Daemon
User = ${cfg.user}
DaemonInterface = ${cfg.interface}
DaemonPort = ${toString cfg.portNumber}
AuthMode = ${cfg.authMode}
ConfigDir = ${cfg.configDir}
${cfg.extraSettings}
[defaults]
${cfg.extraDefaults}
'';
target = "bitlbee.conf";
}
];
}; };
} }