diff options
Diffstat (limited to 'polybar')
| -rw-r--r-- | polybar/.config/polybar/config | 618 | ||||
| -rwxr-xr-x | polybar/.config/polybar/launch.sh | 27 | ||||
| -rwxr-xr-x | polybar/.local/bin/rofi_goto_workspace | 4 | ||||
| -rwxr-xr-x | polybar/.local/bin/rofi_moveto_workspace | 4 | ||||
| -rwxr-xr-x | polybar/.local/bin/rofi_workspace_prompt | 3 | ||||
| -rwxr-xr-x | polybar/.local/bin/spotifycl | 207 | ||||
| l--------- | polybar/.local/share/config-files/polybar | 1 |
7 files changed, 864 insertions, 0 deletions
diff --git a/polybar/.config/polybar/config b/polybar/.config/polybar/config new file mode 100644 index 0000000..8bd3f20 --- /dev/null +++ b/polybar/.config/polybar/config @@ -0,0 +1,618 @@ +;========================================================== +; +; +; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗ +; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗ +; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝ +; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗ +; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║ +; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ +; +; +; To learn more about how to configure Polybar +; go to https://github.com/jaagr/polybar +; +; The README contains alot of information +; +;========================================================== + +[colors] +;background = ${xrdb:color0:#222} +background = #222 +background-alt = #444 +;foreground = ${xrdb:color7:#222} +foreground = #dfdfdf +foreground-alt = #555 +primary = #ffb52a +secondary = #e60053 +alert = #bd2c40 + +[bar/base] +monitor = ${env:MONITOR:eDP1} +width = 100% +height = 40 +dpi = 96 +;offset-x = 1% +;offset-y = 1% +radius = 0 +fixed-center = false + +background = ${colors.background} +foreground = ${colors.foreground} + +line-size = 3 +line-color = #f00 + +border-size = 0 +border-bottom-size = 0 +border-color = #00000000 + +padding-left = 0 +padding-right = 2 + +module-margin-left = 1 +module-margin-right = 2 + +font-0 = fixed:pixelsize=10;1 +font-1 = unifont:fontformat=truetype:size=8:antialias=false;0 +font-2 = siji:pixelsize=10;1 +font-3 = "Font Awesome 5 Brands:style=Regular:pixelsize=8;1" +font-4 = "Font Awesome 5 Free:style=Regular:pixelsize=8;1" +font-5 = "Font Awesome 5 Free:style=Solid:pixelsize=8;1" + +modules-left = +modules-center = +modules-right = + +tray-position = right +tray-padding = 2 +;tray-transparent = true +;tray-background = #0063ff +tray-scale = 1 +tray-detached = false + +;wm-restack = bspwm +;wm-restack = i3 + +override-redirect = false + +click-left = +click-middle = +click-right = +scroll-up = +scroll-down = +double-click-left = +double-click-middle = +double-click-right = + +cursor-click = pointer +cursor-scroll = ns-resize + +[bar/topbar-i3] +inherit = bar/base + +wm-restack = i3 +override-redirect = false + +click-left = +click-middle = +click-right = +scroll-up = i3wm-wsnext +scroll-down = i3wm-wsprev +double-click-left = +double-click-middle = +double-click-right = + +cursor-click = pointer +cursor-scroll = ns-resize + +modules-left = hostname xwindow +modules-center = +modules-right = filesystem backlight pulseaudio xkeyboard memory cpu wlan eth ethvpn battery temperature + +[bar/topbar-bspwm] +inherit = bar/base + +wm-restack = bspwm +override-redirect = false + +click-left = +click-middle = +click-right = +scroll-up = bspwm-desknext +scroll-down = bspwm-deskprev +double-click-left = +double-click-middle = +double-click-right = + +cursor-click = pointer +cursor-scroll = ns-resize + +modules-left = hostname xwindow +modules-center = +modules-right = filesystem backlight pulseaudio xkeyboard memory cpu wlan eth ethvpn battery temperature + +[bar/topbar2-i3] +inherit = bar/base +offset-y = 0 +fixed-center = true + +wm-restack = i3 +override-redirect = false + +click-left = +click-middle = +click-right = +scroll-up = i3wm-wsnext +scroll-down = i3wm-wsprev +double-click-left = +double-click-middle = +double-click-right = + +cursor-click = pointer +cursor-scroll = ns-resize + +modules-left = i3 +modules-center = spotify +modules-right = date + +[bar/topbar2-bspwm] +inherit = bar/base +offset-y = 40 +fixed-center = true + +wm-restack = bspwm +override-redirect = false + +click-left = +click-middle = +click-right = +scroll-up = bspwm-desknext +scroll-down = bspwm-deskprev +double-click-left = +double-click-middle = +double-click-right = + +cursor-click = pointer +cursor-scroll = ns-resize + +modules-left = bspwm +modules-center = spotify +modules-right = date + +;============================================================================= +; modules +;============================================================================= + +[module/hostname] +type = custom/script +interval = 256 +format = "<label> " +;format-prefix = " " +format-prefix = " ƸӜƷ " +format-prefix-foreground = ${colors.secondary} +format-padding = 0 +exec = echo "$(uname -n)" + +[module/spotify] +type = custom/script +exec = spotifycl status +tail = true +format = <label> +format-foreground = ${colors.foreground-alt} +format-underline = ${colors.primary} +click-right = playerctl play-pause +click-left = playerctl play-pause +click-middle = playerctl next +scroll-up = playerctl next +scroll-down = playerctl previous +label-maxlen = 120 +label-ellipsis = true + +[module/xwindow] +type = internal/xwindow +label = %title:0:40:...% + +[module/xkeyboard] +type = internal/xkeyboard +blacklist-0 = num lock + +format = <label-layout> +format-prefix = " " +format-prefix-foreground = ${colors.foreground} +format-prefix-underline = ${colors.secondary} + +label-layout = %name% +label-layout-underline = ${colors.secondary} + +label-indicator-padding = 2 +label-indicator-margin = 1 +label-indicator-background = ${colors.secondary} +label-indicator-underline = ${colors.secondary} + +[module/filesystem] +type = internal/fs +interval = 25 + +mount-0 = / + +label-mounted = %{F#0a81f5}%mountpoint%%{F-}: %percentage_used%% +label-unmounted = %mountpoint% not mounted +label-unmounted-foreground = ${colors.foreground-alt} + +[module/bspwm] +type = internal/bspwm + +label-focused = %index% +label-focused-background = ${colors.background-alt} +label-focused-underline= ${colors.primary} +label-focused-padding = 2 + +label-occupied = %index% +label-occupied-padding = 2 + +label-urgent = %index%! +label-urgent-background = ${colors.alert} +label-urgent-padding = 2 + +label-empty = %index% +label-empty-foreground = ${colors.foreground-alt} +label-empty-padding = 2 + +; Separator in between workspaces +; label-separator = | + +[module/i3] +type = internal/i3 +; Only show workspaces on the same output as the bar +pin-workspaces = true +strip-wsnumbers = true +format = <label-state> <label-mode> +index-sort = true +wrapping-scroll = false + +label-mode = %mode% +label-mode-padding = 2 +label-mode-foreground = #000 +label-mode-background = ${colors.primary} + +; focused = Active workspace on focused monitor +label-focused = %name% +label-focused-background = ${module/bspwm.label-focused-background} +label-focused-underline = ${module/bspwm.label-focused-underline} +label-focused-padding = ${module/bspwm.label-focused-padding} + +; unfocused = Inactive workspace on any monitor +label-unfocused = %name% +label-unfocused-padding = ${module/bspwm.label-occupied-padding} + +; visible = Active workspace on unfocused monitor +label-visible = %name% +label-visible-background = ${self.label-focused-background} +label-visible-underline = ${self.label-focused-underline} +label-visible-padding = ${self.label-focused-padding} + +; urgent = Workspace with urgency hint set +label-urgent = %name% +label-urgent-background = ${module/bspwm.label-urgent-background} +label-urgent-padding = ${module/bspwm.label-urgent-padding} + +; Separator in between workspaces +; label-separator = | + +[module/line-l] +type = custom/text +content = "____[ " +content-foreground = ${colors.primary} + +[module/line-r] +type = custom/text +content = " ]____" +content-foreground = ${colors.primary} + +[module/mpd] +type = internal/mpd +format-online = <label-song> <icon-prev> <icon-stop> <toggle> <icon-next> + +icon-prev = +icon-stop = +icon-play = +icon-pause = +icon-next = + +label-song-maxlen = 25 +label-song-ellipsis = true + +[module/backlight] +type = internal/backlight +card = intel_backlight +format = <label> <ramp> +label = "" + +ramp-0 = 🌕 +ramp-1 = 🌔 +ramp-2 = 🌓 +ramp-3 = 🌒 +ramp-4 = 🌑 + +bar-width = 10 +bar-indicator = | +bar-indicator-foreground = #fff +bar-indicator-font = 2 +bar-fill = ─ +bar-fill-font = 2 +bar-fill-foreground = #9f78e1 +bar-empty = ─ +bar-empty-font = 2 +bar-empty-foreground = ${colors.foreground-alt} + +[module/xbacklight] +type = internal/xbacklight + +format = <label> <bar> +label = + +bar-width = 10 +bar-indicator = | +bar-indicator-foreground = #fff +bar-indicator-font = 2 +bar-fill = ─ +bar-fill-font = 2 +bar-fill-foreground = #9f78e1 +bar-empty = ─ +bar-empty-font = 2 +bar-empty-foreground = ${colors.foreground-alt} + +[module/backlight-acpi] +inherit = module/xbacklight +type = internal/backlight +card = intel_backlight + +[module/cpu] +type = internal/cpu +interval = 2 +format-prefix = " " +format-prefix-foreground = ${colors.foreground} +format-underline = #f90000 +label = %percentage:2%% + +[module/memory] +type = internal/memory +interval = 2 +format-prefix = " " +format-prefix-foreground = ${colors.foreground} +format-underline = #4bffdc +label = %percentage_used%% + +[module/wlan] +type = internal/network +interface = wlp3s0 +interval = 3.0 +accumulate-stats = true + +format-connected-prefix = " " +format-connected = <label-connected> +format-connected-underline = #9f78e1 +label-connected = %essid% %local_ip% ↓%downspeed% ↑%upspeed% (%signal%) + +format-disconnected = +;format-disconnected = <label-disconnected> +;format-disconnected-underline = ${self.format-connected-underline} +;label-disconnected = %ifname% disconnected +;label-disconnected-foreground = ${colors.foreground-alt} + +ramp-signal-0 = +ramp-signal-foreground = ${colors.foreground-alt} + +[module/eth] +type = internal/network +interface = eno1 +interval = 3.0 +accumulate-stats = true + +format-connected-underline = #55aa55 +format-connected-prefix = " " +format-connected-prefix-foreground = ${colors.foreground} +label-connected = %local_ip% ↓%downspeed% ↑%upspeed% ↕%linkspeed% + +format-disconnected = +;format-disconnected = <label-disconnected> +;format-disconnected-underline = ${self.format-connected-underline} +;label-disconnected = %ifname% disconnected +;label-disconnected-foreground = ${colors.foreground-alt} + +[module/ethvpn] +type = internal/network +interface = tun0 +interval = 3.0 +accumulate-stats = true + +format-connected-underline = #55aa55 +format-connected-prefix = "" +format-connected-prefix-foreground = ${colors.foreground} +label-connected = %local_ip% %local_ip6% + +format-disconnected = +;format-disconnected = <label-disconnected> +;format-disconnected-underline = ${self.format-connected-underline} +label-disconnected = %ifname% disconnected +;label-disconnected-foreground = ${colors.foreground-alt} + +[module/date] +type = internal/date +interval = 1 + +date = +date-alt = " %Y-%m-%d" + +time = %H:%M:%S +time-alt = %H:%M:%S + +format-prefix = +format-prefix-foreground = ${colors.foreground} +format-underline = #0a6cf5 + +label = %date% %time% + +[module/pulseaudio] +type = internal/pulseaudio + +format-volume = <label-volume> <bar-volume> +label-volume = %percentage%% +label-volume-foreground = ${root.foreground} + +label-muted = +label-muted-foreground = #666 + +bar-volume-width = 10 +bar-volume-foreground-0 = #55aa55 +bar-volume-foreground-1 = #55aa55 +bar-volume-foreground-2 = #55aa55 +bar-volume-foreground-3 = #55aa55 +bar-volume-foreground-4 = #55aa55 +bar-volume-foreground-5 = #f5a70a +bar-volume-foreground-6 = #ff5555 +bar-volume-gradient = false +bar-volume-indicator = | +bar-volume-indicator-font = 2 +bar-volume-fill = ─ +bar-volume-fill-font = 2 +bar-volume-empty = ─ +bar-volume-empty-font = 2 +bar-volume-empty-foreground = ${colors.foreground-alt} + +ramp-volume-0 = +ramp-volume-1 = + +[module/alsa] +type = internal/alsa + +format-volume = <label-volume> <bar-volume> +label-volume = VOL +label-volume-foreground = ${root.foreground} + +format-muted-foreground = ${colors.foreground-alt} +label-muted = + +bar-volume-width = 10 +bar-volume-foreground-0 = #55aa55 +bar-volume-foreground-1 = #55aa55 +bar-volume-foreground-2 = #55aa55 +bar-volume-foreground-3 = #55aa55 +bar-volume-foreground-4 = #55aa55 +bar-volume-foreground-5 = #f5a70a +bar-volume-foreground-6 = #ff5555 +bar-volume-gradient = false +bar-volume-indicator = | +bar-volume-indicator-font = 2 +bar-volume-fill = ─ +bar-volume-fill-font = 2 +bar-volume-empty = ─ +bar-volume-empty-font = 2 +bar-volume-empty-foreground = ${colors.foreground-alt} + +[module/battery] +type = internal/battery +time-format = %H:%M +battery = BAT0 +adapter = AC +full-at = 89 + +format-charging = <animation-charging> <label-charging> +format-charging-underline = #ffb52a +label-charging = %percentage%% | %time% + +format-discharging = <animation-discharging> <label-discharging> +format-discharging-underline = ${self.format-charging-underline} +label-discharging = %percentage%% | %time% + +format-full = +format-full-foreground = ${colors.foreground} +format-full-underline = ${self.format-charging-underline} + +ramp-capacity-0 = +ramp-capacity-1 = +ramp-capacity-2 = +ramp-capacity-3 = +ramp-capacity-4 = +ramp-capacity-foreground = ${colors.foreground-alt} + +animation-charging-0 = +animation-charging-1 = +animation-charging-2 = +animation-charging-3 = +animation-charging-4 = +animation-charging-foreground = ${colors.foreground} +animation-charging-framerate = 750 + +animation-discharging-0 = +animation-discharging-1 = +animation-discharging-2 = +animation-discharging-3 = +animation-discharging-4 = +animation-discharging-foreground = ${colors.foreground} +animation-discharging-framerate = 1000 + +[module/temperature] +type = internal/temperature +thermal-zone = 0 +warn-temperature = 60 + +format = <ramp> <label> +format-underline = #f50a4d +format-warn = <ramp> <label-warn> +format-warn-underline = ${self.format-underline} + +label = %temperature-c% +label-warn = %temperature-c% +label-warn-foreground = ${colors.secondary} + +ramp-0 = +ramp-1 = +ramp-2 = +ramp-foreground = ${colors.foreground} + +[module/powermenu] +type = custom/menu + +expand-right = true + +format-spacing = 1 + +label-open = +label-open-foreground = ${colors.secondary} +label-close = cancel +label-close-foreground = ${colors.secondary} +label-separator = | +label-separator-foreground = ${colors.foreground-alt} + +menu-0-0 = reboot +menu-0-0-exec = menu-open-1 +menu-0-1 = power off +menu-0-1-exec = menu-open-2 +menu-0-2 = sleep +menu-0-2-exec = systemctl suspend + +menu-1-0 = cancel +menu-1-0-exec = menu-open-0 +menu-1-1 = reboot +menu-1-1-exec = sudo reboot + +menu-2-0 = power off +menu-2-0-exec = sudo poweroff +menu-2-1 = cancel +menu-2-1-exec = menu-open-0 + +[settings] +screenchange-reload = true +;compositing-background = xor +;compositing-background = screen +;compositing-foreground = source +;compositing-border = over +;pseudo-transparency = false + +[global/wm] +margin-top = 0 +margin-bottom = 0 + +; vim:ft=dosini diff --git a/polybar/.config/polybar/launch.sh b/polybar/.config/polybar/launch.sh new file mode 100755 index 0000000..fe2791e --- /dev/null +++ b/polybar/.config/polybar/launch.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# Terminate already running bar instances +killall -q polybar + +# Wait until the processes have been shut down +while pgrep -u $UID -x polybar >/dev/null; do + sleep 2 +done + +primary_monitor=$(polybar -m | grep '(primary)' | + sed -e 's/:.*$//g') +all_monitors=$(polybar -m | + sed -e 's/:.*$//g') + +WM=${1:+"-$1"} + +# Launch bar1 and bar2 +MONITOR=${primary_monitor} polybar "topbar${WM}" & +sleep 1 +while read -r monitor; do + echo "launching bar on $monitor" + MONITOR=$monitor polybar "topbar2${WM}" & + sleep 1 +done <<< "$all_monitors" + +echo "Bars launched..." diff --git a/polybar/.local/bin/rofi_goto_workspace b/polybar/.local/bin/rofi_goto_workspace new file mode 100755 index 0000000..35e8762 --- /dev/null +++ b/polybar/.local/bin/rofi_goto_workspace @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +NAME=`rofi_workspace_prompt` +i3-msg workspace $NAME diff --git a/polybar/.local/bin/rofi_moveto_workspace b/polybar/.local/bin/rofi_moveto_workspace new file mode 100755 index 0000000..9cc0b9d --- /dev/null +++ b/polybar/.local/bin/rofi_moveto_workspace @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +NAME=`rofi_workspace_prompt` +i3-msg move container to workspace $NAME diff --git a/polybar/.local/bin/rofi_workspace_prompt b/polybar/.local/bin/rofi_workspace_prompt new file mode 100755 index 0000000..f59d1fa --- /dev/null +++ b/polybar/.local/bin/rofi_workspace_prompt @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +echo `i3-msg -t get_workspaces | jq '.[].name' | sed 's/\"//g' | rofi -dmenu` diff --git a/polybar/.local/bin/spotifycl b/polybar/.local/bin/spotifycl new file mode 100755 index 0000000..ffee9f0 --- /dev/null +++ b/polybar/.local/bin/spotifycl @@ -0,0 +1,207 @@ +#!/usr/bin/env python + +# MIT License +# +# Copyright (c) 2018 Andreas Backx +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + + +import os +import socket +import sys +import time +import traceback +from concurrent.futures import ThreadPoolExecutor + +import click +import dbus +import dbus.mainloop.glib +import spotipy +import spotipy.util as util +from dbus.mainloop.glib import DBusGMainLoop +from gi.repository import GLib +from spotipy import SpotifyException +from spotipy.oauth2 import SpotifyClientCredentials + +inactive_color = '%{F#6E6E6E}' +active_color = '%{F#CECECE}' +default_color = '%{F-}' + +server_address = '/tmp/spotifycl-socket' + + +class Spotify: + + SPOTIFY_BUS = 'org.mpris.MediaPlayer2.spotify' + SPOTIFYD_BUS = 'org.mpris.MediaPlayer2.spotifyd' + SPOTIFY_OBJECT_PATH = '/org/mpris/MediaPlayer2' + + PLAYER_INTERFACE = 'org.mpris.MediaPlayer2.Player' + PROPERTIES_INTERFACE = 'org.freedesktop.DBus.Properties' + + SAVE_REMOVE = b'save' + + def __init__(self): + DBusGMainLoop(set_as_default=True) + self.session_bus = dbus.SessionBus() + self.last_output = '' + self.empty_output = True + + # Last shown metadata + self.last_title = None + # Whether the current song is added to the library + self.saved_track = False + # Whether to ignore the update + self.ignore = False + + def monitor(self): + self.setup_properties_changed() + self.freedesktop = self.session_bus.get_object( + "org.freedesktop.DBus", + "/org/freedesktop/DBus" + ) + self.freedesktop.connect_to_signal( + "NameOwnerChanged", + self.on_name_owner_changed, + arg0=self.SPOTIFYD_BUS + ) + + executor = ThreadPoolExecutor(max_workers=2) + executor.submit(self._start_glib_loop) + executor.submit(self._start_server) + + def _start_glib_loop(self): + loop = GLib.MainLoop() + loop.run() + + def _start_server(self): + try: + os.unlink(server_address) + except OSError: + if os.path.exists(server_address): + raise + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.bind(server_address) + sock.listen(5) + + @property + def metadata_status(self): + spotify_properties = dbus.Interface( + self.spotify, + dbus_interface=Spotify.PROPERTIES_INTERFACE + ) + metadata = spotify_properties.Get( + Spotify.PLAYER_INTERFACE, + 'Metadata' + ) + playback_status = spotify_properties.Get( + Spotify.PLAYER_INTERFACE, + 'PlaybackStatus' + ) + return metadata, playback_status + + def output(self, line): + if not line: + self.empty_output = True + if line != self.last_output: + print(line, flush=True) + self.last_output = line + + def setup_spotify(self): + try: + self.spotify = self.session_bus.get_object( + Spotify.SPOTIFY_BUS, + Spotify.SPOTIFY_OBJECT_PATH + ) + except dbus.DBusException: + self.spotify = self.session_bus.get_object(Spotify.SPOTIFYD_BUS, Spotify.SPOTIFY_OBJECT_PATH) + + def setup_properties_changed(self): + try: + self.setup_spotify() + self.spotify.connect_to_signal( + 'PropertiesChanged', + self.on_properties_changed + ) + + if self.empty_output: + metadata, playback_status = self.metadata_status + self.output_playback_status( + data={ + 'Metadata': metadata, + 'PlaybackStatus': playback_status, + } + ) + + except dbus.DBusException: + self.output('') + + def output_playback_status(self, data, retry=False): + if self.ignore: + return + + metadata = data['Metadata'] + artists = metadata['xesam:artist'] + artist = artists[0] if artists else None + + if not artist: + self.output('') + return + + title = metadata['xesam:title'] + playback_status = data['PlaybackStatus'] + same_song = title == self.last_title + + color = active_color if playback_status == 'Playing' else inactive_color + # divider = '+' if same_song and self.saved_track else '-' + self.output(f'{color}{artist} - {title}{default_color}') + + if not same_song: + self.last_title = title + + def on_properties_changed(self, interface, data, *args, **kwargs): + self.output_playback_status(data) + + def on_name_owner_changed(self, name, old_owner, new_owner): + if name == self.SPOTIFY_BUS: + if new_owner: + # Spotify was opened. + self.setup_properties_changed() + else: + # Spotify was closed. + self.spotify = None + self.output('') + + +@click.group() +def cli(): + """Script for listening to Spotify over dbus and adding tracks to your library.""" + pass + + +@cli.command() +def status(): + """Follow the status of the currently playing song on Spotify.""" + spotify = Spotify() + spotify.monitor() + + +if __name__ == '__main__': + cli() diff --git a/polybar/.local/share/config-files/polybar b/polybar/.local/share/config-files/polybar new file mode 120000 index 0000000..87fad9e --- /dev/null +++ b/polybar/.local/share/config-files/polybar @@ -0,0 +1 @@ +../../../.config/polybar/config
\ No newline at end of file |
