aboutsummaryrefslogtreecommitdiff
path: root/doc/aerc-config.5.scd
blob: 3912b3da94637e9a295b90007eb9f91fb958ce3a (plain)
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
AERC-CONFIG(5)

# NAME

aerc-config - configuration file format for *aerc*(1)

# SYNOPSIS

There are three aerc config files: _aerc.conf_, _binds.conf_, and
_accounts.conf_. The last one must be kept secret, as it may include your
account credentials. We look for these files in your XDG config home plus
_aerc_, which defaults to _~/.config/aerc_. Alternate files can be specified via
command line arguments, see *aerc*(1).

Examples of these config files are typically included with your installation of
aerc and are usually installed in _/usr/share/aerc_.

Each file uses the ini format, and consists of sections with keys and values.
A line beginning with _#_ is considered a comment and ignored, as are empty
lines. New sections begin with _[section-name]_ on a single line, and keys and
values are separated with _=_.

This manual page focuses on _aerc.conf_. _binds.conf_ is detailed in
*aerc-binds*(5) and _accounts.conf_ in *aerc-accounts*(5).

_aerc.conf_ is used for configuring the general appearance and behavior of aerc.

# GENERAL OPTIONS

These options are configured in the *[general]* section of _aerc.conf_.

*default-save-path* = _<path>_
	Used as a default path for save operations if no other path is specified.

*pgp-provider* = _auto_|_gpg_|_internal_
	If set to _gpg_, aerc will use system gpg binary and keystore for all
	crypto operations. If set to _internal_, the internal openpgp keyring
	will be used. If set to _auto_, the system gpg will be preferred unless
	the internal keyring already exists, in which case the latter will be
	used.

	Default: _auto_

*unsafe-accounts-conf* = _true_|_false_
	By default, the file permissions of _accounts.conf_ must be restrictive
	and only allow reading by the file owner (_0600_). Set this option to
	_true_ to ignore this permission check. Use this with care as it may
	expose your credentials.

	Default: _false_

*log-file* = _<path>_
	Output log messages to specified file. A path starting with _~/_ is
	expanded to the user home dir. When redirecting aerc's output to a file
	using _>_ shell redirection, this setting is ignored and log messages
	are printed to stdout.

*log-level* = _trace_|_debug_|_info_|_warn_|_error_
	Only log messages above the specified level to *log-file*. Supported
	levels are: _trace_, _debug_, _info_, _warn_ and _error_. When
	redirecting aerc's output to a file using _>_ shell redirection, this
	setting is ignored and the log level is forced to _trace_.

	Default: _info_

*disable-ipc* = _true_|_false_
	Disable IPC entirely. Don't run commands (including _mailto:..._ and
	_mbox..._) in an existing aerc instance and don't start an IPC server to
	allow subsequent aerc instances to run commands in the current one.

	Default: _false_

*disable-ipc-mailto* = _true_ | _false_
	Don't run _mailto:..._ commands over IPC; start a new aerc instance with the
	composer instead.

	Default: _false_

*disable-ipc-mbox* = _true_ | _false_
	Don't run _mbox:..._ commands over IPC; start a new aerc instance with the
	mbox file instead.

	Default: _false_

*term* = _<TERM>_
	Set the $TERM environment variable used for the embedded terminal.

	Default: _xterm-256color_

*enable-osc8* = _true_|_false_
	Enable the embedded terminal to output OSC 8 (hyperlinks) escape
	sequences. Not all terminal emulators handle OSC 8 sequences properly
	and can produce confusing results, disable this setting if that occurs.

	Default: _false_

*default-menu-cmd* = _<cmd>_
	Default shell command to use for *:menu*. This will be executed with
	_sh -c_ and will run in an popover dialog.

	Any occurrence of _%f_ will be replaced by a temporary file path where
	the command is expected to write output lines to be consumed by *:menu*.
	Otherwise, the lines will be read from the command's standard output.

	Example:
		*default-menu-cmd* = _fzf_

# UI OPTIONS

These options are configured in the *[ui]* section of _aerc.conf_.

*index-columns* = _<column1,column2,column3...>_
	Describes the format for each row in a mailbox view. This is a comma
	separated list of column names with an optional align and width suffix.
	After the column name, one of the _<_ (left), _:_ (center) or _>_
	(right) alignment characters can be added (by default, left) followed by
	an optional width specifier. The width is either an integer representing
	a fixed number of characters, or a percentage between _1%_ and _99%_
	representing a fraction of the terminal width. It can also be one of the
	_\*_ (auto) or _=_ (fit) special width specifiers. Auto width columns
	will be equally attributed the remaining terminal width. Fit width
	columns take the width of their contents. If no width specifier is set,
	_\*_ is used by default.

	Default: _flags:4,name<20%,subject,date>=_

*column-separator* = _"<separator>"_
	String separator inserted between columns. When a column width specifier
	is an exact number of characters, the separator is added to it (i.e. the
	exact width will be fully available for that column contents).

	Default: _"  "_

*column-<name>* = _<go template>_
	Each name in *index-columns* must have a corresponding *column-<name>*
	setting. All *column-<name>* settings accept golang text/template
	syntax.

	By default, these columns are defined:

	```
	column-flags = {{.Flags | join ""}}
	column-name = {{index (.From | names) 0}}
	column-subject = {{.ThreadPrefix}}{{.Subject}}
	column-date = {{.DateAutoFormat .Date.Local}}
	```

	See *aerc-templates*(7) for all available symbols and functions.

*timestamp-format* = _<timeformat>_
	See time.Time#Format at https://godoc.org/time#Time.Format

	Default: _2006 Jan 02_

*this-day-time-format* = _<timeformat>_
	Index-only time format for messages that were received/sent today.
	If this is empty, *timestamp-format* is used instead.

	Default: _15:04_

*this-week-time-format* = _<timeformat>_
	Index-only time format for messages that were received/sent within the
	last 7 days. If this is empty, *timestamp-format* is used instead.

	Default: _Jan 02_

*this-year-time-format* = _<timeformat>_
	Index-only time format for messages that were received/sent this year.
	If this is empty, *timestamp-format* is used instead.

	Default: _Jan 02_

*message-view-timestamp-format* = _<timeformat>_
	If set, overrides *timestamp-format* for the message view.

	Default: _2006 Jan 02, 15:04 GMT-0700_

*message-view-this-day-time-format* = _<timeformat>_
	If set, overrides *timestamp-format* in the message view for messages
	that were received/sent today.

*message-view-this-week-time-format* = _<timeformat>_
	If set, overrides *timestamp-format* in the message view for messages
	that were recieved/sent within the last 7 days.

*message-view-this-year-time-format* = _<timeformat>_
	If set, overrides *timestamp-format* in the message view for messages
	that were received/sent this year.

*sidebar-width* = _<int>_
	Width of the sidebar, including the border. Set to zero to disable the
	sidebar.

	Default: _22_

*message-list-split* = _[<direction>] <size>_
	The default split layout for message list tabs.

	_<direction>_ is optional and defaults to _horizontal_. It can take one
	of the following values: _h_, _horiz_, _horizontal_, _v_, _vert_,
	_vertical_.

	_<size>_ is a positive integer representing the size (in terminal cells)
	of the message list window.

	See *:split* in *aerc*(1) for more details.

*empty-message* = _<string>_
	Message to display when viewing an empty folder.

	Default: _(no messages)_

*empty-dirlist* = _<string>_
	Message to display when no folders exists or are all filtered.

	Default: _(no folders)_

*empty-subject* = _<string>_
	Text to display in message list, when the subject is empty.

	Default: _(no subject)_

*mouse-enabled* = _true_|_false_
	Enable mouse events in the ui, e.g. clicking and scrolling with the mousewheel

	Default: _false_

*new-message-bell* = _true_|_false_
	Ring the bell when a new message is received.

	Default: _true_

*tab-title-account* = _<go_template>_
	The template to use for account tab titles. See *aerc-templates*(7) for
	available field names. To conditionally show the unread count next to
	the account name, set to:

		*tab-title-account* = {{.Account}} {{if .Unread}}({{.Unread}}){{end}}

	Default: _{{.Account}}_

*tab-title-composer* = _<go_template>_
	The template to use for composer tab titles. See *aerc-templates*(7) for
	available field names.

	Default: _{{if .To}}to:{{index (.To | shortmboxes) 0}} {{end}}{{.SubjectBase}}_

*tab-title-viewer* = _<go_template>_
	The template to use for viewer tab titles. See *aerc-templates*(7) for
	available field names.

	Default: _{{.Subject}}_

*pinned-tab-marker* = _"<string>"_
	Marker to show before a pinned tab's name.

	Default: _`_

*spinner* = _"<string>"_
	Animation shown while loading, split by *spinner-delimiter* (below)

	Examples:
	- *spinner* = _"\-\_-,\_-\_"_
	- *spinner* = _'. , .'_
	- *spinner* = _"\,|,/,-"_

	Default: _"[..]    , [..]   ,  [..]  ,   [..] ,    [..],   [..] ,  [..]  , [..]   "_

*spinner-delimiter* = _<string>_
	Spinner delimiter to split string into an animation

	Default: _,_

*spinner-interval* = _<duration>_
	The delay between each spinner frame

	Default: _200ms_

*sort* = _<criteria>_
	List of space-separated criteria to sort the messages by, see *:sort*
	command in *aerc*(1) for reference. Prefixing a criterion with _-r_
	reverses that criterion.

	Example:
		*sort* = _from -r date_

*dirlist-left* = _<go template>_
	Template for the left side of the directory list.
	See *aerc-templates*(7) for all available fields and functions.

	Default: _{{.Folder}}_

*dirlist-right* = _<go template>_
	Template for the right side of the directory list.
	See *aerc-templates*(7) for all available fields and functions.

	Default: _{{if .Unread}}{{humanReadable .Unread}}{{end}}_

*dirlist-delay* = _<duration>_
	Delay after which the messages are actually listed when entering
	a directory. This avoids loading messages when skipping over folders
	and makes the UI more responsive. If you do not want that, set it to
	_0s_.

	Default: _200ms_

*dirlist-tree* = _true_|_false_
	Display the directory list as a foldable tree.

	Default: _false_

*dirlist-collapse* = _<int>_
	If *dirlist-tree* is enabled, set level at which folders are collapsed
	by default. Set to _0_ to disable.

	Default: _0_

*next-message-on-delete* = _true_|_false_
	Moves to next message when the current message is deleted, archived, or moved.

	Default: _true_

*auto-mark-read* = _true_|_false_
	Set the _seen_ flag when a message is opened in the message viewer.

	Default: _true_

*completion-popovers* = _true_|_false_
	Shows potential auto-completions for text inputs in popovers.

	Default: _true_

*completion-delay* = _<duration>_
	How long to wait after the last input before auto-completion is triggered.

	Default: _250ms_

*completion-min-chars* = _<int>_
	The minimum required characters to allow auto-completion to be triggered
	after *completion-delay*.

	Setting this to _manual_ disables automatic completion, leaving only the
	manually triggered completion with the *$complete* key (see
	*aerc-binds*(5) for more details).

	Default: _1_

*border-char-vertical* = _"<char>"_++
*border-char-horizontal* = _"<char>"_
	Set stylable characters (via the *border* element) for vertical and
	horizontal borders.

	Default: _" "_

*stylesets-dirs* = _<path1:path2:path3...>_
	The directories where the stylesets are stored. The config takes
	a colon-separated list of dirs. If this is unset or if a styleset cannot
	be found, the following paths will be used as a fallback in that order:

	```
	${XDG_CONFIG_HOME:-~/.config}/aerc/stylesets
	${XDG_DATA_HOME:-~/.local/share}/aerc/stylesets
	/usr/local/share/aerc/stylesets
	/usr/share/aerc/stylesets
	```

*styleset-name* = _<string>_
	The name of the styleset to be used to style the ui elements. The
	stylesets are stored in the _stylesets_ directory in the config
	directory.

	Default: _default_

	Have a look at *aerc-stylesets*(7) as to how a styleset looks like.

*icon-unencrypted* = _<string>_
	The icon to display for unencrypted mails. The status indicator is only
	displayed if an icon is set.

*icon-encrypted* = _<string>_
	The icon to display for encrypted mails.

	Default: _[e]_

*icon-signed* = _<string>_
	The icon to display for signed mails where the signature was
	successfully validated.

	Default: _[s]_

*icon-signed-encrypted* = _<string>_
	The icon to display for signed and encrypted mails where the signature
	was successfully verified. The combined icon is only used if set,
	otherwise the signed and encrypted icons are displayed separately.

*icon-unknown* = _<string>_
	The icon to display for signed mails which could not be verified due to
	the key being unknown.

	Default: _[s?]_

*icon-invalid* = _<string>_
	The icon to display for signed mails where verification failed.

	Default: _[s!]_

*icon-attachment* = _<string>_
	The icon to display in *column-flags* when the message has an
	attachment.

	Default: _a_

*icon-new* = _<string>_
	The icon to display in *column-flags* when the message is unread and
	new.

	Default: _N_

*icon-old* = _<string>_
	The icon to display in *column-flags* when the message is unread and
	old.

	Default: _O_

*icon-replied* = _<string>_
	The icon to display in *column-flags* when the message has been replied
	to.

	Default: _r_

*icon-flagged* = _<string>_
	The icon to display in *column-flags* when the message is flagged.

	Default: _!_

*icon-marked* = _<string>_
	The icon to display in *column-flags* when the message is marked.

	Default: _\*_

*icon-draft* = _<string>_
	The icon to display in *column-flags* when the message is a draft.

	Default: _d_

*icon-deleted* = _<string>_
	The icon to display in *column-flags* when the message has been deleted.

	Default: _X_

*fuzzy-complete* = _true_|_false_
	When typing a command or option, the popover will now show not only the
	items /starting/ with the string input by the user, but it will also show
	instances of items /containing/ the string, starting at any position and
	need not be consecutive characters in the command or option.

*reverse-msglist-order* = _true_|_false_
	Reverses the order of the message list. By default, the message list is
	ordered with the newest (highest UID) message on top. Reversing the
	order will put the oldest (lowest UID) message on top. This can be
	useful in cases where the backend does not support sorting.

	Default: _false_

*reverse-thread-order* = _true_|_false_
	Reverse display of the message threads. By default, the thread root is
	displayed at the top of the tree with all replies below. The reverse
	option will put the thread root at the bottom with replies on top.

	Default: _false_

*sort-thread-siblings* = _true_|_false_
	Sort the thread siblings according to the sort criteria for the messages. If
	sort-thread-siblings is false, the thread siblings will be sorted based on
	the message UID. This option is only applicable for client-side threading
	with a backend that enables sorting.

	Default: _false_

*threading-enabled* = _true_|_false_
	Enable a threaded view of messages. If this is not supported by the
	backend (IMAP server or notmuch), threads will be built by the client.

	Default: _false_

*force-client-threads* = _true_|_false_
	Force threads to be built client-side. Backends that don't support threading
	will always build threads client side.

	Default: _false_

*client-threads-delay* = _<duration>_
	Delay of inactivity after which the client threads are rebuilt. Setting
	this to _0s_ may introduce a noticeable lag when scrolling through the
	message list.

	Default: _50ms_

*show-thread-context* = _true_|_false_
	Enable showing of thread context. Note: this is not supported by all
	backends.

	Default: _false_

*msglist-scroll-offset* = _<int>_
	Set the scroll offset in number of lines from the top and bottom
	of the message list.

	Default: _0_

*dialog-position* = _top_|_center_|_bottom_
	Set the position of popover dialogs such as the one from *:menu*,
	*:envelope* or *:attach -m*.

	Default: _center_

*dialog-width* = _<width>_
	Set the width of popover dialogs as a percentage of the total width of
	the window. The specified value should be between _10%_ and _100%_.

	Default: _50_

*dialog-height* = _<height>_
	Set the height of popover dialogs as a percentage of the total height of
	the window. The specified value should be between _10%_ and _100%_.

	Default: _50_

## THREAD PREFIX CUSTOMIZATION

You can fully customize the thread arrows appearance, which is defined by the
following configurable prefix parts:

*thread-prefix-tip* = _<string>_
	Define the arrow head.

	Default: _">"_

*thread-prefix-indent* = _<string>_
	Define the arrow indentation.

	Default: _" "_

*thread-prefix-stem* = _<string>_
	Define the vertical extension of the arrow.

	Default: _"│"_

*thread-prefix-limb* = _<string>_
	Define the horizontal extension of the arrow.

	Default: _""_

*thread-prefix-folded* = _<string>_
	Define the folded thread indicator.

	Default: _"+"_

*thread-prefix-unfolded* = _<string>_
	Define the unfolded thread indicator.

	Default: _""_

*thread-prefix-first-child* = _<string>_
	Define the first child connector.

	Default: _""_

*thread-prefix-has-siblings* = _<string>_
	Define the connector used if the message has siblings.

	Default: _├─_

*thread-prefix-lone* = _<string>_
	Define the connector used if the message has no parents and no children.

	Default: _""_

*thread-prefix-orphan* = _<string>_
	Define the connector used if the message has no parents and has children.

	Default: _""_

*thread-prefix-last-sibling* = _<string>_
	Define the connector for the last sibling.

	Default: _└─_

*thread-prefix-last-sibling-reverse* = _<string>_
	Define the connector for the last sibling in reversed threads.

	Default: _┌─_

*thread-prefix-dummy* = _<string>_
	Define the connector for the dummy head.

	Default: _┬─_

*thread-prefix-dummy-reverse* = _<string>_
	Define the connector for the dummy head in reversed threads.

	Default: _┴─_

*thread-prefix-first-child-reverse* = _<string>_

	Define the arrow appearance by selecting the first child connector in
	reversed threads.

	Default: _""_

*thread-prefix-orphan-reverse* = _<string>_
	Customize the reversed threads arrow appearance by selecting the
	connector used if the message has no parents and has children.

	Default: _""_


Default settings (mutt-style):

	```
	[PATCH aerc v5] ui: allow thread arrow customisation
	├─>[aerc/patches] build success
	├─>Re: [PATCH aerc v5] ui: allow thread arrow customisation
	├─+
	└─>
	  ├─>
	  │ ├─>
	  │ └─>
	  │   └─>
	  └─>
	```

More compact, rounded threads that are also fold-aware:

	```
	┌[PATCH aerc v5] ui: allow thread arrow customisation
	├─[aerc/patches] build success
	├─Re: [PATCH aerc v5] ui: allow thread arrow customisation
	├+
	╰┬
	 ├┬
	 │├─
	 │╰┬
	 │ ╰─
	 ╰─
	```

```
thread-prefix-tip = ""
thread-prefix-indent = ""
thread-prefix-stem = "│"
thread-prefix-limb = "─"
thread-prefix-folded = "+"
thread-prefix-unfolded = ""
thread-prefix-first-child = "┬"
thread-prefix-has-siblings = "├"
thread-prefix-orphan = "┌"
thread-prefix-dummy = "┬"
thread-prefix-lone = " "
thread-prefix-last-sibling = "╰"
```

## CONTEXTUAL UI CONFIGURATION

The UI configuration can be specialized for accounts, specific mail
directories and message subjects. The specializations are added using
contextual config sections based on the context.

The contextual UI configuration is merged to the base UiConfig in the
following order: *Base UIConfig > Account Context > Folder Context*.

*[ui:account=*_AccountName_*]*
	Adds account specific configuration with the account name.

*[ui:folder=*_FolderName_*]*
	Add folder specific configuration with the folder name.

*[ui:folder~*_Regex_*]*
	Add folder specific configuration for folders whose names match the regular
	expression.

Example:
```
[ui:account=Work]
sidebar-width=...

[ui:folder=Sent]
index-format=...

[ui:folder~Archive/\d+/.*]
index-format=...
```

# STATUSLINE

These options are configured in the *[statusline]* section of _aerc.conf_.

*status-columns* = _<column1,column2,column3...>_
	Describes the format for the statusline. This is a comma separated list
	of column names with an optional align and width suffix. See
	*[ui].index-columns* for more details.

	To completely mute the statusline (except for push notifications),
	explicitly set *status-columns* to an empty string:

		status-columns=

	Default: _left<\*,center>=,right>\*_

*column-separator* = _"<separator>"_
	String separator inserted between columns. See *[ui].column-separator*
	for more details.

	Default: _" "_

*column-<name>* = _<go template>_
	Each name in *status-columns* must have a corresponding *column-<name>*
	setting. All *column-<name>* settings accept golang text/template
	syntax.

	By default, these columns are defined:

	```
	column-left = [{{.Account}}] {{.StatusInfo}}
	column-center = {{.PendingKeys}}
	column-right = {{.TrayInfo}} | {{cwd}}
	```

	See *aerc-templates*(7) for all available symbols and functions.

*separator* = _"<string>"_
	Specifies the separator between grouped statusline elements (e.g. for
	the _{{.ContentInfo}}_, _{{.TrayInfo}}_ and _{{.StatusInfo}}_ in
	*column-<name>*).

	Default: _" | "_

*display-mode* = _text_|_icon_
	Defines the mode for displaying the status elements.

	Default: _text_

# VIEWER

These options are configured in the *[viewer]* section of _aerc.conf_.

*pager* = _<command>_
	Specifies the pager to use when displaying emails. Note that some filters
	may add ANSI escape sequences to add color to rendered emails, so you may
	want to use a pager which supports ANSI.

	Default: _less -Rc_

*alternatives* = _<mime,types>_
	If an email offers several versions (multipart), you can configure which
	mimetype to prefer. For example, this can be used to prefer plaintext over
	HTML emails.

	Default: _text/plain,text/html_

*header-layout* = _<header|layout,list...>_
	Defines the default headers to display when viewing a message. To display
	multiple headers in the same row, separate them with a pipe, e.g. _From|To_.
	Rows will be hidden if none of their specified headers are present in the
	message.

	Notmuch tags can be displayed by adding Labels.

	Authentication information from the Authentication-Results header can be
	displayed by adding _DKIM_, _SPF_ or _DMARC_. To show more information
	than just the authentication result, append a plus sign (*+*) to the header name
	(e.g. _DKIM+_).

	Default: _From|To,Cc|Bcc,Date,Subject_

*show-headers* = _true_|_false_
	Default setting to determine whether to show full headers or only parsed
	ones in message viewer.

	Default: _false_

*always-show-mime* = _true_|_false_
	Whether to always show the mimetype of an email, even when it is just a single part.

	Default: _false_

*max-mime-height* = _height_
	Define the maximum height of the mimetype switcher before a scrollbar is
	used. The height of the mimetype switcher is restricted to half of the display height.
	If the provided value for the height is zero, the number of parts will
	be used as the height of the type switcher.

	Default: 0

*parse-http-links* = _true_|_false_
	Parses and extracts http links when viewing a message. Links can then be
	accessed with the *open-link* command.

	Default: _true_

# COMPOSE

These options are configured in the *[compose]* section of _aerc.conf_.

*editor* = _<command>_
	Specifies the command to run the editor with. It will be shown in an
	embedded terminal, though it may also launch a graphical window if the
	environment supports it.

	The following variables are defined in the editor's environment:

	*AERC_ACCOUNT*
		the name of the current account
	*AERC_ADDRESS_BOOK_CMD*
		the _address-book-cmd_ specified for the current account in
		_accounts.conf_

	Defaults to *$EDITOR*, or *vi*(1).

*header-layout* = _<header|layout,list...>_
	Defines the default headers to display when composing a message. To display
	multiple headers in the same row, separate them with a pipe, e.g. _To|From_.

	Default: _To|From,Subject_

*edit-headers* = _true_|_false_
	Edit headers directly into the text editor instead of having separate UI
	text inputs.

	When this is set to _true_, the *:cc*, *:bcc* and *:header* commands do
	not work, editing email headers are left to the text editor.
	*address-book-cmd* is not supported and address completion is left to
	the editor itself. *header-layout* is ignored.

	Default: _false_

*address-book-cmd* = _<command>_
	Specifies the command to be used to tab-complete email addresses. Any
	occurrence of _%s_ in the *address-book-cmd* will be replaced with anything
	the user has typed after the last comma.

	The command must output the completions to standard output, one completion
	per line. Each line must be tab-delimited, with an email address occurring as
	the first field. Only the email address field is required. The second field,
	if present, will be treated as the contact name. Additional fields are
	ignored.

	This parameter can also be set per account in _accounts.conf_.

	Example with *carddav-query*(1):
		*address-book-cmd* = _carddav-query %s_

	Example with *khard*(1):
		*address-book-cmd* = _khard email --remove-first-line --parsable %s_

*file-picker-cmd* = _<command>_
	Specifies the command to be used to select attachments. Any occurrence of
	_%s_ in the *file-picker-cmd* will be replaced with the argument _<arg>_
	to *:attach -m* _<arg>_. Any occurence of _%f_ will be replaced by the
	location of a temporary file, from which aerc will read the selected files.

	If _%f_ is not present, the command must output the selected files to
	standard output, one file per line. If it is present, then aerc does not
	capture the standard output and instead reads the files from the temporary
	file which should have the same format.

	Examples:
		*file-picker-cmd* = _fzf --multi --query=%s_
		*file-picker-cmd* = _ranger --choose-files=%f_

*reply-to-self* = _true_|_false_
	If set to _false_, do not mail yourself when replying (e.g., if replying
	to emails previously sent by yourself, address your replies to the
	original To and Cc).

	Default: _true_

*empty-subject-warning* = _true_|_false_
	Warn before sending an email with an empty subject.

	Default: _false_

*no-attachment-warning* = _<regexp>_
	Specifies a regular expression against which an email's body should be
	tested before sending an email with no attachment. If the regexp
	matches, aerc will warn you before sending the message. Leave empty to
	disable this feature.

	Uses Go's regexp syntax, documented at https://golang.org/s/re2syntax.
	The _(?im)_ flags are set by default (case-insensitive and multi-line).

	Example:
		*no-attachment-warning* = _^[^>]\*attach(ed|ment)_

*format-flowed* = _true_|_false_
	When set, aerc will generate _Format=Flowed_ bodies with a content type
	of _"text/plain; Format=Flowed"_ as described in RFC3676. This format is
	easier to handle for some mailing software, and generally just looks
	like ordinary text. To actually make use of this format's features,
	you'll need support in your editor.

	Default: _false_

*lf-editor* = _true_|_false_
	By default, aerc will use RFC2822 standard _\\r\\n_ (CRLF) line breaks
	when composing messages. Use this option for text editors that only
	support non-standard _\\n_ (LF) line breaks.

	Default: _false_

# MULTIPART CONVERTERS

Converters allow generating _multipart/alternative_ messages by converting the
main _text/plain_ body into any other text MIME type with the *:multipart*
command. Only exact MIME types are accepted. The commands are invoked with
_sh -c_ and are expected to output valid UTF-8 text.

Only _text/<subtype>_ MIME parts can be generated. The _text/plain_ MIME type is
reserved and cannot be generated. You still need to write your emails by hand in
your favorite text editor.

Converters are configured in the *[multipart-converters]* section of
_aerc.conf_.

Example:

```
[multipart-converters]
text/html=pandoc -f markdown -t html --standalone
```

Obviously, this requires that you write your main _text/plain_ body using the
markdown syntax. Also, mind that some mailing lists reject emails that contain
_text/html_ alternative parts. Use this feature carefully and when possible,
avoid using it at all.

# FILTERS

Filters are a flexible and powerful way of handling viewing parts of an opened
message. When viewing messages aerc will show the list of available message
parts and their MIME type at the bottom, but unless a filter is defined for
a specific MIME type, it will only show a menu with a few options (allowing you
to open the part in an external program, save it to disk or pipe it to a shell
command). Configuring a filter will allow viewing the output of the filter in
the configured *pager* in aerc's built-in terminal.

Filters are configured in the *[filters]* section of *aerc.conf*. The first
filter which matches the part's MIME type will be used, so order them from most
to least specific. You can also match on non-MIME types, by prefixing with the
header to match against (non-case-sensitive) and a comma, e.g. _subject,text_
will match a subject which contains _text_. Use _header,~regex_ to match
against a _regex_. Using _.filename_ instead of a header will match against the
filename of an attachment.

Note that aerc will pipe the content into the configured filter program, so
filters need to be able to read from standard input. Many programs support
reading from stdin by putting _-_ instead of a path to a file. You can also
chain together multiple filters by piping with _|_.

aerc ships with some default filters installed in the libexec directory (usually
_/usr/libexec/aerc/filters_). Note that these may have additional dependencies
that aerc does not have alone.

The filter commands are invoked with _sh -c command_. The following folders are
prepended to the system *$PATH* to allow referencing filters from their name only.

```
${XDG_CONFIG_HOME:-~/.config}/aerc/filters
~/.local/libexec/aerc/filters
${XDG_DATA_HOME:-~/.local/share}/aerc/filters
$PREFIX/libexec/aerc/filters
$PREFIX/share/aerc/filters
/usr/libexec/aerc/filters
/usr/share/aerc/filters
```

If you want to run a program in your default *$PATH* which has the same
name as a builtin filter (e.g. _/usr/bin/colorize_), use its absolute path.

The following variables are defined in the filter command environment:

*AERC_MIME_TYPE*
	the part MIME type/subtype
*AERC_FORMAT*
	the part content type format= parameter (e.g. format=flowed)
*AERC_FILENAME*
	the attachment filename (if any)
*AERC_SUBJECT*
	the message Subject header value
*AERC_FROM*
	the message From header value

Note that said email body is converted into UTF-8 before being passed to
filters.

If *show-headers* is enabled, only the currently viewed part body is piped into
the filter command. A special _.headers_ filter command can be defined to post
process the full headers.

## EXAMPLES

_text/plain_
	Color some things, e.g. quotes, git diffs, links, etc.:

	```
	text/plain=colorize
	```

	The built-in _colorize_ filter can be configured in the *[viewer]*
	section of styleset files. See *aerc-stylesets*(7).

	Wrap long lines at 100 characters, while not messing up nested quotes.
	Handles format=flowed emails properly:

	```
	text/plain=wrap -w 100 | colorize
	```

_from,<sender>_
	Another example of hard wrapping lines of emails sent by a specific
	person. Explicitly reflow all paragraphs instead of only wrapping long
	lines. This may break manual formatting in some messages:

	```
	from,thatguywhoneverhardwrapshismessages=wrap -r -w 72 | colorize
	```

_subject,~<regexp>_
	Use rainbow coloring with *lolcat*(1) for emails sent by software
	forges:

	```
	subject,~Git(hub|lab)=lolcat -f
	```

_text/html_
	Render html to a more human readable version and colorize:

	```
	text/html=html | colorize
	```

	Use pandoc to output plain text:

	```
	text/html=pandoc -f html -t plain
	```

_text/calendar_
	Parse calendar invites:

	```
	text/calendar=calendar
	```

_text/\*_
	Catch any other type of text that did not have a specific filter and
	use *bat*(1) to color these:

	```
	text/\*=bat -fP --file-name="$AERC_FILENAME" --style=plain
	```

_.headers_
	Colorize email headers when *show-headers* is _true_.

	```
	.headers=colorize
	```

_message/delivery-status_
	When not being able to deliver the provider might send such emails:

	```
	message/delivery-status=colorize
	```

_message/rfc822_
	When getting emails as attachments, e.g. on some mailing lists digest
	format is sending an email with all the digest emails as attachments.
	Requires *caeml*(1) to be on *PATH*:

	```
	message/rfc822=caeml | colorize
	```

	https://github.com/ferdinandyb/caeml

_application/mbox_
	Emails as attachments in the mbox format. For example aerc can also
	create an mbox from messages with the *:pipe* command. Requires
	*catbox*(1) and *caeml*(1) to be on *PATH*:

	```
	application/mbox=catbox -c caeml | colorize
	```

	https://github.com/konimarti/catbox

_application/pdf_
	Render pdf to text and rewrap at 100 character width. Requires
	*pdftotext*(1) to be on *PATH*:

	```
	application/pdf=pdftotext - -l 10 -nopgbrk -q  - | fmt -w 100
	```

	https://www.xpdfreader.com/pdftotext-man.html

_image/\*_

	This is a tricky topic. It's possible to display images in a terminal,
	but for high resolution images the terminal you are using either needs
	to support sixels or the kitty terminal graphics protocol. The built-in
	terminal emulator of aerc (via the TUI library Vaxis) supports both.
	Furthermore if you don't set any filter for images, Vaxis will figure
	out what your terminal emulator supports and either use sixels, kitty
	graphics, or fall back to a pixelated half-block. You can turn this
	feature off, by setting a filter that is essentially no-op.

	You can still set a specific filter, e.g *catimg*(1):

	```
	image/\*=catimg -w$(tput cols) -
	```

_.filename,~<regexp>_
	Match <regexp> against the filename of an attachment, e.g. to split
	csv-s into columns:

	```
	.filename,~.*\.csv=column -t --separator=","
	```

See the wiki at https://man.sr.ht/~rjarry/aerc/ for more examples and possible
customizations of the built-in filters.

# OPENERS

Openers allow you to specify the command to use for the *:open* and *:open-link*
actions on a per-MIME-type basis. The *:open-link* URL scheme is used to
determine the MIME type as follows: _x-scheme-handler/<scheme>_. They are
configured in the *[openers]* section of _aerc.conf_.

_{}_ is expanded as the temporary filename or URL to be opened with proper shell
quoting. If it is not encountered in the command, the filename/URL will be
appended to the end of the command. The command will then be executed with
_sh -c_.

Like *[filters]*, openers support basic shell globbing. The first opener which
matches the part's MIME type (or URL scheme handler MIME type) will be used, so
order them from most to least specific.

Example:

```
[openers]
x-scheme-handler/irc=hexchat
x-scheme-handler/http\*=printf '%s' {} | wl-copy
text/html=surf -dfgms
text/plain=gvim {} +125
message/rfc822=thunderbird
```

# HOOKS

Hooks are triggered whenever the associated event occurs. The commands are run
in a shell environment with information added to environment variables.

They are configured in the *[hooks]* section of aerc.conf.

*aerc-startup* = _<command>_
	Executed when aerc is started is received in the selected folder. If it
	is used to run certain commands at startup. The hook is executed as soon
	as the UI is initialized and does not wait for all accounts to be fully
	loaded.

	Variables:

	- *AERC_VERSION*
	- *AERC_BINARY*

	Example:

		*aerc-startup* = _aerc :terminal calcurse && aerc :next-tab_

*mail-received* = _<command>_
	Executed when new mail is received in the selected folder. This will
	only work reliably with maildir and some imap servers.

	Variables:

	- *AERC_ACCOUNT*
	- *AERC_FOLDER*
	- *AERC_FROM_NAME*
	- *AERC_FROM_ADDRESS*
	- *AERC_SUBJECT*
	- *AERC_MESSAGE_ID*

	Example:

		*mail-received* = _notify-send "[$AERC_ACCOUNT/$AERC_FOLDER] New mail from $AERC_FROM_NAME" "$AERC_SUBJECT"_

*mail-deleted* = _<command>_
	Executed when a message is deleted from a folder. Note that this hook is
	triggered when moving a message from one folder to another.

	Variables:

	- *AERC_ACCOUNT*
	- *AERC_FOLDER*

	Example:

		*mail-deleted* = _mbsync "$AERC_ACCOUNT:$AERC_FOLDER"_

*mail-added* = _<command>_
	Executed when a message is added to a folder. Note that this hook is not
	triggered when a new message is received (use *mail-received* for that) but
	rather is only triggered when aerc itself adds a message to a folder, e.g.
	when moving or copying a message.

	Variables:

	- *AERC_ACCOUNT*
	- *AERC_FOLDER*

	Example:

		*mail-added* = _mbsync "$AERC_ACCOUNT:$AERC_FOLDER"_

*mail-sent* = _<command>_
	Executed when a message is sent. This does not necessarily signify
	successful posting, if a queueing system like msmtpq is used.

	Variables:

	- *AERC_ACCOUNT*
	- *AERC_FROM_NAME*
	- *AERC_FROM_ADDRESS*
	- *AERC_SUBJECT*
	- *AERC_TO*
	- *AERC_CC*

	Example:

		*mail-sent* = _if [ "$AERC_ACCOUNT" = "gmail" ]; then mbsync
		gmail; fi_

*aerc-shutdown* = _<command>_
	Executed when aerc shuts down. Aerc will wait for the command to finish
	before exiting.

	Variables:

	- *AERC_LIFETIME*

*tag-modified* = _<command>_
	Executed when notmuch tags are modified in a notmuch account. The list
	of added and removed tags are passed as variables.

	Variables:

	- *AERC_ACCOUNT*
	- *AERC_TAG_ADDED*
	- *AERC_TAG_REMOVED*

# TEMPLATES

Template files are used to populate the body of an email. The *:compose*,
*:reply* and *:forward* commands can be called with the *-T* flag with the name
of the template name. The available symbols and functions are described in
*aerc-templates*(7).

aerc ships with some default templates installed in the share directory (usually
_/usr/share/aerc/templates_).

These options are configured in the *[templates]* section of _aerc.conf_.

*template-dirs* = _<path1:path2:path3...>_
	The directory where the templates are stored. The config takes
	a colon-separated list of dirs. If this is unset or if a template cannot
	be found, the following paths will be used as a fallback in that order:

	```
	${XDG_CONFIG_HOME:-~/.config}/aerc/templates
	${XDG_DATA_HOME:-~/.local/share}/aerc/templates
	/usr/local/share/aerc/templates
	/usr/share/aerc/templates
	```

*new-message* = _<template_name>_
	The default template to be used for new messages.

	Default: _new_message_

*quoted-reply* = _<template_name>_
	The default template to be used for quoted replies.

	Default: _quoted_reply_

*forwards* = _<template_name>_
	The default template to be used for forward as body.

	Default: _forward_as_body_

# SEE ALSO

*aerc*(1) *aerc-accounts*(5) *aerc-binds*(5) *aerc-imap*(5) *aerc-jmap*(5)
*aerc-maildir*(5) *aerc-notmuch*(5) *aerc-templates*(7) *aerc-sendmail*(5)
*aerc-smtp*(5) *aerc-stylesets*(7) *carddav-query*(1)

# AUTHORS

Originally created by Drew DeVault and maintained by Robin Jarry who is assisted
by other open source contributors. For more information about aerc development,
see _https://sr.ht/~rjarry/aerc/_.