54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/sh
 | |
| 
 | |
| # Shows the price for desired cryptocurrencies. Module updates automatically
 | |
| # every calendar day, but can also be updated with a middle click.
 | |
| 
 | |
| # Currencies should be ;-separated:
 | |
| # human-readable name;urlname;icon
 | |
| coins="Bitcoin;btc;💰
 | |
| Etherium;eth;🍸
 | |
| Basic Attention Token;bat;🦁
 | |
| LBC;lbc;📚"
 | |
| 
 | |
| # Directory where currency info is stored.
 | |
| dir="${XDG_DATA_HOME:-$HOME/.local/share}/crypto-prices"
 | |
| 
 | |
| getprices() { # The command to get the desired prices
 | |
| 	printf "🔃 "; printprices
 | |
| 	{ rm -rf "${dir:?}/*"
 | |
| 	echo "$coins" | while IFS=';' read -r human web icon; do
 | |
| 		val="$(curl -s "rate.sx/1$web")" &&
 | |
| 		echo "$icon;$val;$human" > "$dir/$web"
 | |
| 	done; [ -d "$dir" ] && touch "$dir"
 | |
| 	pkill -RTMIN+13 "${STATUSBAR:-dwmblocks}" ;} &
 | |
| 	exit
 | |
| 	}
 | |
| 
 | |
| printprices() { # Print/format all prices
 | |
| 	for x in "$dir"/*; do
 | |
| 		[ -f "$x" ] || break
 | |
| 		info="$(cut -d';' -f-2 --output-delimiter=' ' "$x")"
 | |
| 		printf "%s $%0.2f " $info
 | |
| 	done | sed 's/ $//'
 | |
| 	}
 | |
| 
 | |
| [ ! -d "$dir" ] && mkdir -p "$dir" && { getprices; exit ;}
 | |
| 
 | |
| # If currencies haven't been updated today, try to update them.
 | |
| [ "$(stat -c %x "$HOME/.local/share/crypto-prices" | cut -d' ' -f1)" != "$(date '+%Y-%m-%d')" ] &&
 | |
| 	{ ping -q -c 1 1.1.1.1 >/dev/null 2>&1 && getprices || exit ;}
 | |
| 
 | |
| case $BLOCK_BUTTON in
 | |
| 	1) uptime="$(date -d "$(stat -c %x "$dir")" '+%D at %T' | sed "s|$(date '+%D')|Today|")"
 | |
| 		notify-send "Exact prices in USD" "$(awk -F';' '{print $1, $3 ":\n\t$" $2}' "$dir"/*)
 | |
| <b>Last updated:</b>
 | |
| 	$uptime" ;;
 | |
| 	2) getprices ;;
 | |
| 	3) notify-send "💸 Crypto-currency module" "\- Left click for exact prices.
 | |
| - Middle click to update.
 | |
| - Shows 🔃 if updating prices.
 | |
| - Manually add/remove currencies to list in the script." ;;
 | |
| esac
 | |
| 
 | |
| printprices
 |