Todo List for menu bar

Display a todo list in the menu bar with items taken from the macos' Reminders.app from the list called 'Today'. Click the item to complete the reminder and display the next one.

Image preview of Todo List for menu bar plugin.

todolist.2m.sh

Edit
Open on GitHub
#!/bin/sh
# <xbar.title>Todo List for menu bar</xbar.title>
# <xbar.version>v1.0</xbar.version>
# <xbar.author>Julian Naumann</xbar.author>
# <xbar.author.github>JulianNaumann</xbar.author.github>
# <xbar.desc>Display a todo list in the menu bar with items taken from the macos' Reminders.app from the list called 'Today'. Click the item to complete the reminder and display the next one.</xbar.desc>
# <xbar.image>https://i.imgur.com/d4cBUKW.png</xbar.image>
# <xbar.dependencies>bash,osascript</xbar.dependencies>
# <xbar.abouturl>https://github.com/JulianNaumann/bitbar-todolist</xbar.abouturl>

# Icon credit, all icons from <https://www.flaticon.com>:
# - Bell icon made by Nice And Serious <https://niceandserious.com>
# - Todo list icon made by Freepik <https://www.freepik.com>
# - Check icon made by Smashicons <https://smashicons.com>

if [ "$1" = "done" ]; then
	osascript -e 	'tell application "Reminders"
				set activeReminders to (reminders of list "Today" whose completed is false)
				set todo to first item of activeReminders
				tell todo
					set completed to true
				end tell
			end tell'
fi

reminder=$(osascript -e 'tell application "Reminders"
				set activeReminders to (reminders of list "Today" whose completed is false)
				if activeReminders is not {} then
					return name of first item of activeReminders
				else
					return "No Todos!"
				end if
			end tell')

# Choose a different icon by uncommenting the appropriate line and commenting out all others:
# todo list
image=iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAADs0lEQVRIDbWWW4iNURSAz5mLGeM2TSnXcZkil5SSB28UESGS8ELjlgfxQIkHeUARHlxilFBKKF5mEiajSGZeeCMNRVPzgJLrYI7v+8+/z5zTOWbmhFXfWXvvf+2911p77d1JpFKppCQQ9EH4H3KbRcvcw58k0m0H6UqrxBX0R6iGX/FYMaoE4x9QCuugAsIeUWQleLAankI3nIUJGP2VsIbrvoTWnIUYKIN7oHxLq1S9RrT1tihhTpQ+dBW0w5OcBRjQk/FwA5QtMFQjdHTG/dXxHFPo3EGQs2Hw3qLZBvPhJ+yEOaBEBZVuFv6lBlLxFx0vof+9sGUiETb0+0Aojw2z227YK0bvpvALrIGaeB2LMN9hvYJauAZKPQyOJ/VLYV8Ow2A0tIGF55hF0xYWiQ6XjpFegHlgOs6Dqb2I8Vb0IMj2Vq+9LgMg2C+lfRhMbx3cgpCZkHKGEBY1wmXQCqakAfR0InyF3kT7aTADumLDvfG6FfRfQ6ZKQ4R+12Mvp14ZjZX2FpZBJRhx9nnotfONsIOz+8DCi2hPhZOgmIH8hwND72EzKOEebo6m9POHednOR7MY6/UejsPgOigboaiiyfaLuRtgHnhUryAvpaZqBywEU7cHOqAR4yq030O6aUZiSh0nm8nP2E2mPRcssKPQBI/A9TLXLy8NfFQ0sFiGo+/ACPgMPsaKG/k4D4F32C1Az4YzoLSDAWjj3c483GFDvT0BY2ElHIIHMBI6we9fwQ1DZHr+Cd7DQKK8zMZmaBasov+CvseS2Yx2WvhQqGg2he99aeYbsddrMIwJ9nG/HZ13hnpxDMy/qTkN98FFosVsFxIi8UnDLHpDjfgT7RrGjPwbZM7P+dkd02XflIW2FREt+CeNbSR89wEwwlEM3ESfQrtewaLxw3Yw/17kLfAYnjNxPdpKtQCyozUrA0D7S7Ac9oPj06ElbjvHIHqERb0vtRAe781+pT8J+vO0TcVuJgQ5EM+vZKDg06YXu2AJmIJ9GL4hTU3oNfQLPW1GYsl7Tp3Yej0W055G+whaybkSDoRrYduyN22OfYFImHwztHvTbIZpshEbH4tS2r6hee9o2NAcW5l1sAKOw0MwrXrZl0QLY2sthKJzLPvMe9bA0Ht4F5TweNdrQd9FihLmRIGg8x7vsJjn0QDPwMo7B83gtfBbUcIc60DxfJ2fidTI/NPj4FXaU9AzwCdpN/1qdN45MNaXGIj14H32mFrCPoZOOzpwc290ytq0+me/3lWd6P4NwGhT56kWXgsAAAAASUVORK5CYII=

# bell
#image=iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAADiElEQVRIDZ2W24uNURTAv2PG/a6UcsllPAgppHgYUV4UpYmUSB4kbyKP/grxwgvlktyKF694QJoHlELGrVwyphnJbYzfb89en+9wztRY9Zu19tprrb2/fTtTFEPIwMBALbqx90E3hPRjnIOpxqBHROywNcktuUg79jc4AkthJWyAt3A8x9Swy4kNazASR+Uih7EfRHLFfwC7E9IA6KZf1RrJf2uSWmu12vfsd3mW4LuPngEjsZ+hZ8IH4gbQiivwK1l//Wn4qXmQn2rij8JOeAi34DFYrA3aYQWchX0M6PI6wZ+0hxYCY1/GYN+EHuholkXfengNd2GCcehUo1lO3ckh+CK8B5fHvmkwJ9ut2OWyY0+Ep3A9imM33S+LpWT0NlBW58KLsF/BodxORWh70sZm30LsL7Art8uJ2C6FgHIG2Lfhgp1oZ38P7sD47Ctjc3tk1seM01aw6+LCGXvTRsBH2JqD92D3wqzcTkVTUv5DXwy0Dtu7tSjHlntVHTFO4HyCPK6Pcp0t6BucJDe8Bf0j+6sqjvdTnF6JBbkzahbVgSJxIobHsyc7ZqPjspaJuS9UDPQZhxOxRp00GmgSEd6TvhzpZofdbKAcWnzDMNcadVIdKGblze9jifpcKmxPT7wQdcmVRsol5wu+XrCGEjXrli6cbnp3CiuKyWg3OtrZ/Y+KXDveQzo46NKfvoiZM5man6y0QZcGMhc80q9AKRMHm4N/yaVEeYGf451vjzWtrR1Llxo4fUIcyMdTmQcuhw+o0nCgwa4i1cDuhHnUcjWU8JP950VYg+2P2yoj0OPB356YkO6GQkx6CdCL4QOsNRCd7lgUiFE30feWT/aB9LfoIPTkJYhYXA2lXy+x3r+XsNk2klZhBAXTJcyFt9NxLXUXhcs4B7xHSnpIiavqlmjTrz0mRRbFFbTv5TgG9uempfw0GnvhBaT3LCf8l6KGP4xPYL8FbLuu6ZPR7fpgOR0um3fIk+iy+lJ44728cSBcSg+Ke2Ad/caq9Vt3DRzTNiD25yT2MrgMXlD9FjPBr3RZvCOxPF+xp4OvgU+PE3MQcfB3cAKUWhqEL2Ap012wYPqhQ5vgRD6BX3sedsMZUDrgFOyAm+D/FX65NeUNNT9HbdqDgsPZNxX6r8Ib2AwboQsuNU2gg/7GNenw5LiR1ZM12mL4psBpULzxpyBdSvRoqOZYw6Us5Teo4ooAlVO16wAAAABJRU5ErkJggg==

# check icon
#image=iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAYAAAByDd+UAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAACXBIWXMAABYlAAAWJQFJUiTwAAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgpMwidZAAADHklEQVRIDbWWvWsUURTFN35iExXsFGtjoSgY+0WMtWAKsbARJVoJFv4TgmAQLIMI1hZ+FFpHIYIKiqmUpFHBYOn37zc7Z/I2u2a2MAfOzp377r3nvfvezOxYZxBjuLbAH/XQONcp2IUH4D64E4oVuAzfwafwMfwGxVb4E/7xJrB4Ce83wV9wG7wCz0GTX8J5+BZ+gWIPnIDH4RHoJO/CW/A73Ax/wz5R7isoJMUktPgbOAN3wTYYY6w55lpDlHV7Hn6zMh3T8BOchTtgYKIrtd0l9WWimFWOudawlnC86aaGSxcGfIUXvamxnasCbTDG2MAa1oqoGpWoMxST0FlFzMGMYY4MRbNia1nT2qKp5wGx77ZCKDbKqqrg4idCuqrVcLWmtdVocBXLzc6eNTNpItqNbIuR5qeGNa2tRgWfswU407vt24fa1Xopu3GH6At1RhZgbTXU6pyBziBHv0x2vA3lym4S/BEerJPSRmuroVbnNpzTAOUe9Dzr/xqfnOvYHpBDdUomnvE5/Gp1nsHLGiB913bTm6OsYw3Kg3WesRV4oo4p68RWQ63OIuxqgLWz6nlXn9PcK5ZCp7AV8xUorJETmnuvarzXWNuGBDvbswbUiIC3sY9if4bXdALbJ0tkEbZarQHBJDhzX9I3DKqhkA+22A8/wHK8PEDGiAHB9Vp6jATHH8HdMBjHeAXvxcE1hQtXZcZvSxddzRKcqIZWe+8nxbEX0NeS9nN4GIoH0Pak5a7cb98wZIvUWLKQH0+/Z8LvYKCoz5Ev4JPwIbwPX0OLnIZCMb+D/0JqqqFW64OfA2LsJfgEun+iHOt5+n/Tzr4H3/1YgDN1bA5FmZrE0md32pBa1lZDrQq+WNte3gpkP0YRy+p9n/a9vFV0r+bhrDfAwsNWpX/Y0TenhLmZnDWtrUaFzOR/fYCtF7GhH+By1tMEb/hfDJepaPZFUZ8xW2H/A8edve0qqS+5mO1/ogwSJiXR9tp3N9sT5rFugzHGmmOuNURZt+l1b2h1pRv2RzibG0Gv+mxZ3h4+O1OwC/2rvxdmxSvYy3Dkv/p/ATQejPjjKGMzAAAAAElFTkSuQmCC

echo "$reminder | length=30 bash='$0' param1='done' terminal=false refresh=true templateImage=$image"