289 lines
6.8 KiB
Lua
289 lines
6.8 KiB
Lua
-- ## Minimal music widget ##
|
|
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
-- Requirements :
|
|
-- ~~~~~~~~~~~~~~
|
|
local awful = require("awful")
|
|
local gears = require("gears")
|
|
local wibox = require("wibox")
|
|
local beautiful = require ("beautiful")
|
|
local dpi = beautiful.xresources.apply_dpi
|
|
|
|
|
|
-- # Libs :
|
|
-- ~~~~~~~~
|
|
local helpers = require("libs.helpers")
|
|
local playerctl = require("libs.bling").signal.playerctl.lib()
|
|
|
|
|
|
|
|
-- widgets
|
|
----------
|
|
-- gradientee music album art
|
|
-- - - - - - - - - - - - - -
|
|
local music_art_filter = wibox.widget({
|
|
{
|
|
bg = {
|
|
type = "linear",
|
|
from = { 0, 30 },
|
|
to = { 0, 200},
|
|
stops = {
|
|
{ 0, colors.transparent},
|
|
{ 1, colors.container }
|
|
},
|
|
},
|
|
forced_height = dpi(85),
|
|
forced_width = dpi(85),
|
|
widget = wibox.container.background,
|
|
},
|
|
direction = "east",
|
|
widget = wibox.container.rotate,
|
|
})
|
|
|
|
|
|
|
|
-- the different music elements
|
|
-- - - - - - - - - - - - - - -
|
|
|
|
-- album art
|
|
local album_art = wibox.widget{
|
|
widget = wibox.widget.imagebox,
|
|
clip_shape = helpers.rrect(theme.rounded),
|
|
forced_height = dpi(85),
|
|
forced_width = dpi(85),
|
|
image = theme.album_art
|
|
}
|
|
|
|
-- playing yeah?
|
|
local playing_or = wibox.widget{
|
|
widget = wibox.widget.textbox,
|
|
markup = helpers.colorize_text("Now playing", colors.white),
|
|
font = theme.font,
|
|
align = "left",
|
|
valign = "center"
|
|
}
|
|
|
|
-- song artist
|
|
local song_artist = wibox.widget{
|
|
widget = wibox.widget.textbox,
|
|
markup = helpers.colorize_text("Unknown", colors.white),
|
|
font = theme.font,
|
|
align = "left",
|
|
valign = "center"
|
|
}
|
|
|
|
-- song name
|
|
local song_name = wibox.widget{
|
|
widget = wibox.widget.textbox,
|
|
markup = helpers.colorize_text("None", colors.white),
|
|
font = theme.font,
|
|
align = "left",
|
|
valign = "center"
|
|
}
|
|
|
|
---------------------------------------- eo.Widgets
|
|
|
|
-- buttons
|
|
----------
|
|
|
|
-- toggle button
|
|
local toggle_button = wibox.widget{
|
|
widget = wibox.widget.textbox,
|
|
markup = helpers.colorize_text("", colors.white),
|
|
font = theme.sidebar_font,
|
|
align = "right",
|
|
valign = "center"
|
|
}
|
|
|
|
-- next button
|
|
local next_button = wibox.widget{
|
|
widget = wibox.widget.textbox,
|
|
markup = helpers.colorize_text("", colors.white),
|
|
font = theme.sidebar_font,
|
|
align = "right",
|
|
valign = "center"
|
|
}
|
|
|
|
-- prev button
|
|
local prev_button = wibox.widget{
|
|
widget = wibox.widget.textbox,
|
|
markup = helpers.colorize_text("", colors.white),
|
|
font = theme.sidebar_font,
|
|
align = "right",
|
|
valign = "center"
|
|
}
|
|
|
|
local music_bar = wibox.widget({
|
|
max_value = 100,
|
|
value = 0,
|
|
background_color = colors.brightblack,
|
|
-- shape = gears.shape.rounded_bar,
|
|
color = colors.main_scheme,
|
|
forced_height = dpi(6),
|
|
forced_width = dpi(100),
|
|
widget = wibox.widget.progressbar,
|
|
})
|
|
|
|
|
|
--------------------------------- eo.buttons
|
|
|
|
|
|
-- update widgets
|
|
-----------------
|
|
|
|
-- commands for different actions
|
|
local toggle_command = function() playerctl:play_pause() end
|
|
local prev_command = function() playerctl:previous() end
|
|
local next_command = function() playerctl:next() end
|
|
|
|
|
|
-- make it functional!
|
|
toggle_button:buttons(gears.table.join(
|
|
awful.button({}, 1, function() toggle_command() end)))
|
|
|
|
next_button:buttons(gears.table.join(
|
|
awful.button({}, 1, function() next_command() end)))
|
|
|
|
prev_button:buttons(gears.table.join(
|
|
awful.button({}, 1, function() prev_command() end)))
|
|
|
|
|
|
|
|
-- update widgets
|
|
-----------------
|
|
|
|
-- title, artist, album art
|
|
playerctl:connect_signal("metadata", function(_, title, artist, album_path, __, ___, ____)
|
|
if title == "" then
|
|
title = "None"
|
|
end
|
|
if artist == "" then
|
|
artist = "Unknown"
|
|
end
|
|
if album_path == "" then
|
|
album_path = theme.album_art
|
|
end
|
|
|
|
album_art:set_image(gears.surface.load_uncached(album_path))
|
|
song_name:set_markup_silently(helpers.colorize_text(title, colors.white))
|
|
song_artist:set_markup_silently(helpers.colorize_text(artist, colors.white))
|
|
|
|
|
|
end)
|
|
|
|
-- playing/paused/{N/A}
|
|
playerctl:connect_signal("playback_status", function(_, playing, __)
|
|
if playing then
|
|
toggle_button.markup = helpers.colorize_text("", colors.white)
|
|
else
|
|
toggle_button.markup = helpers.colorize_text("", colors.white)
|
|
end
|
|
end)
|
|
|
|
-- time elapsed
|
|
playerctl:connect_signal("position", function(_, interval_sec, length_sec)
|
|
music_bar.value = (interval_sec / length_sec) * 100
|
|
music_length = length_sec
|
|
end)
|
|
|
|
|
|
-- mainbox
|
|
-- too messy
|
|
------------
|
|
local music_box = wibox.widget {
|
|
{
|
|
{
|
|
album_art,
|
|
music_art_filter,
|
|
layout = wibox.layout.stack,
|
|
},
|
|
{
|
|
{
|
|
{
|
|
playing_or,
|
|
nil,
|
|
{
|
|
{
|
|
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
|
widget = wibox.container.scroll.horizontal,
|
|
forced_width = dpi(250),
|
|
speed = 30,
|
|
song_name,
|
|
},
|
|
{
|
|
step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
|
|
widget = wibox.container.scroll.horizontal,
|
|
forced_width = dpi(250),
|
|
speed = 30,
|
|
song_artist,
|
|
},
|
|
spacing = dpi(2),
|
|
layout = wibox.layout.fixed.vertical,
|
|
},
|
|
layout = wibox.layout.align.vertical,
|
|
expand = "none"
|
|
},
|
|
layout = wibox.layout.fixed.horizontal,
|
|
spacing = dpi(10)
|
|
},
|
|
widget = wibox.container.margin,
|
|
margins = {top = dpi(20), bottom = dpi(20), left = dpi(20), right = dpi(20)},
|
|
},
|
|
layout = wibox.layout.stack,
|
|
},
|
|
widget = wibox.container.background,
|
|
forced_height = dpi(150),
|
|
bg = colors.container,
|
|
border_color = colors.container,
|
|
shape = helpers.rrect(theme.rounded)
|
|
}
|
|
|
|
|
|
-- finalize
|
|
-----------
|
|
return wibox.widget {
|
|
{
|
|
music_box,
|
|
{
|
|
{
|
|
music_bar,
|
|
direction = "east",
|
|
widget = wibox.container.rotate,
|
|
forced_width = dpi(2)
|
|
},
|
|
layout = wibox.layout.fixed.horizontal,
|
|
spacing = dpi(20),
|
|
},
|
|
{
|
|
{
|
|
{
|
|
nil,
|
|
{
|
|
prev_button,
|
|
toggle_button,
|
|
next_button,
|
|
layout = wibox.layout.fixed.vertical,
|
|
spacing = dpi(22)
|
|
},
|
|
layout = wibox.layout.align.vertical,
|
|
expand = "none"
|
|
},
|
|
left = 17, right = 17,
|
|
widget = wibox.container.margin
|
|
},
|
|
bg = colors.brightblack,
|
|
widget = wibox.container.background,
|
|
},
|
|
layout = wibox.layout.fixed.horizontal,
|
|
spacing = dpi(0)
|
|
},
|
|
widget = wibox.container.background,
|
|
bg = colors.container,
|
|
shape = helpers.rrect(theme.rounded)
|
|
}
|
|
|
|
|
|
-- eof
|
|
------
|
|
|
|
|