# dunst, the notifier (module dunst, novox/hq ADR 0208). Owned by the mesh: this file is replaced
# at every push. Adopted from the laptop's file of 2026-10-04 (the two workstations differed in
# position, transparency and corner radius; the laptop's square, opaque, top-right one matches the
# rest of the desktop). Only what differs from dunst's defaults, and what the desktop relies on.
#
# Other modules' rules go in ~/.config/dunst/dunstrc.d/*.conf, which dunst reads after this file,
# so a drop-in outranks it. dunst is started by D-Bus on the first notification: nothing starts it.
# When the mesh rewrites this file (a font-size or width setting changed), it tells a running dunst
# to read it again (its unit's reload, dunstctl reload); what is on screen stays.

[global]
    monitor = 0
    follow = none

    # Geometry
    width = ${setting:width}
    height = (0, 300)
    origin = top-right
    offset = (10, 50)
    notification_limit = 20

    progress_bar = true
    progress_bar_height = 10
    progress_bar_frame_width = 1
    progress_bar_min_width = 150
    progress_bar_max_width = 300

    indicate_hidden = yes
    transparency = 0
    separator_height = 2
    padding = 8
    horizontal_padding = 8
    text_icon_padding = 0
    frame_width = 3
    frame_color = "#de5200"
    gap_size = 0
    separator_color = frame
    sort = yes
    corner_radius = 0

    # Text: the interface face (research 026/04)
    font = Inter ${setting:font-size}
    line_height = 0
    markup = full
    format = "<b>%s</b>\n%b"
    alignment = left
    vertical_alignment = center
    show_age_threshold = 60
    ellipsize = middle
    ignore_newline = no
    stack_duplicates = true
    hide_duplicate_count = false
    show_indicators = yes

    # Icons, from the desktop's icon theme
    enable_recursive_icon_lookup = true
    icon_theme = Adwaita
    icon_position = left
    min_icon_size = 32
    max_icon_size = 128

    # History
    sticky_history = yes
    history_length = 20

    # The context menu is rofi (installed by the rofi module); -no-custom keeps typed text from becoming a choice. Not `dmenu`, the node-launcher's command in
    # ~/.local/bin: dunst runs in the account's service manager, whose PATH does not hold that
    # directory (seen on the laptop on 2026-10-10), so the menu never opened. Links open in the
    # desktop's default browser.
    dmenu = rofi -dmenu -no-custom -p dunst
    browser = /usr/bin/xdg-open
    always_run_script = true

    title = Dunst
    class = Dunst
    ignore_dbusclose = false

    # A tap answers (the touchpads have no middle button). do_action runs the notification's only
    # action, or opens the context menu when it has several; without actions it opens its one link,
    # if it has one. The notification then closes; a menu dismissed with Escape leaves it shown.
    mouse_left_click = do_action, close_current
    mouse_middle_click = do_action, close_current
    mouse_right_click = close_all

[urgency_low]
    background = "#000000"
    foreground = "#ffffff"
    timeout = 10

[urgency_normal]
    background = "#000000"
    foreground = "#ffffff"
    timeout = 10

[urgency_critical]
    background = "#000000"
    foreground = "#ffffff"
    frame_color = "#ff0000"
    timeout = 0

# What is shown once is never kept (the review of 2026-10-09): a notification marked secret (a link's
# code, category mesh.secret) and any transient one leave no entry in the history, which
# node-notifier.history serves to every caller of the mesh's verbs.
[mesh-secret]
    category = "mesh.secret"
    history_ignore = yes

[transient-history-ignore]
    match_transient = yes
    history_ignore = yes
