mirror of
				https://github.com/Mastermindzh/dotfiles.git
				synced 2025-11-04 02:38:53 +01:00 
			
		
		
		
	added spotify and font-awesome
This commit is contained in:
		
							
								
								
									
										10
									
								
								i3/config
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								i3/config
									
									
									
									
									
								
							@@ -38,6 +38,9 @@ set $workspace10 "10:  "
 | 
			
		||||
set $workspace11 " Virtualbox" 
 | 
			
		||||
set $workspace12 " Enpass"
 | 
			
		||||
 | 
			
		||||
# scripts
 | 
			
		||||
set $spotify ~/.config/i3/scripts/spotify-cli.sh
 | 
			
		||||
 | 
			
		||||
############################################
 | 
			
		||||
#    i3 management keys                    #
 | 
			
		||||
############################################
 | 
			
		||||
@@ -116,8 +119,8 @@ bindsym $mod+shift+l exec /bin/bash ~/.config/i3/scripts/suspend.sh
 | 
			
		||||
############################################
 | 
			
		||||
bindsym $mod+Return exec xfce4-terminal                                 # terminal
 | 
			
		||||
bindsym $mod+e exec nautilus                                            # File manager
 | 
			
		||||
bindsym Print exec gnome-screenshot                                     # Fullscreen screenshot
 | 
			
		||||
bindsym $mod+Print exec /bin/bash ~/.config/i3/scripts/screenshot.sh    # Show screenshot window
 | 
			
		||||
bindsym Print exec  flameshot screen -d 0 -p ~/Pictures/Screenshots     # Fullscreen screenshot
 | 
			
		||||
bindsym $mod+Print exec flameshot gui					# Show screenshot window
 | 
			
		||||
bindsym $mod+shift+b exec /bin/bash ~/.config/i3/scripts/brightness.sh
 | 
			
		||||
 | 
			
		||||
# Rofi
 | 
			
		||||
@@ -144,6 +147,9 @@ bindsym XF86AudioPlay exec playerctl play
 | 
			
		||||
bindsym XF86AudioPause exec playerctl pause
 | 
			
		||||
bindsym XF86AudioNext exec playerctl next
 | 
			
		||||
bindsym XF86AudioPrev exec playerctl previous
 | 
			
		||||
bindsym $mod+Next exec $spotify next
 | 
			
		||||
bindsym $mod+End exec $spotify prev
 | 
			
		||||
bindsym $mod+Delete exec $spotify play
 | 
			
		||||
 | 
			
		||||
############################################
 | 
			
		||||
#    Workspaces                            #
 | 
			
		||||
 
 | 
			
		||||
@@ -29,12 +29,19 @@ separator_block_width=15
 | 
			
		||||
markup=none
 | 
			
		||||
 | 
			
		||||
# Currently playing song
 | 
			
		||||
[music]
 | 
			
		||||
[play_music]
 | 
			
		||||
command=python ~/.config/i3/scripts/blocks/currentSong.py --layout t-A
 | 
			
		||||
separator_block_width=13
 | 
			
		||||
interval=1
 | 
			
		||||
color=#e29e0b
 | 
			
		||||
 | 
			
		||||
[spotify]
 | 
			
		||||
command=bash ~/.config/i3/scripts/blocks/spotify.sh
 | 
			
		||||
separator_block_width=13
 | 
			
		||||
interval=1
 | 
			
		||||
color=#1DB954
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Temperature
 | 
			
		||||
#
 | 
			
		||||
# Support multiple chips, though lm-sensors.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								i3/scripts/blocks/spotify.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								i3/scripts/blocks/spotify.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
case $BLOCK_BUTTON in
 | 
			
		||||
    1) ~/.config/i3/scripts/spotify-cli.sh play ;; # left click
 | 
			
		||||
    4) ~/.config/i3/scripts/spotify-cli.sh next ;; # scroll up
 | 
			
		||||
    5) ~/.config/i3/scripts/spotify-cli.sh prev ;; # scroll down
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if ~/.config/i3/scripts/spotify-cli.sh status | grep 'Paused' > /dev/null; then
 | 
			
		||||
    printf ' ' # fa-pause
 | 
			
		||||
else
 | 
			
		||||
    printf ' ' # fa-play
 | 
			
		||||
fi
 | 
			
		||||
~/.config/i3/scripts/spotify-cli.sh current-oneline
 | 
			
		||||
							
								
								
									
										276
									
								
								i3/scripts/spotify-cli.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										276
									
								
								i3/scripts/spotify-cli.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,276 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# CONSTANTS
 | 
			
		||||
 | 
			
		||||
SP_VERSION="0.1"
 | 
			
		||||
SP_DEST="org.mpris.MediaPlayer2.spotify"
 | 
			
		||||
SP_PATH="/org/mpris/MediaPlayer2"
 | 
			
		||||
SP_MEMB="org.mpris.MediaPlayer2.Player"
 | 
			
		||||
 | 
			
		||||
# To get SP_ID and SP_SECRET register at
 | 
			
		||||
# https://beta.developer.spotify.com/documentation/general/guides/app-settings/
 | 
			
		||||
SP_ID="<yout id>"
 | 
			
		||||
SP_SECRET="<your secret>"
 | 
			
		||||
 | 
			
		||||
# SHELL OPTIONS
 | 
			
		||||
 | 
			
		||||
shopt -s expand_aliases
 | 
			
		||||
SP_B64ID=$(echo -n "$SP_ID:$SP_SECRET"|base64)
 | 
			
		||||
SP_B64ID=$(echo $SP_B64ID | sed 's/ //g')
 | 
			
		||||
 | 
			
		||||
# UTILITY FUNCTIONS
 | 
			
		||||
 | 
			
		||||
function require {
 | 
			
		||||
  hash $1 2>/dev/null || {
 | 
			
		||||
    echo >&2 "Error: '$1' is required, but was not found."; exit 1;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# COMMON REQUIRED BINARIES
 | 
			
		||||
 | 
			
		||||
# We need dbus-send to talk to Spotify.
 | 
			
		||||
require dbus-send
 | 
			
		||||
 | 
			
		||||
# Assert standard Unix utilities are available.
 | 
			
		||||
require grep
 | 
			
		||||
require sed
 | 
			
		||||
require cut
 | 
			
		||||
require tr
 | 
			
		||||
 | 
			
		||||
# 'SPECIAL' (NON-DBUS-ALIAS) COMMANDS
 | 
			
		||||
 | 
			
		||||
function sp-dbus {
 | 
			
		||||
  # Sends the given method to Spotify over dbus.
 | 
			
		||||
  dbus-send --print-reply --dest=$SP_DEST $SP_PATH $SP_MEMB.$1 ${*:2} > /dev/null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-open {
 | 
			
		||||
  # Opens the given spotify: URI in Spotify.
 | 
			
		||||
  sp-dbus OpenUri string:$1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-metadata {
 | 
			
		||||
  # Prints the currently playing track in a parseable format.
 | 
			
		||||
 | 
			
		||||
  dbus-send                                                                   \
 | 
			
		||||
  --print-reply                                  `# We need the reply.`       \
 | 
			
		||||
  --dest=$SP_DEST                                                             \
 | 
			
		||||
  $SP_PATH                                                                    \
 | 
			
		||||
  org.freedesktop.DBus.Properties.Get                                         \
 | 
			
		||||
  string:"$SP_MEMB" string:'Metadata'                                         \
 | 
			
		||||
  | grep -Ev "^method"                           `# Ignore the first line.`   \
 | 
			
		||||
  | grep -Eo '("(.*)")|(\b[0-9][a-zA-Z0-9.]*\b)' `# Filter interesting fiels.`\
 | 
			
		||||
  | sed -E '2~2 a|'                              `# Mark odd fields.`         \
 | 
			
		||||
  | tr -d '\n'                                   `# Remove all newlines.`     \
 | 
			
		||||
  | sed -E 's/\|/\n/g'                           `# Restore newlines.`        \
 | 
			
		||||
  | sed -E 's/(xesam:)|(mpris:)//'               `# Remove ns prefixes.`      \
 | 
			
		||||
  | sed -E 's/^"//'                              `# Strip leading...`         \
 | 
			
		||||
  | sed -E 's/"$//'                              `# ...and trailing quotes.`  \
 | 
			
		||||
  | sed -E 's/"+/|/'                             `# Regard "" as seperator.`  \
 | 
			
		||||
  | sed -E 's/ +/ /g'                            `# Merge consecutive spaces.`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-current {
 | 
			
		||||
  # Prints the currently playing track in a friendly format.
 | 
			
		||||
  require column
 | 
			
		||||
 | 
			
		||||
  sp-metadata \
 | 
			
		||||
  | grep --color=never -E "(title)|(album)|(artist)" \
 | 
			
		||||
  | sed 's/^\(.\)/\U\1/' \
 | 
			
		||||
  | column -t -s'|'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-current-oneline {
 | 
			
		||||
  sp-metadata | grep -E "(title|artist)" | sed 's/^\(.\)*|//' | sed ':a;N;$!ba;s/\n/ - /g'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-status {
 | 
			
		||||
  dbus-send \
 | 
			
		||||
  --print-reply \
 | 
			
		||||
  --dest=$SP_DEST \
 | 
			
		||||
  $SP_PATH \
 | 
			
		||||
  org.freedesktop.DBus.Properties.Get \
 | 
			
		||||
  string:"$SP_MEMB" string:'PlaybackStatus' \
 | 
			
		||||
  | tail -1 \
 | 
			
		||||
  | cut -d "\"" -f2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-eval {
 | 
			
		||||
  # Prints the currently playing track as shell variables, ready to be eval'ed
 | 
			
		||||
  require sort
 | 
			
		||||
 | 
			
		||||
  sp-metadata \
 | 
			
		||||
  | grep --color=never -E "(title)|(album)|(artist)|(trackid)|(trackNumber)" \
 | 
			
		||||
  | sort -r \
 | 
			
		||||
  | sed 's/^\([^|]*\)\|/\U\1/' \
 | 
			
		||||
  | sed -E 's/\|/="/' \
 | 
			
		||||
  | sed -E 's/$/"/' \
 | 
			
		||||
  | sed -E 's/^/SPOTIFY_/'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-art {
 | 
			
		||||
  # Prints the artUrl.
 | 
			
		||||
 | 
			
		||||
  sp-metadata | grep "artUrl" | cut -d'|' -f2
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-display {
 | 
			
		||||
  # Calls display on the artUrl.
 | 
			
		||||
 | 
			
		||||
  require display
 | 
			
		||||
  display $(sp-art)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-feh {
 | 
			
		||||
  # Calls feh on the artURl.
 | 
			
		||||
 | 
			
		||||
  require feh
 | 
			
		||||
  feh $(sp-art)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-url {
 | 
			
		||||
  # Prints the HTTP url.
 | 
			
		||||
 | 
			
		||||
  TRACK=$(sp-metadata | grep "url" | cut -d'|' -f2 | cut -d':' -f3)
 | 
			
		||||
  echo "http://open.spotify.com/track/$TRACK"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-clip {
 | 
			
		||||
  # Copies the HTTP url.
 | 
			
		||||
 | 
			
		||||
  require xclip
 | 
			
		||||
  sp-url | xclip
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-http {
 | 
			
		||||
  # xdg-opens the HTTP url.
 | 
			
		||||
 | 
			
		||||
  require xdg-open
 | 
			
		||||
  xdg-open $(sp-url)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-help {
 | 
			
		||||
  # Prints usage information.
 | 
			
		||||
 | 
			
		||||
  echo "Usage: sp [command]"
 | 
			
		||||
  echo "Control a running Spotify instance from the command line."
 | 
			
		||||
  echo ""
 | 
			
		||||
  echo "  sp play       - Play/pause Spotify"
 | 
			
		||||
  echo "  sp pause      - Pause Spotify"
 | 
			
		||||
  echo "  sp next       - Go to next track"
 | 
			
		||||
  echo "  sp prev       - Go to previous track"
 | 
			
		||||
  echo ""
 | 
			
		||||
  echo "  sp current    - Format the currently playing track"
 | 
			
		||||
  echo "  sp metadata   - Dump the current track's metadata"
 | 
			
		||||
  echo "  sp eval       - Return the metadata as a shell script"
 | 
			
		||||
  echo ""
 | 
			
		||||
  echo "  sp art        - Print the URL to the current track's album artwork"
 | 
			
		||||
  echo "  sp display    - Display the current album artwork with \`display\`"
 | 
			
		||||
  echo "  sp feh        - Display the current album artwork with \`feh\`"
 | 
			
		||||
  echo ""
 | 
			
		||||
  echo "  sp url        - Print the HTTP URL for the currently playing track"
 | 
			
		||||
  echo "  sp clip       - Copy the HTTP URL to the X clipboard"
 | 
			
		||||
  echo "  sp http       - Open the HTTP URL in a web browser"
 | 
			
		||||
  echo ""
 | 
			
		||||
  echo "  sp open <uri> - Open a spotify: uri"
 | 
			
		||||
  echo "  sp search <q> - Start playing the best search result for the given query"
 | 
			
		||||
  echo ""
 | 
			
		||||
  echo "  sp version    - Show version information"
 | 
			
		||||
  echo "  sp help       - Show this information"
 | 
			
		||||
  echo ""
 | 
			
		||||
  echo "Any other argument will start a search (i.e. 'sp foo' will search for foo)."
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-search {
 | 
			
		||||
  # Searches for tracks, plays the first result.
 | 
			
		||||
 | 
			
		||||
  require curl
 | 
			
		||||
    #send request for token with ID and SecretID encoded to base64->grep take only  token from reply->trim reply down to token-> modified request to include token in header
 | 
			
		||||
  Q="$@"
 | 
			
		||||
    ST=$(curl -H "Authorization: Basic $SP_B64ID" -d grant_type=client_credentials https://accounts.spotify.com/api/token --silent \
 | 
			
		||||
    | grep -E -o "access_token\":\"[a-zA-Z0-9_-]+\"" -m 1 )
 | 
			
		||||
 | 
			
		||||
   echo $Q
 | 
			
		||||
 | 
			
		||||
    ST2=${ST:15:86}}
 | 
			
		||||
  SPTFY_URI=$( \
 | 
			
		||||
    curl -H "Authorization: Bearer $ST2" -s -G --data-urlencode "q=$Q" --data type=artist,track https://api.spotify.com/v1/search/ \
 | 
			
		||||
    | grep -E -o "spotify:track:[a-zA-Z0-9]+" -m 1 \
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  sp-open $SPTFY_URI
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function sp-version {
 | 
			
		||||
  # Prints version information.
 | 
			
		||||
 | 
			
		||||
  echo "sp $SP_VERSION"
 | 
			
		||||
  echo "Copyright (C) 2013 Wander Nauta"
 | 
			
		||||
  echo "License MIT"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# 'SIMPLE' (DBUS-ALIAS) COMMANDS
 | 
			
		||||
 | 
			
		||||
alias sp-play="  sp-dbus PlayPause"
 | 
			
		||||
alias sp-pause=" sp-dbus Pause"
 | 
			
		||||
alias sp-next="  sp-dbus Next"
 | 
			
		||||
alias sp-prev="  sp-dbus Previous"
 | 
			
		||||
 | 
			
		||||
# DISPATCHER
 | 
			
		||||
 | 
			
		||||
# First, we connect to the dbus session spotify is on. This isn't really needed
 | 
			
		||||
# when running locally, but is crucial when we don't have an X display handy
 | 
			
		||||
# (for instance, when running sp over ssh.)
 | 
			
		||||
 | 
			
		||||
SPOTIFY_PID="$(pidof -s spotify)"
 | 
			
		||||
 | 
			
		||||
if [[ -z "$SPOTIFY_PID" ]]; then
 | 
			
		||||
  echo "Error: Spotify is not running."
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
QUERY_ENVIRON="$(cat /proc/${SPOTIFY_PID}/environ | tr '\0' '\n' | grep "DBUS_SESSION_BUS_ADDRESS" | cut -d "=" -f 2-)"
 | 
			
		||||
if [[ "${QUERY_ENVIRON}" != "" ]]; then
 | 
			
		||||
  export DBUS_SESSION_BUS_ADDRESS="${QUERY_ENVIRON}"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Then we dispatch the command.
 | 
			
		||||
 | 
			
		||||
subcommand="$1"
 | 
			
		||||
 | 
			
		||||
if [[ -z "$subcommand" ]]; then
 | 
			
		||||
  # No arguments given, print help.
 | 
			
		||||
  sp-help
 | 
			
		||||
else
 | 
			
		||||
  # Arguments given, check if it's a command.
 | 
			
		||||
  if $(type sp-$subcommand > /dev/null 2> /dev/null); then
 | 
			
		||||
    # It is. Run it.
 | 
			
		||||
    shift
 | 
			
		||||
    eval "sp-$subcommand $@"
 | 
			
		||||
  else
 | 
			
		||||
    # It's not. Try a search.
 | 
			
		||||
    eval "sp-search $@"
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Copyright (C) 2013 Wander Nauta
 | 
			
		||||
#
 | 
			
		||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
			
		||||
# of this 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.
 | 
			
		||||
#
 | 
			
		||||
		Reference in New Issue
	
	Block a user