diff options
| -rw-r--r-- | .config/polybar/config##desktop.Linux.Lowe | 36 | ||||
| -rw-r--r-- | .config/polybar/config##desktop.Linux.Maus | 2 | ||||
| -rwxr-xr-x | .config/polybar/pulseaudio-control.sh | 2 | ||||
| -rw-r--r-- | .config/polybar/spotify_status.py | 123 |
4 files changed, 151 insertions, 12 deletions
diff --git a/.config/polybar/config##desktop.Linux.Lowe b/.config/polybar/config##desktop.Linux.Lowe index f0670d5..488edc4 100644 --- a/.config/polybar/config##desktop.Linux.Lowe +++ b/.config/polybar/config##desktop.Linux.Lowe | |||
| @@ -52,7 +52,7 @@ font-1 = Lato:size=10;1 | |||
| 52 | font-2 = Raleway:size=10;1 | 52 | font-2 = Raleway:size=10;1 |
| 53 | font-3 = FuraCode Nerd Font:size=11;2 | 53 | font-3 = FuraCode Nerd Font:size=11;2 |
| 54 | 54 | ||
| 55 | modules-left = i3 pulseaudio spotify | 55 | modules-left = i3 pulseaudio-control spotify |
| 56 | modules-center = xwindow | 56 | modules-center = xwindow |
| 57 | modules-right = focus date time xkeyboard | 57 | modules-right = focus date time xkeyboard |
| 58 | 58 | ||
| @@ -96,8 +96,8 @@ y-offset = 10 | |||
| 96 | label-padding = 1 | 96 | label-padding = 1 |
| 97 | label-font = 1 | 97 | label-font = 1 |
| 98 | 98 | ||
| 99 | label-empty = ﳓ | 99 | label-empty = |
| 100 | label-empty-font = 4 | 100 | label-empty-font = 3 |
| 101 | label-empty-padding = 5 | 101 | label-empty-padding = 5 |
| 102 | 102 | ||
| 103 | [module/xkeyboard] | 103 | [module/xkeyboard] |
| @@ -108,11 +108,11 @@ blacklist-1 = scroll lock | |||
| 108 | format = <label-layout> <label-indicator> | 108 | format = <label-layout> <label-indicator> |
| 109 | format-spacing = 0 | 109 | format-spacing = 0 |
| 110 | 110 | ||
| 111 | format-prefix = | 111 | format-prefix = |
| 112 | format-prefix-padding = 1 | 112 | format-prefix-padding = 1 |
| 113 | format-prefix-background = ${colors.blue} | 113 | format-prefix-background = ${colors.blue} |
| 114 | format-prefix-foreground = ${colors.foreground} | 114 | format-prefix-foreground = ${colors.foreground} |
| 115 | format-prefix-font = 4 | 115 | format-prefix-font = 3 |
| 116 | 116 | ||
| 117 | label-layout = %layout% | 117 | label-layout = %layout% |
| 118 | label-layout-padding = 1 | 118 | label-layout-padding = 1 |
| @@ -202,7 +202,7 @@ format = <label> | |||
| 202 | format-prefix = | 202 | format-prefix = |
| 203 | format-prefix-background = ${colors.orange} | 203 | format-prefix-background = ${colors.orange} |
| 204 | format-prefix-foreground = ${colors.foreground} | 204 | format-prefix-foreground = ${colors.foreground} |
| 205 | format-prefix-font = 4 | 205 | format-prefix-font = 3 |
| 206 | format-prefix-padding = 1 | 206 | format-prefix-padding = 1 |
| 207 | 207 | ||
| 208 | label-background = ${colors.background_modules} | 208 | label-background = ${colors.background_modules} |
| @@ -217,10 +217,10 @@ time = %H:%M | |||
| 217 | label = %time% | 217 | label = %time% |
| 218 | format = <label> | 218 | format = <label> |
| 219 | 219 | ||
| 220 | format-prefix = | 220 | format-prefix = |
| 221 | format-prefix-background = ${colors.secondary} | 221 | format-prefix-background = ${colors.secondary} |
| 222 | format-prefix-foreground = ${colors.foreground} | 222 | format-prefix-foreground = ${colors.foreground} |
| 223 | format-prefix-font = 4 | 223 | format-prefix-font = 3 |
| 224 | format-prefix-padding = 1 | 224 | format-prefix-padding = 1 |
| 225 | 225 | ||
| 226 | label-background = ${colors.background_modules} | 226 | label-background = ${colors.background_modules} |
| @@ -233,10 +233,10 @@ interval = 5 | |||
| 233 | 233 | ||
| 234 | format-volume = <label-volume> | 234 | format-volume = <label-volume> |
| 235 | 235 | ||
| 236 | format-volume-prefix = ♫ | 236 | format-volume-prefix = |
| 237 | format-volume-prefix-background = ${colors.purple} | 237 | format-volume-prefix-background = ${colors.purple} |
| 238 | format-volume-prefix-foreground = ${colors.background_modules} | 238 | format-volume-prefix-foreground = ${colors.background_modules} |
| 239 | format-volume-prefix-font = 4 | 239 | format-volume-prefix-font = 3 |
| 240 | format-volume-prefix-padding = 1 | 240 | format-volume-prefix-padding = 1 |
| 241 | 241 | ||
| 242 | label-volume = %percentage% | 242 | label-volume = %percentage% |
| @@ -249,6 +249,22 @@ label-muted-background = ${colors.purple} | |||
| 249 | label-muted-foreground = ${colors.foreground} | 249 | label-muted-foreground = ${colors.foreground} |
| 250 | label-muted-padding = 2 | 250 | label-muted-padding = 2 |
| 251 | 251 | ||
| 252 | [module/pulseaudio-control] | ||
| 253 | type = custom/script | ||
| 254 | tail = true | ||
| 255 | label = %output% | ||
| 256 | interval = 5 | ||
| 257 | |||
| 258 | exec = ~/.config/polybar/pulseaudio-control.sh --listen | ||
| 259 | click-right = exec pavucontrol & | ||
| 260 | click-left = ~/.config/polybar/pulseaudio-control.sh --togmute | ||
| 261 | click-middle = ~/.config/polybar/pulseaudio-control.sh --change | ||
| 262 | scroll-up = ~/.config/polybar/pulseaudio-control.sh --up | ||
| 263 | scroll-down = ~/.config/polybar/pulseaudio-control.sh --down | ||
| 264 | label-padding = 2 | ||
| 265 | label-foreground = ${colors.foreground_modules} | ||
| 266 | label-background = ${colors.background_modules} | ||
| 267 | |||
| 252 | [settings] | 268 | [settings] |
| 253 | screenchange-reload = true | 269 | screenchange-reload = true |
| 254 | compositing-background = source | 270 | compositing-background = source |
diff --git a/.config/polybar/config##desktop.Linux.Maus b/.config/polybar/config##desktop.Linux.Maus index f9686ae..0c8ce3d 100644 --- a/.config/polybar/config##desktop.Linux.Maus +++ b/.config/polybar/config##desktop.Linux.Maus | |||
| @@ -52,7 +52,7 @@ font-1 = Lato:size=10;1 | |||
| 52 | font-2 = Raleway:size=10;1 | 52 | font-2 = Raleway:size=10;1 |
| 53 | font-3 = FuraCode Nerd Font:size=12;2 | 53 | font-3 = FuraCode Nerd Font:size=12;2 |
| 54 | 54 | ||
| 55 | modules-left = i3 mpd pulseaudio-control | 55 | modules-left = i3 pulseaudio-control mpd |
| 56 | modules-center = xwindow | 56 | modules-center = xwindow |
| 57 | modules-right = focus date time xkeyboard | 57 | modules-right = focus date time xkeyboard |
| 58 | 58 | ||
diff --git a/.config/polybar/pulseaudio-control.sh b/.config/polybar/pulseaudio-control.sh index e88ce39..bdabf2f 100755 --- a/.config/polybar/pulseaudio-control.sh +++ b/.config/polybar/pulseaudio-control.sh | |||
| @@ -14,7 +14,7 @@ VOLUME_ICONS=( " " " " " " ) # Volume icons array, from lower volume t | |||
| 14 | MUTED_ICON=" " # Muted volume icon | 14 | MUTED_ICON=" " # Muted volume icon |
| 15 | MUTED_COLOR="%{F#A9AA83}" # Color when the audio is muted | 15 | MUTED_COLOR="%{F#A9AA83}" # Color when the audio is muted |
| 16 | DEFAULT_SINK_ICON="♫ " # The default sink icon if a custom one isn't found | 16 | DEFAULT_SINK_ICON="♫ " # The default sink icon if a custom one isn't found |
| 17 | CUSTOM_SINK_ICONS=("" "" "") # Custom sink icons in index of sink order | 17 | CUSTOM_SINK_ICONS=("" "") # Custom sink icons in index of sink order |
| 18 | NOTIFICATIONS="yes" # Notifications when switching sinks if enabled | 18 | NOTIFICATIONS="yes" # Notifications when switching sinks if enabled |
| 19 | SINK_BLACKLIST=( ) # Index blacklist for sinks when switching between them | 19 | SINK_BLACKLIST=( ) # Index blacklist for sinks when switching between them |
| 20 | 20 | ||
diff --git a/.config/polybar/spotify_status.py b/.config/polybar/spotify_status.py new file mode 100644 index 0000000..3a56096 --- /dev/null +++ b/.config/polybar/spotify_status.py | |||
| @@ -0,0 +1,123 @@ | |||
| 1 | #!/bin/python | ||
| 2 | |||
| 3 | import sys | ||
| 4 | import dbus | ||
| 5 | import argparse | ||
| 6 | |||
| 7 | parser = argparse.ArgumentParser() | ||
| 8 | parser.add_argument( | ||
| 9 | '-t', | ||
| 10 | '--trunclen', | ||
| 11 | type=int, | ||
| 12 | metavar='trunclen' | ||
| 13 | ) | ||
| 14 | parser.add_argument( | ||
| 15 | '-f', | ||
| 16 | '--format', | ||
| 17 | type=str, | ||
| 18 | metavar='custom format', | ||
| 19 | dest='custom_format' | ||
| 20 | ) | ||
| 21 | parser.add_argument( | ||
| 22 | '-p', | ||
| 23 | '--playpause', | ||
| 24 | type=str, | ||
| 25 | metavar='play-pause indicator', | ||
| 26 | dest='play_pause' | ||
| 27 | ) | ||
| 28 | parser.add_argument( | ||
| 29 | '--font', | ||
| 30 | type=str, | ||
| 31 | metavar='the index of the font to use for the main label', | ||
| 32 | dest='font' | ||
| 33 | ) | ||
| 34 | parser.add_argument( | ||
| 35 | '--playpause-font', | ||
| 36 | type=str, | ||
| 37 | metavar='the index of the font to use to display the playpause indicator', | ||
| 38 | dest='play_pause_font' | ||
| 39 | ) | ||
| 40 | |||
| 41 | |||
| 42 | args = parser.parse_args() | ||
| 43 | |||
| 44 | def fix_string(string): | ||
| 45 | # corrects encoding for the python version used | ||
| 46 | if sys.version_info.major == 3: | ||
| 47 | return string | ||
| 48 | else: | ||
| 49 | return string.encode('utf-8') | ||
| 50 | |||
| 51 | # Default parameters | ||
| 52 | output = fix_string(u'{play_pause} {artist}: {song}') | ||
| 53 | trunclen = 25 | ||
| 54 | play_pause = fix_string(u'\u25B6,\u23F8') # first character is play, second is paused | ||
| 55 | |||
| 56 | label_with_font = '%{{T{font}}}{label}%{{T-}}' | ||
| 57 | font = args.font | ||
| 58 | play_pause_font = args.play_pause_font | ||
| 59 | |||
| 60 | # parameters can be overwritten by args | ||
| 61 | if args.trunclen is not None: | ||
| 62 | trunclen = args.trunclen | ||
| 63 | if args.custom_format is not None: | ||
| 64 | output = args.custom_format | ||
| 65 | if args.play_pause is not None: | ||
| 66 | play_pause = args.play_pause | ||
| 67 | |||
| 68 | try: | ||
| 69 | session_bus = dbus.SessionBus() | ||
| 70 | spotify_bus = session_bus.get_object( | ||
| 71 | 'org.mpris.MediaPlayer2.spotify', | ||
| 72 | '/org/mpris/MediaPlayer2' | ||
| 73 | ) | ||
| 74 | |||
| 75 | spotify_properties = dbus.Interface( | ||
| 76 | spotify_bus, | ||
| 77 | 'org.freedesktop.DBus.Properties' | ||
| 78 | ) | ||
| 79 | |||
| 80 | metadata = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'Metadata') | ||
| 81 | status = spotify_properties.Get('org.mpris.MediaPlayer2.Player', 'PlaybackStatus') | ||
| 82 | |||
| 83 | # Handle play/pause label | ||
| 84 | |||
| 85 | play_pause = play_pause.split(',') | ||
| 86 | |||
| 87 | if status == 'Playing': | ||
| 88 | play_pause = play_pause[0] | ||
| 89 | elif status == 'Paused': | ||
| 90 | play_pause = play_pause[1] | ||
| 91 | else: | ||
| 92 | play_pause = str() | ||
| 93 | |||
| 94 | if play_pause_font: | ||
| 95 | play_pause = label_with_font.format(font=play_pause_font, label=play_pause) | ||
| 96 | |||
| 97 | # Handle main label | ||
| 98 | |||
| 99 | artist = fix_string(metadata['xesam:artist'][0]) if metadata['xesam:artist'] else '' | ||
| 100 | song = fix_string(metadata['xesam:title']) if metadata['xesam:title'] else '' | ||
| 101 | album = fix_string(metadata['xesam:album']) if metadata['xesam:album'] else '' | ||
| 102 | |||
| 103 | if not artist and not song and not album: | ||
| 104 | print('') | ||
| 105 | else: | ||
| 106 | if len(song) > trunclen: | ||
| 107 | song = song[0:trunclen] | ||
| 108 | song += '...' | ||
| 109 | if ('(' in song) and (')' not in song): | ||
| 110 | song += ')' | ||
| 111 | |||
| 112 | if font: | ||
| 113 | artist = label_with_font.format(font=font, label=artist) | ||
| 114 | song = label_with_font.format(font=font, label=song) | ||
| 115 | album = label_with_font.format(font=font, label=album) | ||
| 116 | |||
| 117 | print(output.format(artist=artist, song=song, play_pause=play_pause, album=album)) | ||
| 118 | |||
| 119 | except Exception as e: | ||
| 120 | if isinstance(e, dbus.exceptions.DBusException): | ||
| 121 | print('') | ||
| 122 | else: | ||
| 123 | print(e) | ||
