anchor.diff:        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")
  
positive.code: let
    cfg = config.services.shout;
    shoutHome = "/var/lib/shout";
  
  in {
    options.services.shout = {
  
negative.code: 
      configFile = mkOption {
        type = types.nullOr types.lines;
        default = configFile;
        description = ''
          Contents of Shout's <filename>config.js</filename> file.
  
          Used for backward compatibility, recommended way is now to use
          the <literal>config</literal> 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 <filename>config.js</filename> 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
        '';
  