Skip to content

Buffer ​

Buffer settings for Halloy.

line_spacing ​

Setting to control spacing between messages in buffers

toml
# Type: integer
# Values: positive integers
# Default: 0

[buffer]
line_spacing = 4

scroll_position_on_open ​

Scroll position of the buffer when it opens.

toml
# Type: string
# Values: "oldest-unread", "newest"
# Default: "oldest-unread"

[buffer]
scroll_position_on_open = "newest"

backlog_separator ​

Customize when the backlog separator is displayed within a buffer

hide_when_all_read ​

Hide backlog divider when all messages in the buffer have been marked as read.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.backlog_separator]
hide_when_all_read = true

text ​

Set the text for backlog divider or disable it

toml
# Type: boolean or string
# Values: boolean or any string
# Default: true

[buffer.backlog_separator]
text = false

channel ​

Channel specific settings

channel_name_casing ​

Transform the channel name casing in the channel pane title.

toml
# Type: string (optional)
# Values: "lowercase"
# Default: not set (channel name displayed as-is)

[buffer.channel]
channel_name_casing = "lowercase"

message ​

Message settings within a channel buffer.

show_emoji_reacts ​

Whether to display emoji reactions on messages (if IRCv3 React is supported by the server).

toml
# Type: boolean
# Values: "true", "false"
# Default: "true"

[buffer.channel.message]
show_emoji_reacts = true

max_reaction_display ​

Maximum number of user-visible characters (Unicode grapheme clusters) in a reaction. If a reaction exceeds this value, then its display is truncated to the first max_reaction_display grapheme clusters.

toml
# Type: integer
# Values: positive integers
# Default: 5

[buffer.channel.message]
max_reaction_display = 5

max_reaction_chars ​

Maximum number of user-visible characters (Unicode grapheme clusters) in a reaction. If a reaction exceeds this value, then it is not stored.

toml
# Type: integer
# Values: positive integers
# Default: 64

[buffer.channel.message]
max_reaction_chars = 64

nicklist ​

Nicklist settings within a channel buffer.

alignment ​

Horizontal alignment of nicknames.

toml
# Type: string
# Values: "left", "right"
# Default: "left"

[buffer.channel.nicklist]
alignment = "left"

enabled ​

Control if nicklist should be shown or not by default.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.channel.nicklist]
enabled = true

position ​

Nicklist position in the pane.

toml
# Type: string
# Values: "left", "right"
# Default: "left"

[buffer.channel.nicklist]
position = "right"

show_access_levels ​

Show access level(s) in front of nicknames (@, +, ~, etc.).

toml
# Type: string
# Values: "all", "highest", or "none"
# Default: "highest"

[buffer.channel.nicklist]
show_access_levels = "all"

show_bot_icon ​

Show an icon next to nicknames of users identified as bots.

toml
# Type: bool
# Values: true, false
# Default: true

[buffer.channel.nicklist]
show_bot_icon = true

truncate ​

Truncate nicknames in nicklist to a maximum length. Has no effect when buffer.channel.nicklist.width is set. If not set, falls back to buffer.nickname.truncate.

toml
# Type: integer
# Values: any non-negative integer
# Default: not set

[buffer.channel.nicklist]
truncate = 10

width ​

Overwrite nicklist width in pixels.

toml
# Type: integer
# Values: any non-negative integer
# Default: not set

[buffer.channel.nicklist]
width = 150

scrollbar ​

Scrollbar in nicklist

hidden ​

Whether the scrollbar is hidden.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.channel.nicklist.scrollbar]
hidden = false

width ​

Width of the nicklist scrollbar.

toml
# Type: integer
# Values: any non-negative integer
# Default: 5

[buffer.channel.nicklist.scrollbar]
width = 5

scroller_width ​

Width of the nicklist scrollbar scroller.

toml
# Type: integer
# Values: any non-negative integer
# Default: 5

[buffer.channel.nicklist.scrollbar]
scroller_width = 5

topic_banner ​

Topic banner settings within a channel buffer.

enabled ​

Control if topic banner should be shown or not by default.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.channel.topic_banner]
enabled = true

max_lines ​

Amount of visible lines before you have to scroll in topic banner.

toml
# Type: integer
# Values: any non-negative integer
# Default: 2

[buffer.channel.topic_banner]
max_lines = 2

chathistory ​

IRCv3 chathistory extension settings

infinite_scroll ​

Automatically request older history when scrolling to the top of a channel/query buffer

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.chathistory]
infinite_scroll = true

commands ​

Commands settings.

show_description ​

Show or hide the description for a command

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.commands]
show_description = true

aliases ​

Define custom slash command aliases.

toml
# Type: map
# Values: map with string key/value pairs
# Default: {}

[buffer.commands.aliases]
op = "/mode #halloy +ooo $1 $2 $3"
halloy = "/me says halloy to $1!"
topic = "/topic #halloy $1-"
deopme = "/mode -o $nick"
np = "/exec mpc current --format '/me is now playing %artist% - %title%'"

Use $1 through $9 to insert positional arguments. A hyphen after the argument number (e.g. $1-) means that all following arguments will also be included in the argument; for example, /topic our new topic for the alias defined as topic = "/topic #halloy $1-" will expand to /topic #halloy our new topic.

Optional arguments is also possible by using a ?, eg: $1?. Note that you can't have required arguments after optional arguments.

You can also use context-aware placeholders:

  • $nick inserts your current nickname.
  • $channel inserts the active channel name.
  • $server inserts the active server name.

Aliases must be specified in reference to existing slash commands, so to send a regular message the /msg command (or equivalent, such as /plain//format command) should be used. For example, welcome = "/msg $channel welcome to IRC $1, enjoy your stay!".

  • Aliases take precedence over built-in commands with the same name.
  • Alias expansion happens once; aliases do not expand other aliases.

exec ​

Configure /exec.

⚠️ Warning

/exec runs a local shell command on your machine. Enable it only if you trust the commands you plan to run.

See the Exec Command guide for a few simple examples.

enabled ​

Enable /exec. When disabled, submitting /exec shows an error instead of running the shell command.

toml
# Type: boolean
# Values: true, false
# Default: false

[buffer.commands.exec]
enabled = false

timeout ​

Time in seconds to wait before timing out /exec.

toml
# Type: integer
# Values: any non-negative integer
# Default: 5

[buffer.commands.exec]
timeout = 5

max_output_bytes ​

Maximum number of stdout bytes accepted from /exec.

toml
# Type: integer
# Values: any non-negative integer
# Default: 4096

[buffer.commands.exec]
max_output_bytes = 4096

sysinfo ​

Configure which system information components to display when using the /sysinfo command

cpu ​

Show CPU information (processor brand and model)

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.commands.sysinfo]
cpu = true

memory ​

Show memory information

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.commands.sysinfo]
memory = true

gpu ​

Show graphics card information (adapter and backend)

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.commands.sysinfo]
gpu = true

os ​

Show operating system information (version and kernel)

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.commands.sysinfo]
os = true

uptime ​

Show system uptime information

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.commands.sysinfo]
uptime = true

quit ​

Configure QUIT command

default_reason ​

Default quit (from server) reason

toml
# Type: String
# Values: string value
# Default: ""

[buffer.commands.quit]
default_reason = "See you later all!"

part ​

Configure PART command

default_reason ​

Default part (from channel) reason

toml
# Type: String
# Values: string value
# Default: ""

[buffer.commands.part]
default_reason = "I'll be back!"

date_separators ​

Customize how date separators are displayed within a buffer

format ​

Controls the date format. The expected format is strftime.

toml
# Type: string
# Values: any valid strftime string
# Default: "%A, %B %-d"

[buffer.date_separators]
format = "%A, %B %-d"

show ​

Show date separators.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.date_separators]
show = true

emojis ​

Emojis settings.

toml
[buffer.emojis]
show_picker = true
skin_tone = "default"
auto_replace = true

show_picker ​

Show the emoji picker when typing :shortcode: in text input.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.emojis]
show_picker = true

skin_tone ​

Skin tone selected when picking an emoji.

toml
# Type: string
# Values: "default", "light", "medium-light", "medium", "medium-dark", "dark"
# Default: "default"

[buffer.emojis]
skin_tone = "default"

auto_replace ​

Automatically replace :shortcode: in text input with the corresponding emoji.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.emojis]
auto_replace = true

characters_to_trigger_picker ​

Minimum number of characters after : required for the emoji picker to show. E.g. :D will not show the emoji picker unless characters_to_trigger_picker is less than or equal to 1.

toml
# Type: integer
# Values: any non-negative integer
# Default: 2

[buffer.emojis]
characters_to_trigger_picker = 2

internal_messages ​

Internal messages are messages sent from Halloy itself.

default ​

Default settings which will be used for all internal messages when a specific value is not provided for the specific internal message type.

enabled ​

Control if internal messages are enabled by default.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.internal_messages.default]
enabled = true

smart ​

By default, only show internal message if received within the given time duration (seconds).

toml
# Type: integer
# Values: any non-negative integer
# Default: not set

[buffer.internal_messages.default]
smart = 180

error ​

Internal messages which are considered an "error" such as when a connection was lost, or when connection to server failed.

enabled ​

Control if internal message type is enabled.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.internal_messages.error]
enabled = true

smart ​

Only show internal message if received within the given time duration (seconds).

toml
# Type: integer
# Values: any non-negative integer
# Default: not set

[buffer.internal_messages.error]
smart = 180

success ​

Internal messages which are considered a "success" such as when a connection was restored, or when connected successfully to a server.

enabled ​

Control if internal message type is enabled.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.internal_messages.success]
enabled = true

smart ​

Only show internal message if received within the given time duration (seconds).

toml
# Type: integer
# Values: any non-negative integer
# Default: not set

[buffer.internal_messages.success]
smart = 180

mark_as_read ​

When to mark a buffer as read

on_application_exit ​

When exiting the application (all buffers, opened or closed, will be marked as read when the application exits).

toml
# Type: boolean
# Values: true, false
# Default: false

[buffer.mark_as_read]
on_application_exit = false

on_buffer_close ​

When closing a buffer (a buffer is considered closed when it is replaced or if it is open when the application exits). If set to "scrolled-to-bottom" then a buffer will only be marked as read if it is scrolled to the bottom when closing (i.e. if the most recent messages are visible).

toml
# Type: boolean
# Values: true, false, "scrolled-to-bottom"
# Default: "scrolled-to-bottom"

[buffer.mark_as_read]
on_buffer_close = "scrolled-to-bottom"

on_scroll_to_bottom ​

When scrolling to the bottom of a buffer.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.mark_as_read]
on_scroll_to_bottom = true

on_message_sent ​

When sending a message to the buffer.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.mark_as_read]
on_message_sent = true

on_message ​

Marks as read when Halloy is focused and a new message arrives in a buffer that is scrolled to the bottom. If "focused" then only the currently focused buffer will have new messages marked as read, while "open" will mark messages as read for any open buffer.

toml
# Type: boolean
# Values: "focused", "open", "none"
# Default: "focused"

[buffer.mark_as_read]
on_message = "open"

close ​

Side effects for when closing buffers.

query ​

What happens when closing a query buffer. "keep" only closes the pane, while "close" also closes the query.

toml
# Type: string
# Values: "close", "keep"
# Default: "keep"

[buffer.close]
query = "keep"

nickname ​

Customize how nicknames are displayed within a buffer.

alignment ​

Horizontal alignment of nicknames.

toml
# Type: string
# Values: "left", "right", "top"
# Default: "left"

[buffer.nickname]
alignment = "right"

away ​

Controls the appearance of away nicknames.

toml
# Type: string or object
# Values: "dimmed", "none" or { dimmed = float }
# Default: "dimmed"
[buffer.nickname]
away = "dimmed"

# with custom dimming alpha value (0.0-1.0)
[buffer.nickname]
away = { dimmed = 0.5 }

# no away indication
[buffer.nickname]
away = "none"

brackets ​

Brackets around nicknames.

toml
# Type: string
# Values: { left = "<any string>", right = "<any string>" }
# Default: { left = "", right = "" }

[buffer.nickname]
brackets = { left = "<", right = ">" }

color ​

Nickname colors across nickname UI, including channel messages, nicklists, and nickname-related controls. "unique" generates colors by randomizing the hue, while keeping the saturation and lightness from the theme's nickname color. { palette = [...] } assigns each nickname one of the provided hex colors.

toml
# Type: string or object
# Values: "solid", "unique", or { palette = ["#RRGGBB", ...] }
# Default: "unique"

[buffer.nickname]
color = "unique"

[buffer.nickname]
color = { palette = ["#B11E3A", "#2A7FFF", "#1E9E5A"] }

color_override ​

Set colors for specific nicknames or nickname patterns. If more than one rule matches, the first rule is used. Nickname lists ignore uppercase and lowercase by default. Set case_insensitive = false to match the exact spelling.

These colors replace nickname metadata colors and the default color. Away and offline styles still apply.

toml
# Match one or more exact nicknames.
[[buffer.nickname.color_override]]
nicknames = ["alice", "bob"]
color = "#61AFEF"

[[buffer.nickname.color_override]]
nicknames = ["CaseSensitiveNick"]
case_insensitive = false
color = "#C678DD"

# Match nicknames with a regular expression.
[[buffer.nickname.color_override]]
regex = '''^\[.*\]$'''
color = "#98C379"

offline ​

Controls the color of offline nicknames. Can combine a color source with dimming (same alpha options as away). The "(Offline)" label is independent of this setting.

toml
# Type: string or object
# Values: "solid", "dimmed", "none", { dimmed = float }, or { color = "...", alpha = "..." }
# Default: "solid"
#
# color: "theme" (theme nickname_offline, else nick color) or "nickname" (keep nick color)
# alpha: same as away - "dimmed", "none", or { dimmed = float }

[buffer.nickname]
offline = "solid"
# same as { color = "theme", alpha = "none" }

[buffer.nickname]
offline = "dimmed"
# same as { color = "nickname", alpha = "dimmed" }

[buffer.nickname]
offline = { dimmed = 0.5 }
# same as { color = "nickname", alpha = { dimmed = 0.5 } }

# theme offline color and dim together
[buffer.nickname]
offline = { color = "theme", alpha = "dimmed" }

[buffer.nickname]
offline = { color = "theme", alpha = { dimmed = 0.5 } }

# no offline color styling
[buffer.nickname]
offline = "none"

show_access_levels ​

Show access level(s) in front of nicknames (@, +, ~, etc.).

toml
# Type: string
# Values: "all", "highest", or "none"
# Default: "highest"

[buffer.nickname]
show_access_levels = "none"

show_bot_icon ​

Show an icon next to nicknames of users identified as bots.

toml
# Type: bool
# Values: true, false
# Default: true

[buffer.nickname]
show_bot_icon = true

shown_status ​

What status should be indicated (by either away or offline settings), the user's current status ("current") or their status at the time of sending the message ("historical").

toml
# Type: string or object
# Values: "current" or "historical"
# Default: "current"
[buffer.nickname]
shown_status = "current"

truncate ​

Truncate nicknames in buffer to a maximum length

toml
# Type: integer
# Values: any non-negative integer
# Default: not set

[buffer.nickname]
truncate = 10

hide_consecutive ​

Hide nickname if consecutive messages are from the same user.

⚠️ Warning

hide_consecutive does not work in conjunction with alignment = "top" .

enabled ​

If specified as { smart = integer } then the nickname will be hidden for consecutive messages are from the same user and each is within smart seconds of each other.

toml
# Type: boolean
# Values: true, false, or { smart = integer }
# Default: false

[buffer.nickname.hide_consecutive]
enabled = true

# hide if the previous message was from the same user and sent within 2m of the current message
[buffer.nickname.hide_consecutive]
enabled = { smart = 120 }

show_after_previews ​

Show nicknames after messages with visible image or link previews. Note: has no effect when enabled = false.

toml
# Type: boolean
# Values: true, false
# Default: false

[buffer.nickname.hide_consecutive]
show_after_previews = true

server_messages ​

Server messages are messages sent from an IRC server.

toml
# Hide all join messages except for #halloy channel:

[buffer.server_messages.join]
exclude = "*"
include = { channels = ["#halloy"] }

# Hide all part messages

[buffer.server_messages.part]
enabled = false

Types ​

Event TypeDescription
awayMessage is an automated reply to a direct message, sent when a user is away
change_hostMessage is sent when a user changes host
change_modeMessage is sent when a mode is set
change_nickMessage is sent when a user changes nick
change_topicMessage is sent when a channel topic is changed (or the topic is requested via /topic)
inviteMessage is sent when a user is invited to a channel
joinMessage is sent when a user joins a channel
join_topicMessage is sent when the client joins a channel (does not include message sent when topic changes)
kickMessage is sent when a user is kicked from a channel
monitored_offlineMessage is sent when a monitored user goes offline
monitored_onlineMessage is sent when a monitored user goes online
partMessage is sent when a user leaves a channel
quitMessage is sent when a user closes the connection to a channel or server
request_topicMessage is response to a /topic request for the channel topic
standard_reply_failMessage is sent when a command/function fails or an error with the session
standard_reply_noteMessage is sent when there is information about a command/function or session
standard_reply_warnMessage is sent when there is feedback about a command/function or session
wallopsMessage is sent by operators to all users with mode +w on the network
defaultPseudo-type to provide fallback settings for when a specific event type has not been configured

enabled ​

Control if server message type is enabled; if set to false then the received messages can still be revealed when later set to true. For join_topic in particular: if set to "drop", then the message is excluded from the channel history entirely (not just hidden).

toml
# Type: boolean
# Values: true, false
# Default: true (except for join_topic, which is "drop")

[buffer.server_messages.<server_message>]
enabled = true

smart ​

Event TypeBehavior
awayOnly show if an away message has not been shown in the given time interval (seconds) prior to the new away message
all other typesOnly show server message if the user has sent a message in the given time interval (seconds) prior to the server message
toml
# Type: integer
# Values: any non-negative integer
# Default: not set

[buffer.server_messages.<server_message>]
smart = 180

exclude ​

Exclusion conditions in which the server message will be hidden. Inclusion conditions will take precedence over exclusion conditions. You can also exclude all conditions by setting to "all" or "*".

toml
# Type: inclusion/exclusion conditions
# Values: user, channel, & server inclusion/exclusion conditions
# Default: not set

[buffer.server_messages.<server_message>]
exclude = "*"

include ​

Inclusion conditions in which the server message will be shown. Server messages will be shown in all conditions (when enabled) unless explicitly excluded, so this setting is only relevant when combined with the exclude setting.

toml
# Type: inclusion/exclusion conditions
# Values: user, channel, & server inclusion/exclusion conditions
# Default: not set

[buffer.server_messages.<server_message>]
include = { channels = ["#halloy"] }

dimmed ​

Dim server message. Either automatically, based on text/background colors (by setting to true), or specify a dimming value in the range 0.0 (transparent) to 1.0 (no dimming).

toml
# Type: bool or float
# Values: true, false, or float
# Default: by type, see table

[buffer.server_messages.<server_message>]
dimmed = true

💡 Info

Event TypeDefault
awaytrue
change_hosttrue
change_modefalse
change_nicktrue
change_topicfalse
invitefalse
jointrue
join_topictrue
kickfalse
monitored_offlinefalse
monitored_onlinefalse
parttrue
quittrue
request_topicfalse
standard_reply_failfalse
standard_reply_notefalse
standard_reply_warnfalse
wallopsfalse

triggers_unread ​

Where a message of this type will trigger an unread tstate for the buffer.

toml
# Type: bool
# Values: true, false
# Default: by type, see table

[buffer.server_messages.<server_message>]
triggers_unread = true

💡 Info

Event TypeDefault
awayfalse
change_hostfalse
change_modefalse
change_nickfalse
change_topictrue
invitetrue
joinfalse
join_topicfalse
kicktrue
monitored_offlinetrue
monitored_onlinetrue
partfalse
quitfalse
request_topictrue
standard_reply_failtrue
standard_reply_notetrue
standard_reply_warntrue
wallopstrue

username_format ​

Adjust the amount of information displayed for a username in server messages. If you choose "short", only the nickname will be shown. If you choose "full", the nickname, username, and hostname (if available) will be displayed.

💡 Info

Not all server messages use this setting.

toml
# Type: string
# Values: "full", "short"
# Default: "full"

[buffer.server_messages.<server_message>]
username_format = "full"

condense ​

Condense multiple consecutive server messages into a single abbreviated message.

messages ​

Message type(s) to condense. Supported types:

Event TypeSymbol
change-host→
change-nick→
join+
part-
quit-
kick!
toml
# Type: array of strings
# Values: ["change-host", "change-nick", "join", "kick", "part", "quit"]
# Default: ["change-host", "change-nick", "join", "part", "quit"]

[buffer.server_messages.condense]
messages = ["change-nick", "join", "part", "quit"]

The color and font style of the symbols is taken from the theme setting for that event type. It is recommended that you specify colors for the condensed messages in your theme. Those colors will be used for the abbreviations used in the condensed messages. For example, these theme settings could be added:

toml
[buffer.server_messages]
join = "#efff95"
part = "#ff6b77"
quit = "#ff6b77"

dimmed ​

Dim condensed messages. Either automatically, based on text/background colors (by setting to true), or specify a dimming value in the range 0.0 (transparent) to 1.0 (no dimming).

toml
# Type: boolean or float
# Values: true, false, or float
# Default: true

[buffer.server_messages.condense]
dimmed = true

format ​

How to format condensed messages:

  • "brief": Only show changes to channel state. If a user joins then leaves, then do not show any message. If a user joins, leaves, then joins again, then show that they joined the channel (+).
  • "detailed": Include messages that do not change channel state, but do not show repeated events. If a user joins then leaves, show a condensed message with both events (+-). But, if a user joins and leaves many times in a row, only indicate that they left and re-joined (i.e. still +-).
  • "full": Include all messages in the condensed message. If a user joins and leaves three times, then show a symbol for each event (+-+-+-).
toml
# Type: string
# Values: "brief", "detailed", "full"
# Default: "brief"

[buffer.server_messages.condense]
format = "full"

icon ​

Marker style for condensed server messages.

toml
# Type: string
# Values: "none", "chevron", "dot"
# Default: "none"

[buffer.server_messages.condense]
icon = "chevron"

max ​

Maximum number of user entries to show in a condensed group.

toml
# Type: integer
# Default: not set (show all)

[buffer.server_messages.condense]
max = 20

timestamp ​

Controls which timestamp is shown for a condensed group:

  • "range": Show the start and end timestamps as a range.
  • "start": Show the timestamp of the first condensed message.
  • "end": Show the timestamp of the last condensed message.
  • "none": Do not show a timestamp.
toml
# Type: string
# Values: "range", "start", "end", "none"
# Default: "range"

[buffer.server_messages.condense]
timestamp = "end"

status_message_prefix ​

Status message prefix settings.

brackets ​

Brackets around status message prefix.

toml
# Type: string
# Values: { left = "<any string>", right = "<any string>" }
# Default: { left = "", right = "" }

[buffer.status_message_prefix]
brackets = { left = "<", right = ">" }

text_input ​

Customize the text input for in buffers.

visibility ​

Text input visibility. When set to "focused" it will only be visible when the buffer is focused.

toml
# Type: string
# Values: "always", "focused"
# Default: "always"

[buffer.text_input]
visibility = "always"

auto_format ​

Control if the text input should auto format the input. By default text is only formatted when using the /format command.

toml
# Type: string
# Values: "disabled", "markdown", "all"
# Default: "disabled"

[buffer.text_input]
auto_format = "markdown"

💡 Tip

Token-based formatting is included in "all", in addition to Markdown formatting, which provides underline and color formatting that "markdown" does not. Read more about text formatting.

key_bindings ​

Different key bindings for the text input

toml
# Type: string
# Values: "default", "emacs"
# Default: "emacs" on macOS, "default" for all other OSes

[buffer.text_input]
key_bindings = "emacs"
emacs ​

Emacs variant has the following binds:

ctrl+a: Move the cursor to the beginning of the line ctrl+e: Move the cursor to the end of the line ctrl+b: Move the cursor backward one character ctrl+f: Move the cursor forward one character ctrl+d: Delete the character under the cursor ctrl+k: Delete from the cursor to the end of the line ctrl+u: Delete from the cursor to the beginning of the line ctrl+w: Delete to the beginning of the word under the cursor alt+b: Move the cursor backward one word alt+f: Move the cursor forward one word

💡 Info

Global keyboard shortcuts take precedence. Unset any that collide (e.g., set command_bar = "unset").

kill_to_clipboard ​

If enabled, certain key bindings move killed (deleted) text to the clipboard.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.text_input]
kill_to_clipboard = true

max_lines ​

Maximum number of lines in a single input. If multiline is supported by the server then it will be utilized, otherwise messages will be sent individually with send_line_delay milliseconds between them. If upload_long_paste is enabled, filehost is enabled, and the pasted text exceeds max_lines or the server's multiline limit, then it will instead be uploaded as a text file.

⚠️ Warning

In many IRC communities sending multiple lines in quick succession is frowned upon (and may be a bannable offense); be mindful of community norms when using this feature

toml
# Type: integer
# Values: > 0
# Default: 5

[buffer.text_input]
max_lines = 5

send_line_delay ​

Delay (milliseconds) between each line when sending multiple lines. When the server does not support SAFERATE messages may be delayed longer due to anti-flood protections.

toml
# Type: integer
# Values: >= 0
# Default: 100

[buffer.text_input]
send_line_delay = 100

upload_long_paste ​

If filehost is enabled, then automatically upload pasted text as a text file when it would cause the message input to exceed max_lines or the server's multiline limit. The pasted text will be replaced with a link to the uploaded file in the message input.

toml
# Type: boolean
# Values: true, false
# Default: false

[buffer.text_input]
upload_long_paste = false

persist ​

If enabled, saves unsent messages on disk.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.text_input]
persist = true

autocomplete ​

Customize autocomplete.

order_by ​

Ordering that autocomplete uses to select from matching users.

  • "recent": Autocomplete users by their last message in the channel; the user with most recent message autocompletes first, then increasingly older messages. Users with no seen messages are matched last, in the order specified by sort_direction.
  • "alpha": Autocomplete users based on alphabetical ordering of potential matches. Ordering is ascending/descending based on sort_direction.
toml
# Type: string
# Values: "alpha", "recent"
# Default: "recent"

[buffer.text_input.autocomplete]
order_by = "recent"

sort_direction ​

Sort direction when autocompleting alphabetically.

  • "asc": ascending alphabetical (a→z)
  • "desc": descending alphabetical (z→a)
toml
# Type: string
# Values: "asc", "desc"
# Default: "asc"

[buffer.text_input.autocomplete]
sort_direction = "asc"

completion_suffixes ​

Sets what suffix is added after autocompleting. The first option is for when a nickname is autocompleted at the beginning of a sentence. The second is for when it's autocompleted in the middle of a sentence.

toml
# Type: array of 2 strings
# Values: array of 2 strings
# Default: [": ", " "]

[buffer.text_input.autocomplete]
completion_suffixes = [": ", " "]

include_ignored ​

Include ignored nicknames in nickname autocomplete. Ignore filters still hide their messages (and typing).

toml
# Type: boolean
# Values: true, false
# Default: false

[buffer.text_input.autocomplete]
include_ignored = false

nickname ​

Customize nickname left of text input

enabled ​

Display own nickname next to text input field

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.text_input.nickname]
enabled = true

show_access_levels ​

Show access level(s) in front of nickname (@, +, ~, etc.).

toml
# Type: string
# Values: "all", "highest", or "none"
# Default: "highest"

[buffer.text_input.nickname]
show_access_level = "highest"

typing ​

Typing settings for channel and query buffers.

font_size ​

Control the font size of the typing indicator. This also adjusts the height of the typing row when it is shown, and the reserved bottom padding when style = "padded".

toml
# Type: integer
# Values: positive integers
# Default: not set
# When omitted, Halloy uses the main configured font size.

[buffer.typing]
font_size = 12

style ​

Control how the typing indicator uses vertical space.

toml
# Type: string
# Values: "padded", "popped"
# Default: "popped"

[buffer.typing]
style = "padded"

share ​

Control whether Halloy shares your typing status with other users.

toml
# Type: boolean
# Values: true, false
# Default: false

[buffer.typing]
share = false

show ​

Control whether Halloy shows typing status from other users.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.typing]
show = true

animation ​

Configure the animated dots shown next to the typing indicator text.

enabled ​

Control whether the animated dots are shown.

toml
# Type: boolean
# Values: true, false
# Default: true

[buffer.typing.animation]
enabled = true

size ​

Control the size of the animated typing dots. If not set we use typing.font_size * 0.33.

toml
# Type: integer
# Values: positive integers
# Default: not set

[buffer.typing.animation]
size = 12

timestamp ​

Customize how timestamps are displayed within a buffer.

format ​

Controls the timestamp format. The expected format is strftime.

toml
# Type: string
# Values: any valid strftime string
# Default: "%R"

[buffer.timestamp]
format = "%R"

context_menu_format ​

Controls the format of shown in a timestamp's context menu. The expected format is strftime.

toml
# Type: string
# Values: any valid strftime string
# Default: "%x"

[buffer.timestamp]
context_menu_format = "%x"

copy_format ​

Controls the format used when copying the timestamp into the clipboard from its context menu. The expected format is strftime. If not set, then the timestamp is copied in the date and time of day in UTC using extended format ISO 8601:2004(E) 4.3.2 with millisecond precision as is utilized in IRCv3.

toml
# Type: string
# Values: any valid strftime string or not set
# Default: not set

[buffer.timestamp]
copy_format = "%Y-%m-%d %H:%M:%S"

brackets ​

Brackets around timestamps.

toml
# Type: string
# Values: { left = "<any string>", right = "<any string>" }
# Default: { left = "", right = "" }

[buffer.timestamp]
brackets = { left = "[", right = "]" }

locale ​

Locale used when formatting timestamps, for strftime formats that produce locale-specific output (e.g. %x, %X, %a, etc). If not specified, then the locale will be set automatically, falling back to the POSIX locale if the system locale cannot be determined. Supported locales are determined by enum Locale in the pure-rust-locales crate.

toml
# Type: string
# Values: IETF BCP 47 language tags
# Default: not set

[buffer.timestamp]
locale = "POSIX"

hide_consecutive ​

Hide timestamp for consecutive messages from the same user.

If specified as { smart = integer } then the timestamp is hidden only when the previous message is from the same user and sent within smart seconds.

toml
# Type: boolean
# Values: true, false, or { smart = integer }
# Default: false

[buffer.timestamp.hide_consecutive]
enabled = true

# hide if the previous message was from the same user and sent within 2m of the current message
[buffer.timestamp.hide_consecutive]
enabled = { smart = 120 }

url ​

Customize how urls behave in buffers

prompt_before_open ​

Prompt before opening a hyperlink.

toml
# Type: boolean
# Values: true, false
# Default: false

[buffer.url]
prompt_before_open = true

redaction ​

Customize how redacted messages behave in buffers

display ​

How to display redacted messages in the buffer. If displayed as "dimmed" then the message will be displayed dimmed and the redaction reason viewable via tooltip. If displayed as "redacted" then the message will be replaced with the redaction reason, and the redcated message can be revealed by clicking on the message.

toml
# Type: string
# Values: "none", "dimmed", "redacted"
# Default: "none"

[buffer.redaction]
display = "dimmed"

reply ​

Customize how reply previews are displayed within a buffer.

enabled ​

Show reply previews above messages that are replies.

toml
# Type: bool
# Values: true, false
# Default: true

[buffer.reply]
enabled = true

show_icon ​

Show a reply icon next to replies

toml
# Type: bool
# Values: true, false
# Default: false

[buffer.reply]
show_icon = true

icon_size ​

Size of the reply icon.

toml
# Type: float
# Values: positive floats
# Default: 10.0

[buffer.reply]
icon_size = 12.0

insert_nick ​

When replying to alice, insert alice: at the start of the input.

This is useful for clients that don't support replies, as they may not otherwise be highlighted.

toml
# Type: bool
# Values: true, false
# Default: true

[buffer.reply]
insert_nick = false

highlight_hovered_message ​

When hovering a reply, highlight the target message if it visible in the buffer. This takes precedence over the tooltip.

toml
# Type: bool
# Values: true, false
# Default: true

[buffer.reply]
highlight_hovered_message = false

hide_redundant_nicks ​

When a reply message starts with alice: and is directed at that same nick, hide the leading mention in the text.

┌── <alice> hi bob
<bob> alice: hello, alice

becomes

┌── <alice> hi bob
<bob> hello, alice
toml
# Type: bool
# Values: true, false
# Default: true

[buffer.reply]
hide_redundant_nicks = false

tooltip ​

enabled ​

Show a tooltip when hovering a reply.

toml
# Type: bool
# Values: true, false
# Default: true

[buffer.reply.tooltip]
enabled = false

delay ​

Delay in milliseconds before tooltip appears.

toml
# Type: integer
# Values: non-negative integer
# Default: 500

[buffer.reply.tooltip]
delay = 0

max_width ​

Maximum width of the hover tooltip in pixels.

toml
# Type: float
# Values: positive float
# Default: 500.0

[buffer.reply.tooltip]
max_width = 400.0

max_chars ​

Maximum number of characters to show before truncating. Set to 0 to disable.

toml
# Type: integer
# Values: non-negative integer
# Default: 1024

[buffer.reply.tooltip]
max_chars = 0