diff options
author | Benjamin Staffin <benley@gmail.com> | 2015-07-31 16:15:18 -0700 |
---|---|---|
committer | Benjamin Staffin <benley@gmail.com> | 2015-08-01 03:36:45 -0700 |
commit | ad4c95716383215b71af85c254b9320903f6f7e5 (patch) | |
tree | 273e3789ba3809dbc489e5d4ac4554ad55f52ccd /nixos | |
parent | f4502e650b5287257be45b61e5fde5f2c4bc0431 (diff) | |
download | nixlib-ad4c95716383215b71af85c254b9320903f6f7e5.tar nixlib-ad4c95716383215b71af85c254b9320903f6f7e5.tar.gz nixlib-ad4c95716383215b71af85c254b9320903f6f7e5.tar.bz2 nixlib-ad4c95716383215b71af85c254b9320903f6f7e5.tar.lz nixlib-ad4c95716383215b71af85c254b9320903f6f7e5.tar.xz nixlib-ad4c95716383215b71af85c254b9320903f6f7e5.tar.zst nixlib-ad4c95716383215b71af85c254b9320903f6f7e5.zip |
shout service: New module.
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/misc/ids.nix | 2 | ||||
-rw-r--r-- | nixos/modules/module-list.nix | 1 | ||||
-rw-r--r-- | nixos/modules/services/networking/shout.nix | 80 |
3 files changed, 83 insertions, 0 deletions
diff --git a/nixos/modules/misc/ids.nix b/nixos/modules/misc/ids.nix index b53b9c47b01f..b25e3d7e40db 100644 --- a/nixos/modules/misc/ids.nix +++ b/nixos/modules/misc/ids.nix @@ -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 diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index c56e6a82e831..212555d7efcc 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -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 diff --git a/nixos/modules/services/networking/shout.nix b/nixos/modules/services/networking/shout.nix new file mode 100644 index 000000000000..f55b87a96140 --- /dev/null +++ b/nixos/modules/services/networking/shout.nix @@ -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"; + }; + }; + }; +} |