{
  pkgs,
  lib,
  config,
  ...
}: let
  program = "dunst";
  cfg = config.dots.${program};
  home_dir = config.home.homeDirectory;
in {
  options.dots.${program} = {
    enable = lib.mkEnableOption "enables ${program}";
  };

  config = lib.mkIf cfg.enable {

    home.packages = with pkgs; [libnotify];

    services.${program} = {
      enable = true;
      settings = {
        global = {
          # --- display --- #
          monitor = 0;
          follow = "mouse";
      
          # --- geometry --- #
          width = "(0, 300)";
          height = 300;
          origin = "top-right";
          offset = "20x15";
          scale = 0;
      
          # --- general --- #
          sort = true;
          idle_threshold = 150;
          notification_limit = 0;
          indicate_hidden = true;
      
          mouse_left_click = "close_current";
          mouse_middle_click = "do_action";
          mouse_right_click = "close_all";
      
          # --- look --- #
          font = lib.mkDefault "UbuntuMonoNerdFont 13";
          line_height = 0;
          markup = "full";
          alignment = "center";
          vertical_alignment = "center";
          ellipsize = "middle";
          show_age_threshold = 60;
          ignore_newline = false;
          show_indicators = true;
      
          corner_radius = 5;
          corners = "all";
      
          padding = 8;
          horizontal_padding = 8;
          text_icon_padding = 0;
      
          frame_width = 3;
          frame_color = lib.mkDefault "#aaaaaa";
      
          separator_height = 2;
          separator_color = lib.mkDefault "auto";
          gap_size = 0;
      
          stack_duplicates = true;
          hide_duplicate_count = false;
      
          format = "<b>%s</b>\n%b";
      
          sticky_history = true;
          history_length = 20;
      
          # --- icons --- #
          icon_corner_radius = 0;
          icon_corners = "all";
      
          enable_recursive_icon_lookup = true;
          # icon_theme = [ "Adwaita" ];
          icon_position = "left";
          min_icon_size = 32;
          max_icon_size = 128;
          #icon_path = [];
      
          # --- progress bar --- #
          progress_bar = true;
          progress_bar_height = 10;
          progress_bar_frame_width = 1;
          progress_bar_min_width = 150;
          progress_bar_max_width = 300;
          progress_bar_corner_radius = 0;
          progress_bar_corners = "all";
      
          # --- misc --- #
          dmenu = "/usr/bin/tofi --prompt-text=\"dunst:\"";
          browser = "/usr/bin/xdg-open";
          always_run_script = true;
      
          ignore_dbusclose = false;
          force_xinerama = false;
          # layer = "top";
          force_xwayland = false;
        };
      
        urgency_low = {
          background = lib.mkDefault "#2f1730";
          foreground = lib.mkDefault "#888888";
          frame_color = lib.mkDefault "#000000";
          timeout = 7;
        };
      
        urgency_normal = {
          background = lib.mkDefault "#2f1730";
          foreground = lib.mkDefault "#ffffff";
          frame_color = lib.mkDefault "#000000";
          timeout = 7;
          override_pause_level = 30;
        };
      
        urgency_critical = {
          background = lib.mkDefault "#900000";
          foreground = lib.mkDefault "#ffffff";
          frame_color = lib.mkDefault "#ff0000";
          timeout = 0;
          override_pause_level = 60;
          default_icon = "${home_dir}/.nix/users/blake/assets/icons/alert/critical_128px.png";
        };
      };
    };
  };
}
