{ pkgs }: let unstable = import {}; spotify_info = unstable.writers.writeBash "spotify.info" '' if $(pgrep spotify); then STATUS=$(${pkgs.dbus}/bin/dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'PlaybackStatus'|egrep -A 1 "string"|cut -b 26-|cut -d '"' -f 1|egrep -v ^$) if [[ "$STATUS" == 'Playing' ]]; then printf '\uf1bc ' printf '\uf04b' elif [[ "$STATUS" == 'Paused' ]]; then printf '\uf1bc ' printf '\uf04c' elif [[ "$STATUS" == 'Stopped' ]]; then printf '\uf1bc ' printf '\uf04d' else exit 1 fi printf ' ' METADATA=$(${pkgs.dbus}/bin/dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata') ARTIST=$(echo "$METADATA" | egrep -A 2 "artist" | egrep -v "artist" | egrep -v "array" | cut -b 27- | cut -d '"' -f 1 | egrep -v ^$) TITLE=$(echo "$METADATA" | egrep -A 1 "title" | egrep -v "title" | cut -b 44- | cut -d '"' -f 1 | egrep -v ^$) printf "%s \u2237 %s" "$ARTIST" "$TITLE" fi ''; battery_info = unstable.writers.writeBash "battery.info" '' BAT_DIR="/sys/class/power_supply/$BLOCK_INSTANCE/" if [ -d "$BAT_DIR" ]; then cd "$BAT_DIR" else exit 1 fi if [ -e charge_now ] && [ -e charge_full ]; then FULL_CHARGE=charge_full CURR_CHARGE=charge_now elif [ -e energy_now ] && [ -e energy_full ]; then FULL_CHARGE=energy_full CURR_CHARGE=energy_now else ls >&2 exit 1 fi status=$(cat status) charge_f=$((100 * $(cat $CURR_CHARGE) / $(cat $FULL_CHARGE))) if [[ "$charge_f" -lt 20 ]]; then printf '\uf244' elif [[ "$charge_f" -lt 40 ]]; then printf '\uf243' elif [[ "$charge_f" -lt 60 ]]; then printf '\uf242' elif [[ "$charge_f" -lt 80 ]]; then printf '\uf241' else printf '\uf240' fi printf ' ' if [[ "$status" == 'Charging' ]]; then printf '\uf106' elif [[ "$status" == 'Discharging' ]]; then printf '\uf107' elif [[ "$status" == 'Full' ]]; then printf '\uf0e7' else printf '[%s]' "$status" fi printf ' ' if [[ "$status" != 'Full' ]]; then rate_raw=$(($(cat voltage_now) * $(cat power_now))) rate=$(bc <<< "scale=1; $rate_raw / 10^12") printf '%s\u2009W, ' "$rate" fi charge_d=$((100 * $(cat $CURR_CHARGE) / $(cat $FULL_CHARGE))) printf '%s%%\n' "$charge_d" if [[ "$status" == 'Discharging' ]]; then if [[ "$charge_d" -lt 10 ]]; then printf '\n#E41C28' elif [[ "$charge_d" -lt 20 ]]; then printf '\n#EEBF13' fi fi ''; volume_info = unstable.writers.writeBash "volume.info" '' if [[ "$BLOCK_BUTTON" == 1 ]]; then ${pkgs.pamixer}/bin/pamixer -i 5 elif [[ "$BLOCK_BUTTON" == 3 ]]; then ${pkgs.pamixer}/bin/pamixer -d 5 elif [[ "$BLOCK_BUTTON" == 2 ]]; then ${pkgs.pamixer}/bin/pamixer -t fi if $(${pkgs.pamixer}/bin/pamixer --get-mute); then printf '\uf026 0%%\n\n#EEBF13' else volume=$(${pkgs.pamixer}/bin/pamixer --get-volume) printf '\uf028 %s%%' "$volume" fi ''; fancyDate = unstable.writers.writeC "fancy_date.c" {} '' #include #include #include int main(void) { time_t now = time(NULL); struct tm *today = localtime(&now); wchar_t roman_month = 0x2160 + today->tm_mon; wprintf(L"%d\u2009%lc\u2009%d [%d|%d]\n", today->tm_mday, roman_month, 1900 + today->tm_year, today->tm_wday == 0 ? 7 : today->tm_wday, today->tm_yday/7 + 1); return 0; } ''; in with import ../theme.nix; '' markup=pango align=center color=${white} [spotify] command=${spotify_info} interval=2 [separator] [volume] command=${volume_info} min_width= 100% interval=once signal=3 [separator] [cpu_usage] command=cut -d' ' -f 1-3 < /proc/loadavg label= interval=2 [separator] [ram_usage] command=free -h | grep "Mem" | awk '{print $3}' label= interval=2 align=center [separator] [battery] command=${battery_info} interval=10 instance=BAT1 [separator] [date] command=${fancyDate} interval=1 label= [separator] [time] command=date +'%H:%M' interval=1 label= [separator] command=${pkgs.xkblayout-state}/bin/xkblayout-state print %s label= interval=2 [separator] ''