Discover, install, and configure shell plugins with Fig Plugin Store →

Zsh Notify (marzocchi)

Desktop notifications for long-running commands in zsh.

478 stars
75 forks

Desktop notifications for long-running commands in ZSH.

Supported terminals

  • On macOS: or iTerm2;
  • On Linux (and possibly other systems): any terminal application should be supported as xdotool and wmctrl are used to query and modify windows state.

Setup and usage



Install (default*)

When using tmux on Yosemite:

reattach-to-user-namespace is required to prevent terminal-notifier from hanging (see julienXX/terminal-notifier#115 for details).


Install notify-send (default*) -- available in libnotify


The behavior of zsh-notify can be modified by using zstyle after sourcing notify.plugin.zsh.

  • Set a custom title for error and success notifications, when using the built-in notifier.

    zstyle ':notify:*' error-title "Command failed"
    zstyle ':notify:*' success-title "Command finished"

    The string #{time_elapsed} will be replaced with the command run time.

    zstyle ':notify:*' error-title "Command failed (in #{time_elapsed} seconds)"
    zstyle ':notify:*' success-title "Command finished (in #{time_elapsed} seconds)"
  • Change the notifications icons for failure or success. Provide the path to an image, or an URL if you are on macOS.

    zstyle ':notify:*' error-icon "/path/to/error-icon.png"
    zstyle ':notify:*' success-icon "/path/to/success-icon.png"

    Try this. Wow.

  • Play sounds with error and success notifications when using the built-in notifier. Provide the path to an audio file, or the name of an "alert" sound if you are on macOS.

    zstyle ':notify:*' error-sound "Glass"
    zstyle ':notify:*' success-sound "default"
  • Have the terminal come back to front when the notification is posted.

    zstyle ':notify:*' activate-terminal yes
  • Disable setting the urgency hint for the terminal when the notification is posted (Linux only).

    zstyle ':notify:*' disable-urgent yes
  • Set a different timeout for notifications for successful commands (notifications for failed commands are always posted).

    zstyle ':notify:*' command-complete-timeout 15

    The default value is 30 seconds.

  • Set application name in notification if set. If this value is not set it will strip the name from message. (only notify-send).

    zstyle ':notify:*' app-name sh

    The default value is ''.

  • Set a expire time in notifications (only notify-send).

    zstyle ':notify:*' expire-time 2500

    The default value is undefined milliseconds (disabled).

  • Replace the built-in notifier with a custom one at ~/bin/my-notifier. The custom notifier will receive the notification type (error or success) as the first argument, the time elapsed as the second argument, and the command line as standard input.

    zstyle ':notify:*' notifier ~/bin/my-notifier
  • Use the time elapsed even when the command fails (by default, notifications for command failures are not conditional on the elapsed time).

    zstyle ':notify:*' always-notify-on-failure no
  • Set a blacklist of commands that should never trigger notifications, using a regex support by grep's extended regular expression syntax:

    zstyle ':notify:*' blacklist-regex 'find|git'
  • Enable when connected over SSH, which is disabled by default.

    zstyle ':notify:*' enable-on-ssh yes
  • Disable error reporting (or send it somewhere else)

    zstyle ':notify:*' error-log /dev/null
  • Force checking of the WINDOWID variable on every command:

    zstyle ':notify:*' always-check-active-window yes