#!/bin/sh # yabai enhanced # v1.0 # CHristian Baer # chrisb86 # Bitbar plugin to display yabai space ID and and mode with custom icon themes and dark mode support. # https://raw.githubusercontent.com/chrisb86/bitbar_yabai_enhanced/main/screenshot.png # sh, yabai # https://github.com/chrisb86/ ## Set theme theme="default" ## Set PATH PATH="/opt/homebrew/bin:${PATH}" ## Set yabai path yabai="yabai" case $1 in restart) launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai" ;; stop) brew services stop yabai ;; esac basedir=$(dirname "$0") icon_path="${basedir}/yabai_enhanced/${theme}" yabai_modes="float bsp stack" yabai_spaces=$(yabai -m query --spaces | jq length) yabai_displays=$(yabai -m query --displays | jq length) space_id=$(yabai -m query --spaces --display | jq 'map(select(."focused" == 1))[-1].index') space_mode=$(yabai -m query --spaces --display | jq -r 'map(select(."focused" == 1))[-1].type') ## Check if dark mode is active in macOS macos_darkmode=$(defaults read -g AppleInterfaceStyle 2>/dev/null) enc_icon() { base64 -i $1 -o - } if [ "${theme}" == "default" ]; then ## Load light or dark icons if [ "${macos_darkmode}" == "Dark" ]; then icon_float="iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAFV2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM2IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMzYiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIzNiIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMzYiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjE0NC4wIgogICB0aWZmOllSZXNvbHV0aW9uPSIxNDQuMCIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0xMi0xMFQyMTo1MzozMiswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0xMi0xMFQyMTo1MzozMiswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+eWFiYWk8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5IERlc2lnbmVyIChOb3YgIDYgMjAyMCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjAtMTItMTBUMjE6NTM6MzIrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PvEFwYgAAAGBaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2pRmFFQQ0ODRDVZmELUEqSEBRJhBv1a9PkrUHu8p4S0Bq1CQdTSr6H+glqD5iAoiiCaGpqLWkpe56mgRJ7Luedzv/eew73ngjWcVjJ6kxsy2ZwWCvici0vLzpZXHNjpxktzRNHVybm5IA3t6wGLGe+GzFqNz/1rbbG4roClVXhCUbWc8LRwcCOnmrwr3K2kIjHhc2GXJhcUvjf1aIXfTE5W+MdkLRzyg7VT2Jms42gdKyktIywvpz+TzivV+5gvccSzC/MS+8R70QkRwIeTGabwM8oI4zKPMoSHYVnRIN9dzp9lXXIVmVUKaKyRJEUOl6h5qR6XmBA9LiNNwez/377qCa+nUt3hg+YXw/gYgJYdKBUN4/vYMEonYHuGq2wtf/0Ixj5FL9a0/kPo2IKL65oW3YPLbeh5UiNapCzZxK2JBLyfQfsSdN2CfaXSs+o+p48Q3pSvuoH9AxiU8x2rv0tEZ9l/1uq6AAAACXBIWXMAABYlAAAWJQFJUiTwAAAB3klEQVRYhe2YwU4TURSGv3Np0hgqCyOQkAYTYe1CqsGtfQZegvdgRdwaiHHFawBLNNquXBqChIQQbFwYAprW/i5mGoax7dwZZuws+iWzuDPnznyd3nMm9xhDkPQSaAINYA1YGhaXQB24jIzPgD9AKzwOzOzz2DtIqknaVT4sSCJyXMSu9yW9lTQ7SuaFpJOcZHyEBhxLeh6XeSjpW44yaYQGUrMALnR6AzzJsE7y4imwDWCSXgFHBTxkkbuL+iI8NwoB644gm8qAAU1HkNplYa1sQo0K6YpeF/jhGduPjb97zJkxSX2C/y+JPWATuPIUyoSvUJ8gQzpFyqQR+gU8KFoGoHKPuQsJ1zvcXUePuS3EI8n6hqrhuXGkLYwAvUTj/81UKImpUBKlE6oAX0lO+9+xscJ54+hlETJJWeZlYVqHxrEIzPsEVoBVjzgBx5GxASueMnVgC88fX+S3LAtdB5wXcOOsnDugPWmLCG1HsPEvCy0H7E/aIsKBM7MPwPtJmwA7ZvbJACTNAV+A5RHBRWfZCfDMzK4cgJn9BDaA0xwfkkZmw8z+3V6FbZl3Q9olN7HWSjWXho20I6kWdRhaEMOOyGuCbXYDeAREO11V4DrlmxBBzRu09A7N7GM86C+AYkQGDFUYVQAAAABJRU5ErkJggg==" icon_bsp="iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAFV2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM2IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMzYiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIzNiIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMzYiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjE0NC4wIgogICB0aWZmOllSZXNvbHV0aW9uPSIxNDQuMCIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0xMi0xMFQyMTo1MzoxNyswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0xMi0xMFQyMTo1MzoxNyswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+eWFiYWk8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5IERlc2lnbmVyIChOb3YgIDYgMjAyMCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjAtMTItMTBUMjE6NTM6MTcrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Pshe7SwAAAGBaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2pRmFFQQ0ODRDVZmELUEqSEBRJhBv1a9PkrUHu8p4S0Bq1CQdTSr6H+glqD5iAoiiCaGpqLWkpe56mgRJ7Luedzv/eew73ngjWcVjJ6kxsy2ZwWCvici0vLzpZXHNjpxktzRNHVybm5IA3t6wGLGe+GzFqNz/1rbbG4roClVXhCUbWc8LRwcCOnmrwr3K2kIjHhc2GXJhcUvjf1aIXfTE5W+MdkLRzyg7VT2Jms42gdKyktIywvpz+TzivV+5gvccSzC/MS+8R70QkRwIeTGabwM8oI4zKPMoSHYVnRIN9dzp9lXXIVmVUKaKyRJEUOl6h5qR6XmBA9LiNNwez/377qCa+nUt3hg+YXw/gYgJYdKBUN4/vYMEonYHuGq2wtf/0Ixj5FL9a0/kPo2IKL65oW3YPLbeh5UiNapCzZxK2JBLyfQfsSdN2CfaXSs+o+p48Q3pSvuoH9AxiU8x2rv0tEZ9l/1uq6AAAACXBIWXMAABYlAAAWJQFJUiTwAAABxUlEQVRYhe2YvUoDQRDHf7OmENTG0sZPRAtFNIq25hl8EcGnEFsxoE+QVzCWKjHBQmwUPwsfQESRBMfi7sLluK8km3gEf3DFzk5m/+zMTtgVQlDVDaAA5IE1YMI3PQe8+sb3wGRYnBDegKr7lUXkKtZbVUdVtajxTKoqvu8pwT+KH1U9VNWRKDHrKYPbEuTxoKqrng7jihkDSsBUyq23yQxQ8nbKuMYD0tdBELUkah9AVHULOG/jx9PAs2/86Nq6RYFNg3OasoAABYNztLPCmg1BNmrII5+jtemlQQLjL+AzpW/S3HiuTTFhLGFxl0yyS3/JnCAbKRuOsMelMWpOOxEULMYbYLaDOGE0MpeygRRkszF2JCiu2XXNQKbMKjb6UAOoB2xhdZXG1rAhaAX4thAH+C/qZGykbCgiTthOJtpsCLoG5i3EAagbnOttO/Syht4MUOvhAu1SMzgX/6xQNcDpX6vwUTYicgGcdBHE1r/9kYhUvD60S+ubTxy9KOonYA/cxigi78AO8NKDxdKI2RGRj6YgV1QF54513EcxRWBZRJonPXT73ReRbZxrdp7W2+0icOcb3wILKRZXWp/0zkTkMuj0C2I3OizDrvY1AAAAAElFTkSuQmCC" icon_stack="iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAFV2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM2IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMzYiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIzNiIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMzYiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjE0NC4wIgogICB0aWZmOllSZXNvbHV0aW9uPSIxNDQuMCIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0xMi0xMFQyMTo1MjoyMiswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0xMi0xMFQyMTo1MjoyMiswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+eWFiYWk8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5IERlc2lnbmVyIChOb3YgIDYgMjAyMCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjAtMTItMTBUMjE6NTI6MjIrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PtufGToAAAGBaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2pRmFFQQ0ODRDVZmELUEqSEBRJhBv1a9PkrUHu8p4S0Bq1CQdTSr6H+glqD5iAoiiCaGpqLWkpe56mgRJ7Luedzv/eew73ngjWcVjJ6kxsy2ZwWCvici0vLzpZXHNjpxktzRNHVybm5IA3t6wGLGe+GzFqNz/1rbbG4roClVXhCUbWc8LRwcCOnmrwr3K2kIjHhc2GXJhcUvjf1aIXfTE5W+MdkLRzyg7VT2Jms42gdKyktIywvpz+TzivV+5gvccSzC/MS+8R70QkRwIeTGabwM8oI4zKPMoSHYVnRIN9dzp9lXXIVmVUKaKyRJEUOl6h5qR6XmBA9LiNNwez/377qCa+nUt3hg+YXw/gYgJYdKBUN4/vYMEonYHuGq2wtf/0Ixj5FL9a0/kPo2IKL65oW3YPLbeh5UiNapCzZxK2JBLyfQfsSdN2CfaXSs+o+p48Q3pSvuoH9AxiU8x2rv0tEZ9l/1uq6AAAACXBIWXMAABYlAAAWJQFJUiTwAAABeUlEQVRYhc2YsU4CQRCGv9lcJ1gbTTTxASwEjbbyDDyVsTUY45uIpRqFyloJiWJvsMLwW+yBBxwaFW73S6aZ2+K7m53N7Rg5SNoHakAVqADreev+QA9opdE0s/tvV0sqSTpTMQwlnUpamSezJ6lTkEyWR0m7Iw9LZcrAA7C1oNL8lidgx8zeXZo4CSgDsA0cA5ikQ+A6oMwIAQcO300xYEDN4Vs7Fiom6RnYCG2S0jVJQ9Jui4CB+3lNoVgCvOK/UF5QQH7SSNJCXu2fjCWT0CYpSoPY9hAJsMaXYTZYYn4uodt+WnQQeg/NdFt0eyg6oYT5/8t5+2rpuVgOxjHRlSw6oQR4YbaWeXUsIjcIfTBO8xFbyeTw19tY6DmgHdoiQ9vhL/6x0HLAZWiLDE1nZjfARWgToGFmd6Nhwyp+2LAZSKaDHzb0HYCZvQF1oBtIpm5m/ZknksqSzgucDTUklbIOuSd0OhE5wt/7qyxmpCcmR3pXZnY7vegTOfHbbp1N7w0AAAAASUVORK5CYII=" else icon_float="iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAFV2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM2IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMzYiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIzNiIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMzYiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjE0NC4wIgogICB0aWZmOllSZXNvbHV0aW9uPSIxNDQuMCIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0xMi0xMFQyMTo1NDozNiswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0xMi0xMFQyMTo1NDozNiswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+eWFiYWk8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5IERlc2lnbmVyIChOb3YgIDYgMjAyMCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjAtMTItMTBUMjE6NTQ6MzYrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Pve8EPIAAAGBaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2pRmFFQQ0ODRDVZmELUEqSEBRJhBv1a9PkrUHu8p4S0Bq1CQdTSr6H+glqD5iAoiiCaGpqLWkpe56mgRJ7Luedzv/eew73ngjWcVjJ6kxsy2ZwWCvici0vLzpZXHNjpxktzRNHVybm5IA3t6wGLGe+GzFqNz/1rbbG4roClVXhCUbWc8LRwcCOnmrwr3K2kIjHhc2GXJhcUvjf1aIXfTE5W+MdkLRzyg7VT2Jms42gdKyktIywvpz+TzivV+5gvccSzC/MS+8R70QkRwIeTGabwM8oI4zKPMoSHYVnRIN9dzp9lXXIVmVUKaKyRJEUOl6h5qR6XmBA9LiNNwez/377qCa+nUt3hg+YXw/gYgJYdKBUN4/vYMEonYHuGq2wtf/0Ixj5FL9a0/kPo2IKL65oW3YPLbeh5UiNapCzZxK2JBLyfQfsSdN2CfaXSs+o+p48Q3pSvuoH9AxiU8x2rv0tEZ9l/1uq6AAAACXBIWXMAABYlAAAWJQFJUiTwAAABnUlEQVRYhe3Y3WoTQRiA4SdrIIjWAykK0jO9AhsDPbXX5i34f+R1WI8F2ysQqyIUUfHQH2KzHkwWNkM2Oxs3mxX6wkAmmW/yZjLzzc4MLGeCQ4yxj1sV7Vaxhy+l+iec43hejvCmrpOreIK8hXIj6vtz9PkMD3GlSuYe3rckkyJUlHe4G8vs4EOLMk2ECqmFkXraskxToVz4+8DBBmTWEZphkgmrqQ8McJgJS7sv7PdNaDzULOlN8T2x7Syqf02IuVQEpkzSF0Li3DgpQufY7UImVehnVzLDf4iN80zMN4vzaBdZSsfrjNAoIaZpYswxTTLukguhOi6E6uid0BBvha1/Fb+jej6PW8WfdaW64v/MQ11xU9iga0doiDsJHRYng4IBbifK7OGBxAU0EPayukn9C5dL9dH8vbaZZjjbQMfrcpbhZNsWJU4y4eDfF44zvNy2RYmj4sVz7T+gNS2Pyl9wDR+3KHRqyYlmovoGZJNCp8Kl2FJ28KxDocfxyFQlxAPcF47ZY1y3eH8zwo+qX1VBLuS84krvFV7Hjf4CFFhoPoRofY8AAAAASUVORK5CYII=" icon_bsp="iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAFV2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM2IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMzYiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIzNiIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMzYiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjE0NC4wIgogICB0aWZmOllSZXNvbHV0aW9uPSIxNDQuMCIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0xMi0xMFQyMTo1NTowNCswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0xMi0xMFQyMTo1NTowNCswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+eWFiYWk8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5IERlc2lnbmVyIChOb3YgIDYgMjAyMCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjAtMTItMTBUMjE6NTU6MDQrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/PkIkmukAAAGBaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2pRmFFQQ0ODRDVZmELUEqSEBRJhBv1a9PkrUHu8p4S0Bq1CQdTSr6H+glqD5iAoiiCaGpqLWkpe56mgRJ7Luedzv/eew73ngjWcVjJ6kxsy2ZwWCvici0vLzpZXHNjpxktzRNHVybm5IA3t6wGLGe+GzFqNz/1rbbG4roClVXhCUbWc8LRwcCOnmrwr3K2kIjHhc2GXJhcUvjf1aIXfTE5W+MdkLRzyg7VT2Jms42gdKyktIywvpz+TzivV+5gvccSzC/MS+8R70QkRwIeTGabwM8oI4zKPMoSHYVnRIN9dzp9lXXIVmVUKaKyRJEUOl6h5qR6XmBA9LiNNwez/377qCa+nUt3hg+YXw/gYgJYdKBUN4/vYMEonYHuGq2wtf/0Ixj5FL9a0/kPo2IKL65oW3YPLbeh5UiNapCzZxK2JBLyfQfsSdN2CfaXSs+o+p48Q3pSvuoH9AxiU8x2rv0tEZ9l/1uq6AAAACXBIWXMAABYlAAAWJQFJUiTwAAABrUlEQVRYhe2Yu07DMBSGv5pKIJUyMLKAuG0stFRipc/AI/A0iJWLQDwJZUaiFQMLEqIFhj4AIBgaCIMTlFpObAe3RBWfdKT6dvzXPj6JU0JPA2gCdaAGLCTaVoHnRPkeWEzxo9IH2pG1gGvTgFngBAgzTJ28Z+ifZl/AIVBJE7Nl6dyXoNgegE1VTBV4tHTgW1AsqgIgIqcHmolsCXOOS7IM7MeFbdz+zZLirOs4PiumGgJ5mopACWgK5NEuCjUfgnzEUEy9zHDSs6GklD+Ad8u+prb5sqMYHRt4XCVh7jJeCifIx5bNpNRnbWNaW5hHkBqMt8BKDj86gsJt2UQK8pkYcwnKSna/ZiK3zCs+8lAADJQ6XVzZ1AUgX4xcXqTUnDNtr93Mf1Cb8BFDUyl+dCtprPMh6AZY9+AHYCCQ11sXRhlDfQF0RjiBKx2BvPgXhbYALv5aRYJW/OMM+8S4pji5cxibZUdJp3PAk+VA9UT5ENRFfgr6SYwvwG4katz0ornfdI1V4JTxrdAx0crEqInxFdgDzoEd5DW7Tvbt9hP5gDYRMvxJ7xK4Ujt9AwxB+Qb5cgEhAAAAAElFTkSuQmCC" icon_stack="iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAYAAADhAJiYAAAFV2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS41LjAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iCiAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIKICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgZXhpZjpQaXhlbFhEaW1lbnNpb249IjM2IgogICBleGlmOlBpeGVsWURpbWVuc2lvbj0iMzYiCiAgIGV4aWY6Q29sb3JTcGFjZT0iMSIKICAgdGlmZjpJbWFnZVdpZHRoPSIzNiIKICAgdGlmZjpJbWFnZUxlbmd0aD0iMzYiCiAgIHRpZmY6UmVzb2x1dGlvblVuaXQ9IjIiCiAgIHRpZmY6WFJlc29sdXRpb249IjE0NC4wIgogICB0aWZmOllSZXNvbHV0aW9uPSIxNDQuMCIKICAgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIKICAgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIgogICB4bXA6TW9kaWZ5RGF0ZT0iMjAyMC0xMi0xMFQyMTo1NDo0OCswMTowMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMC0xMi0xMFQyMTo1NDo0OCswMTowMCI+CiAgIDxkYzp0aXRsZT4KICAgIDxyZGY6QWx0PgogICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+eWFiYWk8L3JkZjpsaT4KICAgIDwvcmRmOkFsdD4KICAgPC9kYzp0aXRsZT4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0icHJvZHVjZWQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFmZmluaXR5IERlc2lnbmVyIChOb3YgIDYgMjAyMCkiCiAgICAgIHN0RXZ0OndoZW49IjIwMjAtMTItMTBUMjE6NTQ6NDgrMDE6MDAiLz4KICAgIDwvcmRmOlNlcT4KICAgPC94bXBNTTpIaXN0b3J5PgogIDwvcmRmOkRlc2NyaXB0aW9uPgogPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KPD94cGFja2V0IGVuZD0iciI/Ph5oz2oAAAGBaUNDUHNSR0IgSUVDNjE5NjYtMi4xAAAokXWRv0tCURTHP2pRmFFQQ0ODRDVZmELUEqSEBRJhBv1a9PkrUHu8p4S0Bq1CQdTSr6H+glqD5iAoiiCaGpqLWkpe56mgRJ7Luedzv/eew73ngjWcVjJ6kxsy2ZwWCvici0vLzpZXHNjpxktzRNHVybm5IA3t6wGLGe+GzFqNz/1rbbG4roClVXhCUbWc8LRwcCOnmrwr3K2kIjHhc2GXJhcUvjf1aIXfTE5W+MdkLRzyg7VT2Jms42gdKyktIywvpz+TzivV+5gvccSzC/MS+8R70QkRwIeTGabwM8oI4zKPMoSHYVnRIN9dzp9lXXIVmVUKaKyRJEUOl6h5qR6XmBA9LiNNwez/377qCa+nUt3hg+YXw/gYgJYdKBUN4/vYMEonYHuGq2wtf/0Ixj5FL9a0/kPo2IKL65oW3YPLbeh5UiNapCzZxK2JBLyfQfsSdN2CfaXSs+o+p48Q3pSvuoH9AxiU8x2rv0tEZ9l/1uq6AAAACXBIWXMAABYlAAAWJQFJUiTwAAABOUlEQVRYhe2Y20oDMRBAT0LftD4X/QtbF/pq/7FeP8X6LNh+gtWCrR+x4vowG8im2ZZizaTQAwPLbBbO5jKQMcQpgBEwAPrAecu4XVkB0zomwOu2D06BO6BKED/AGDhpk7kC3hPJ+PEGXIYyXeBDQcaXaszUvaKMi7GTGWYg4/ZUYZHTlAMGGFnkaOdC3wCfwIW2Sc3CIGtntE1qSqttEGA6wBcyQ7EgQb5ptJf/+jsbJY/4GKBHvHLyj/mNQprHPhQtO0oijrWNnFsdyk/Ibeq2dxq5I4eFAZasr2WseKXIldqFMeQ7t2NfWeR6mwsrC8y0LTxmFrn458LUAk/aFh4T9/CI/s31xjc7AxaKMnOkFdSgQKcDMkeaYlG6wENCmdtwZtoq9BC4Ru79A/bT0qtotvSegZdw0C+bhla1WySLHAAAAABJRU5ErkJggg==" fi else # Check if theme directory exists if [ -d "${icon_path}" ]; then ## Load light or dark icons if [ "${macos_darkmode}" == "Dark" ]; then icon_float=$(enc_icon ${icon_path}/float_dark.png) icon_bsp=$(enc_icon ${icon_path}/bsp_dark.png) icon_stack=$(enc_icon ${icon_path}/stack_dark.png) else icon_float=$(enc_icon ${icon_path}/float_light.png) icon_bsp=$(enc_icon ${icon_path}/bsp_light.png) icon_stack=$(enc_icon ${icon_path}/stack_light.png) fi else echo "Theme directory ${icon_path} not found." && exit 1 fi fi ## Output base64 icons icon() { case $1 in float) echo ${icon_float} ;; bsp) echo ${icon_bsp} ;; stack) echo ${icon_stack} ;; esac } #### #### Output below #### ## Menubar echo "${space_id}|templateImage=$(icon ${space_mode})" ## Dropdown menu echo "---" ## Modes echo "Select mode for current space" for mode in ${yabai_modes}; do if [[ ${space_mode} = ${mode} ]]; then echo "${mode} | image=$(icon ${mode})" else echo "${mode} | image=$(icon ${mode}) terminal=false bash=yabai param1=-m param2=space param3=--layout param4=${mode}" fi done echo "---" ## Spaces echo "Spaces" d=0; while [ ${d} -ne ${yabai_displays} ]; do d=$((d+1)) display_spaces=$(yabai -m query --spaces --display $d | jq '.[].index') if ! [ ${yabai_displays} == 1 ]; then echo "Display $d" fi for s in ${display_spaces}; do space_label=$(yabai -m query --spaces --space $s --display $d | jq -r '.label') space_label="${space_label:-Unnamed}" if [[ ${s} = ${space_id} ]]; then echo "--$s: ${space_label} | image=$(icon $(yabai -m query --spaces --space $s --display | jq -r '.type')) checked=true" else echo "--$s: ${space_label} | image=$(icon $(yabai -m query --spaces --space $s --display | jq -r '.type')) terminal=false bash=yabai param1=-m param2=space param3=--focus param4=$s" fi done done echo "---" ## Services echo "Services" echo "--Restart yabai | bash='$0' param1=restart terminal=false" echo "--Stop yabai | bash='$0' param1=stop terminal=false"