Last active
February 22, 2024 09:54
-
-
Save rdschmidt/8c04aaf7050b493d239a7c040d41f7c6 to your computer and use it in GitHub Desktop.
Now Playing Conky, written in LUA
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--[[ | |
2024 Bleys | |
All scripts in the same directory! | |
Start the player via the player.sh script | |
]] | |
conky.config = { | |
-- — Conky settings | |
background = false, | |
update_interval = 1, | |
total_run_times = 0, | |
no_buffers = true, | |
imlib_cache_size = 0, | |
draw_graph_borders = true, | |
draw_outline = false, | |
-- — Window specifications | |
own_window = true, | |
own_window_transparent = true, | |
own_window_hints = 'undecorated,sticky,skip_taskbar,skip_pager,below', | |
double_buffer = true, | |
-- minimum_width = 155, minimum_height = 205, --kompakt | |
minimum_width = 400, minimum_height = 116, --lang | |
-- — Position on Desktop / Lage auf dem Desktop festlegen | |
alignment = 'bottom_middle', | |
gap_x = 20, | |
gap_y = 60, | |
border_inner_margin = 10, | |
-- Lua Load | |
lua_load = './now.lua', | |
lua_draw_hook_post = 'main', | |
}; | |
conky.text = [[ | |
]]; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
# Bleys 2023 | |
# dependencies: urlencode, qdbus | |
# sudo apt install gridsite-client qdbus | |
# | |
# | |
Player=$1 | |
if [ $(ps -C $Player -o pid=) ]; then | |
convertsec() | |
{ | |
x=`expr $1 / 1000000` | |
s=`expr $x % 60` | |
x=`expr $x / 60` | |
m=`expr $x % 60` | |
printf "%02d:%02d\n" $m $s | |
} | |
POS=$(qdbus org.mpris.MediaPlayer2.$Player /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Position) | |
TOTAL=$(qdbus org.mpris.MediaPlayer2.$Player /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Metadata | grep "^mpris:length" | awk '{print $2}') | |
if [ -z $TOTAL ] | |
then | |
positionTime="00:00" | |
lengthTime="00:00" | |
length="stopped" | |
position=1 | |
else | |
positionTime=$(convertsec $POS) | |
lengthTime=$(convertsec $TOTAL) | |
length=$(($TOTAL/1000000)) | |
position=$(($POS/1000000)) | |
fi | |
TEMP=$(qdbus org.mpris.MediaPlayer2.$Player /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Metadata | grep "artist:") | |
artist=${TEMP##*:} | |
TEMP=$(qdbus org.mpris.MediaPlayer2.$Player /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Metadata | grep "title:") | |
title=${TEMP##*:} | |
COVER=$(qdbus org.mpris.MediaPlayer2.$Player /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Metadata | grep "artUrl:") | |
str="'" | |
if [ -n "$COVER" -a $position -ge 1 ]; then | |
if [ "$Player" == "vlc" ]; then | |
uri=$(urlencode -d "$COVER") | |
COVER=${uri#*//} | |
convert "$COVER" '/tmp/tmp.png' | |
else | |
convert "${COVER#*//}" '/tmp/tmp.png' | |
fi | |
fi | |
vol=$(qdbus org.mpris.MediaPlayer2.$Player /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Volume) | |
echo $length";"$position";"$artist";"$title";"$positionTime";"$lengthTime";"$vol | |
fi | |
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'cairo' | |
require "imlib2" | |
home_path = os.getenv ('HOME') | |
pt={} | |
pt['bg_color']=0xffffff | |
pt['bg_alpha']=0.3 | |
pt['fg_color']=0xffffff | |
pt['fg_alpha']=1.0 | |
pt['width']=194 | |
pt['height']=6 | |
pt['x']=180 | |
pt['y']=15 | |
vl={} | |
vl['bg_color']=0xffffff | |
vl['bg_alpha']=0.3 | |
vl['fg_color']=0xffffff | |
vl['fg_alpha']=1.0 | |
vl['width']=210 | |
vl['height']=6 | |
vl['x']=158 | |
vl['y']=17 | |
function rgb_to_rgba(color,alpha) | |
return ((color / 0x10000) % 0x100) / 255., ((color / 0x100) % 0x100) / 255., (color % 0x100) / 255., alpha | |
end | |
function mysplit (inputstr, sep) | |
if sep == nil then | |
sep = ";" | |
end | |
local t={} | |
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do | |
table.insert(t, str) | |
end | |
return t | |
end | |
function draw_bg(cr,color,alpha,typ) -- zeichne Hintergrund Conky Fenster / draw Conky Area Background | |
local corner_r=0 | |
local bg_color=color | |
local bg_alpha=alpha | |
local w=conky_window.width | |
local h=conky_window.height | |
cairo_set_source_rgba(cr,rgb_to_rgba(bg_color,bg_alpha)) | |
cairo_move_to(cr,corner_r,0) | |
cairo_line_to(cr,w-corner_r,0) | |
cairo_curve_to(cr,w,0,w,0,w,corner_r) | |
cairo_line_to(cr,w,h-corner_r) | |
cairo_curve_to(cr,w,h,w,h,w-corner_r,h) | |
cairo_line_to(cr,corner_r,h) | |
cairo_curve_to(cr,0,h,0,h,0,h-corner_r) | |
cairo_line_to(cr,0,corner_r) | |
cairo_curve_to(cr,0,0,0,0,corner_r,0) | |
cairo_close_path(cr) | |
if typ==1 then | |
cairo_fill(cr) | |
else | |
cairo_stroke(cr) | |
end | |
end | |
function fDrawImage(cr,path,x,y,w,h) | |
cairo_save (cr) | |
local img = cairo_image_surface_create_from_png(path) | |
local w_img, h_img = cairo_image_surface_get_width(img), cairo_image_surface_get_height(img) | |
cairo_translate (cr, x, y) | |
cairo_scale (cr, w/w_img, h/h_img) | |
cairo_set_source_surface (cr, img, -w_img/2, -h_img/2) | |
cairo_paint (cr) | |
cairo_surface_destroy (img) | |
collectgarbage () | |
cairo_restore (cr) | |
end | |
function draw_bar(cr,pct,pt) | |
local bgc, bga, fgc, fga=pt['bg_color'], pt['bg_alpha'], pt['fg_color'], pt['fg_alpha'] | |
local w=pct*pt['width'] | |
local x=pt['x'] | |
local y=pt['y'] | |
-- Background | |
cairo_rectangle(cr, x, y, pt['width'], pt['height']) | |
cairo_set_source_rgba(cr,rgb_to_rgba(bgc,bga)) | |
cairo_fill(cr) | |
-- Indicator | |
cairo_rectangle(cr, x, y, w, pt['height']) | |
cairo_set_source_rgba(cr,rgb_to_rgba(fgc,fga)) | |
cairo_fill(cr) | |
cairo_stroke (cr) | |
end | |
function write_text(cr, x, y, text, f) | |
--write_text(cr, x, y, text, {}) | |
--font attributes (Schriftattribute zuweisen oder default Werte annehmen) | |
local font=f.font or "Noto Sans" | |
local size=f.size or 10 | |
local align=f.align or 'l' | |
local bold=f.bold or false | |
local ital=f.italic or false | |
local color=f.color or "0xffffff" | |
local slant=CAIRO_FONT_SLANT_NORMAL | |
if ital then slant=CAIRO_FONT_SLANT_ITALIC end | |
local weight=CAIRO_FONT_WEIGHT_NORMAL | |
if bold then weight=CAIRO_FONT_WEIGHT_BOLD end | |
--Text Size (Textgröße für die Plazierung bestimmen.) | |
local x_a=0 | |
local y_a=0 | |
local te = cairo_text_extents_t:create() | |
tolua.takeownership(te) | |
cairo_select_font_face (cr, font, slant, weight) | |
cairo_set_font_size (cr, size) | |
cairo_text_extents (cr, text, te) | |
--Text Position | |
if align=='c' then | |
x_a = -(te.width/2+te.x_bearing) | |
y_a = -(te.height/2+te.y_bearing) | |
end | |
if align=='r' then | |
x_a = -(te.width+te.x_bearing) | |
--y_a = -(te.height+te.y_bearing) | |
end | |
--Schadow 1 Pixel (Schatten für den Text um 1 Pixel versetzt) | |
cairo_set_source_rgba(cr, rgb_to_rgba(0x000000,1)) | |
cairo_move_to (cr, x+1+x_a, y+1+y_a) | |
cairo_show_text (cr, text) | |
cairo_stroke(cr) | |
-- Now Text on Top (nun den Text oben drauf) | |
cairo_set_source_rgba(cr, rgb_to_rgba(color,1)) | |
cairo_move_to (cr, x+x_a, y+y_a) | |
cairo_show_text (cr, text) | |
cairo_stroke(cr) | |
end | |
function conky_main() | |
function running(cr,player) -- is Player running? / läuft der Player? | |
local handle = io.popen("ps -U root -u root -N | awk '/"..player.."/{print $4}'") | |
local result = handle:read() | |
handle:close() | |
if result == player then | |
daten = mysplit (conky_parse('${exec bash ./mpris.sh '..player..'}')) -- length pos artist titel postime lengthtime vol album | |
if (daten[1]~="stopped") then | |
color=0xffffff alpha=0.1 typ=1 | |
draw_bg(cr,color,alpha,typ) -- Funktion Hintergrund Conky Bereich / Function Backgrounds Conky Area | |
color=0xffffff alpha=0.8 typ=2 | |
draw_bg(cr,color,alpha,typ) --zeichne Linie um den Bereich / Draw line around Conky Area | |
if daten[4] == daten [8] then | |
daten[8]=" Single" | |
end | |
write_text(cr, 130,84,daten[3], {font="Dyuthi", size=22, align="l"}) --artist | |
write_text(cr, 134,110,daten[8], {font="Dyuthi", size=16, align="l"}) --album | |
write_text(cr, 134,126,daten[4], {font="Dyuthi", size=16, align="l"}) --titel | |
write_text(cr, 145,22,daten[5], {font="Dyuthi", size=12, align="l"}) --position | |
write_text(cr, 410,22,daten[6], {font="Dyuthi", size=12, align="r"}) --length | |
value=tonumber(daten[2]) | |
total=tonumber(daten[1]) | |
if (value == nil or total == nil) then | |
pct=1 | |
else | |
pct=value/total | |
draw_bar(cr,pct,pt) | |
fDrawImage(cr,'/tmp/tmp.png',70,70,120,120) | |
end | |
-- write_text(cr, 130,55," "..player, {font="Dyuthi", size=22, align="l", color="0xff0000"}) --Player | |
end | |
else | |
stop=conky_parse('${exec bash stop.sh}') | |
end | |
end | |
if conky_window==nil then return end | |
local cs=cairo_xlib_surface_create(conky_window.display,conky_window.drawable,conky_window.visual, conky_window.width,conky_window.height) | |
local cr=cairo_create(cs) | |
local updates=conky_parse('${updates}') | |
update_num=tonumber(updates) | |
if update_num>5 then | |
-- Player Auswahl. Jeder mpris unterstützende Player ist möglich. / Player selection. Any mpris supporting player is possible. | |
player="clementine" | |
-- player="audacious" | |
-- player="vlc" | |
-- player="qmmp" | |
-- player="celluloid" | |
running(cr,player) | |
end | |
cairo_surface_destroy(cs) | |
cairo_destroy(cr) | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# | |
clementine & | |
# audacious & | |
# qmmp & | |
# vlc '/home/ralf/.conky/NowPlaying/favs.m3u'& | |
# celluloid '/home/ralf/.conky/NowPlaying/favs.m3u' & | |
sleep 1 | |
cd $HOME/.conky/NowPlaying | |
conky -c conkyrc & | |
echo $! > /tmp/pid | |
exit 0 | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
f=$(</tmp/pid) | |
kill -15 $f |
Author
rdschmidt
commented
Feb 26, 2023
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment