diff --git a/themes/pianocat/polybar/config b/themes/pianocat/polybar/config new file mode 100644 index 00000000..d5de865b --- /dev/null +++ b/themes/pianocat/polybar/config @@ -0,0 +1,336 @@ +[colors] +bg = ${xrdb:background} +fg = ${xrdb:foreground} +black = ${xrdb:color0} +bblack = ${xrdb:color8} +red = ${xrdb:color1} +bred = ${xrdb:color9} +green = ${xrdb:color2} +bgreen = ${xrdb:color10} +yellow = ${xrdb:color3} +byellow = ${xrdb:color11} +blue = ${xrdb:color4} +bblue = ${xrdb:color12} +magenta = ${xrdb:color5} +bmagenta = ${xrdb:color13} +cyan = ${xrdb:color6} +bcyan = ${xrdb:color14} +white = ${xrdb:color7} +bwhite = ${xrdb:color15} + +bg-alt = #0F1013 +fg-alt = #25282a +icons = #555856 +alert = ${colors.red} + +[global/wm] +margin-top = 0 +margin-bottom = 24 + +[bar/main] +monitor = ${env:MONITOR} +monitor-strict = true +enable-ipc = true +wm-restack = bspwm +# REQUIRED to move the window with hideit.sh +override-redirect = true + +background = +foreground = ${colors.fg} + +width = 100% +height = 24 +offset-x = 0 +offset-y = 8 +bottom = 1 + +overline-size = 0 +overline-color = #f00 +underline-size = 0 +underline-color = #00f + +border-bottom-size = 0 + +padding-left = 2 +padding-right = 2 +module-margin-left = 0 +module-margin-right = 0 + +font-0 = "Fira Code:pixelsize=9;2" +font-1 = "Wuncon Siji:pixelsize=12;2" +font-2 = "Siji:pixelsize=10;2" + +; modules-left = volume pad cpu memory pad pkg mail +modules-left = volume pad cpu memory +modules-center = bspwm +; modules-right = battery wlan app-rslsync app-redshift pad date +modules-right = battery wlan app-redshift pad date + +;tray-position = center +;tray-padding = 2 +;tray-transparent = true +;tray-background = #0063ff + +[module/bspwm] +type = internal/bspwm +pin-workspaces = true +enable-click = true + +ws-icon-0 = 1; +ws-icon-1 = 2; +ws-icon-2 = 3; +ws-icon-3 = 4; +ws-icon-4 = 5; +ws-icon-default = x + +format = +label-padding = 1 + +label-focused = %icon% +label-focused-background = #33000000 +label-focused-foreground = ${colors.green} +; label-focused-underline = ${colors.magenta} +; label-focused-foreground = ${xrdb:color2} +label-focused-padding = 1 + +label-occupied = %icon% +label-occupied-foreground = ${colors.icons} +label-occupied-padding = 1 + +; label-urgent = %icon% +label-urgent-foreground = ${colors.red} +; label-urgent-background = ${colors.alert} +label-urgent-padding = 1 + +label-empty = %icon% +label-empty-foreground = ${colors.fg-alt} +label-empty-padding = 1 + +[module/date] +type = internal/date +interval = 5 + +label = %date% %time% +date = %A, %h %d +date-alt = %Y-%m-%d +time = %I:%M %p +time-alt = %H:%M:%S +format-prefix = "" +format-prefix-padding = 1 +; format-prefix-background = ${colors.bg-alt} +format-prefix-foreground = ${colors.icons} +; format-underline = ${xrdb:color4} + +[module/xwindow] +type = internal/xwindow +label = %title:0:80:...% +label-padding-left = 2 + +; [module/mpd] +; type = internal/mpd +; host = /home/hlissner/.config/mpd/mpd.sock +; +; format-online = +; format-padding = 5 +; +; label-song-maxlen = 45 +; label-song-ellipsis = true +; +; icon-prev =  +; icon-seekb =  +; icon-stop =  +; icon-play =  +; icon-pause =  +; icon-next =  +; icon-seekf =  +; +; icon-random =  +; icon-repeat =  +; +; toggle-on-foreground = ${colors.fg} +; toggle-off-foreground = #66 + +[module/cpu] +type = internal/cpu +interval = 2 +format = +format-prefix = "" +format-foreground = ${colors.icons} +; format-underline = #f90000 +; label = %percentage%% +format-padding = 1 + +bar-load-indicator = +bar-load-width = 6 +bar-load-foreground-0 = ${colors.green} +bar-load-foreground-1 = ${colors.green} +bar-load-foreground-2 = ${colors.yellow} +bar-load-foreground-3 = ${colors.red} +bar-load-foreground-4 = ${colors.red} +bar-load-fill = | +bar-load-empty = ¦ +bar-load-empty-foreground = ${colors.fg-alt} + +[module/memory] +type = internal/memory +interval = 3 +format = +format-prefix = "" +format-prefix-foreground = ${colors.icons} +; format-underline = #4bffdc +; label = %percentage_used%% +format-padding-left = 1 + +; Only applies if is used +bar-used-indicator = +bar-used-width = 6 +bar-used-foreground-0 = ${colors.green} +bar-used-foreground-1 = ${colors.green} +bar-used-foreground-2 = ${colors.yellow} +bar-used-foreground-3 = ${colors.red} +bar-used-foreground-4 = ${colors.red} +bar-used-fill = | +bar-used-empty = ¦ +bar-used-empty-foreground = ${colors.fg-alt} + +[module/wlan] +type = internal/network +interface = ${env:WLP:wlp3s0} +interval = 3.0 + +format-connected = +format-disconnected = ! +format-disconnected-foreground = ${colors.red} + +; label-connected = +; label-disconnected = ! +; label-disconnected-foreground = ${colors.red} + +ramp-signal-0 =  +ramp-signal-0-foreground = ${colors.yellow} +ramp-signal-1 =  +ramp-signal-1-foreground = ${colors.yellow} +ramp-signal-2 =  +ramp-signal-2-foreground = ${colors.yellow} +ramp-signal-3 =  +ramp-signal-3-foreground = ${colors.icons} +ramp-signal-4 =  +ramp-signal-4-foreground = ${colors.icons} + +; [module/eth] +; type = internal/network +; interface = ${env:ETH:enp2s0} +; interval = 4.0 +; +; ; format-connected-underline = #55aa55 +; ; format-connected-prefix = " " +; format-connected-foreground-foreground = ${colors.fg-alt} +; label-connected = %local_ip% +; +; format-disconnected-underline = ${self.format-connected-underline} +; label-disconnected = %ifname% disconnected +; label-disconnected-foreground = ${colors.fg-alt} + +[module/volume] +type = internal/volume + +; format-volume = +format-volume = +; label-volume = " " +label-volume-foreground = ${colors.fg} + +; format-muted-prefix = " " +format-muted-foreground = ${colors.red} +label-muted =  + +bar-volume-width = 8 +bar-volume-foreground-0 = ${colors.blue} +bar-volume-foreground-1 = ${colors.blue} +bar-volume-foreground-2 = ${colors.blue} +bar-volume-foreground-3 = ${colors.blue} +bar-volume-foreground-4 = ${colors.blue} +bar-volume-foreground-5 = ${colors.blue} +bar-volume-foreground-6 = ${colors.blue} +bar-volume-gradient = false +bar-volume-indicator = | +bar-volume-indicator-font = 2 +bar-volume-indicator-foreground = #ff +bar-volume-fill = ─ +bar-volume-fill-font = 2 +bar-volume-empty = ─ +bar-volume-empty-font = 2 +bar-volume-empty-foreground = ${colors.fg-alt} + +; Only applies if is used +ramp-volume-0 =  +ramp-volume-1 =  +ramp-volume-2 =  + +[module/battery] +type = internal/battery +battery = BAT0 +adapter = ADP1 +full-at = 98 + +format-charging = +format-charging-underline = #ffb52a + +format-discharging = +format-discharging-underline = ${self.format-charging-underline} + +format-full-prefix = " " +format-full-prefix-foreground = ${colors.fg-alt} +format-full-underline = ${self.format-charging-underline} + +ramp-capacity-0 =  +ramp-capacity-1 =  +ramp-capacity-2 =  +ramp-capacity-foreground = ${colors.fg-alt} + +animation-charging-0 =  +animation-charging-1 =  +animation-charging-2 =  +animation-charging-foreground = ${colors.fg-alt} +animation-charging-framerate = 750 + + +;===================================================== +; Custom scripts +;===================================================== + +[module/pad] +type = custom/text +content = " " +content-foreground = ${colors.fg-alt} + +[module/pkg] +type = custom/ipc +hook-0 = ~/.config/polybar/modules/updates +initial = 1 +click-left = polybar-msg -p %pid% hook pkg 1 +format-padding = 1 + +[module/mail] +type = custom/ipc +hook-0 = ~/.config/polybar/modules/mail +initial = 1 +click-left = polybar-msg -p %pid% hook mail 1 +format-padding-right = 1 + +[module/app-redshift] +type = custom/script +exec = echo 1 +exec-if = pgrep -x redshift +format = "" +format-foreground = ${colors.icons} +interval = 2 + +[module/app-rslsync] +type = custom/script +exec = echo 1 +exec-if = pgrep -x rslsync +format = "" +format-foreground = ${colors.icons} +interval = 60 + +; vim:ft=dosini diff --git a/themes/pianocat/polybar/modules/app-redshift b/themes/pianocat/polybar/modules/app-redshift new file mode 100755 index 00000000..7733a7fc --- /dev/null +++ b/themes/pianocat/polybar/modules/app-redshift @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Specifying the icon(s) in the script +# This allows us to change its appearance conditionally +pgrep -x redshift &> /dev/null +if [[ $? -eq 0 ]]; then + temp=$(redshift -p 2>/dev/null | grep temp | cut -d' ' -f3) + temp=${temp//K/} +fi + +# OPTIONAL: Append ' ${temp}K' after $icon +if [[ -z $temp ]]; then + echo "%{F#65737E}$icon" # Greyed out (not running) +elif [[ $temp -ge 5000 ]]; then + echo "%{F#8FA1B3}$icon" # Blue +elif [[ $temp -ge 4000 ]]; then + echo "%{F#EBCB8B}$icon" # Yellow +else + echo "%{F#D08770}$icon" # Orange +fi + diff --git a/themes/pianocat/polybar/modules/app-rslsync b/themes/pianocat/polybar/modules/app-rslsync new file mode 100755 index 00000000..043f678c --- /dev/null +++ b/themes/pianocat/polybar/modules/app-rslsync @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +icon="" + +if pgrep -x rslsync &> /dev/null; then + echo "%{F#e5e8e6}$icon" +else + echo "%{F#65737E}$icon" +fi diff --git a/themes/pianocat/polybar/modules/mail b/themes/pianocat/polybar/modules/mail new file mode 100755 index 00000000..7242afb3 --- /dev/null +++ b/themes/pianocat/polybar/modules/mail @@ -0,0 +1,92 @@ +#!/usr/bin/env python3 + +import imaplib +import os +import sys +import socket +from subprocess import Popen + +CONFIG_FILE = os.path.expanduser("~/.secrets/email") +CACHE_FILE = "/tmp/polybar-mail" +ICON = "" + +try: + import gnupg + from pathlib import Path +except ImportError: + print("%{{F{}}}*".format("#555856", ICON)) + sys.exit(1) + + +# +def internet_is_on(): + try: + host = socket.gethostbyname("www.google.com") + socket.create_connection((host, 80), 2) + return True + except: + pass + return False + + +def unread_count(address, password): + imap = imaplib.IMAP4_SSL('imap.gmail.com', 993) + imap.login(address, password) + imap.select('INBOX') + + status, resp = imap.search(None, 'UNSEEN') + imap.close() + imap.logout() + + return len(resp[0].split()) + + +def ding(): + Popen(["{}/bin/ding".format(os.getenv("DOTFILES", os.expanduser("~/.dotfiles")))]) + +# +def main(): + try: + if not internet_is_on(): + raise IOError("Internet is off") + + secrets = Path(CONFIG_FILE) + if not secrets.exists(): + raise IOError("Can't find secrets") + + gpg = gnupg.GPG() + gpgdata = gpg.decrypt(secrets.read_bytes()) + if not gpgdata.ok: + raise IOError("Couldn't decrypt secrets: {}".format(gpgdata.status)) + accounts = [line.split(':') for line in gpgdata.data.decode('utf-8').strip().split('\n')] + + last_total = 0 + cache = Path(CACHE_FILE) + if cache.exists(): + cache_text = cache.read_text() + last_total = int(cache.read_text()) + + total = 0 + for addr, pwd in accounts: + total += unread_count(addr, pwd) + + if total != last_total: + ding() + if total != 0: + print("%{{F{}}}{}{}".format("#f0c674", ICON, total)) + else: + print("%{{F{}}}{}".format("#555856", ICON)) + + cache.write_text(str(total)) + except IOError as e: + print("ERROR: {}".format(e), file=sys.stderr) + print("%{{F{}}}{}!".format("#cc6666", ICON)) + sys.exit(1) + + +# +if __name__ == '__main__': + if sys.argv[1:]: + print("%{{F{}}}{}".format("#555856", ICON)) + else: + main() diff --git a/themes/pianocat/polybar/modules/updates b/themes/pianocat/polybar/modules/updates new file mode 100755 index 00000000..f3420fec --- /dev/null +++ b/themes/pianocat/polybar/modules/updates @@ -0,0 +1,22 @@ +#!/usr/bin/env zsh +icon="" +if [[ $1 == "1" ]]; then + echo "%{F#555856}${icon}%{F-}" + exit +fi + +pac=$(checkupdates 2>/dev/null | wc -l) +aur=$(yay -Pn 2>/dev/null) + +[[ -f /tmp/polybar-updates ]] && last=$(/tmp/polybar-updates + fi +else + echo "%{F#555856}${icon}%{F-}" +fi diff --git a/themes/pianocat/polybar/run.sh b/themes/pianocat/polybar/run.sh new file mode 100755 index 00000000..528a069a --- /dev/null +++ b/themes/pianocat/polybar/run.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +killall -q polybar +while pgrep -u $UID -x polybar >/dev/null; do sleep 1; done + +polybar main >>$XDG_DATA_HOME/polybar.log 2>&1 & +echo 'Polybar launched...' \ No newline at end of file