# See dunst(5) for all configuration options

[global]
    # --- display --- #
    monitor = 0         # Which monitor should the notifications be displayed on.
    follow = mouse      # mouse or keyboard or none


    # --- geometry --- #
    width = (0, 300)        # dynamic 0 to 300
    height = 300            # dynamic up to 300
    origin = top-right      # notif position
    offset = 20x15       
    scale = 0


    # --- general --- #
    sort = yes
    idle_threshold = 150
    notification_limit = 0
    indicate_hidden = yes   # Show how many messages are currently hidden (because of notification_limit).

    mouse_left_click = close_current
    mouse_middle_click = do_action
    mouse_right_click = close_all


    # --- look --- #
    font = UbuntuMonoNerdFont 13
    line_height = 0
    markup = full
    alignment = center              # left or right or center
    vertical_alignment = center     # top or center or bottom
    ellipsize = middle              # start or middle or end
    show_age_threshold = 60         # seconds old to show (-1 to disable)
    ignore_newline = no
    show_indicators = yes # Display indicators for URLs (U) and actions (A).

    corner_radius = 5
    corners = all

    padding = 8                     # Padding between text and separator.
    horizontal_padding = 8          # Horizontal padding.
    text_icon_padding = 0           # Padding between text and icon.

    frame_width = 3
    frame_color = "#aaaaaa"

    separator_height = 2            # Line to sperate notifications (0 to disable)
    separator_color = auto
    gap_size = 0

    stack_duplicates = true
    hide_duplicate_count = false

    # The format of the message.  Possible variables are:
    #   %a  appname
    #   %s  summary
    #   %b  body
    #   %i  iconname (including its path)
    #   %I  iconname (without its path)
    #   %p  progress value if set ([  0%] to [100%]) or nothing
    #   %n  progress value if set without any extra characters
    #   %%  Literal %
    # Markup is allowed
    format = "<b>%s</b>\n%b"

    sticky_history = yes
    history_length = 20


    # --- icons --- #
    icon_corner_radius = 0          # Corner radius for the icon image.
    icon_corners = all              # Define which corners to round when drawing the icon image. If icon_corner_radius is set to 0 this option will be ignored.

    enable_recursive_icon_lookup = true
    #icon_theme = Adwaita           # can set multiple "one, two"
    icon_position = left            # left/right/top/off
    min_icon_size = 32              # 0 to disable
    max_icon_size = 128             # 0 to disable
    icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/      # only when recursive lookup = false


    # --- progress bar --- #
    progress_bar = true             # Turn on the progress bar. It appears when a progress hint is passed with for example dunstify -h int:value:12
    progress_bar_height = 10        # Set the progress bar height. This includes the frame, so make sureit's at least twice as big as the frame width.
    progress_bar_frame_width = 1    # Set the frame width of the progress bar
    progress_bar_min_width = 150    # Set the minimum width for the progress bar
    progress_bar_max_width = 300    # Set the maximum width for the progress bar
    progress_bar_corner_radius = 0  # Corner radius for the progress bar. 0 disables rounded corners.
    progress_bar_corners = all      # Define which corners to round when drawing the progress bar. If progress_bar_corner_radius is set to 0 this option will be ignored.


    # --- misc --- #

    dmenu = /usr/bin/tofi --prompt-text="dunst:"
    browser = /usr/bin/xdg-open
    always_run_script = true


    ignore_dbusclose = false    # true forces notifs to follow timeout
    force_xinerama = false

    #layer = top                # block notifs on fullscreen
    force_xwayland = false


# --- notification types --- #

[urgency_low]
    background = "#2f1730"
    foreground = "#888888"
    frame_color = "#000000"
    timeout = 7.5
    default_icon = ~/.nix/users/blake/assets/icons/normal_64px.png

[urgency_normal]
    background = "#2f1730"
    foreground = "#ffffff"
    frame_color = "#000000"
    timeout = 7.5
    override_pause_level = 30
    default_icon = ~/.nix/users/blake/assets/icons/normal_64px.png

[urgency_critical]
    background = "#900000"
    foreground = "#ffffff"
    frame_color = "#ff0000"
    timeout = 0
    override_pause_level = 60
    default_icon = ~/.nix/users/blake/assets/icons/critical_128px.png

#[experimental]
#    # Calculate the dpi to use on a per-monitor basis.
#    # If this setting is enabled the Xft.dpi value will be ignored and instead
#    # dunst will attempt to calculate an appropriate dpi value for each monitor
#    # using the resolution and physical size. This might be useful in setups
#    # where there are multiple screens with very different dpi values.
#    per_monitor_dpi = false


# --- overrides --- #

[hyprshot]
    appname = Hyprshot
    action_name = "kitty lf ~/pictures/screenshots/"

# Every section that isn't one of the above is interpreted as a rules to
# override settings for certain messages.
#
# Messages can be matched by
#    appname (discouraged, see desktop_entry)
#    body
#    category
#    desktop_entry
#    icon
#    match_transient
#    msg_urgency
#    stack_tag
#    summary
#
# and you can override the
#    background
#    foreground
#    format
#    frame_color
#    fullscreen
#    new_icon
#    set_stack_tag
#    set_transient
#    set_category
#    timeout
#    urgency
#    icon_position
#    skip_display
#    history_ignore
#    action_name
#    word_wrap
#    ellipsize
#    alignment
#    hide_text
#    override_pause_level
#
# Shell-like globbing will get expanded.
#
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
# GLib based applications export their desktop-entry name. In comparison to the appname,
# the desktop-entry won't get localized.
#
# You can also allow a notification to appear even when paused. Notification will appear whenever notification's override_pause_level >= dunst's paused level.
# This can be used to set partial pause modes, where more urgent notifications get through, but less urgent stay paused. To do that, you can override the following in the rules:
# override_pause_level = X

# SCRIPTING
# You can specify a script that gets run when the rule matches by
# setting the "script" option.
# The script will be called as follows:
#   script appname summary body icon urgency
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
#
# NOTE: It might be helpful to run dunst -print in a terminal in order
# to find fitting options for rules.

# Disable the transient hint so that idle_threshold cannot be bypassed from the
# client
#[transient_disable]
#    match_transient = yes
#    set_transient = no
#
# Make the handling of transient notifications more strict by making them not
# be placed in history.
#[transient_history_ignore]
#    match_transient = yes
#    history_ignore = yes

# fullscreen values
# show: show the notifications, regardless if there is a fullscreen window opened
# delay: displays the new notification, if there is no fullscreen window active
#        If the notification is already drawn, it won't get undrawn.
# pushback: same as delay, but when switching into fullscreen, the notification will get
#           withdrawn from screen again and will get delayed like a new notification
#[fullscreen_delay_everything]
#    fullscreen = delay
#[fullscreen_show_critical]
#    msg_urgency = critical
#    fullscreen = show

#[espeak]
#    summary = "*"
#    script = dunst_espeak.sh

#[script-test]
#    summary = "*script*"
#    script = dunst_test.sh

#[ignore]
#    # This notification will not be displayed
#    summary = "foobar"
#    skip_display = true

#[history-ignore]
#    # This notification will not be saved in history
#    summary = "foobar"
#    history_ignore = yes

#[skip-display]
#    # This notification will not be displayed, but will be included in the history
#    summary = "foobar"
#    skip_display = yes

#[signed_on]
#    appname = Pidgin
#    summary = "*signed on*"
#    urgency = low
#
#[signed_off]
#    appname = Pidgin
#    summary = *signed off*
#    urgency = low
#
#[says]
#    appname = Pidgin
#    summary = *says*
#    urgency = critical
#
#[twitter]
#    appname = Pidgin
#    summary = *twitter.com*
#    urgency = normal
#
#[stack-volumes]
#    appname = "some_volume_notifiers"
#    set_stack_tag = "volume"
#
# vim: ft=cfg
