forked from mirrors/nixpkgs
81 lines
2.1 KiB
Nix
81 lines
2.1 KiB
Nix
|
{ 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";
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
}
|