{ config, lib, pkgs, ... }: let cfg = config.profile.hyprland; inherit (lib) mkIf; inherit (lib.meta) getExe; playNotificationSoundScript = pkgs.writeShellScriptBin "play-notification-sound" '' appname="$1" if [[ "$appname" =~ ^(discord|TelegramDesktop|Slack|Signal|Element|fcitx5)$ ]]; then exit 0 fi ${pkgs.sox}/bin/play --volume 0.5 ${./gran_turismo_menu_sound_effect.mp3} ''; in { config = mkIf cfg.enable { home.packages = with pkgs; [ gojq ]; services.dunst = { enable = true; iconTheme = { name = "Adwait"; package = pkgs.gnome.adwaita-icon-theme; }; # https://dunst-project.org/documentation/ settings = { global = { monitor = cfg.dunst.monitor; enable_posix_regex = true; origin = "top-center"; # (horizontax, vertical) offset = "0x30"; progress_bar_corner_radius = 10; # The transparency of the window. Range: [0; 100]. # This option will only work if a compositing window manager is # present (e.g. xcompmgr, compiz, etc.). (X11 only) transparency = 30; frame_color = "#ffffff"; sort = true; idle_threshold = "1m"; font = "Fira Sans Semibold 9"; line_height = 1; # Possible values are: # full: Allow a small subset of html markup in notifications: # bold # italic # strikethrough # underline # # For a complete reference see # . # # strip: This setting is provided for compatibility with some broken # clients that send markup even though it's not enabled on the # server. Dunst will try to strip the markup but the parsing is # simplistic so using this option outside of matching rules for # specific applications *IS GREATLY DISCOURAGED*. # # no: Disable markup parsing, incoming notifications will be treated as # plain text. Dunst will not advertise that it has the body-markup # capability if this is set as a global setting. # # It's important to note that markup inside the format option will be parsed # regardless of what this is set to. markup = "full"; # 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 = ''%s\n%b''; # Recursive icon lookup. You can set a single theme, instead of having to # define all lookup paths. enable_recursive_icon_lookup = true; # # Set icon theme (only used for recursive icon lookup) # icon_theme = ''"Papirus-Dark,Adwaita"''; ### Misc/Advanced ### # dmenu path. dmenu = "${pkgs.dmenu-wayland}/bin/dmenu-wl -p dunst"; # Browser for opening urls in context menu. browser = "${pkgs.xdg-utils}/bin/xdg-open"; # Define the corner radius of the notification window # in pixel size. If the radius is 0, you have no rounded # corners. # The radius will be automatically lowered if it exceeds half of the # notification height to avoid clipping text and/or icons. corner_radius = 10; mouse_left_click = "open_url, close_current"; mouse_middle_click = "close_current"; mouse_right_click = "do_action, close_current"; }; urgency_low = { background = "#000000CC"; foreground = "#888888"; script = "${getExe playNotificationSoundScript}"; timeout = 6; }; urgency_normal = { background = "#000000CC"; foreground = "#888888"; script = "${getExe playNotificationSoundScript}"; timeout = 6; }; urgency_critical = { background = "#000000CC"; foreground = "#888888"; script = "${getExe playNotificationSoundScript}"; }; fcitx5 = { appname = "fcitx5"; skip_display = true; }; }; }; }; }