From b0d1eb457974bc42637d4b24b67a874cddc384aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Val=C3=A9rian=20Galliat?= Date: Sat, 9 Apr 2016 17:18:23 -0400 Subject: [PATCH] Shout: configure with attrs --- nixos/modules/services/networking/shout.nix | 50 +++++++++++++++++---- 1 file changed, 42 insertions(+), 8 deletions(-) diff --git a/nixos/modules/services/networking/shout.nix b/nixos/modules/services/networking/shout.nix index f069fe7bec9..761ecbcd173 100644 --- a/nixos/modules/services/networking/shout.nix +++ b/nixos/modules/services/networking/shout.nix @@ -6,6 +6,21 @@ let cfg = config.services.shout; shoutHome = "/var/lib/shout"; + defaultConfig = pkgs.runCommand "config.js" {} '' + EDITOR=true ${pkgs.shout}/bin/shout config --home $PWD + mv config.js $out + ''; + + configFile = if (cfg.configFile != null) then cfg.configFile else '' + var _ = require('${pkgs.shout}/lib/node_modules/shout/node_modules/lodash') + + module.exports = _.merge( + {}, + require('${defaultConfig}'), + ${builtins.toJSON cfg.config} + ) + ''; + in { options.services.shout = { enable = mkEnableOption "Shout web IRC client"; @@ -33,10 +48,33 @@ in { configFile = mkOption { type = types.nullOr types.lines; - default = null; + default = configFile; description = '' - Contents of Shout's config.js file. If left empty, - Shout will generate from its defaults at first startup. + Contents of Shout's config.js file. + + Used for backward compatibility, recommended way is now to use + the config option. + + Documentation: http://shout-irc.com/docs/server/configuration.html + ''; + }; + + config = mkOption { + default = {}; + type = types.attrs; + example = { + displayNetwork = false; + defaults = { + name = "Your Network"; + host = "localhost"; + port = 6697; + }; + }; + description = '' + Shout config.js contents as attribute set (will be + converted to JSON to generate the configuration file). + + The options defined here will be merged to the default configuration file. Documentation: http://shout-irc.com/docs/server/configuration.html ''; @@ -57,11 +95,7 @@ in { wantedBy = [ "multi-user.target" ]; wants = [ "network-online.target" ]; after = [ "network-online.target" ]; - preStart = if isNull cfg.configFile then "" - else '' - ln -sf ${pkgs.writeText "config.js" cfg.configFile} \ - ${shoutHome}/config.js - ''; + preStart = "ln -sf ${pkgs.writeText "config.js" configFile} ${shoutHome}/config.js"; script = concatStringsSep " " [ "${pkgs.shout}/bin/shout" (if cfg.private then "--private" else "--public")