diff --git a/historymenu b/historymenu new file mode 100755 index 0000000..1c84758 --- /dev/null +++ b/historymenu @@ -0,0 +1,90 @@ +#!/usr/bin/env bash +# Rofi extension for Dunst history + +NAME="$(basename "$0")" +VERSION="0.0.1" +ITEMS= + + +ROFI_OPTIONS=() + +load_items() { + if ! ITEMS=$(dunstctl history 2>/dev/null); then + exit_error $? "Could not load items" + fi +} + +exit_error() { + local code="$1" + local message="$2" + + rofi -e "$message" ${ROFI_OPTIONS[@]} + exit "$code" +} + + +show_items() { + items=$( + echo "$ITEMS" \ + | jq -r ".data | .[] | map(.message) | .[].data" \ + | rofi_menu + ); + +} + +rofi_menu() { + rofi -dmenu -p 'Name' \ + -i -no-custom \ + -mesg "$msg" \ + "${ROFI_OPTIONS[@]}" +} + +parse_cli_arguments() { + # Use GNU getopt to parse command line arguments + if ! ARGUMENTS=$(getopt -o c:C --long auto-lock:,clear:,no-clear,show-password,state-path:,help,version -- "$@"); then + exit_error 1 "Failed to parse command-line arguments" + fi + eval set -- "$ARGUMENTS" + + while true; do + case "$1" in + --help ) + cat <<-USAGE +$NAME $VERSION +Usage: + $NAME [options] -- [rofi options] +Options: + --help + Show this help text and exit. + --version + Show version information and exit. + +Examples: + # Default options work well + $NAME + +USAGE + shift + exit 0 + ;; + --version ) + echo "$NAME $VERSION" + shift + exit 0 + ;; + -- ) + shift + ROFI_OPTIONS=("$@") + break + ;; + * ) + exit_error 1 "Unknown option $1" + esac + done +} + + +parse_cli_arguments "$@" +load_items +show_items +