diff options
author | Silvan Mosberger <infinisil@icloud.com> | 2018-08-21 21:05:20 +0200 |
---|---|---|
committer | Silvan Mosberger <infinisil@icloud.com> | 2018-10-13 15:04:53 +0200 |
commit | 4eee2cd0e03657dfb39e3e7c93460442e3d2d86c (patch) | |
tree | 16510e4d397f9b20853bae0626dc944dc8f3d14b /nixos/modules/services/networking/znc/options.nix | |
parent | ac6f4851480e3a7016a2257a62c34ed46dcea789 (diff) | |
download | nixlib-4eee2cd0e03657dfb39e3e7c93460442e3d2d86c.tar nixlib-4eee2cd0e03657dfb39e3e7c93460442e3d2d86c.tar.gz nixlib-4eee2cd0e03657dfb39e3e7c93460442e3d2d86c.tar.bz2 nixlib-4eee2cd0e03657dfb39e3e7c93460442e3d2d86c.tar.lz nixlib-4eee2cd0e03657dfb39e3e7c93460442e3d2d86c.tar.xz nixlib-4eee2cd0e03657dfb39e3e7c93460442e3d2d86c.tar.zst nixlib-4eee2cd0e03657dfb39e3e7c93460442e3d2d86c.zip |
nixos/znc: move to own folder
Move legacy options to separate file
Diffstat (limited to 'nixos/modules/services/networking/znc/options.nix')
-rw-r--r-- | nixos/modules/services/networking/znc/options.nix | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/nixos/modules/services/networking/znc/options.nix b/nixos/modules/services/networking/znc/options.nix new file mode 100644 index 000000000000..ce5ca0a9a3b6 --- /dev/null +++ b/nixos/modules/services/networking/znc/options.nix @@ -0,0 +1,286 @@ +{ lib, config, ... }: + +with lib; + +let + + cfg = config.services.znc; + + # Default user and pass: + # un=znc + # pw=nixospass + + defaultUserName = "znc"; + defaultPassBlock = " + <Pass password> + Method = sha256 + Hash = e2ce303c7ea75c571d80d8540a8699b46535be6a085be3414947d638e48d9e93 + Salt = l5Xryew4g*!oa(ECfX2o + </Pass> + "; + + # Keep znc.conf in nix store, then symlink or copy into `dataDir`, depending on `mutable`. + mkZncConf = confOpts: '' + Version = 1.6.3 + ${concatMapStrings (n: "LoadModule = ${n}\n") confOpts.modules} + + <Listener l> + Port = ${toString confOpts.port} + IPv4 = true + IPv6 = true + SSL = ${boolToString confOpts.useSSL} + ${lib.optionalString (confOpts.uriPrefix != null) "URIPrefix = ${confOpts.uriPrefix}"} + </Listener> + + <User ${confOpts.userName}> + ${confOpts.passBlock} + Admin = true + Nick = ${confOpts.nick} + AltNick = ${confOpts.nick}_ + Ident = ${confOpts.nick} + RealName = ${confOpts.nick} + ${concatMapStrings (n: "LoadModule = ${n}\n") confOpts.userModules} + + ${ lib.concatStringsSep "\n" (lib.mapAttrsToList (name: net: '' + <Network ${name}> + ${concatMapStrings (m: "LoadModule = ${m}\n") net.modules} + Server = ${net.server} ${lib.optionalString net.useSSL "+"}${toString net.port} ${net.password} + ${concatMapStrings (c: "<Chan #${c}>\n</Chan>\n") net.channels} + ${lib.optionalString net.hasBitlbeeControlChannel '' + <Chan &bitlbee> + </Chan> + ''} + ${net.extraConf} + </Network> + '') confOpts.networks) } + </User> + ${confOpts.extraZncConf} + ''; + + zncConfFile = pkgs.writeTextFile { + name = "znc.conf"; + text = if cfg.zncConf != "" + then cfg.zncConf + else mkZncConf cfg.confOptions; + }; + + networkOpts = { + options = { + server = mkOption { + type = types.str; + example = "chat.freenode.net"; + description = '' + IRC server address. + ''; + }; + + port = mkOption { + type = types.int; + default = 6697; + example = 6697; + description = '' + IRC server port. + ''; + }; + + userName = mkOption { + default = ""; + example = "johntron"; + type = types.string; + description = '' + A nick identity specific to the IRC server. + ''; + }; + + password = mkOption { + type = types.str; + default = ""; + description = '' + IRC server password, such as for a Slack gateway. + ''; + }; + + useSSL = mkOption { + type = types.bool; + default = true; + description = '' + Whether to use SSL to connect to the IRC server. + ''; + }; + + modulePackages = mkOption { + type = types.listOf types.package; + default = []; + example = [ "pkgs.zncModules.push" "pkgs.zncModules.fish" ]; + description = '' + External ZNC modules to build. + ''; + }; + + modules = mkOption { + type = types.listOf types.str; + default = [ "simple_away" ]; + example = literalExample "[ simple_away sasl ]"; + description = '' + ZNC modules to load. + ''; + }; + + channels = mkOption { + type = types.listOf types.str; + default = []; + example = [ "nixos" ]; + description = '' + IRC channels to join. + ''; + }; + + hasBitlbeeControlChannel = mkOption { + type = types.bool; + default = false; + description = '' + Whether to add the special Bitlbee operations channel. + ''; + }; + + extraConf = mkOption { + default = ""; + type = types.lines; + example = '' + Encoding = ^UTF-8 + FloodBurst = 4 + FloodRate = 1.00 + IRCConnectEnabled = true + Ident = johntron + JoinDelay = 0 + Nick = johntron + ''; + description = '' + Extra config for the network. + ''; + }; + }; + }; + +in + +{ + + ###### Interface + + options = { + services.znc = { + + zncConf = mkOption { + default = ""; + example = "See: http://wiki.znc.in/Configuration"; + type = types.lines; + description = '' + Config file as generated with `znc --makeconf` to use for the whole ZNC configuration. + If specified, `confOptions` will be ignored, and this value, as-is, will be used. + If left empty, a conf file with default values will be used. + ''; + }; + + + confOptions = { + modules = mkOption { + type = types.listOf types.str; + default = [ "webadmin" "adminlog" ]; + example = [ "partyline" "webadmin" "adminlog" "log" ]; + description = '' + A list of modules to include in the `znc.conf` file. + ''; + }; + + userModules = mkOption { + type = types.listOf types.str; + default = [ "chansaver" "controlpanel" ]; + example = [ "chansaver" "controlpanel" "fish" "push" ]; + description = '' + A list of user modules to include in the `znc.conf` file. + ''; + }; + + userName = mkOption { + default = defaultUserName; + example = "johntron"; + type = types.string; + description = '' + The user name used to log in to the ZNC web admin interface. + ''; + }; + + networks = mkOption { + default = { }; + type = with types; attrsOf (submodule networkOpts); + description = '' + IRC networks to connect the user to. + ''; + example = { + "freenode" = { + server = "chat.freenode.net"; + port = 6697; + useSSL = true; + modules = [ "simple_away" ]; + }; + }; + }; + + nick = mkOption { + default = "znc-user"; + example = "john"; + type = types.string; + description = '' + The IRC nick. + ''; + }; + + passBlock = mkOption { + example = defaultPassBlock; + type = types.string; + description = '' + Generate with `nix-shell -p znc --command "znc --makepass"`. + This is the password used to log in to the ZNC web admin interface. + ''; + }; + + port = mkOption { + default = 5000; + example = 5000; + type = types.int; + description = '' + Specifies the port on which to listen. + ''; + }; + + useSSL = mkOption { + default = true; + type = types.bool; + description = '' + Indicates whether the ZNC server should use SSL when listening on the specified port. A self-signed certificate will be generated. + ''; + }; + + uriPrefix = mkOption { + type = types.nullOr types.str; + default = null; + example = "/znc/"; + description = '' + An optional URI prefix for the ZNC web interface. Can be + used to make ZNC available behind a reverse proxy. + ''; + }; + + extraZncConf = mkOption { + default = ""; + type = types.lines; + description = '' + Extra config to `znc.conf` file. + ''; + }; + }; + + }; + }; +} |