Adjust polybar

This commit is contained in:
Marco Thomas
2022-01-05 00:50:41 +01:00
parent aecd13bb13
commit abba8b21cf
3 changed files with 159 additions and 6 deletions

View File

@@ -123,7 +123,6 @@ client.urgent $red $red $white $red $black
# i3 bar # i3 bar
# flaoting on start # flaoting on start
for_window [class="Nautilus"] floating enable
for_window [class="Pavucontrol"] floating enable for_window [class="Pavucontrol"] floating enable
for_window [title="Event Tester"] floating enable for_window [title="Event Tester"] floating enable
for_window [class="flameshot"] floating enable for_window [class="flameshot"] floating enable

View File

@@ -27,6 +27,8 @@ foreground = ${colors.black}
bottom = false bottom = false
screenchange-reload = true
tray-position = right tray-position = right
tray-scale = 1.0 tray-scale = 1.0
tray-maxsize = 25 tray-maxsize = 25
@@ -35,11 +37,11 @@ line-size = 4
padding-left = 1 padding-left = 1
padding-right = 1 padding-right = 1
module-margin = 1 module-margin = 2
modules-left = logo i3 polywins modules-left = logo i3 polywins spotify
modules-center = modules-center =
modules-right = time date backlight pulseaudio battery conservation modules-right = backlight pulseaudio battery conservation date time
[module/i3] [module/i3]
strip-wsnumbers = true strip-wsnumbers = true
@@ -130,7 +132,7 @@ label-full =  100%
[module/conservation] [module/conservation]
type = custom/script type = custom/script
exec = cat /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode exec = if [ /sys/bus/platform/drivers/ideapad_acpi/VPC2004:00/conservation_mode ]; then echo "On"; else echo "Off"; fi
click-left = alacritty --command ~/dots/scripts/conservation_mode.sh click-left = alacritty --command ~/dots/scripts/conservation_mode.sh
format = <label> format = <label>
label =  %output% label =  %output%
@@ -152,3 +154,14 @@ exec = ~/dots/scripts/polywins.sh 2>/dev/null
format = <label> format = <label>
label = %output% label = %output%
tail = true tail = true
[module/spotify]
type = custom/script
interval = 1
format =  <label>
#exec = python3 ~/dots/scripts/spotify.py -f '{play_pause} {artist}: {song}' --font=2
exec = python3 ~/dots/scripts/spotify.py -f '{artist}: {song}'
click-left = playerctl play-pause
click-right = playerctl next
click-middle = playerctl previous

141
scripts/spotify.py Normal file
View File

@@ -0,0 +1,141 @@
#!/usr/bin/env python
import sys
import dbus
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'-t',
'--trunclen',
type=int,
metavar='trunclen'
)
parser.add_argument(
'-f',
'--format',
type=str,
metavar='custom format',
dest='custom_format'
)
parser.add_argument(
'-p',
'--playpause',
type=str,
metavar='play-pause indicator',
dest='play_pause'
)
parser.add_argument(
'--font',
type=str,
metavar='the index of the font to use for the main label',
dest='font'
)
parser.add_argument(
'--playpause-font',
type=str,
metavar='the index of the font to use to display the playpause indicator',
dest='play_pause_font'
)
parser.add_argument(
'-q',
'--quiet',
action='store_true',
help="if set, don't show any output when the current song is paused",
dest='quiet',
)
args = parser.parse_args()
def fix_string(string):
# corrects encoding for the python version used
if sys.version_info.major == 3:
return string
else:
return string.encode('utf-8')
def truncate(name, trunclen):
if len(name) > trunclen:
name = name[:trunclen]
name += '...'
if ('(' in name) and (')' not in name):
name += ')'
return name
# Default parameters
output = fix_string(u'{play_pause} {artist}: {song}')
trunclen = 35
play_pause = fix_string(u'\u25B6,\u23F8') # first character is play, second is paused
label_with_font = '%{{T{font}}}{label}%{{T-}}'
font = args.font
play_pause_font = args.play_pause_font
quiet = args.quiet
# parameters can be overwritten by args
if args.trunclen is not None:
trunclen = args.trunclen
if args.custom_format is not None:
output = args.custom_format
if args.play_pause is not None:
play_pause = args.play_pause
try:
session_bus = dbus.SessionBus()
spotify_bus = session_bus.get_object(
'org.mpris.MediaPlayer2.spotify',
'/org/mpris/MediaPlayer2'
)
spotify_properties = dbus.Interface(
spotify_bus,
'org.freedesktop.DBus.Properties'
)
metadata = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'Metadata')
status = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'PlaybackStatus')
# Handle play/pause label
play_pause = play_pause.split(',')
if status == 'Playing':
play_pause = play_pause[0]
elif status == 'Paused':
play_pause = play_pause[1]
else:
play_pause = str()
if play_pause_font:
play_pause = label_with_font.format(font=play_pause_font, label=play_pause)
# Handle main label
artist = fix_string(metadata['xesam:artist'][0]) if metadata['xesam:artist'] else ''
song = fix_string(metadata['xesam:title']) if metadata['xesam:title'] else ''
album = fix_string(metadata['xesam:album']) if metadata['xesam:album'] else ''
if (quiet and status == 'Paused') or (not artist and not song and not album):
print('')
else:
if font:
artist = label_with_font.format(font=font, label=artist)
song = label_with_font.format(font=font, label=song)
album = label_with_font.format(font=font, label=album)
# Add 4 to trunclen to account for status symbol, spaces, and other padding characters
print(truncate(output.format(artist=artist,
song=song,
play_pause=play_pause,
album=album), trunclen + 4))
except Exception as e:
if isinstance(e, dbus.exceptions.DBusException):
print('')
else:
print(e)