about summary refs log blame commit diff
path: root/scripts/dwm-status
blob: 32cf87a5bcd0ac08d1ee0883a48d3d804f6b965a (plain) (tree)
1
2
3
4
5
6
7
8
9
         
 



                                                                              
         
 
              
         
             
 

                                                                                        
 



                              
          
 
 
















                                                                                                                                                                             
                                        








                                            
                           








                                            









                                                                               


                                       
 



                                                                     








                                                 
    

 










                                                                          
 



                          
                                                 
 
                                    
            
                                       



                                 
 
           
 
                                                   
 
                                         






                                                                                                            
                           
          





                                                                        

          





                                       

 

             
                                                       
 
                                    

                      
                         
            
             
                       


          
         

                                                                            








                                                                                                                                                                                          

                     
 
 
              

                                                                            

                                       
                                            
                                         
                                           


                                       
                     
 
 






                                                                     
 




















                                                                                                                                  
          








                                                                             
               


               


            




                 
               

                   
 
               
 
                                             
                                                       








                                                                               



               
 

                                                
                     



                                                                             
                
    
#!/bin/sh

# This script sets the statusbar with the xsetroot command at the end. Have it
# started by ~/.xinitrc or ~/.xprofile.

# Set the deliminter character.
delim="|"

internet=false
counter=0
updates_aur=0

checkinternet() {
	echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1

	if [ $? -eq 0 ]; then
		internet=true
	else
		internet=false
	fi
}

weather(){
	if [ "$internet" = true ]; then
		LOCATION=$(geolocate)
		LANG="en"
		UNITS="Metric"
		API_KEY="756edce7e9d4c385ef9499a53492678c"

		LOCATION_FORMATTED_2=$(echo $LOCATION | cut -d ':' -f2)
		LOCATION_FORMATTED_1=$(echo $LOCATION | cut -d ':' -f1)

		OUTPUT=$(curl -s "http://api.openweathermap.org/data/2.5/weather?lat=$LOCATION_FORMATTED_1&lon=$LOCATION_FORMATTED_2&lang=$LANG&appid=$API_KEY&units=$UNITS")
		STATUS=$(echo $OUTPUT | jq '.weather' | tr '[' ' ' | tr ']' ' ' | jq '.main' | sed 's/"//g')
		TEMP=$(echo $OUTPUT | jq '.main' | jq '.temp' | xargs printf "%.*f\n" 0)

		case $STATUS in
			"Clear" )
				echo "";;
			"Clouds" )	
				echo "摒";;
			"Rain" )
				echo "歹";;
			"Thunder" )
				echo "朗";;
			"Snow" )
				echo "流";;
			"Mist" )
				echo "敖";;
			* )
				echo "摒";;
		esac

		echo "$STATUS, "
		echo "$TEMP°C"
		echo "$delim"
	fi
}

setaurupdates(){
	if [ "$internet" = true ]; then
		if (( $counter % 30 == 0 )); then
  		if ! updates_aur=$(yay -Qum --devel 2> /dev/null | wc -l); then
    		updates_aur=0
  		fi
		fi
	fi
}

updates() {

	if [ "$internet" = true ]; then

  	if ! updates_arch=$(checkupdates 2> /dev/null | wc -l ); then
    	updates_arch=0
    fi

    updates=$(("$updates_arch" + "$updates_aur"))

    if [ "$updates" -gt 0 ]; then
    	echo " Updates: $updates"
    else
      echo " Updates: 0"
    fi

    echo $delim
  fi
}

todo() {
	command -v t >/dev/null 2>&1 &&
        echo "$(t | wc -l)" &&
        echo "$delim"
}

mail() {
	command -v neomutt >/dev/null 2>&1 &&
        du -a ~/Mail/INBOX/new/* 2>/dev/null | wc -l | sed 's/^/: /' &&
        echo "$delim"
}

tor() {

	icon_enabled="ﴣ"
	icon_disabled=""
	status=$(systemctl is-active tor.service)

	if [ "$status" == "active" ]
	then
	    echo "$icon_enabled $delim"
	else
	    echo "$icon_disabled"
	fi
}

network() {

	if grep -q wlan* "/proc/net/wireless"; then

		# Wifi quality percentage
		percentage=$(grep "^\s*w" /proc/net/wireless | awk '{ print "", int($3 * 100 / 70)}'| xargs)
		case $percentage in
			100|9[0-9]|8[0-9]|7[0-9])		  echo "" ;;
			6[0-9]|5[0-9]|4[0-9]|3[0-9])	echo "" ;;
			2[0-9]|1[0-9]|[0-9])	        echo "" ;;
		esac

		echo $delim
	fi
	
	if [ -d /sys/class/net/eth? ]; then
		if [ "$(cat /sys/class/net/eth?/carrier)" == "1" ]; then
			echo "" # 
			echo "$delim"
		fi
	fi

	if [ "$internet" = true ]; then
  	echo ""
		echo $delim
	else
    :
	fi
}

bluetooth() {

	status=$(systemctl is-active bluetooth.service)

	if [ "$status" == "active" ]
	then
	    echo ""
	    echo "$delim"
	else
	    :
	    #echo ""
	fi
}

volume(){
	# Get the volume of ALSA's master volume output.  Show an icon if or
	# not muted.
	active_sink=$(pacmd list-sinks | awk '/* index:/{print $3}')
	curStatus=$(pacmd list-sinks | grep -A 15 "index: $active_sink$" | awk '/muted/{ print $2}')
	volume=$(pacmd list-sinks | grep -A 15 "index: $active_sink$" | grep 'volume:' | grep -E -v 'base volume:' | awk -F : '{print $3}' | grep -o -P '.{0,3}%'| sed s/.$// | tr -d ' ')
	if [ "${curStatus}" = 'yes' ]
	then
			echo " $volume%"
	else
			echo " $volume%"
	fi

	echo "$delim"
}

temperature(){
	CPU_T=$(< /sys/devices/platform/coretemp.0/hwmon/hwmon0/temp2_input)
	CPU_TEMP=$(expr "$CPU_T" / 1000)

	if [ "$CPU_TEMP" -ge 70 ]; then
		echo "🔥  $CPU_TEMP°C"
	elif [ "$CPU_TEMP" -le 10 ]; then
		echo "  $CPU_TEMP°C"
	else
		echo " $CPU_TEMP°C"
	fi
	echo "$delim"
}

battery(){
	if [ -d /sys/class/power_supply/BAT? ]; then

		ac_adapter=$(cat /sys/class/power_supply/BAT?/status)
		if [ "$ac_adapter" == "Charging" ]; then
			echo ""
		fi

		# Will show all batteries with approximate icon for remaining power.
		for x in /sys/class/power_supply/BAT?/capacity;
		do
			case "$(cat $x)" in
				100)            echo ""            ;;
				9[0-9])	        echo " $(cat $x)%" ;;
				8[0-9]|7[0-9])	echo " $(cat $x)%" ;;
				6[0-9]|5[0-9])	echo " $(cat $x)%" ;;
				4[0-9]|3[0-9])	echo " $(cat $x)%" ;;
				2[0-9]|1[0-9])	if [ "$ac_adapter" == "Charging" ]; then
													echo " $(cat $x)%"
												else
													echo "   $(cat $x)%"
												fi ;;
				[0-9])	        if [ "$ac_adapter" == "Charging" ]; then
													echo " $(cat $x)%"
												else
													echo "   $(cat $x)%"
												fi ;;
			esac
			done && echo "$delim"
	fi
}

# Here is the (big) function that outputs the appearance of the statusbar. It
# can really be broken down into many submodules which I've commented and
# explained.
status() { \

	tor

	weather

	updates

	todo

	mail

	volume

	bluetooth

	network

	temperature

	battery

	# Date and time. FORMAT CORRECT NO PM
	echo " $(date '+%d-%m-%y (%a) |  %H:%M')"
	}

while :; do
	# So all that big status function was just a command that quicking gets
	# what we want to be the statusbar. This xsetroot command is what sets
	# it. Note that the tr command replaces newlines with spaces. This is
	# to prevent some weird issues that cause significant slowing of
	# everything in dwm. Note entirely sure of the cause, but again, the tr
	# command easily avoids it.

  checkinternet

  setaurupdates

	xsetroot -name "$(status | tr '\n' ' ')"

	((counter++))

	# Sleep for a minute after changing the status bar before updating it
	# again. Note that the `refbar` "refreshes" the statusbar by killing
	# this command. Feel free to change the time interval if you want.
	sleep 1s
done