This repository has no description
7.5 kB
214 lines
1{ config, lib, pkgs, ... }: let
2
3 weechat-configured = pkgs.weechat-declarative.override {
4 config = {
5 scripts = [
6 pkgs.weechatScripts.weechat-matrix
7 pkgs.weechatScripts.wee-slack
8 ];
9 settings = {
10 irc.server_default.nicks = [ "lassulus" "hackulus" ];
11 irc.server.bitlbee = {
12 addresses = "localhost/6666";
13 command = "msg &bitlbee identify \${sec.data.bitlbee}";
14 };
15 irc.server.hackint = {
16 addresses = "irc.hackint.org/6697";
17 autojoin = [
18 "#c3-gsm"
19 "#panthermoderns"
20 "#feldoffice"
21 "#36c3"
22 "#cccac"
23 "#nixos"
24 "#krebs"
25 "#krebstel"
26 "#c-base"
27 "#afra"
28 "#tvl"
29 "#eloop"
30 "#systemdultras"
31 "#rc3"
32 "#krebs-announce"
33 "#the_playlist"
34 "#germany"
35 "#hackint"
36 "#dezentrale"
37 "#hackerfleet \${sec.data.c3-gsm}" # TODO support channel passwords in a cooler way
38 ];
39 ssl = true;
40 sasl_fail = "reconnect";
41 sasl_username = "lassulus";
42 sasl_password = "\${sec.data.hackint_sasl}";
43 };
44 irc.server.r = {
45 addresses = "irc.r";
46 autojoin = [
47 "#xxx"
48 "#autowifi"
49 "#brockman"
50 "#flix"
51 "#kollkoll"
52 "#noise"
53 "#mukke"
54 ];
55 sasl_fail = "reconnect";
56 sasl_username = "lassulus";
57 sasl_password = "\${sec.data.r_sasl}";
58 anti_flood_prio_high = 0;
59 anti_flood_prio_low = 0;
60 };
61 irc.server.libera = {
62 addresses = "irc.libera.chat/6697";
63 autojoin = [
64 "#shackspace"
65 "#nixos"
66 "#krebs"
67 "#dezentrale"
68 "#tinc"
69 "#nixos-de"
70 "#fysi"
71 "#hillhacks"
72 "#nixos-rc3"
73 "#binaergewitter"
74 "#hackerfleet"
75 "#weechat"
76 ];
77 ssl = true;
78 sasl_username = "lassulus";
79 sasl_fail = "reconnect";
80 sasl_password = "\${sec.data.libera_sasl}";
81 };
82 irc.server.news = {
83 addresses = "news.r";
84 autojoin = [
85 "#all"
86 "#aluhut"
87 "#querdenkos"
88 "#news"
89 "#drachengame"
90 ];
91 anti_flood_prio_high = 0;
92 anti_flood_prio_low = 0;
93 };
94 matrix.server.lassulus = {
95 address = "matrix.lassul.us";
96 username = "lassulus";
97 password = "\${sec.data.matrix_lassulus}";
98 device_name = config.networking.hostName;
99 };
100 plugins.var.python.go.short_name = true;
101 plugins.var.python.go.short_name_server = true;
102 plugins.var.python.go.fuzzy_search = true;
103 relay.network.password = "xxx"; # secret?
104 relay.port.weechat = 9998;
105 relay.weechat.commands = "*,!exec,!quit";
106 weechat.look.buffer_time_format = "%m-%d_%H:%M:%S";
107 weechat.look.item_time_format = "%m-%d_%H:%M:%S";
108 irc.look.color_nicks_in_names = true;
109 irc.look.color_nicks_in_nicklist = true;
110 logger.file.mask = "$plugin.$name/%Y-%m-%d.weechatlog";
111 logger.file.path = "/var/state/weechat_logs";
112 logger.look.backlog = 1000;
113 weechat.notify.irc.news."#all" = "highlight";
114
115 # setting logger levels for channels is currently not possible declarativly
116 # because of already defined
117 logger.level.core.weechat = 0;
118 logger.level.irc = 3;
119 logger.level.python = 3;
120 weechat.bar.title.color_bg = 0;
121 weechat.bar.status.color_bg = 0;
122 alias.cmd.reload = "exec -oc cat /etc/weechat.set";
123 script.scripts.download_enabled = true;
124 weechat.look.prefix_align = "left";
125 weechat.look.prefix_align_max = 20;
126 irc.look.server_buffer = "independent";
127 matrix.look.server_buffer = "independent";
128 weechat.bar.buflist.size_max = 20;
129 weechat.color.chat_nick_colors = [
130 1 2 3 4 5 6 9
131 10 11 12 13 14
132 28 29
133 30 31 32 33 34 35 36 37 38 39
134 70
135 94
136 101 102 103 104 105 106 107
137 130 131 133 134 135 136 137
138 140 141 142 143
139 160 161 162 163 165 166 167 168 169
140 170 171 172 173 174 175
141 196 197 198 199
142 200 201 202 203 204 205 206 208 209 209
143 210 211 212
144 ];
145 };
146 extraCommands = ''
147 /script upgrade
148 /script install go.py
149 /script install nickregain.pl
150 /script install autosort.py
151 /key bind meta-q /go
152 /key bind meta-t /bar toggle nicklist
153 /key bind meta-y /bar toggle buflist
154 /filter addreplace irc_smart * irc_smart_filter *
155 /filter addreplace playlist_topic irc.*.#the_playlist irc_topic *
156 /filter addreplace xxx_joinpart irc.r.#xxx irc_join,irc_part,irc_quit *
157 /set logger.level.irc.news 0
158 /set logger.level.python.server.nixos_dev = 0;
159 /set logger.level.irc.hackint.#the_playlist = 0;
160 /connect bitlbee
161 /connect r
162 /connect news
163 /connect libera
164 /connect hackint
165 /matrix connect nixos_dev
166 /matrix connect lassulus
167 '';
168 files."sec.conf" = toString (pkgs.writeText "sec.conf" ''
169 [crypt]
170 cipher = aes256
171 hash_algo = sha256
172 passphrase_command = "cat $CREDENTIALS_DIRECTORY/WEECHAT_PASSPHRASE"
173 salt = on
174
175 [data]
176 __passphrase__ = on
177 hackint_sasl = "5CA242E92E7A09B180711B50C4AE2E65C42934EB4E584EC82BC1281D8C72CD411D590C16CC435687C0DA13759873CC"
178 libera_sasl = "9500B5AC3B29F9CAA273F1B89DC99550E038AF95C4B47442B1FB4CB9F0D6B86B26015988AD39E642CA9C4A78DED7F42D1F409B268C93E778"
179 r_sasl = "CB6FB1421ED5A9094CD2C05462DB1FA87C4A675628ABD9AEC9928A1A6F3F96C07D9F26472331BAF80B7B73270680EB1BBEFD"
180 c3-gsm = "C49DD845900CFDFA93EEBCE4F1ABF4A963EF6082B7DA6410FA701CC77A04BB6C201FCB864988C4F2B97ED7D44D5A28F162"
181 bitlbee = "814ECAC59D9CF6E8340B566563E5D7E92AB92209B49C1EDE4CAAC32DD0DF1EC511D97C75E840C45D69BB9E3D03E79C"
182 matrix_lassulus = "0CA5C0F70A9F893881370F4A665B4CC40FBB1A41E53BC94916CD92B029103528611EC0B390116BE60FA79AE10F486E96E17B0824BE2DE1C97D87B88F5407330DAD70C044147533C36B09B7030CAD97"
183 '');
184 };
185 };
186
187in {
188 users.users.mainUser.packages = [
189 weechat-configured
190 ];
191 environment.etc."weechat.set".source = "${weechat-configured}/weechat.set";
192 systemd.tmpfiles.rules = [
193 "d /var/state/weechat_logs 0700 lass users -"
194 "d /var/state/weechat 0700 lass users -"
195 "d /var/state/weechat_cfg 0700 lass users -"
196 "L+ /home/lass/.local/share/weechat - - - - ../../../../var/state/weechat"
197 "L+ /home/lass/.config/weechat - - - - ../../../../var/state/weechat_cfg"
198 ];
199
200 systemd.services.weechat = {
201 wantedBy = [ "multi-user.target" ];
202 restartIfChanged = false;
203 serviceConfig = {
204 User = "lass";
205 RemainAfterExit = true;
206 Type = "oneshot";
207 LoadCredential = [
208 "WEECHAT_PASSPHRASE:${config.krebs.secret.directory}/weechat_passphrase"
209 ];
210 ExecStart = "${pkgs.tmux}/bin/tmux -2 new-session -d -s IM ${weechat-configured}/bin/weechat";
211 ExecStop = "${pkgs.tmux}/bin/tmux kill-session -t IM"; # TODO run save in weechat
212 };
213 };
214}