From 91cdbd9be0d677c8a832e85de9d55aecf2c236fd Mon Sep 17 00:00:00 2001 From: zachir Date: Sun, 9 Oct 2022 01:10:41 -0500 Subject: initialize repo --- waybar-dwl.sh | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100755 waybar-dwl.sh (limited to 'waybar-dwl.sh') diff --git a/waybar-dwl.sh b/waybar-dwl.sh new file mode 100755 index 0000000..0d0312d --- /dev/null +++ b/waybar-dwl.sh @@ -0,0 +1,176 @@ +#!/usr/bin/env bash +# +# wayar-dwl.sh - display dwl tags, layout, and active title +# Based heavily upon this script by user "novakane" (Hugo Machet) used to do the same for yambar +# https://codeberg.org/novakane/yambar/src/branch/master/examples/scripts/dwl-tags.sh +# +# USAGE: waybar-dwl.sh MONITOR COMPONENT +# "COMPONENT" is an integer representing a dwl tag OR "layout" OR "title" +# +# REQUIREMENTS: +# - inotifywait ( 'inotify-tools' on arch ) +# - Launch dwl with `dwl > ~.cache/dwltags` or change $fname +# +# Now the fun part +# +### Example ~/.config/waybar/config +# +# { +# "modules-left": ["custom/dwl_tag#0", "custom/dwl_tag#1", "custom/dwl_tag#2", "custom/dwl_tag#3", "custom/dwl_tag#4", "custom/dwl_tag#5", "custom/dwl_layout", "custom/dwl_title"], +# // The empty '' argument used in the following "exec": fields works for single-monitor setups +# // For multi-monitor setups, see https://github.com/Alexays/Waybar/wiki/Configuration +# // and enter the monitor id (like "eDP-1") as the first argument to waybar-dwl.sh +# "custom/dwl_tag#0": { +# "exec": "/path/to/waybar-dwl.sh '' 0", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_tag#1": { +# "exec": "/path/to/waybar-dwl.sh '' 1", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_tag#2": { +# "exec": "/path/to/waybar-dwl.sh '' 2", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_tag#3": { +# "exec": "/path/to/waybar-dwl.sh '' 3", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_tag#4": { +# "exec": "/path/to/waybar-dwl.sh '' 4", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_tag#5": { +# "exec": "/path/to/waybar-dwl.sh '' 5", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_tag#6": { +# "exec": "/path/to/waybar-dwl.sh '' 6", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_tag#7": { +# "exec": "/path/to/waybar-dwl.sh '' 7", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_tag#8": { +# "exec": "/path/to/waybar-dwl.sh '' 8", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_tag#9": { +# "exec": "/path/to/waybar-dwl.sh '' 9", +# "format": "{}", +# "return-type": "json" +# }, +# "custom/dwl_layout": { +# "exec": "/path/to/waybar-dwl.sh '' layout", +# "format": "{}", +# "escape": true, +# "return-type": "json" +# }, +# "custom/dwl_title": { +# "exec": "/path/to/waybar-dwl.sh '' title", +# "format": "{}", +# "escape": true, +# "return-type": "json" +# } +# } +# +### Example ~/.config/waybar/style.css +# #custom-dwl_layout { +# color: #EC5800 +# } +# +# #custom-dwl_title { +# color: #017AFF +# } +# +# #custom-dwl_tag { +# color: #875F00 +# } +# +# #custom-dwl_tag.selected { +# color: #017AFF +# } +# +# #custom-dwl_tag.urgent { +# background-color: #FF0000 +# } +# +# #custom-dwl_tag.active { +# border-top: 1px solid #EC5800 +# } + +# Variables +declare output title layout activetags selectedtags +declare -a tags name +readonly fname="$HOME"/.cache/dwltags + +tags=( "1" "2" "3" "4" "5" "6" "7" "8" "9" ) +name=( "1" "2" "3" "4" "5" "6" "7" "8" "9" ) # Array of labels for tags + +monitor="${1}" +component="${2}" + +_cycle() { + case "${component}" in + [012345678]) + this_tag="${component}" + unset this_status + mask=$((1</dev/null; then this_status+='"active",' ; fi + if (( "${selectedtags}" & mask )) 2>/dev/null; then this_status+='"selected",'; fi + if (( "${urgenttags}" & mask )) 2>/dev/null; then this_status+='"urgent",' ; fi + + if [[ "${this_status}" ]]; then + printf -- '{"text":" %s ","class":[%s]}\n' "${name[this_tag]}" "${this_status}" + else + printf -- '{"text":" %s "}\n' "${name[this_tag]}" + fi + ;; + layout) + printf -- '{"text":" %s "}\n' "${layout}" + ;; + title) + printf -- '{"text":"%s"}\n' "${title}" + ;; + *) + printf -- '{"text":"INVALID INPUT"}\n' + ;; + esac +} + +while [[ -n "$(pgrep waybar)" ]] ; do + + [[ ! -f "${fname}" ]] && printf -- '%s\n' \ + "You need to redirect dwl stdout to ~/.cache/dwltags" >&2 + + # Get info from the file + output="$(grep "${monitor}" "${fname}" | tail -n6)" + title="$(echo "${output}" | grep '^[[:graph:]]* title' | cut -d ' ' -f 3- | sed s/\"/“/g )" # Replace quotes - prevent waybar crash + layout="$(echo "${output}" | grep '^[[:graph:]]* layout' | cut -d ' ' -f 3- )" + #selmon="$(echo "${output}" | grep 'selmon')" + + # Get the tag bit mask as a decimal + activetags="$(echo "${output}" | grep '^[[:graph:]]* tags' | awk '{print $3}')" + selectedtags="$(echo "${output}" | grep '^[[:graph:]]* tags' | awk '{print $4}')" + urgenttags="$(echo "${output}" | grep '^[[:graph:]]* tags' | awk '{print $6}')" + + _cycle + + # 60-second timeout keeps this from becoming a zombified process when waybar is no longer running + inotifywait -t 60 -qq --event modify "${fname}" + +done + +unset -v activetags layout name output selectedtags tags title + -- cgit v1.2.3