Git Product home page Git Product logo

spotibar's Introduction

Spotibar

Polybar/Waybar plugin for Spotify that uses the Spotify Web API. Note that this requires a Spotify premium account.

Features:

  • Display currently playing artist/song
  • Play/Pause, Previous, Next functionality
  • Add to playlist
  • Scroll currently playing tracking output
  • Have other options for selecting what playlist to add to
  • Add last.fm hearting track option

Spotibar Config Menu spotibar_Closed

Usage/Experience:

After installing and configuring spotibar to run on your status bar as described below, you should see the currently playing track/artist, interactive controls to go to the previous song, play/pause and go to the next track. The thing that justifies the little bit of extra work to set up this module is in the final icon, options/playlists. If you right click on this option, you will get a config option popup which lets you enable/disable adding tracks you like to a Spotify playlist, hearting the track on last.fm, the different display options, etc. It will also allow you to select multiple playlists to add to at once, and other options. Clicking it will trigger all liking/adding to playlist options.

Installation:

Installation is in three steps, the first is getting credentials from Spotify. You need to create an app (call it whatever you like) to find your Client ID and Client Secret, and you need to Edit Settings, and set the Redirect URIs to http://127.0.0.1.

Secondly, you need to install spotibar and run it's init processes:

pipx install spotibar
spotibar --init

During this install process, you will be directed to open a browser to allow Spotibar interact with your Spotify account. After accepting this, you will be redirected to a URL beginning with http://127.0.0.1. Copy this whole URL and paste it back into the init process when asked!

If you're getting errors, try removing spotibar and reinstalling under sudo permissions. If you get an error involving libtk8.6.so, install tk using your distro's package manager.

Once spotibar is installed and authenticated, you need to modify your status bar config as follows (or however suits your needs!):

Polybar:

modules-right = <other modules> spotibar-currently-playing spotibar-previous-track spotibar-toggle-playback spotibar-next-track spotibar-add-to-playlist <other modules>

[module/spotibar-previous-track]
type = custom/script
exec = echo ""
click-left = spotibar --previous-track
exec-if = [ $(spotibar --is-live) = "True" ]
format-underline = #1db954
format-padding = 2

[module/spotibar-next-track]
type = custom/script
exec = echo ""
click-left = spotibar --next-track
exec-if = [ $(spotibar --is-live) = "True" ]
format-underline = #1db954
format-padding = 2

[module/spotibar-toggle-playback]
type = custom/script
exec = echo " "
click-left = spotibar --toggle-playback
exec-if = "pgrep spotify"
format-underline = #1db954
format-padding = 2

[module/spotibar-currently-playing]
type = custom/script
exec = spotibar --get-currently-playing
click-left = i3-msg '[class="Spotify"] focus'
exec-if = [ $(spotibar --is-live) = "True" ]
format-underline = #1db954
format-padding = 2

[module/spotibar-add-to-playlist]
type = custom/script
exec = echo "≣"
click-left = spotibar --add-track-to-monthly-playlist
click-right = spotibar --config-popup
exec-if = [ $(spotibar --is-live) = "True" ]
format-underline = #1db954
format-padding = 2

Waybar:

Note that this relies on mediaplayer.py to output the currently playing track. This behaviour can easily be modified (e.g. by using spotibar --get-currently-playing)

"modules-center": ["custom/media", "custom/media-skip-backward", "custom/media-play-pause", "custom/media-skip-forward"],

"custom/media": {
  "format": "{icon}   {}",
  "return-type": "json",
  "max-length": 40,
  "format-icons": {
    "spotify": "",
    "default": "🎜"
  },
  "escape": true,
  "exec": "$HOME/.config/waybar/mediaplayer.py 2> /dev/null",
  "on-click-right": "spotibar --add-track-to-monthly-playlist"
},

"custom/media-play-pause": {
  "format": "<span size='20pt'>\udb81\udc0e</span>",
  "on-click": "playerctl play-pause",
},
"custom/media-skip-backward": {
  "format": "<span size='20pt'>\udb81\udcab</span>",
  "on-click": "playerctl previous",
},
"custom/media-skip-forward": {
  "format": "<span size='20pt'>\udb81\udcac</span>",
  "on-click": "playerctl next",
},

You should also modify your ~/.config/waybar/styles.css to style the buttons added above. e.g.

#custom-media-skip-backward,
#custom-media-play-pause,
#custom-media-skip-forward {
    padding: 0 6px;
    color: #ffffff;
}

Done! Enjoy! File (probably inevitable) bug reports as issues!

Development:

Create an issue if you have any bug reports/feature requests/want to add a feature and are looking for help with the environment setup.

spotibar's People

Contributors

conor-f avatar javieracevedoc avatar jackheuberger avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.