/
znc.nix
120 lines (100 loc) · 2.98 KB
/
znc.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
{ pkgs, config, lib, ... }:
with lib;
let
cfg = config.mine.znc;
in
{
options.mine.znc = {
enable = mkEnableOption "znc config";
defaultNick = mkOption {
type = types.str;
description = "Default nick for networks";
};
defaultNetworkModules = mkOption {
type = types.listOf types.str;
description = "Default network modules, provided for your own use";
default = [
"sasl"
"log"
"backlog"
"watch"
"autoattach"
(mkIf (cfg.savebuffPassword != null) "savebuff ${cfg.savebuffPassword}")
];
readOnly = true;
};
savebuffPassword = mkOption {
type = types.nullOr types.str;
default = null;
description = "Password used for the savebuff module";
};
twitchPassword = mkOption {
type = types.nullOr types.str;
default = null;
description = "Password used for twitch";
};
gitterPassword = mkOption {
type = types.nullOr types.str;
default = null;
description = "Password used for gitter";
};
};
config = mkIf cfg.enable {
users.users = genAttrs config.mine.mainUsers (name: {
extraGroups = [ "znc" ];
});
security.acme.certs.${config.networking.domain}.postRun = ''
cp full.pem "${config.services.znc.dataDir}/znc.pem"
'';
services.znc = {
enable = true;
useLegacyConfig = false;
openFirewall = true;
mutable = false;
modulePackages = with pkgs.zncModules; [
playback
backlog
push
];
config = {
LoadModule = [ "playback" ];
User.${cfg.defaultNick} = {
Admin = mkDefault true;
LoadModule = [ "push" ];
QuitMsg = mkDefault "Configuring ZNC, sorry for the joins/quits!";
Nick = mkDefault cfg.defaultNick;
AltNick = mkDefault "${cfg.defaultNick}_";
Ident = mkDefault cfg.defaultNick;
AutoClearChanBuffer = false;
AutoClearQueryBuffer = false;
Network = {
freenode = {
Server = "chat.freenode.net +6697";
LoadModule = cfg.defaultNetworkModules;
};
gitter = mkIf (cfg.gitterPassword != null) {
Server = "irc.gitter.im +6697 ${cfg.gitterPassword}";
LoadModule = cfg.defaultNetworkModules;
};
mozilla = {
Server = "irc.mozilla.org +6697";
LoadModule = cfg.defaultNetworkModules;
};
snoonet = {
Server = "irc.snoonet.org 6667 ";
LoadModule = cfg.defaultNetworkModules;
};
twitch = mkIf (cfg.twitchPassword != null) {
Server = "irc.chat.twitch.tv +6697 ${cfg.twitchPassword}";
LoadModule = [ "autoattach" ];
};
rizon = {
Server = "irc.rizon.net 6667";
LoadModule = cfg.defaultNetworkModules;
};
};
};
};
};
};
}