Skip to main content
Version: 0.0.7

Configuration

histuid is configured via ~/.config/histui/histuid.toml.

Minimal Configuration

histuid works with no configuration file. All settings have sensible defaults.

Configuration File Location

~/.config/histui/histuid.toml

The configuration file is automatically loaded from this location if it exists.

Full Reference

log_level

Controls logging verbosity.

ValueDescription
debugVerbose debugging output
infoNormal operational messages (default)
warnWarnings only
errorErrors only
log_level = "info"

Command-line override:

histuid --log-level debug

[display]

Controls notification popup position and behavior.

KeyTypeDefaultDescription
positionstring"top-right"Popup position on screen
offset_xint10Pixels from horizontal screen edge
offset_yint10Pixels from vertical screen edge
max_visibleint5Maximum simultaneous popups (1-20)
monitorint0Display monitor (0 = all, 1+ = specific monitor)
new_on_topboolfalseNew notifications appear at top of stack
image_data_preview_sizebytesize"100 KiB"Minimum size for showing image-data in body

Valid Positions:

  • top-right (default)
  • top-left
  • top-center
  • bottom-right
  • bottom-left
  • bottom-center
note

Notification width and gap are controlled by the theme layout, not configuration. See Layout Reference for details.

Image Data Preview:

The image_data_preview_size setting controls whether image-data from notifications is displayed in the popup body. Many messaging apps (Signal, Discord) send profile pictures via image-data which can clutter notifications.

ValueMeaning
"never" or "-1"Never display image-data
"always" or "0"Always display image-data
Size threshold (e.g., "100 KiB")Only display if data size >= threshold

The default 100 KiB filters out profile pictures (typically 64-128px = ~64KB raw RGBA) while showing larger content like album art (300px+ = ~360KB+ raw).

tip

The image-path hint is always displayed since explicit file paths indicate intentional content images.

Byte Size Format:

Byte sizes can be specified as:

  • "100" - 100 bytes
  • "100 KB" or "100KB" - 100,000 bytes (SI, base 1000)
  • "100 KiB" - 102,400 bytes (IEC, base 1024)
  • "1 MB" - 1,000,000 bytes
  • "1 MiB" - 1,048,576 bytes

See Icon Aliases for more details on how icons and images are handled.

[timeouts]

Controls how long notifications are displayed by urgency level.

KeyTypeDefaultDescription
lowduration"0"Timeout for low urgency (default: honor client)
normalduration"0"Timeout for normal urgency (default: honor client)
criticalduration"never"Timeout for critical urgency
fallbackduration"10s"Fallback timeout when client says "server decides"

Timeout Values:

ValueMeaning
"0" or "0s"Honor the client's requested timeout
"never" or "-1"Notification never expires (must be dismissed)
Positive duration (e.g., "5s", "30s", "2m")Override with this timeout

Duration Format:

Durations can be specified as:

  • "5s" - 5 seconds
  • "500ms" - 500 milliseconds
  • "2m" - 2 minutes
  • "1h30m" - 1 hour 30 minutes
  • "5000" - 5000 milliseconds (integer)

Client Timeout Behavior:

When set to "0" (honor client), the daemon respects what the sending application requested:

  • If the client requests -1 (server decides), the daemon uses the fallback timeout (default 10s, critical always uses 0/never)
  • If the client requests 0 (never expire), the notification stays until dismissed
  • If the client requests a positive value, that timeout is used

[history]

Controls notification history and retention.

KeyTypeDefaultDescription
max_notificationsint500Maximum notifications to keep (0 = unlimited)
store_imagesbooltrueStore notification images for replay

Auto-Pruning Behavior:

The daemon automatically prunes old notifications to stay within limits:

  • Buffer threshold: Pruning triggers when count exceeds max by 10% (e.g., at 550 for max 500)
  • Debounce: At most one prune operation every 5 minutes
  • Cascade cleanup: Images for pruned notifications are automatically deleted
  • Startup prune: A prune runs on daemon startup to clean up any excess

This design prevents constant disk I/O while keeping history within reasonable bounds.

[behavior]

Controls daemon behavior.

KeyTypeDefaultDescription
stack_duplicatesbooltrueCombine identical notifications
show_countbooltrueShow "(2)" for stacked duplicates
pause_on_hoverbooltruePause timeout when mouse hovers
history_lengthint100Max notifications in session memory

[dnd]

Controls Do Not Disturb mode.

KeyTypeDefaultDescription
enabledboolfalseInitial DnD state on daemon startup
suppress_criticalboolfalseAlso suppress critical notifications in DnD mode

DnD Behavior:

  • When DnD is enabled, notification popups and sounds are suppressed
  • Notifications are still persisted to history for later review
  • By default (suppress_critical = false), critical notifications bypass DnD and are still shown
  • Set suppress_critical = true to also silence critical notifications when DnD is active
  • Use histui dnd on/off/toggle to control DnD state

[mouse]

Controls mouse button actions on notification popups.

KeyTypeDefaultDescription
leftstring"dismiss"Left-click action
middlestring"do-action"Middle-click action
rightstring"close-all"Right-click action

Available Actions:

ActionDescription
dismissClose this notification
do-actionExecute the "default" action if present (see below)
close-allClose all visible notifications
context-menuShow context menu (if supported)
noneDo nothing

Understanding Notification Actions

D-Bus notifications can include actions - interactive buttons or click behaviors. Actions are key/label pairs sent by the application:

  • Key: An identifier sent back to the app when triggered (e.g., "reply", "default")
  • Label: Human-readable text shown to the user (e.g., "Reply", "Open")

Special keys:

KeyMeaning
"default"Action triggered by clicking the notification body (not a button)
Other keysDisplayed as action buttons in the notification

How do-action works:

When you configure a mouse button to do-action, clicking the notification:

  1. Looks for an action with key "default"
  2. If found, sends an ActionInvoked D-Bus signal back to the originating application
  3. The application handles it (e.g., focusing its window, opening a conversation)

Common examples:

ApplicationDefault ActionEffect
kitty/alacrittyFocus terminal window["default", ""]
DiscordOpen conversation["default", ""]
SlackOpen thread["default", "Open"]
FirefoxFocus tab["default", ""]

Visual indicator:

Notifications with a "default" action display a subtle right-hand indicator (an inset shadow effect). This signals to users that the notification is "clickable." The indicator is styled via the .has-default-action CSS class.

See the CSS Reference for styling options.

Viewing actions in histui:

The histui TUI detail view shows all actions with their keys:

Extensions:
Actions:
default (no label) [click body to invoke]
reply: Reply

[audio]

Controls notification sounds.

KeyTypeDefaultDescription
enabledbooltrueEnable notification sounds
volumeint80Global volume (0-100)

Audio Behavior:

  • Sounds are defined in theme manifests (see Theming)
  • Only one sound plays at a time (newer sounds are skipped unless critical)
  • Critical notifications can interrupt any playing sound
  • Per-theme volumes are multiplied with the global volume

Supported Formats:

FormatExtensionNotes
WAV.wavPCM only (16-bit signed little-endian). IEEE Float format is not supported
Ogg Vorbis.oggFully supported
MP3.mp3Fully supported

Command-line Flags:

# Disable all sounds (overrides theme and config)
histuid --no-audio

# Override global volume (0.0 to 1.0)
histuid --volume 0.5

Example Configuration

# Logging: debug, info, warn, error
log_level = "info"

[display]
position = "top-right"
max_visible = 5
offset_x = 10
offset_y = 10
image_data_preview_size = "100 KiB" # Filter small images like profile pics

[timeouts]
# Honor whatever the application requests (default for low/normal)
low = "0"
normal = "0"

# Critical notifications never expire (default)
critical = "never"

# Fallback timeout when client says "server decides" (-1)
fallback = "10s"

[behavior]
stack_duplicates = true
pause_on_hover = true

[dnd]
enabled = false # Start with DnD off
suppress_critical = false # Critical notifications bypass DnD (default)

[mouse]
left = "dismiss"
middle = "do-action"
right = "close-all"

[audio]
enabled = true
volume = 80

[history]
max_notifications = 500 # 0 = unlimited
store_images = true # Required for replay with images

Icon Aliases

Icon aliases are configured in a separate file for easy sharing:

~/.config/histui/icon-aliases.toml

This maps application names to standard icon names:

# ~/.config/histui/icon-aliases.toml

[aliases]
zapzap = "whatsapp"
telegram-desktop = "telegram"
firefox-esr = "firefox"
vesktop = "discord"
signal-desktop = "signal"

Built-in aliases are provided for common apps. User aliases take precedence. See Advanced Theming for more details.

See Also