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