{ pkgs, config, ... }: { home.packages = builtins.attrValues { inherit (pkgs) libnotify; # required by dunst }; services.dunst = { enable = true; iconTheme = { name = "Adwaita"; package = pkgs.gnome.adwaita-icon-theme; size = "16x16"; }; settings = { global = { # Allow a small subset of html markup:, , , and . # For a complete reference see # . # If markup is not allowed, those tags will be stripped out of the message. markup = "yes"; # 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 # Markup is allowed #format = ''%I %s %p\n%b''; format = ''%s:\n%b\n\n%a ''; font = "monospace"; # Options are "left", "center", and "right". alignment = "left"; # Sort messages by urgency. sort = "yes"; # Show how many messages are currently hidden (because of geometry). indicate_hidden = "yes"; # Show age of message if message is older than show_age_threshold # seconds. # Set to -1 to disable. show_age_threshold = 60; # Split notifications into multiple lines if they don't fit into # geometry. word_wrap = "no"; # Ignore newlines '\n' in notifications. ignore_newline = "no"; # The geometry of the window: # [{width}]x{height}[+/-{x}+/-{y}] # The geometry of the message window. # The height is measured in number of notifications everything else # in pixels. If the width is omitted but the height is given # ("-geometry x2"), the message window expands over the whole screen # (dmenu-like). If width is 0, the window expands to the longest # message displayed. A positive x is measured from the left, a # negative from the right side of the screen. Y is measured from # the top and down respectevly. # The width can be negative. In this case the actual width is the # screen width minus the width defined in within the geometry option. # geometry = "400x0-15+60"; # Shrink window if it's smaller than the width. Will be ignored if # width is 0. shrink = "yes"; # Display notification on focused monitor. Possible modes are: # mouse: follow mouse pointer # keyboard: follow window with keyboard focus # none: don't follow anything # # "keyboard" needs a windowmanager that exports the _NET_ACTIVE_WINDOW property. # This should be the case for almost all modern windowmanagers. # # If this option is set to mouse or keyboard, the monitor option will be ignored. follow = "none"; # Should a notification popped up from history be sticky or timeout # as if it would normally do. sticky_history = "yes"; # Maximum amount of notifications kept in history history_length = 20; # Display indicators for URLs (U) and actions (A). show_indicators = "yes"; # The height of a single line. If the height is smaller than the # font height, it will get raised to the font height. # This adds empty space above and under the text. line_height = 0; # Draw a line of "separator_height" pixel height between two # notifications. Set to 0 to disable. separator_height = 0; # Gap between messages - requires compositor gap_size = 4; # Padding between text and separator. padding = 10; # Horizontal padding. horizontal_padding = 10; # The transparency of the window. Range: [0; 100]. # This option will only work if a compositing windowmanager is # present (e.g. xcompmgr, compiz, etc.). transparency = 0; # Define a color for the separator. # possible values are: # * auto: dunst tries to find a color fitting to the background; # * foreground: use the same color as the foreground; # * frame: use the same color as the frame; # * anything else will be interpreted as a X color. separator_color = "frame"; # Align icons left/right/off icon_position = "left"; width = 400; height = 300; offset = "15x60"; origin = "top-right"; frame_color = "#${config.colorScheme.colors.base0B}"; frame_width = 2; # Browser for opening urls in context menu. browser = "firefox"; # Shortcuts are specified as [modifier+][modifier+]...key # Available modifiers are "ctrl", "mod1" (the alt-key), "mod2", # "mod3" and "mod4" (windows-key). # Xev might be helpful to find names for keys. # Close notification. close = "ctrl+space"; # Close all notifications. close_all = "ctrl+shift+space"; # Redisplay last message(s). history = "ctrl+shift+h"; # Context menu. context = "ctrl+shift+c"; }; urgency_low = { background = "#${config.colorScheme.colors.base03}"; foreground = "#${config.colorScheme.colors.base05}"; timeout = 15; }; urgency_normal = { background = "#${config.colorScheme.colors.base03}"; foreground = "#${config.colorScheme.colors.base05}"; timeout = 15; }; urgency_critical = { background = "#${config.colorScheme.colors.base08}"; foreground = "#${config.colorScheme.colors.base05}"; frame_color = "#${config.colorScheme.colors.base05}"; timeout = 0; }; }; }; }