shout service: New module.

This commit is contained in:
Benjamin Staffin 2015-07-31 16:15:18 -07:00
parent f4502e650b
commit ad4c957163
3 changed files with 83 additions and 0 deletions

View file

@ -227,6 +227,7 @@
riemanntools = 203;
subsonic = 204;
riak = 205;
shout = 206;
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
@ -432,6 +433,7 @@
riemanntools = 203;
subsonic = 204;
riak = 205;
#shout = 206; #unused
# When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal

View file

@ -328,6 +328,7 @@
./services/networking/searx.nix
./services/networking/seeks.nix
./services/networking/skydns.nix
./services/networking/shout.nix
./services/networking/spiped.nix
./services/networking/sslh.nix
./services/networking/ssh/lshd.nix

View file

@ -0,0 +1,80 @@
{ pkgs, lib, config, options, ... }:
with lib;
let
cfg = config.services.shout;
shoutHome = "/var/lib/shout";
in {
options.services.shout = {
enable = mkEnableOption "Shout web IRC client";
private = mkOption {
type = types.bool;
default = false;
description = ''
Make your shout instance private. You will need to configure user
accounts by adding entries in <filename>${shoutHome}/users</filename>.
'';
};
host = mkOption {
type = types.string;
default = "0.0.0.0";
description = "IP interface to listen on for http connections.";
};
port = mkOption {
type = types.int;
default = 9000;
description = "TCP port to listen on for http connections.";
};
configFile = mkOption {
type = types.nullOr types.lines;
default = null;
description = ''
Contents of Shout's <filename>config.js</filename> file. If left empty,
Shout will generate from its defaults at first startup.
Documentation: http://shout-irc.com/docs/server/configuration.html
'';
};
};
config = mkIf cfg.enable {
users.extraUsers = singleton {
name = "shout";
uid = config.ids.uids.shout;
description = "Shout daemon user";
home = shoutHome;
createHome = true;
};
systemd.services.shout = {
description = "Shout web IRC client";
wantedBy = [ "multi-user.target" ];
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
preStart = if isNull cfg.configFile then null
else ''
ln -sf ${pkgs.writeText "config.js" cfg.configFile} \
${shoutHome}/config.js
'';
script = concatStringsSep " " [
"${pkgs.shout}/bin/shout"
(if cfg.private then "--private" else "--public")
"--port" (toString cfg.port)
"--host" (toString cfg.host)
"--home" shoutHome
];
serviceConfig = {
User = "shout";
ProtectHome = "true";
ProtectSystem = "full";
PrivateTmp = "true";
};
};
};
}