dietervanhoof / polybar-spotify-controls

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

polybar-spotify-controls

This set of modules provides controls for spotify that can be added to polybar.

paused

playing

Specifically it contains:

  • The currently playing song
  • Next song
  • Play/Pause button
  • Previous song

Dependencies

  • Python 3
  • Python dbus module
  • Python GObject3 module
  • Polybar with the IPC module
  • dbus

How it works

The Python dbus module is used to listen for PropertiesChanged events. The playback status updates are used to update the character printed onto polybar using the IPC module.

Whenever one of these updates arrive in python, a message is sent the correct module. This is done by outputting a message to a symlink file pointing to the correct polybar (this needs to be set up). The following modules have IPC hooks set up.

  • module/spotify (to update the song name and artist)
  • module/playpause (to update the button from play to pause or the other way around)

playpause

There are 3 hooks defined on playpause:

; Default (no symbol)
hook-0 = echo ""
; Playing (pause symbol)
hook-1 = echo ""
; Paused (play symbol)
hook-2 = echo ""

The Python script sends messages to hook-1 (2) or hook-2 (3).

spotify

There are 2 hooks defined on spotify:

hook-0 = echo ""
hook-1 = python3 ~/scripts/spotify/spotify_status.py

The spotify hook-1 (2) will run another python script which returns the current song and use the return data as text value.

Installation

Set up

  • Install all dependencies
  • Copy all scripts to ~/scripts
  • Have polybar start up on boot- Have the scripts/spotify/launchlistener.sh script start up on boot
  • Make sure the bars you want to add it to has IPC enabled

Adding all modules

Add all of the desired modules to any bar and modify to your likings. This is my setup:

[module/previous]
type = custom/script
interval = 86400
format = "%{T3}<label>"
format-padding = 5
; Previous song icon
exec = echo ""
; Check if spotify is running before displaying the icon
exec-if = "pgrep spotify -x"
format-underline = #1db954
line-size = 1
click-left = "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Previous"

[module/next]
type = custom/script
interval = 86400
format = "%{T3}<label>"
format-padding = 5
; Next song icon
exec = echo ""
; Check if spotify is running before displaying the icon
exec-if = "pgrep spotify -x"
format-underline = #1db954
line-size = 1
click-left = "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next"

[module/playpause]
type = custom/ipc
; Default
hook-0 = echo ""
; Playing
hook-1 = echo ""
; Paused
hook-2 = echo ""
initial = 1
format-underline = #1db954
line-size = 1
click-left = "dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause"

[module/spotify]
type = custom/ipc
hook-0 = echo ""
hook-1 = python3 ~/scripts/spotify/spotify_status.py
initial = 1
format-padding = 4
format-underline = #1db954
line-size = 1
; [i3wm only] - Uncomment the below line to focus on Spotify when clicking on the song name (credits to https://github.com/Esya)
; click-left = i3-msg '[class="Spotify"] focus'

Add this to the bar you'd like your controls to be on:

modules-right = spotify previous playpause next

Credits

About

License:MIT License


Languages

Language:Python 98.6%Language:Shell 1.4%