-- User profile widget -- Optional dependency: -- mugshot (use to update profile picture and information) local awful = require('awful') local wibox = require('wibox') local gears = require('gears') local naughty = require('naughty') local beautiful = require('beautiful') local dpi = beautiful.xresources.apply_dpi local apps = require('configuration.apps') local clickable_container = require('widget.clickable-container') local config_dir = gears.filesystem.get_configuration_dir() local widget_icon_dir = config_dir .. 'configuration/user-profile/' local user_icon_dir = '/var/lib/AccountsService/icons/' title_table = { "Hey, I have a message for you", "Listen here you little shit!", "Le' me tell you a secret", "I never lie", "Message received from your boss" } message_table = { "Let me rate your face! Oops... It looks like I can't compute negative numbers. You're ugly af, sorry", "Lookin' good today, now fuck off!", "The last thing I want to do is hurt you. But it’s still on the list.", "If I agreed with you we’d both be wrong.", "I intend to live forever. So far, so good.", "Jesus loves you, but everyone else thinks you’re an asshole.", "Your baby is so ugly, you should have thrown it away and kept the stork.", "If your brain was dynamite, there wouldn’t be enough to blow your hat off.", "You are more disappointing than an unsalted pretzel.", "Your kid is so ugly, he makes his Happy Meal cry.", "Your secrets are always safe with me. I never even listen when you tell me them.", "I only take you everywhere I go just so I don’t have to kiss you goodbye.", "You look so pretty. Not at all gross, today.", "It’s impossible to underestimate you.", "I’m not insulting you, I’m describing you.", "Keep rolling your eyes, you might eventually find a brain.", "You bring everyone so much joy, when you leave the room.", "I thought of you today. It reminded me to take out the trash.", "You are the human version of period cramps.", "You’re the reason God created the middle finger." } local profile_imagebox = wibox.widget { { id = 'icon', forced_height = dpi(45), forced_width = dpi(45), image = widget_icon_dir .. 'default' .. '.svg', clip_shape = function(cr, width, height) gears.shape.rounded_rect(cr, width, height, beautiful.groups_radius) end, widget = wibox.widget.imagebox, resize = true }, layout = wibox.layout.align.horizontal } profile_imagebox:buttons( gears.table.join( awful.button( {}, 1, nil, function() naughty.notification({ app_name = "FBI's ChatBot v69", title = title_table[math.random(#title_table)], message = message_table[math.random(#message_table)] .. "\n\n- xXChatBOT69Xx", urgency = 'normal' }) end ) ) ) local profile_name = wibox.widget { font = "SF Pro Text Bold 14", markup = 'User', align = 'left', valign = 'center', widget = wibox.widget.textbox } local distro_name = wibox.widget { font = "SF Pro Text Regular 11", markup = 'GNU/Linux', align = 'left', valign = 'center', widget = wibox.widget.textbox } local kernel_version = wibox.widget { font = "SF Pro Text Regular 10", markup = 'Linux', align = 'left', valign = 'center', widget = wibox.widget.textbox } local uptime_time = wibox.widget { font = "SF Pro Text Regular 10", markup = 'up 1 minute', align = 'left', valign = 'center', widget = wibox.widget.textbox } local update_profile_image = function() awful.spawn.easy_async_with_shell( apps.bins.update_profile, function(stdout) stdout = stdout:gsub('%\n','') if not stdout:match("default") then profile_imagebox.icon:set_image(stdout) else profile_imagebox.icon:set_image(widget_icon_dir .. 'default.svg') end end ) end update_profile_image() awful.spawn.easy_async_with_shell( "printf \"$(whoami)@$(hostname)\"", function(stdout) local stdout = stdout:gsub('%\n', '') -- stdout = stdout:sub(1,1):upper() .. stdout:sub(2) profile_name:set_markup(stdout) end ) awful.spawn.easy_async_with_shell( [[ cat /etc/os-release | awk 'NR==1'| awk -F '"' '{print $2}' ]], function(stdout) local distroname = stdout:gsub('%\n', '') distro_name:set_markup(distroname) end ) awful.spawn.easy_async_with_shell( 'uname -r', function(stdout) local kname = stdout:gsub('%\n', '') kernel_version:set_markup(kname) end ) local update_uptime = function() awful.spawn.easy_async_with_shell( "uptime -p", function(stdout) local uptime = stdout:gsub('%\n','') uptime_time:set_markup(uptime) end ) end local uptime_updater_timer = gears.timer{ timeout = 60, autostart = true, call_now = true, callback = function() update_uptime() end } local user_profile = wibox.widget { { { layout = wibox.layout.fixed.horizontal, spacing = dpi(10), { layout = wibox.layout.align.vertical, expand = 'none', nil, profile_imagebox, nil }, { layout = wibox.layout.align.vertical, expand = 'none', nil, { layout = wibox.layout.fixed.vertical, profile_name, distro_name, kernel_version, uptime_time }, nil } }, margins = dpi(10), widget = wibox.container.margin }, forced_height = dpi(92), bg = beautiful.groups_bg, shape = function(cr, width, height) gears.shape.rounded_rect(cr, width, height, beautiful.groups_radius) end, widget = wibox.container.background } user_profile:connect_signal( 'mouse::enter', function() update_uptime() end ) return user_profile