Add community scripts for i3blocks
This commit is contained in:
parent
3233439d88
commit
3236629420
|
@ -0,0 +1,18 @@
|
||||||
|
# i3-blocks-contrib
|
||||||
|
|
||||||
|
A collection of useful blocks for [i3blocks](https://github.com/vivien/i3blocks), for the amazing [i3](https://i3wm.org) window manager.
|
||||||
|
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
Some examples on how to configure these in your `i3blocks` config file:
|
||||||
|
|
||||||
|
- @rosshadden's [i3blocks.conf](https://github.com/rosshadden/dotfiles/blob/master/src/.config/i3/i3blocks.conf)
|
||||||
|
- @oppenlander's [i3blocks.conf](https://github.com/oppenlander/dotfiles/blob/master/i3/i3blocks.conf)
|
||||||
|
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
As hinted by the name, this is intended to be openly contributed to by the community.
|
||||||
|
There is no official contributing guide, but please try to fit in to the style and themes found in our existing blocks.
|
||||||
|
We use a somewhat ad-hock [YUIDoc](http://yui.github.io/yuidoc/) documentation syntax.
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows bandwidth
|
||||||
|
#
|
||||||
|
# @param {String(tx|rx)} type: The bandwidth type to check
|
||||||
|
# @return {Number(kB/s)}: Speed of the interface
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
type=$BLOCK_INSTANCE
|
||||||
|
|
||||||
|
file=/tmp/i3blocks_bandwidth_$type
|
||||||
|
touch $file
|
||||||
|
|
||||||
|
prev=$(cat $file)
|
||||||
|
cur=0
|
||||||
|
|
||||||
|
netdir=/sys/class/net
|
||||||
|
for iface in $(ls -1 $netdir); do
|
||||||
|
# Skip the loopback interface
|
||||||
|
if [ "$iface" == "lo" ]; then continue; fi
|
||||||
|
|
||||||
|
f=$netdir/$iface/statistics/${type}_bytes
|
||||||
|
n=$(cat $f)
|
||||||
|
cur=$(expr $cur + $n)
|
||||||
|
done
|
||||||
|
|
||||||
|
delta=$(calc "$cur - $prev")
|
||||||
|
echo "$(calc "$delta / 1000") kB/s"
|
||||||
|
|
||||||
|
# store result
|
||||||
|
echo $cur > $file
|
|
@ -0,0 +1,42 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows info about connected batteries.
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - acpi
|
||||||
|
#
|
||||||
|
# @return {Number(%)}: Current battery charge
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
# Exit if no battery was found
|
||||||
|
if [ "$(acpi)" == "" ]; then exit 0; fi
|
||||||
|
|
||||||
|
state=$(acpi | sed -n 's/Battery [0-9]: \([A-Z]\).*, .*/\1/p')
|
||||||
|
chg=$(acpi | sed -n 's/Battery [0-9]:.*, \([0-9]\{1,3\}\)%.*/\1/p')
|
||||||
|
|
||||||
|
# Charging or Unknown
|
||||||
|
if [ $state = "C" ] || [ $state = "U" ]; then
|
||||||
|
icon=""
|
||||||
|
else
|
||||||
|
if [ $chg -le 10 ]; then
|
||||||
|
icon=""
|
||||||
|
status=33
|
||||||
|
else
|
||||||
|
icon=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
full="$icon $chg%"
|
||||||
|
short="$chg%"
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
|
@ -0,0 +1,44 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows AUR packages that need updated.
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - checkupdates
|
||||||
|
# - bauerbill
|
||||||
|
# - [notify-send]
|
||||||
|
#
|
||||||
|
# @return {Number}: Outdated packages
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname "$0")
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
archPackages=$(checkupdates)
|
||||||
|
allPackages=$(bauerbill -Quq --aur)
|
||||||
|
numArchPackages=$(numLines "$archPackages")
|
||||||
|
numAllPackages=$(numLines "$allPackages")
|
||||||
|
numAurPackages=$(calc "$numAllPackages - $numArchPackages")
|
||||||
|
|
||||||
|
if [ "$numAllPackages" -le "$numArchPackages" ]; then
|
||||||
|
numAurPackages=$numAllPackages
|
||||||
|
fi
|
||||||
|
|
||||||
|
full=$numAurPackages
|
||||||
|
short=$full
|
||||||
|
|
||||||
|
case $BLOCK_BUTTON in
|
||||||
|
# right click: show packages
|
||||||
|
3)
|
||||||
|
aurPackages=$(diff -y <(echo "$archPackages") <(echo "$allPackages") | awk -p '{ print $3 }')
|
||||||
|
notify-send "AUR packages" "$aurPackages"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows current brightness
|
||||||
|
#
|
||||||
|
# dependencies:
|
||||||
|
# - xbacklight
|
||||||
|
#
|
||||||
|
# @return {Number}: Current brightness
|
||||||
|
################################
|
||||||
|
|
||||||
|
case $BLOCK_BUTTON in
|
||||||
|
# right click
|
||||||
|
# set to `20
|
||||||
|
3) xbacklight -set 20 ;;
|
||||||
|
|
||||||
|
# scroll up
|
||||||
|
# raise brightness
|
||||||
|
4) xbacklight -inc 10 ;;
|
||||||
|
|
||||||
|
# scroll down
|
||||||
|
# lower brightness
|
||||||
|
5) xbacklight -dec 10 ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
printf "%.0f" "$(xbacklight -get)"
|
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows info about the CPU
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - [notify-send]
|
||||||
|
#
|
||||||
|
# @return {Number(%)}: CPU usage
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
read cpu a b c previdle rest < /proc/stat
|
||||||
|
prevtotal=$(calc "$a + $b + $c + $previdle")
|
||||||
|
sleep 0.5
|
||||||
|
read cpu a b c idle rest < /proc/stat
|
||||||
|
total=$(calc "$a + $b + $c + $idle")
|
||||||
|
|
||||||
|
CPU=$(calc "100 * (($total - $prevtotal) - ($idle - $previdle)) / ($total - $prevtotal)")
|
||||||
|
|
||||||
|
full="$CPU%"
|
||||||
|
short=$full
|
||||||
|
|
||||||
|
if [ $CPU -ge 90 ]; then
|
||||||
|
status=33
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $BLOCK_BUTTON in
|
||||||
|
|
||||||
|
# right click: show packages
|
||||||
|
3)
|
||||||
|
n=16
|
||||||
|
summary=$(ps -eo pcpu,pmem,pid,comm --sort=-pcpu | head -$n)
|
||||||
|
notify-send "Top $n CPU-eaters" "$summary"
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows current date
|
||||||
|
#
|
||||||
|
# @param {String} format: The format of the date
|
||||||
|
# @return {Date}: Current date
|
||||||
|
################################
|
||||||
|
|
||||||
|
format=${BLOCK_INSTANCE:-"%Y-%m-%d"}
|
||||||
|
|
||||||
|
date +"$format"
|
||||||
|
date +"%m-%d"
|
|
@ -0,0 +1,68 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows info about a specified mount point
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - [notify-send]
|
||||||
|
#
|
||||||
|
# @param {String} disk: The mount point to check
|
||||||
|
# @return {Number(%)}: Space used on the disk
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
disks=$(lsblk | tail -n +2 | awk '{ print $7 }' | sed '/^\s*$/d' | sort)
|
||||||
|
let numDisks=$(echo "$disks" | wc -l)
|
||||||
|
let diskNum=$(getCache 1)
|
||||||
|
|
||||||
|
getDisk() {
|
||||||
|
echo "$disks" | sed -n "$diskNum p"
|
||||||
|
}
|
||||||
|
disk=$(getDisk)
|
||||||
|
|
||||||
|
case $BLOCK_BUTTON in
|
||||||
|
# right click: show details
|
||||||
|
# TODO: fix
|
||||||
|
3)
|
||||||
|
local summary=$(du -h --max-depth=1 $disk)
|
||||||
|
notify-send "Disk usage" "$summary"
|
||||||
|
;;
|
||||||
|
# scroll up: cycle disks
|
||||||
|
4)
|
||||||
|
diskNum=$[$(getCache) - 1]
|
||||||
|
if (( diskNum <= 0 )); then
|
||||||
|
diskNum=$numDisks
|
||||||
|
fi
|
||||||
|
setCache $diskNum
|
||||||
|
disk=$(getDisk)
|
||||||
|
;;
|
||||||
|
5)
|
||||||
|
# scroll down: cycle disks
|
||||||
|
diskNum=$[$(getCache) + 1]
|
||||||
|
if (( diskNum >= numDisks + 1 )); then
|
||||||
|
diskNum=1
|
||||||
|
fi
|
||||||
|
setCache $diskNum
|
||||||
|
disk=$(getDisk)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
usage=$(df -h $disk | sed -n '2 p')
|
||||||
|
usage=($usage)
|
||||||
|
|
||||||
|
if [ ${usage[4]%?} -ge 90 ]; then
|
||||||
|
status=33
|
||||||
|
fi
|
||||||
|
|
||||||
|
full="$disk ${usage[4]}"
|
||||||
|
short="$full"
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows current keyboard layout.
|
||||||
|
# Allows layout toggling.
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - [Ross' key script](https://github.com/rosshadden/dotfiles/blob/master/src/lib/keys.sh)
|
||||||
|
#
|
||||||
|
# @return {String}: Current keyboard layout
|
||||||
|
################################
|
||||||
|
|
||||||
|
keys=$HOME/bin/keys
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
case $BLOCK_BUTTON in
|
||||||
|
# right click: toggle key variant
|
||||||
|
3) $keys toggle ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
layout=$($keys get)
|
||||||
|
|
||||||
|
full=$layout
|
||||||
|
short=${layout:0:1}
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
|
@ -0,0 +1,46 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows info about the RAM
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - [notify-send]
|
||||||
|
#
|
||||||
|
# @return {Number(%)}: RAM usage
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
exec 6< /proc/meminfo
|
||||||
|
read a total b <&6
|
||||||
|
read a free b <&6
|
||||||
|
read a b c <&6
|
||||||
|
read a buffer b <&6
|
||||||
|
read a cached b <&6
|
||||||
|
|
||||||
|
MEM=$(calc "100 * ($total - ($free + $buffer + $cached)) / $total")
|
||||||
|
|
||||||
|
full="$MEM%"
|
||||||
|
short=$full
|
||||||
|
|
||||||
|
if [ $MEM -ge 80 ]; then
|
||||||
|
status=33
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $BLOCK_BUTTON in
|
||||||
|
# right click: show packages
|
||||||
|
3)
|
||||||
|
n=16
|
||||||
|
summary=$(ps -eo pmem,pcpu,pid,comm --sort=-pmem | head -$n)
|
||||||
|
notify-send "Top $n RAM-eaters" "$summary"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
|
@ -0,0 +1,38 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows info from media players.
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - mpc
|
||||||
|
#
|
||||||
|
# @return {String}: Current media info
|
||||||
|
################################
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
format=${BLOCK_INSTANCE:-'[[%artist% - ]%title%[ \[%album%\]]]|[%file%]'}
|
||||||
|
|
||||||
|
current=$(mpc current)
|
||||||
|
currentLong=$(mpc current -f "$format")
|
||||||
|
state=playing
|
||||||
|
|
||||||
|
if [[ "$current" ]]; then
|
||||||
|
# Make icon mapping
|
||||||
|
declare -A icons
|
||||||
|
icons["playing"]=""
|
||||||
|
icons["paused"]=""
|
||||||
|
icons["stopped"]=""
|
||||||
|
|
||||||
|
# Determine which icon to use
|
||||||
|
icon=${icons[$state]}
|
||||||
|
|
||||||
|
full="$currentLong $icon"
|
||||||
|
short="$current $icon"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$full"
|
||||||
|
echo "$short"
|
||||||
|
exit "$status"
|
|
@ -0,0 +1,36 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows IP address of a given interface
|
||||||
|
#
|
||||||
|
# @param {String} interface: The network interface to check
|
||||||
|
# @return {String(IP)}: IP address of the interface
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source "$dir/util.sh"
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
interface=${BLOCK_INSTANCE:-eth0}
|
||||||
|
|
||||||
|
netPath=/sys/class/net
|
||||||
|
interfacePath=$(echo $netPath/$interface)
|
||||||
|
# Expand wildcard interfaces
|
||||||
|
interface=${interfacePath#$netPath/}
|
||||||
|
|
||||||
|
state=$(cat $interfacePath/operstate)
|
||||||
|
|
||||||
|
if [ $state == "up" ]; then
|
||||||
|
ips=$(ip addr show $interface | perl -n -e'/inet (.+)\// && print $1')
|
||||||
|
ip=${ips:-0.0.0.0}
|
||||||
|
|
||||||
|
full=$ip
|
||||||
|
short=$full
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$full"
|
||||||
|
echo "$short"
|
||||||
|
exit $status
|
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows pacman packages that need updated.
|
||||||
|
#
|
||||||
|
# dependencies:
|
||||||
|
# - checkupdates
|
||||||
|
# - [notify-send]
|
||||||
|
#
|
||||||
|
# @return {Number}: Outdated packages
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname "$0")
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
packages=$(checkupdates)
|
||||||
|
numPackages=$(numLines "$packages")
|
||||||
|
|
||||||
|
full=$numPackages
|
||||||
|
short=$full
|
||||||
|
|
||||||
|
echo "$full"
|
||||||
|
echo "$short"
|
||||||
|
|
||||||
|
case $BLOCK_BUTTON in
|
||||||
|
# right click: show packages
|
||||||
|
3) notify-send "Pacman packages" "$packages" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit $status
|
|
@ -0,0 +1,50 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows info from media players.
|
||||||
|
#
|
||||||
|
# TODO: make output format configurable
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - playerctl
|
||||||
|
#
|
||||||
|
# @return {String}: Current media info
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
# Exit if no player found
|
||||||
|
players=$(playerctl -l)
|
||||||
|
if [[ ! $players ]]; then exit 0; fi
|
||||||
|
|
||||||
|
artist=$(playerctl metadata artist)
|
||||||
|
title=$(playerctl metadata title)
|
||||||
|
album=$(playerctl metadata album)
|
||||||
|
state=$(playerctl status)
|
||||||
|
|
||||||
|
if [[ "$title" ]]; then
|
||||||
|
# Make icon mapping
|
||||||
|
declare -A icons
|
||||||
|
icons["Playing"]=""
|
||||||
|
icons["Paused"]=""
|
||||||
|
icons["Stopped"]=""
|
||||||
|
|
||||||
|
# Determine which icon to use
|
||||||
|
icon=${icons[$state]}
|
||||||
|
|
||||||
|
full="$title"
|
||||||
|
if [[ "$artist" ]]; then full="$artist - $full"; fi
|
||||||
|
|
||||||
|
short="$full $icon"
|
||||||
|
if [[ "$album" ]]; then full="$full [$album]"; fi
|
||||||
|
full="$full $icon"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
|
@ -0,0 +1,71 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows info about sound/volume.
|
||||||
|
# Allows simple volume controls.
|
||||||
|
#
|
||||||
|
# Thanks to [@EliteTK](https://gist.github.com/EliteTK/36d061fa24372fb70312),
|
||||||
|
# for the big speed gain when switching to `ponymix`
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - ponymix
|
||||||
|
# - ttf-font-icons
|
||||||
|
#
|
||||||
|
# @return {Number}: Current volume
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
step=${BLOCK_INSTANCE:-5}
|
||||||
|
|
||||||
|
getVolume() {
|
||||||
|
ponymix get-volume
|
||||||
|
}
|
||||||
|
|
||||||
|
isMuted() {
|
||||||
|
ponymix is-muted
|
||||||
|
}
|
||||||
|
|
||||||
|
case $BLOCK_BUTTON in
|
||||||
|
# right click
|
||||||
|
# mute/unmute
|
||||||
|
3) ponymix toggle >/dev/null ;;
|
||||||
|
|
||||||
|
# scroll up
|
||||||
|
# raise volume
|
||||||
|
4) ponymix increase $step >/dev/null ;;
|
||||||
|
|
||||||
|
# scroll down
|
||||||
|
# lower volume
|
||||||
|
5) ponymix decrease $step >/dev/null ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
vol=$(getVolume)
|
||||||
|
|
||||||
|
# level-based icon
|
||||||
|
if (( $vol == 0 )); then
|
||||||
|
icon=""
|
||||||
|
elif (( $vol < 34 )); then
|
||||||
|
icon=""
|
||||||
|
elif (( $vol < 67 )); then
|
||||||
|
icon=""
|
||||||
|
else
|
||||||
|
icon=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# determine mute status
|
||||||
|
if isMuted; then
|
||||||
|
status=33
|
||||||
|
fi
|
||||||
|
|
||||||
|
full="$icon $vol%"
|
||||||
|
short=$vol
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows current time
|
||||||
|
#
|
||||||
|
# @param {String} format: The format of the time
|
||||||
|
# @return {Time}: Current time
|
||||||
|
################################
|
||||||
|
|
||||||
|
format=${BLOCK_INSTANCE:-"%H:%M:%S"}
|
||||||
|
|
||||||
|
date +"$format"
|
||||||
|
date +"%H:%M"
|
|
@ -0,0 +1,41 @@
|
||||||
|
################################
|
||||||
|
# Calculates a given expression
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - bc
|
||||||
|
#
|
||||||
|
# @param {String} 1: The expression to calculate
|
||||||
|
# @return {Number}: The result of the expression
|
||||||
|
################################
|
||||||
|
calc() {
|
||||||
|
echo "$1" | bc
|
||||||
|
}
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Counts lines in text, accounting for empty values
|
||||||
|
#
|
||||||
|
# @param {String} 1: The input text
|
||||||
|
# @return {Number}: The number of lines
|
||||||
|
################################
|
||||||
|
numLines() {
|
||||||
|
if [[ "$1" == "" ]]; then
|
||||||
|
echo 0
|
||||||
|
else
|
||||||
|
echo "$1" | wc -l
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
cacheDir=".cache"
|
||||||
|
cacheFile="$cacheDir/i3-blocks-contrib-${BLOCK_NAME}"
|
||||||
|
|
||||||
|
if [[ -z $cacheDir ]]; then
|
||||||
|
mkdir $cacheDir
|
||||||
|
fi
|
||||||
|
|
||||||
|
getCache() {
|
||||||
|
cat $cacheFile || echo $1
|
||||||
|
}
|
||||||
|
|
||||||
|
setCache() {
|
||||||
|
echo "$1" > $cacheFile
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows info about the weather (in Cincinnati) from accuweather.com
|
||||||
|
#
|
||||||
|
# TODO: completely rewrite, probably using openweather APIs
|
||||||
|
# TODO: make location configurable
|
||||||
|
# TODO: make temperature unit configurable
|
||||||
|
#
|
||||||
|
# @return {Number(degrees Fahrenheit)}: Current temperature in Cincinnati
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
URL='http://www.accuweather.com/en/us/cincinnati-oh/45212/weather-forecast/350126'
|
||||||
|
SITE="$(curl -s "$URL")"
|
||||||
|
|
||||||
|
weather="$(echo "$SITE" | awk -F\' '/acm_RecentLocationsCarousel\.push/{print $13 }'| head -1)"
|
||||||
|
temp="$(echo "$SITE" | awk -F\' '/acm_RecentLocationsCarousel\.push/{print $10 }'| head -1)"
|
||||||
|
|
||||||
|
if [[ $weather == *thunder* || $weather == *Thunder* ]]; then
|
||||||
|
icon=""
|
||||||
|
else
|
||||||
|
if [[ $weather == *rain* || $weather == *Rain* ]]; then
|
||||||
|
icon=""
|
||||||
|
else
|
||||||
|
if [[ $weather == *snow* || $weather == *Snow* ]]; then
|
||||||
|
icon="❄"
|
||||||
|
else
|
||||||
|
if [[ $weather == *cloud* || $weather == *Cloud* ]]; then
|
||||||
|
icon=""
|
||||||
|
else
|
||||||
|
icon=""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
full="$icon $temp°"
|
||||||
|
short="$temp°"
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
|
@ -0,0 +1,44 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Shows AUR packages that need updated.
|
||||||
|
#
|
||||||
|
# Dependencies:
|
||||||
|
# - checkupdates
|
||||||
|
# - yaourt
|
||||||
|
# - [notify-send]
|
||||||
|
#
|
||||||
|
# @return {Number}: Outdated packages
|
||||||
|
################################
|
||||||
|
|
||||||
|
dir=$(dirname $0)
|
||||||
|
source $dir/util.sh
|
||||||
|
|
||||||
|
full=""
|
||||||
|
short=""
|
||||||
|
status=0
|
||||||
|
|
||||||
|
archPackages=$(checkupdates)
|
||||||
|
allPackages=$(yaourt -Quaq)
|
||||||
|
numArchPackages=$(numLines "$archPackages")
|
||||||
|
numAllPackages=$(numLines "$allPackages")
|
||||||
|
numAurPackages=$(calc "$numAllPackages - $numArchPackages")
|
||||||
|
|
||||||
|
if [ $numAllPackages -le $numArchPackages ]; then
|
||||||
|
numAurPackages=$numAllPackages
|
||||||
|
fi
|
||||||
|
|
||||||
|
full=$numAurPackages
|
||||||
|
short=$full
|
||||||
|
|
||||||
|
case $BLOCK_BUTTON in
|
||||||
|
# right click: show packages
|
||||||
|
3)
|
||||||
|
aurPackages=$(diff -y <(echo "$archPackages") <(echo "$allPackages") | awk -p '{ print $3 }')
|
||||||
|
notify-send "AUR packages" "$aurPackages"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo $full
|
||||||
|
echo $short
|
||||||
|
exit $status
|
Loading…
Reference in New Issue