added spotify and font-awesome

This commit is contained in:
Rick van Lieshout 2019-02-20 08:51:56 +01:00
parent 714f202a62
commit 082507acbe
7 changed files with 312 additions and 5 deletions

View File

@ -3,7 +3,7 @@ alias phpserver='docker run --rm -p 2000:80 -v "$PWD":/var/www/html mastermindzh
alias nodeserver='docker run --rm -p 3000:3000 -v "$PWD":/app mastermindzh/generic_node' alias nodeserver='docker run --rm -p 3000:3000 -v "$PWD":/app mastermindzh/generic_node'
alias reactserver='docker run --rm -p 8080:8080 -v "$PWD":/app mastermindzh/generic_node' alias reactserver='docker run --rm -p 8080:8080 -v "$PWD":/app mastermindzh/generic_node'
alias mongoserver='docker run -d --rm -p 27017:27017 --name mongo-server -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123 -v ~/.db/mongo:/data/db mongo' alias mongoserver='docker run -d --rm -p 27017:27017 --name mongo-server -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123 -v ~/.db/mongo:/data/db mongo'
alias sqlserver='docker run -d --rm -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourPassword123" -p 1433:1433 -v ~/.db/mssql:/var/opt/mssql microsoft/mssql-server-linux' alias sqlserver='docker run -d --rm --name sql-server -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourPassword123" -p 1433:1433 -v ~/.db/mssql:/var/opt/mssql microsoft/mssql-server-linux'
# useful docker commands # useful docker commands
alias stop-dockers='docker stop $(docker ps -aq)' alias stop-dockers='docker stop $(docker ps -aq)'
@ -40,6 +40,7 @@ alias dotnetnew="dotnet new webapi -o "
alias nmapscan='nmap -n -sP' alias nmapscan='nmap -n -sP'
alias pia='nohup sh /opt/pia/run.sh &>/dev/null & disown' alias pia='nohup sh /opt/pia/run.sh &>/dev/null & disown'
alias wifimenu='nm-connection-editor' alias wifimenu='nm-connection-editor'
alias mountrick='sudo mount -t cifs //192.168.1.2/Rick /mnt/rick/ -o username=mastermindzh,noexec'
# show file content without comment lines # show file content without comment lines
alias nocomment='grep -Ev '\''^(#|$)'\''' alias nocomment='grep -Ev '\''^(#|$)'\'''

View File

@ -9,4 +9,5 @@ awesome-terminal-fonts-git
otf-droid-sans-mono-powerline-git otf-droid-sans-mono-powerline-git
downgrade downgrade
dive dive
xorg-xev
spotify

View File

@ -63,3 +63,5 @@ xvidcore
gvfs-smb gvfs-smb
gnome-screenshot gnome-screenshot
bash-completion bash-completion
flameshot
otf-font-awesome

View File

@ -38,6 +38,9 @@ set $workspace10 "10:  "
set $workspace11 " Virtualbox" set $workspace11 " Virtualbox"
set $workspace12 " Enpass" set $workspace12 " Enpass"
# scripts
set $spotify ~/.config/i3/scripts/spotify-cli.sh
############################################ ############################################
# i3 management keys # # 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+Return exec xfce4-terminal # terminal
bindsym $mod+e exec nautilus # File manager bindsym $mod+e exec nautilus # File manager
bindsym Print exec gnome-screenshot # Fullscreen screenshot bindsym Print exec flameshot screen -d 0 -p ~/Pictures/Screenshots # Fullscreen screenshot
bindsym $mod+Print exec /bin/bash ~/.config/i3/scripts/screenshot.sh # Show screenshot window bindsym $mod+Print exec flameshot gui # Show screenshot window
bindsym $mod+shift+b exec /bin/bash ~/.config/i3/scripts/brightness.sh bindsym $mod+shift+b exec /bin/bash ~/.config/i3/scripts/brightness.sh
# Rofi # Rofi
@ -144,6 +147,9 @@ bindsym XF86AudioPlay exec playerctl play
bindsym XF86AudioPause exec playerctl pause bindsym XF86AudioPause exec playerctl pause
bindsym XF86AudioNext exec playerctl next bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous bindsym XF86AudioPrev exec playerctl previous
bindsym $mod+Next exec $spotify next
bindsym $mod+End exec $spotify prev
bindsym $mod+Delete exec $spotify play
############################################ ############################################
# Workspaces # # Workspaces #

View File

@ -29,12 +29,19 @@ separator_block_width=15
markup=none markup=none
# Currently playing song # Currently playing song
[music] [play_music]
command=python ~/.config/i3/scripts/blocks/currentSong.py --layout t-A command=python ~/.config/i3/scripts/blocks/currentSong.py --layout t-A
separator_block_width=13 separator_block_width=13
interval=1 interval=1
color=#e29e0b color=#e29e0b
[spotify]
command=bash ~/.config/i3/scripts/blocks/spotify.sh
separator_block_width=13
interval=1
color=#1DB954
# Temperature # Temperature
# #
# Support multiple chips, though lm-sensors. # Support multiple chips, though lm-sensors.

14
i3/scripts/blocks/spotify.sh Executable file
View 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
View 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.
#