Skip to main content

Mako Notification Daemon

Mako is a lightweight notification daemon designed specifically for Wayland compositors. It provides elegant, customizable notifications that integrate seamlessly with the Hyprland desktop environment.

Configuration

Mako is configured through a simple text file at ~/.config/mako/config.

Basic Configuration

background-color=#1e1e2e
text-color=#cdd6f4
border-color=#b4befe
border-size=2
border-radius=10
default-timeout=5000
ignore-timeout=1
max-visible=3

Catppuccin Theme

Matches the desktop color scheme

5 Second Timeout

Notifications auto-dismiss after 5s

3 Max Visible

Shows up to 3 notifications at once

Rounded Corners

10px border radius for modern look

Notification Styling

Color Scheme

Mako uses Catppuccin Mocha colors for consistency:
PropertyColorHexDescription
BackgroundMantle#1e1e2eDark background
TextText#cdd6f4Light text color
BorderLavender#b4befeSoft purple border

Border and Shape

border-size=2
border-radius=10
  • Border Size: 2px solid border for definition
  • Border Radius: 10px rounded corners matching Hyprland windows
The border radius matches other UI elements (Hyprland: 9px, Mako: 10px) for visual consistency.

Timeout Behavior

default-timeout=5000
ignore-timeout=1
SettingValueDescription
default-timeout5000msNormal notifications dismiss after 5 seconds
ignore-timeout1Respects application-specified timeouts
Click a notification to dismiss it immediately, or wait for the automatic timeout.

Urgency Levels

Mako supports different styles based on notification urgency:

Critical Notifications

[urgency=critical]
border-color=#f38ba8
default-timeout=0
background-color=#313244

Red Border

#f38ba8 - Catppuccin Red

No Timeout

Stays until manually dismissed

Darker Background

#313244 for emphasis
Critical notifications:
  • Require manual dismissal (timeout=0)
  • Have red borders for urgency
  • Use a darker background to stand out
  • Typical use: System errors, battery warnings

Category-Based Styling

[category=system]
border-color=#fab387
System notifications use peach/orange border (#fab387) to distinguish them from regular notifications.

Maximum Visible Notifications

max-visible=3
Limits the number of simultaneous notifications to 3, preventing screen clutter. Additional notifications queue and appear as older ones dismiss.
If more than 3 notifications arrive, they stack in a queue and appear one by one as space becomes available.

Position and Layout

While not explicitly set in this config, Mako defaults are:
  • Position: Top-right corner
  • Width: Auto-sized based on content
  • Padding: Internal padding for readability
  • Margin: Space between notifications
Customize position by adding:
anchor=top-right
margin=10
padding=15
width=350
Available anchors:
  • top-left, top-center, top-right
  • bottom-left, bottom-center, bottom-right

Usage

Manual Testing

Send a test notification:
notify-send "Test Notification" "This is a test message"
With urgency level:
notify-send -u critical "Critical" "Important message!"
notify-send -u normal "Normal" "Regular notification"
notify-send -u low "Low" "Minor update"
With category:
notify-send -c system "System Update" "Updates available"

Common Notification Sources

  • Battery warnings
  • Volume changes
  • Brightness adjustments
  • System updates
  • Drive mount/unmount
  • Chat messages
  • Email alerts
  • Calendar reminders
  • Download completions
  • Build status

Interactivity

Left Click

Dismiss notification

Right Click

Context menu (if available)

Middle Click

Invoke default action

Hover

Pause auto-dismiss timer

Customization Options

Font Styling

Add font configuration:
font=JetBrainsMono Nerd Font 11

Icon Display

Control icon appearance:
icons=1
max-icon-size=48
icon-path=/usr/share/icons/Papirus-Dark

Grouping

Group similar notifications:
group-by=app-name
max-history=10

Actions

Enable notification actions:
actions=1
Some applications provide action buttons (e.g., “Reply”, “Dismiss”, “Open”).

Advanced Configuration

Per-Application Settings

[app-name="Spotify"]
border-color=#1db954
default-timeout=3000

Multiple Criteria

[urgency=critical app-name="Battery"]
border-color=#f38ba8
default-timeout=0
background-color=#313244

Format Strings

Customize notification text:
format=<b>%s</b>\n%b
max-visible=3
Format variables:
  • %a - App name
  • %s - Summary
  • %b - Body
  • %i - Icon name

Control Commands

makoctl dismiss --all
Bind makoctl dismiss --all to a keybinding in Hyprland to quickly clear all notifications.

Integration with Hyprland

Mako integrates with Hyprland’s window rules:
# In hyprland windowrules.conf
windowrule {
    name = notifications
    match:class = ^(mako)$
    pin = on
    float = on
}
This ensures notifications:
  • Stay on top (pin = on)
  • Float above other windows
  • Don’t interfere with tiling layout

Performance

Lightweight

Minimal memory footprint (~5MB)

Efficient

No background polling or timers

Wayland Native

Built specifically for Wayland

Fast Rendering

Hardware-accelerated with layer-shell

Troubleshooting

Check if Mako is running:
pgrep -x mako
Start Mako if not running:
mako &
Ensure Mako starts with Hyprland in autostart.conf:
exec-once = mako
Verify config file location:
ls -la ~/.config/mako/config
Reload configuration:
makoctl reload
Check for syntax errors in config file. Each line should be:
key=value
No spaces around = sign.

Example Notifications

notify-send -u critical "Battery Low" "15% remaining"
Mako is Wayland-only. It will not work on X11 systems. For X11, use alternatives like dunst or notify-osd.

Build docs developers (and LLMs) love