added some keyboard shortcuts to README and lots of cleanup
21
README.md
|
@ -4,3 +4,24 @@ To clone:
|
||||||
```
|
```
|
||||||
git clone https://github.com/adrielsand/awesome.git ~/.config/awesome
|
git clone https://github.com/adrielsand/awesome.git ~/.config/awesome
|
||||||
```
|
```
|
||||||
|
|
||||||
|
| Function | Shortcut |
|
||||||
|
|------------------------------------------:|----------------------:|
|
||||||
|
| Show hotkeys | Super + F1 |
|
||||||
|
| Search and open an app | Super + R |
|
||||||
|
| Change workspaces | Super + 1-7 |
|
||||||
|
| Move windows to a workspace | Super + Shift + 1-7 |
|
||||||
|
| Switch to previous workspace | Super + Esc |
|
||||||
|
| Switch windows | Super + Tab |
|
||||||
|
| Switch windows (reverse) | Super + Shift + Tab |
|
||||||
|
| Close a window | Super + Q |
|
||||||
|
| Maximize a window | Super + F |
|
||||||
|
| Change layout | Super + Space |
|
||||||
|
| Change layout (reverse) | Super + Shift + Space |
|
||||||
|
| Move window to next screen | Super + O |
|
||||||
|
| Minimize all windows in current workspace | Super + D |
|
||||||
|
| Open default app for current workspace | Super + T |
|
||||||
|
| Open a browser | Super + B |
|
||||||
|
| Open a file manager | Super + Shift + E |
|
||||||
|
| Open an audio manager | Super + Shift + A |
|
||||||
|
| Open an OBS window | Super + Shift + S |
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 25b7e94a34ed854697d61e3cbb0a3ebd9745dbd4
|
|
|
@ -21,11 +21,11 @@ awful.layout.layouts = {
|
||||||
-- awful.layout.suit.tile.left,
|
-- awful.layout.suit.tile.left,
|
||||||
-- awful.layout.suit.tile.bottom,
|
-- awful.layout.suit.tile.bottom,
|
||||||
-- awful.layout.suit.tile.top,
|
-- awful.layout.suit.tile.top,
|
||||||
--[[ awful.layout.suit.fair,
|
awful.layout.suit.fair,
|
||||||
-- awful.layout.suit.fair.horizontal,
|
-- awful.layout.suit.fair.horizontal,
|
||||||
-- awful.layout.suit.spiral,
|
-- awful.layout.suit.spiral,
|
||||||
awful.layout.suit.spiral.dwindle,
|
awful.layout.suit.spiral.dwindle,
|
||||||
--]] awful.layout.suit.max,
|
awful.layout.suit.max,
|
||||||
-- awful.layout.suit.max.fullscreen,
|
-- awful.layout.suit.max.fullscreen,
|
||||||
-- awful.layout.suit.magnifier,
|
-- awful.layout.suit.magnifier,
|
||||||
-- awful.layout.suit.corner.nw,
|
-- awful.layout.suit.corner.nw,
|
||||||
|
|
|
@ -2,14 +2,6 @@ local wibox = require('wibox')
|
||||||
local mat_list_item = require('widget.material.list-item')
|
local mat_list_item = require('widget.material.list-item')
|
||||||
|
|
||||||
return wibox.widget {
|
return wibox.widget {
|
||||||
-- wibox.widget {
|
|
||||||
-- wibox.widget {
|
|
||||||
-- text = 'Quick settings',
|
|
||||||
-- font = 'Roboto medium 12',
|
|
||||||
-- widget = wibox.widget.textbox
|
|
||||||
-- },
|
|
||||||
-- widget = mat_list_item
|
|
||||||
-- },
|
|
||||||
require('widget.volume.volume-slider'),
|
require('widget.volume.volume-slider'),
|
||||||
require('widget.brightness.brightness-slider'),
|
require('widget.brightness.brightness-slider'),
|
||||||
layout = wibox.layout.fixed.vertical
|
layout = wibox.layout.fixed.vertical
|
||||||
|
|
|
@ -45,7 +45,6 @@ local TopBar = function(s, offset)
|
||||||
-- SYSTEM DETAILS
|
-- SYSTEM DETAILS
|
||||||
-- ==============
|
-- ==============
|
||||||
local volume_widget = require('widget.volume')
|
local volume_widget = require('widget.volume')
|
||||||
local battery_widget = require('widget.battery')
|
|
||||||
local clock_widget = require('widget.clock')
|
local clock_widget = require('widget.clock')
|
||||||
local mem_widget = require('widget.memory')
|
local mem_widget = require('widget.memory')
|
||||||
local cpu_widget = require('widget.cpu')
|
local cpu_widget = require('widget.cpu')
|
||||||
|
@ -54,8 +53,6 @@ local TopBar = function(s, offset)
|
||||||
local system_details = wibox.widget {
|
local system_details = wibox.widget {
|
||||||
systray,
|
systray,
|
||||||
separator,
|
separator,
|
||||||
--battery_widget,
|
|
||||||
--separator,
|
|
||||||
wibox.widget{
|
wibox.widget{
|
||||||
wibox.widget{
|
wibox.widget{
|
||||||
text = 'mem',
|
text = 'mem',
|
||||||
|
|
|
@ -167,59 +167,6 @@ dashboard:buttons(gears.table.join( -- Middle click - Hide dashboard
|
||||||
awful.button({}, 2, function() dashboard_hide() end),
|
awful.button({}, 2, function() dashboard_hide() end),
|
||||||
awful.button({}, 3, function() dashboard_hide() end)))
|
awful.button({}, 3, function() dashboard_hide() end)))
|
||||||
|
|
||||||
local profile_picture = os.getenv("HOME") ..
|
|
||||||
"/.face"
|
|
||||||
|
|
||||||
local profile = wibox.widget {
|
|
||||||
wibox.widget {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
{
|
|
||||||
{
|
|
||||||
image = profile_picture,
|
|
||||||
resize = true,
|
|
||||||
widget = wibox.widget.imagebox
|
|
||||||
},
|
|
||||||
resize = true,
|
|
||||||
top = dpi(12),
|
|
||||||
right = dpi(12),
|
|
||||||
left = dpi(12),
|
|
||||||
widget = wibox.container.margin
|
|
||||||
},
|
|
||||||
bg = beautiful.groups_bg,
|
|
||||||
shape = panel_style,
|
|
||||||
widget = wibox.container.background
|
|
||||||
},
|
|
||||||
forced_width = dpi(244),
|
|
||||||
forced_height = dpi(244),
|
|
||||||
visible = true,
|
|
||||||
bg = beautiful.bg_normal,
|
|
||||||
shape = panel_style,
|
|
||||||
widget = wibox.container.background
|
|
||||||
},
|
|
||||||
wibox.widget {
|
|
||||||
{
|
|
||||||
wibox.widget {
|
|
||||||
text = '@' .. username,
|
|
||||||
font = beautiful.font_large,
|
|
||||||
align = 'center',
|
|
||||||
valign = 'center',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
bottom = dpi(8),
|
|
||||||
widget = wibox.container.margin
|
|
||||||
},
|
|
||||||
fg = beautiful.primary.hue_500,
|
|
||||||
widget = wibox.container.background
|
|
||||||
},
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
},
|
|
||||||
visible = true,
|
|
||||||
bg = beautiful.bg_normal,
|
|
||||||
shape = panel_style,
|
|
||||||
widget = wibox.container.background
|
|
||||||
}
|
|
||||||
|
|
||||||
local power_options = wibox.widget {
|
local power_options = wibox.widget {
|
||||||
{
|
{
|
||||||
poweroff,
|
poweroff,
|
||||||
|
@ -230,7 +177,7 @@ local power_options = wibox.widget {
|
||||||
layout = wibox.layout.flex.horizontal
|
layout = wibox.layout.flex.horizontal
|
||||||
},
|
},
|
||||||
visible = true,
|
visible = true,
|
||||||
bg = beautiful.primary.hue_900,
|
bg = beautiful.bg_normal,
|
||||||
shape = panel_style,
|
shape = panel_style,
|
||||||
widget = wibox.container.background
|
widget = wibox.container.background
|
||||||
}
|
}
|
||||||
|
@ -242,19 +189,7 @@ local search_button = wibox.widget {
|
||||||
layout = wibox.layout.fixed.vertical
|
layout = wibox.layout.fixed.vertical
|
||||||
},
|
},
|
||||||
visible = true,
|
visible = true,
|
||||||
bg = beautiful.primary.hue_200,
|
bg = beautiful.bg_normal,
|
||||||
shape = panel_style,
|
|
||||||
widget = wibox.container.background
|
|
||||||
}
|
|
||||||
|
|
||||||
local close_button = wibox.widget {
|
|
||||||
{
|
|
||||||
close,
|
|
||||||
bg = beautiful.primary.hue_600,
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
},
|
|
||||||
visible = true,
|
|
||||||
bg = beautiful.primary.hue_350,
|
|
||||||
shape = panel_style,
|
shape = panel_style,
|
||||||
widget = wibox.container.background
|
widget = wibox.container.background
|
||||||
}
|
}
|
||||||
|
@ -292,145 +227,6 @@ local hardware_monitor = wibox.widget {
|
||||||
widget = wibox.container.background
|
widget = wibox.container.background
|
||||||
}
|
}
|
||||||
|
|
||||||
local cal = require('widget.calendar')
|
|
||||||
|
|
||||||
--[[local calwidget = wibox.widget {
|
|
||||||
{
|
|
||||||
nil,
|
|
||||||
{cal, margins = dpi(16), widget = wibox.container.margin},
|
|
||||||
nil,
|
|
||||||
layout = wibox.layout.flex.horizontal
|
|
||||||
},
|
|
||||||
resize = true,
|
|
||||||
shape = panel_style,
|
|
||||||
bg = beautiful.bg_normal,
|
|
||||||
widget = wibox.container.background
|
|
||||||
}]]
|
|
||||||
|
|
||||||
-- Fortune widget Credits: u/EmpressNoodle, github/elenapan
|
|
||||||
local fortune_command = "fortune -n 140 -s"
|
|
||||||
local fortune_update_interval = 3600
|
|
||||||
-- local fortune_command = "fortune -n 140 -s computers"
|
|
||||||
local fortune = wibox.widget {
|
|
||||||
font = "Roboto 11",
|
|
||||||
text = "You so poor you don't even have a cookie yet...",
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
}
|
|
||||||
|
|
||||||
local update_fortune = function()
|
|
||||||
awful.spawn.easy_async_with_shell(fortune_command, function(out)
|
|
||||||
-- Remove trailing whitespaces
|
|
||||||
out = out:gsub('^%s*(.-)%s*$', '%1')
|
|
||||||
fortune.markup = "<i>" .. out .. "</i>"
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
gears.timer {
|
|
||||||
autostart = true,
|
|
||||||
timeout = fortune_update_interval,
|
|
||||||
single_shot = false,
|
|
||||||
call_now = true,
|
|
||||||
callback = update_fortune
|
|
||||||
}
|
|
||||||
|
|
||||||
local fortune_widget = wibox.widget {
|
|
||||||
{
|
|
||||||
{fortune, layout = wibox.layout.flex.horizontal},
|
|
||||||
margins = dpi(16),
|
|
||||||
widget = wibox.container.margin
|
|
||||||
},
|
|
||||||
bg = beautiful.primary.hue_700,
|
|
||||||
fg = beautiful.primary.hue_900,
|
|
||||||
shape = panel_style,
|
|
||||||
forced_height = dpi(112),
|
|
||||||
widget = wibox.container.background
|
|
||||||
}
|
|
||||||
|
|
||||||
local uptime_text = wibox.widget.textbox()
|
|
||||||
uptime_text.font = "Roboto 10"
|
|
||||||
uptime_text.valign = "center"
|
|
||||||
awful.widget.watch("uptime -p | sed 's/^...//'", 60, function(_, stdout)
|
|
||||||
local out = stdout:gsub('^%s*(.-)%s*up', '%1')
|
|
||||||
uptime_text.text = out
|
|
||||||
end)
|
|
||||||
|
|
||||||
local uptime_widget = wibox.widget {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
{
|
|
||||||
image = icons.uptime,
|
|
||||||
resize = true,
|
|
||||||
forced_width = dpi(24),
|
|
||||||
widget = wibox.widget.imagebox
|
|
||||||
},
|
|
||||||
uptime_text,
|
|
||||||
spacing = dpi(8),
|
|
||||||
layout = wibox.layout.fixed.horizontal
|
|
||||||
},
|
|
||||||
margins = dpi(16),
|
|
||||||
widget = wibox.container.margin
|
|
||||||
},
|
|
||||||
bg = beautiful.bg_normal,
|
|
||||||
shape = panel_style,
|
|
||||||
forced_height = dpi(48),
|
|
||||||
forced_width = dpi(182),
|
|
||||||
widget = wibox.container.background
|
|
||||||
}
|
|
||||||
|
|
||||||
-- Bookmarks
|
|
||||||
function reddit_command()
|
|
||||||
dashboard_hide()
|
|
||||||
awful.spawn(apps.default.browser .. " " .. "reddit.com")
|
|
||||||
end
|
|
||||||
|
|
||||||
function youtube_command()
|
|
||||||
dashboard_hide()
|
|
||||||
awful.spawn(apps.default.browser .. " " .. "youtube.com")
|
|
||||||
end
|
|
||||||
|
|
||||||
function linkedin_command()
|
|
||||||
dashboard_hide()
|
|
||||||
awful.spawn(apps.default.browser .. " " .. "linkedin.com")
|
|
||||||
end
|
|
||||||
|
|
||||||
function github_command()
|
|
||||||
dashboard_hide()
|
|
||||||
awful.spawn(apps.default.browser .. " " .. "github.com")
|
|
||||||
end
|
|
||||||
|
|
||||||
function deviantart_command()
|
|
||||||
dashboard_hide()
|
|
||||||
awful.spawn(apps.default.browser .. " " .. "deviantart.com")
|
|
||||||
end
|
|
||||||
|
|
||||||
function codeforces_command()
|
|
||||||
dashboard_hide()
|
|
||||||
awful.spawn(apps.default.browser .. " " .. "codeforces.com")
|
|
||||||
end
|
|
||||||
|
|
||||||
function files_command(directory)
|
|
||||||
dashboard_hide()
|
|
||||||
awful.spawn(apps.default.files .. " " .. directory)
|
|
||||||
end
|
|
||||||
|
|
||||||
local reddit = buildButton(icons.reddit, 'Reddit')
|
|
||||||
reddit:connect_signal('button::release', function() reddit_command() end)
|
|
||||||
|
|
||||||
local youtube = buildButton(icons.youtube, 'Youtube')
|
|
||||||
youtube:connect_signal('button::release', function() youtube_command() end)
|
|
||||||
|
|
||||||
local linkedin = buildButton(icons.linkedin, 'Linkedin')
|
|
||||||
linkedin:connect_signal('button::release', function() linkedin_command() end)
|
|
||||||
|
|
||||||
local github = buildButton(icons.github, 'Github')
|
|
||||||
github:connect_signal('button::release', function() github_command() end)
|
|
||||||
|
|
||||||
local deviantart = buildButton(icons.deviantart, 'Deviantart')
|
|
||||||
deviantart:connect_signal('button::release', function() deviantart_command() end)
|
|
||||||
|
|
||||||
local codeforces = buildButton(icons.codeforces, 'Codeforces')
|
|
||||||
codeforces:connect_signal('button::release', function() codeforces_command() end)
|
|
||||||
|
|
||||||
local home = buildLabel('Home')
|
local home = buildLabel('Home')
|
||||||
home:connect_signal('button::release', function() files_command(".") end)
|
home:connect_signal('button::release', function() files_command(".") end)
|
||||||
|
|
||||||
|
@ -453,23 +249,9 @@ local documents = buildLabel('Documents')
|
||||||
documents:connect_signal('button::release',
|
documents:connect_signal('button::release',
|
||||||
function() files_command("Documents") end)
|
function() files_command("Documents") end)
|
||||||
|
|
||||||
local bookmarks = wibox.widget {
|
|
||||||
{
|
|
||||||
{reddit, youtube, linkedin, layout = wibox.layout.flex.horizontal},
|
|
||||||
{github, deviantart, codeforces, layout = wibox.layout.ratio.horizontal},
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
},
|
|
||||||
visible = true,
|
|
||||||
bg = beautiful.bg_normal,
|
|
||||||
shape = panel_style,
|
|
||||||
forced_width = dpi(182),
|
|
||||||
widget = wibox.container.background
|
|
||||||
}
|
|
||||||
|
|
||||||
local places = wibox.widget {
|
local places = wibox.widget {
|
||||||
{
|
{
|
||||||
{
|
{ home,
|
||||||
home,
|
|
||||||
desktop,
|
desktop,
|
||||||
downloads,
|
downloads,
|
||||||
pictures,
|
pictures,
|
||||||
|
@ -494,7 +276,6 @@ dashboard:setup{
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
search_button,
|
search_button,
|
||||||
close_button,
|
|
||||||
spacing = dpi(10),
|
spacing = dpi(10),
|
||||||
layout = wibox.layout.fixed.vertical
|
layout = wibox.layout.fixed.vertical
|
||||||
},
|
},
|
||||||
|
@ -503,15 +284,12 @@ dashboard:setup{
|
||||||
{
|
{
|
||||||
quick_settings,
|
quick_settings,
|
||||||
hardware_monitor,
|
hardware_monitor,
|
||||||
fortune_widget,
|
|
||||||
forced_width = dpi(300),
|
forced_width = dpi(300),
|
||||||
spacing = dpi(10),
|
spacing = dpi(10),
|
||||||
layout = wibox.layout.fixed.vertical
|
layout = wibox.layout.fixed.vertical
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
bookmarks,
|
|
||||||
places,
|
places,
|
||||||
spacing = dpi(10),
|
|
||||||
layout = wibox.layout.fixed.vertical
|
layout = wibox.layout.fixed.vertical
|
||||||
},
|
},
|
||||||
spacing = dpi(10),
|
spacing = dpi(10),
|
||||||
|
@ -519,19 +297,12 @@ dashboard:setup{
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
power_options,
|
power_options,
|
||||||
uptime_widget,
|
|
||||||
spacing = dpi(10),
|
spacing = dpi(10),
|
||||||
layout = wibox.layout.fixed.horizontal
|
layout = wibox.layout.fixed.horizontal
|
||||||
},
|
},
|
||||||
spacing = dpi(10),
|
spacing = dpi(10),
|
||||||
layout = wibox.layout.fixed.vertical
|
layout = wibox.layout.fixed.vertical
|
||||||
},
|
},
|
||||||
{
|
|
||||||
profile,
|
|
||||||
calWidget,
|
|
||||||
spacing = dpi(10),
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
},
|
|
||||||
spacing = dpi(10),
|
spacing = dpi(10),
|
||||||
layout = wibox.layout.fixed.horizontal
|
layout = wibox.layout.fixed.horizontal
|
||||||
},
|
},
|
||||||
|
|
|
@ -47,7 +47,7 @@ return {
|
||||||
hue_800 = '#d6d6d6', -- light gray
|
hue_800 = '#d6d6d6', -- light gray
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
flat_remix_teal = {
|
default = {
|
||||||
primary = {
|
primary = {
|
||||||
hue_100 = '#212121',
|
hue_100 = '#212121',
|
||||||
hue_200 = '#3c3c3c'
|
hue_200 = '#3c3c3c'
|
||||||
|
|
Before Width: | Height: | Size: 8.7 KiB |
|
@ -1 +1,39 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M12,8A4,4 0 0,0 8,12A4,4 0 0,0 12,16A4,4 0 0,0 16,12A4,4 0 0,0 12,8M12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6A6,6 0 0,1 18,12A6,6 0 0,1 12,18M20,8.69V4H15.31L12,0.69L8.69,4H4V8.69L0.69,12L4,15.31V20H8.69L12,23.31L15.31,20H20V15.31L23.31,12L20,8.69Z" /></svg>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
width="240"
|
||||||
|
height="240"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
id="svg4"
|
||||||
|
sodipodi:docname="brightness-7.svg"
|
||||||
|
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs8" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview6"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:pageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="119.5"
|
||||||
|
inkscape:cy="121"
|
||||||
|
inkscape:window-width="950"
|
||||||
|
inkscape:window-height="529"
|
||||||
|
inkscape:window-x="962"
|
||||||
|
inkscape:window-y="559"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="svg4" />
|
||||||
|
<path
|
||||||
|
fill="#ffffff"
|
||||||
|
d="M 12,9.3281552 A 2.6718448,2.6718448 0 0 0 9.3281552,12 2.6718448,2.6718448 0 0 0 12,14.671845 2.6718448,2.6718448 0 0 0 14.671845,12 2.6718448,2.6718448 0 0 0 12,9.3281552 m 0,6.6796118 A 4.0077672,4.0077672 0 0 1 7.9922328,12 4.0077672,4.0077672 0 0 1 12,7.9922328 4.0077672,4.0077672 0 0 1 16.007767,12 4.0077672,4.0077672 0 0 1 12,16.007767 M 17.34369,9.7890484 V 6.6563104 H 14.210952 L 12,4.4453589 9.7890484,6.6563104 h -3.132738 v 3.132738 L 4.4453589,12 6.6563104,14.210952 v 3.132738 h 3.132738 L 12,19.554641 14.210952,17.34369 H 17.34369 V 14.210952 L 19.554641,12 Z"
|
||||||
|
id="path2"
|
||||||
|
style="stroke-width:0.667961" />
|
||||||
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 554 B After Width: | Height: | Size: 1.6 KiB |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z" /></svg>
|
|
Before Width: | Height: | Size: 421 B |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M8,3A2,2 0 0,0 6,5V9A2,2 0 0,1 4,11H3V13H4A2,2 0 0,1 6,15V19A2,2 0 0,0 8,21H10V19H8V14A2,2 0 0,0 6,12A2,2 0 0,0 8,10V5H10V3M16,3A2,2 0 0,1 18,5V9A2,2 0 0,0 20,11H21V13H20A2,2 0 0,0 18,15V19A2,2 0 0,1 16,21H14V19H16V14A2,2 0 0,1 18,12A2,2 0 0,1 16,10V5H14V3H16Z" /></svg>
|
|
Before Width: | Height: | Size: 572 B |
|
@ -1,52 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
viewBox="9.7 16.5 280 266"
|
|
||||||
version="1.1"
|
|
||||||
id="svg4"
|
|
||||||
sodipodi:docname="firefox.svg"
|
|
||||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
|
||||||
<metadata
|
|
||||||
id="metadata10">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<defs
|
|
||||||
id="defs8" />
|
|
||||||
<sodipodi:namedview
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1872"
|
|
||||||
inkscape:window-height="1032"
|
|
||||||
id="namedview6"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="3.1541353"
|
|
||||||
inkscape:cx="140"
|
|
||||||
inkscape:cy="133"
|
|
||||||
inkscape:window-x="48"
|
|
||||||
inkscape:window-y="48"
|
|
||||||
inkscape:window-maximized="0"
|
|
||||||
inkscape:current-layer="svg4" />
|
|
||||||
<path
|
|
||||||
d="M288.9 113.8c-1.4 3.5-2.5 7.1-3.9 10.6-1-14.7-3.4-29.3-8.1-43.2-3.2-8.6-6.9-17.2-13.3-23.9.9 8.2 3 16.2 2.8 24.5-1.8-6.3-3.9-12.7-7.7-18.1-8.2-12.7-21.5-21.3-35.7-25.9-3.7-1.2-7.6-1.9-10.9-3.9-20.4-11.9-44.2-17.8-67.8-17.2-30.7.4-60.9 12.5-83.4 33.3-3.5 3.3-6.7 6.9-10.2 10.3-6.1-7.1-9.2-16.1-9.6-25.4-5.5 4.7-8.7 11.5-11 18.2-3.2 9.4-4.9 19.4-3.9 29.3.1 2.2.7 4.6-.8 6.5-7.8 11.4-14.1 24.4-15.6 38.3 2.5-1.7 4.9-3.5 7.4-5.2-1 5-2.4 10-3.2 15.1-3.5 24.5 1 50 12.7 71.9 12.8 23.6 32.6 43.1 55.9 56.4 26.2 14.9 57.5 20.4 87.3 15.6 26-4.3 51.2-15.7 69.8-34.6 13.2-13.4 24.7-28.5 33-45.4 13.6-26.8 19.3-57.5 16.2-87.2m-48.7 38.4c-2.7-5.5-4.1-12-9.3-15.8 1.3 13.8 1.9 27.8-1.2 41.4-1.9 9.2-6 18.1-12.7 24.8 1.2-6.6 2.3-13.3 1.9-20-9.7 13.1-21.4 25.2-36.3 32.3-12.6 6.1-27.5 5.8-40.7 1.7-12-3.9-22.4-11.3-31.6-19.7h3.2c9 .6 18.1-.7 26.7-3.2 8.6-2.5 15-8.9 22.5-13.4 3.5-2.1 7.9-1.2 11.7-2.3 2.4-1.3 3.2-4.8 1-6.7-5.6-6.1-13.7-11-22.2-10-8.2 1.2-14.9 6.8-23 8.7-5.8 1-11.7-.8-16.8-3.4-7.3-3.7-12.8-9.9-18-16l-2.3-1.9c0-.9 0-1.9.1-2.8.5-2.5 1.9-4.7 3.1-7l1.4-2.8c8.1.6 16.1 1.9 24 3.9-.1-7.5-.6-16-5.2-22.2l1.6-1.2c5.1-4 9.8-8.7 15.5-11.8 2.3-1.2 4.4-2.8 6.1-4.7l.4-3.4h-.1c.1-1.3-.1-2.7-.1-4-2.8-.3-5.6-.5-8.5-.5l-7.8-.5c-.6-.4-1.2-.8-1.8-1.1-5.3-3.3-9.9-7.7-14.9-11.4l-2-1.8.3-2.7c1.9-12.5 11.1-22.3 20.7-29.8-6.8 1-13.5 2.9-19.6 6C99.9 54 94.4 58.7 89 63.3c-10.9-2.8-22.6-1.1-33 2.9-5.1 2.3-9.7 5.7-14.7 8.3 3.2-3.2 6.9-5.7 10.5-8.5 3.2-2.4 5.6-5.7 8.4-8.5 20.8-21.4 49.9-34.3 79.6-35.8 19.7-1 40 2.1 57.8 10.8-4.8-.2-9.5-.5-14.3-.4 10.7 3.2 23.2 6.6 29.2 17-5.5.2-11.1.3-16.4 2.1 15.3 5.9 30.7 13.2 42.1 25.4 6.8 7.3 11.5 16.8 11.3 27-3.6-2.7-7.3-5.2-11.3-7.2 4.3 18.1 7 37.4 2 55.8"
|
|
||||||
id="path2"
|
|
||||||
style="fill:#ffffff" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 3.1 KiB |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M6,22A3,3 0 0,1 3,19C3,18.4 3.18,17.84 3.5,17.37L9,7.81V6A1,1 0 0,1 8,5V4A2,2 0 0,1 10,2H14A2,2 0 0,1 16,4V5A1,1 0 0,1 15,6V7.81L20.5,17.37C20.82,17.84 21,18.4 21,19A3,3 0 0,1 18,22H6M5,19A1,1 0 0,0 6,20H18A1,1 0 0,0 19,19C19,18.79 18.93,18.59 18.82,18.43L16.53,14.47L14,17L8.93,11.93L5.18,18.43C5.07,18.59 5,18.79 5,19M13,10A1,1 0 0,0 12,11A1,1 0 0,0 13,12A1,1 0 0,0 14,11A1,1 0 0,0 13,10Z" /></svg>
|
|
Before Width: | Height: | Size: 702 B |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z" /></svg>
|
|
Before Width: | Height: | Size: 405 B |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M17,12V3A1,1 0 0,0 16,2H3A1,1 0 0,0 2,3V17L6,13H16A1,1 0 0,0 17,12M21,6H19V15H6V17A1,1 0 0,0 7,18H18L22,22V7A1,1 0 0,0 21,6Z" /></svg>
|
|
Before Width: | Height: | Size: 436 B |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M12,20L15.46,14H15.45C15.79,13.4 16,12.73 16,12C16,10.8 15.46,9.73 14.62,9H19.41C19.79,9.93 20,10.94 20,12A8,8 0 0,1 12,20M4,12C4,10.54 4.39,9.18 5.07,8L8.54,14H8.55C9.24,15.19 10.5,16 12,16C12.45,16 12.88,15.91 13.29,15.77L10.89,19.91C7,19.37 4,16.04 4,12M15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9A3,3 0 0,1 15,12M12,4C14.96,4 17.54,5.61 18.92,8H12C10.06,8 8.45,9.38 8.08,11.21L5.7,7.08C7.16,5.21 9.44,4 12,4M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z" /></svg>
|
|
Before Width: | Height: | Size: 807 B |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M7.97,16L5,19C4.67,19.3 4.23,19.5 3.75,19.5A1.75,1.75 0 0,1 2,17.75V17.5L3,10.12C3.21,7.81 5.14,6 7.5,6H16.5C18.86,6 20.79,7.81 21,10.12L22,17.5V17.75A1.75,1.75 0 0,1 20.25,19.5C19.77,19.5 19.33,19.3 19,19L16.03,16H7.97M7,8V10H5V11H7V13H8V11H10V10H8V8H7M16.5,8A0.75,0.75 0 0,0 15.75,8.75A0.75,0.75 0 0,0 16.5,9.5A0.75,0.75 0 0,0 17.25,8.75A0.75,0.75 0 0,0 16.5,8M14.75,9.75A0.75,0.75 0 0,0 14,10.5A0.75,0.75 0 0,0 14.75,11.25A0.75,0.75 0 0,0 15.5,10.5A0.75,0.75 0 0,0 14.75,9.75M18.25,9.75A0.75,0.75 0 0,0 17.5,10.5A0.75,0.75 0 0,0 18.25,11.25A0.75,0.75 0 0,0 19,10.5A0.75,0.75 0 0,0 18.25,9.75M16.5,11.5A0.75,0.75 0 0,0 15.75,12.25A0.75,0.75 0 0,0 16.5,13A0.75,0.75 0 0,0 17.25,12.25A0.75,0.75 0 0,0 16.5,11.5Z" /></svg>
|
|
Before Width: | Height: | Size: 1023 B |
|
@ -1,18 +1,6 @@
|
||||||
local dir = os.getenv('HOME') .. '/.config/awesome/theme/icons'
|
local dir = os.getenv('HOME') .. '/.config/awesome/theme/icons'
|
||||||
|
|
||||||
return {
|
return {
|
||||||
--tags
|
|
||||||
chrome = dir .. '/firefox.svg',
|
|
||||||
code = dir .. '/code-braces.svg',
|
|
||||||
social = dir .. '/forum.svg',
|
|
||||||
folder = dir .. '/folder.svg',
|
|
||||||
music = dir .. '/music.svg',
|
|
||||||
game = dir .. '/google-controller.svg',
|
|
||||||
lab = dir .. '/flask.svg',
|
|
||||||
play = dir .. '/play.svg',
|
|
||||||
--others
|
|
||||||
menu = dir .. '/menu.svg',
|
|
||||||
close = dir .. '/close.svg',
|
|
||||||
logout = dir .. '/logout.svg',
|
logout = dir .. '/logout.svg',
|
||||||
sleep = dir .. '/power-sleep.svg',
|
sleep = dir .. '/power-sleep.svg',
|
||||||
power = dir .. '/power.svg',
|
power = dir .. '/power.svg',
|
||||||
|
@ -25,5 +13,4 @@ return {
|
||||||
memory = dir .. '/memory.svg',
|
memory = dir .. '/memory.svg',
|
||||||
harddisk = dir .. '/harddisk.svg',
|
harddisk = dir .. '/harddisk.svg',
|
||||||
thermometer = dir .. '/thermometer.svg',
|
thermometer = dir .. '/thermometer.svg',
|
||||||
plus = dir .. '/plus.svg'
|
|
||||||
}
|
}
|
||||||
|
|
Before Width: | Height: | Size: 322 B |
Before Width: | Height: | Size: 236 B |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z" /></svg>
|
|
Before Width: | Height: | Size: 358 B |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M21,3V15.5A3.5,3.5 0 0,1 17.5,19A3.5,3.5 0 0,1 14,15.5A3.5,3.5 0 0,1 17.5,12C18.04,12 18.55,12.12 19,12.34V6.47L9,8.6V17.5A3.5,3.5 0 0,1 5.5,21A3.5,3.5 0 0,1 2,17.5A3.5,3.5 0 0,1 5.5,14C6.04,14 6.55,14.12 7,14.34V6L21,3Z" /></svg>
|
|
Before Width: | Height: | Size: 532 B |
|
@ -1,97 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
version="1.1"
|
|
||||||
id="Capa_1"
|
|
||||||
x="0px"
|
|
||||||
y="0px"
|
|
||||||
width="163.861px"
|
|
||||||
height="163.861px"
|
|
||||||
viewBox="0 0 163.861 163.861"
|
|
||||||
style="enable-background:new 0 0 163.861 163.861;"
|
|
||||||
xml:space="preserve"
|
|
||||||
sodipodi:docname="play-button-arrowhead.svg"
|
|
||||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
|
||||||
id="metadata41"><rdf:RDF><cc:Work
|
|
||||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
|
||||||
id="defs39" /><sodipodi:namedview
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1"
|
|
||||||
objecttolerance="10"
|
|
||||||
gridtolerance="10"
|
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="920"
|
|
||||||
inkscape:window-height="500"
|
|
||||||
id="namedview37"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="0.55861271"
|
|
||||||
inkscape:cx="105.18391"
|
|
||||||
inkscape:cy="152.94358"
|
|
||||||
inkscape:window-x="988"
|
|
||||||
inkscape:window-y="568"
|
|
||||||
inkscape:window-maximized="0"
|
|
||||||
inkscape:current-layer="Capa_1" />
|
|
||||||
<g
|
|
||||||
id="g4"
|
|
||||||
style="fill:#ffffff">
|
|
||||||
<path
|
|
||||||
d="M34.857,3.613C20.084-4.861,8.107,2.081,8.107,19.106v125.637c0,17.042,11.977,23.975,26.75,15.509L144.67,97.275 c14.778-8.477,14.778-22.211,0-30.686L34.857,3.613z"
|
|
||||||
id="path2"
|
|
||||||
style="fill:#ffffff" />
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g6">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g8">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g10">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g12">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g14">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g16">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g18">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g20">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g22">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g24">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g26">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g28">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g30">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g32">
|
|
||||||
</g>
|
|
||||||
<g
|
|
||||||
id="g34">
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.0 KiB |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" /></svg>
|
|
Before Width: | Height: | Size: 353 B |
|
@ -1 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M2,11L4.05,11.1C4.3,8.83 5.5,6.85 7.25,5.56L6.13,3.84C5.86,3.36 6,2.75 6.5,2.47C7,2.2 7.59,2.36 7.87,2.84L8.8,4.66C9.78,4.24 10.86,4 12,4C13.14,4 14.22,4.24 15.2,4.66L16.13,2.84C16.41,2.36 17,2.2 17.5,2.47C18,2.75 18.14,3.36 17.87,3.84L16.75,5.56C18.5,6.85 19.7,8.83 19.95,11.1L22,11A1,1 0 0,1 23,12A1,1 0 0,1 22,13L19.95,12.9C19.7,15.17 18.5,17.15 16.75,18.44L17.87,20.16C18.14,20.64 18,21.25 17.5,21.53C17,21.8 16.41,21.64 16.13,21.16L15.2,19.34C14.22,19.76 13.14,20 12,20C10.86,20 9.78,19.76 8.8,19.34L7.87,21.16C7.59,21.64 7,21.8 6.5,21.53C6,21.25 5.86,20.64 6.13,20.16L7.25,18.44C5.5,17.15 4.3,15.17 4.05,12.9L2,13A1,1 0 0,1 1,12A1,1 0 0,1 2,11M9.07,11.35C9.2,10.74 9.53,10.2 10,9.79L8.34,7.25C7.11,8.19 6.27,9.6 6.05,11.2L9.07,11.35M12,9C12.32,9 12.62,9.05 12.9,9.14L14.28,6.45C13.58,6.16 12.81,6 12,6C11.19,6 10.42,6.16 9.72,6.45L11.1,9.14C11.38,9.05 11.68,9 12,9M14.93,11.35L17.95,11.2C17.73,9.6 16.89,8.19 15.66,7.25L14,9.79C14.47,10.2 14.8,10.74 14.93,11.35M14.93,12.65C14.8,13.26 14.47,13.8 14,14.21L15.66,16.75C16.89,15.81 17.73,14.4 17.95,12.8L14.93,12.65M12,15C11.68,15 11.38,14.95 11.09,14.86L9.72,17.55C10.42,17.84 11.19,18 12,18C12.81,18 13.58,17.84 14.28,17.55L12.91,14.86C12.62,14.95 12.32,15 12,15M9.07,12.65L6.05,12.8C6.27,14.4 7.11,15.81 8.34,16.75L10,14.21C9.53,13.8 9.2,13.26 9.07,12.65Z" /></svg>
|
|
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 237 B |
Before Width: | Height: | Size: 205 B |
Before Width: | Height: | Size: 689 B |
Before Width: | Height: | Size: 448 B |
Before Width: | Height: | Size: 468 B |
Before Width: | Height: | Size: 614 B |
Before Width: | Height: | Size: 413 B |
Before Width: | Height: | Size: 437 B |
Before Width: | Height: | Size: 841 B |
Before Width: | Height: | Size: 564 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 542 B |
Before Width: | Height: | Size: 165 B |
Before Width: | Height: | Size: 284 B |
|
@ -1 +1,39 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="240" height="240" viewBox="0 0 24 24"><path fill="#ffffff" d="M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z" /></svg>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
version="1.1"
|
||||||
|
width="240"
|
||||||
|
height="240"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
id="svg4"
|
||||||
|
sodipodi:docname="volume-high.svg"
|
||||||
|
inkscape:version="1.1 (c68e22c387, 2021-05-23)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg">
|
||||||
|
<defs
|
||||||
|
id="defs8" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="namedview6"
|
||||||
|
pagecolor="#505050"
|
||||||
|
bordercolor="#eeeeee"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:pageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="0"
|
||||||
|
showgrid="false"
|
||||||
|
inkscape:zoom="1"
|
||||||
|
inkscape:cx="128.5"
|
||||||
|
inkscape:cy="120"
|
||||||
|
inkscape:window-width="950"
|
||||||
|
inkscape:window-height="529"
|
||||||
|
inkscape:window-x="962"
|
||||||
|
inkscape:window-y="24"
|
||||||
|
inkscape:window-maximized="0"
|
||||||
|
inkscape:current-layer="svg4" />
|
||||||
|
<path
|
||||||
|
fill="#ffffff"
|
||||||
|
d="M 13.580577,5.0691667 V 6.6971618 C 15.864512,7.3768102 17.532022,9.4947843 17.532022,12 c 0,2.505215 -1.66751,4.615287 -3.951445,5.294936 v 1.635898 C 16.741733,18.21167 19.1126,15.382436 19.1126,12 c 0,-3.3824363 -2.370867,-6.2116704 -5.532023,-6.9308333 M 15.5563,12 c 0,-1.398811 -0.790289,-2.6000504 -1.975723,-3.1848641 V 15.161156 C 14.766011,14.600051 15.5563,13.390908 15.5563,12 M 4.8874003,9.6291335 V 14.370867 H 8.0485558 L 12,18.322311 V 5.6776891 L 8.0485558,9.6291335 Z"
|
||||||
|
id="path2"
|
||||||
|
style="stroke-width:0.790289" />
|
||||||
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 527 B After Width: | Height: | Size: 1.5 KiB |
|
@ -1,317 +0,0 @@
|
||||||
return {
|
|
||||||
-- Red
|
|
||||||
red = {
|
|
||||||
hue_50 = '#FFEBEE',
|
|
||||||
hue_100 = '#FFCDD2',
|
|
||||||
hue_200 = '#EF9A9A',
|
|
||||||
hue_300 = '#E57373',
|
|
||||||
hue_400 = '#EF5350',
|
|
||||||
hue_500 = '#F44336',
|
|
||||||
hue_600 = '#E53935',
|
|
||||||
hue_700 = '#D32F2F',
|
|
||||||
hue_800 = '#C62828',
|
|
||||||
hue_900 = '#B71C1C',
|
|
||||||
hue_A100 = '#FF8A80',
|
|
||||||
hue_A200 = '#FF5252',
|
|
||||||
hue_A400 = '#FF1744',
|
|
||||||
hue_A700 = '#D50000'
|
|
||||||
},
|
|
||||||
-- Pink
|
|
||||||
pink = {
|
|
||||||
hue_50 = '#FCE4EC',
|
|
||||||
hue_100 = '#F8BBD0',
|
|
||||||
hue_200 = '#F48FB1',
|
|
||||||
hue_300 = '#F06292',
|
|
||||||
hue_400 = '#EC407A',
|
|
||||||
hue_500 = '#E91E63',
|
|
||||||
hue_600 = '#D81B60',
|
|
||||||
hue_700 = '#C2185B',
|
|
||||||
hue_800 = '#AD1457',
|
|
||||||
hue_900 = '#880E4F',
|
|
||||||
hue_A100 = '#FF80AB',
|
|
||||||
hue_A200 = '#FF4081',
|
|
||||||
hue_A400 = '#F50057',
|
|
||||||
hue_A700 = '#C51162'
|
|
||||||
},
|
|
||||||
-- Purple
|
|
||||||
purle = {
|
|
||||||
hue_50 = '#F3E5F5',
|
|
||||||
hue_100 = '#E1BEE7',
|
|
||||||
hue_200 = '#CE93D8',
|
|
||||||
hue_300 = '#BA68C8',
|
|
||||||
hue_400 = '#AB47BC',
|
|
||||||
hue_500 = '#9C27B0',
|
|
||||||
hue_600 = '#8E24AA',
|
|
||||||
hue_700 = '#7B1FA2',
|
|
||||||
hue_800 = '#6A1B9A',
|
|
||||||
hue_900 = '#4A148C',
|
|
||||||
hue_A100 = '#EA80FC',
|
|
||||||
hue_A200 = '#E040FB',
|
|
||||||
hue_A400 = '#D500F9',
|
|
||||||
hue_A700 = '#AA00FF'
|
|
||||||
},
|
|
||||||
-- Deep Purple
|
|
||||||
hue_purple = {
|
|
||||||
hue_50 = '#EDE7F6',
|
|
||||||
hue_100 = '#D1C4E9',
|
|
||||||
hue_200 = '#B39DDB',
|
|
||||||
hue_300 = '#9575CD',
|
|
||||||
hue_400 = '#7E57C2',
|
|
||||||
hue_500 = '#673AB7',
|
|
||||||
hue_600 = '#5E35B1',
|
|
||||||
hue_700 = '#512DA8',
|
|
||||||
hue_800 = '#4527A0',
|
|
||||||
hue_900 = '#311B92',
|
|
||||||
hue_A100 = '#B388FF',
|
|
||||||
hue_A200 = '#7C4DFF',
|
|
||||||
hue_A400 = '#651FFF',
|
|
||||||
hue_A700 = '#6200EA'
|
|
||||||
},
|
|
||||||
-- Indigo
|
|
||||||
indigo = {
|
|
||||||
hue_50 = '#E8EAF6',
|
|
||||||
hue_100 = '#C5CAE9',
|
|
||||||
hue_200 = '#9FA8DA',
|
|
||||||
hue_300 = '#7986CB',
|
|
||||||
hue_400 = '#5C6BC0',
|
|
||||||
hue_500 = '#3F51B5',
|
|
||||||
hue_600 = '#3949AB',
|
|
||||||
hue_700 = '#303F9F',
|
|
||||||
hue_800 = '#283593',
|
|
||||||
hue_900 = '#1A237E',
|
|
||||||
hue_A100 = '#8C9EFF',
|
|
||||||
hue_A200 = '#536DFE',
|
|
||||||
hue_A400 = '#3D5AFE',
|
|
||||||
hue_A700 = '#304FFE'
|
|
||||||
},
|
|
||||||
-- Blue
|
|
||||||
blue = {
|
|
||||||
hue_50 = '#E3F2FD',
|
|
||||||
hue_100 = '#BBDEFB',
|
|
||||||
hue_200 = '#90CAF9',
|
|
||||||
hue_300 = '#64B5F6',
|
|
||||||
hue_400 = '#42A5F5',
|
|
||||||
hue_500 = '#2196F3',
|
|
||||||
hue_600 = '#1E88E5',
|
|
||||||
hue_700 = '#1976D2',
|
|
||||||
hue_800 = '#1565C0',
|
|
||||||
hue_900 = '#0D47A1',
|
|
||||||
hue_A100 = '#82B1FF',
|
|
||||||
hue_A200 = '#448AFF',
|
|
||||||
hue_A400 = '#2979FF',
|
|
||||||
hue_A700 = '#2962FF'
|
|
||||||
},
|
|
||||||
-- Light Blue
|
|
||||||
hue_blue = {
|
|
||||||
hue_50 = '#E1F5FE',
|
|
||||||
hue_100 = '#B3E5FC',
|
|
||||||
hue_200 = '#81D4FA',
|
|
||||||
hue_300 = '#4FC3F7',
|
|
||||||
hue_400 = '#29B6F6',
|
|
||||||
hue_500 = '#03A9F4',
|
|
||||||
hue_600 = '#039BE5',
|
|
||||||
hue_700 = '#0288D1',
|
|
||||||
hue_800 = '#0277BD',
|
|
||||||
hue_900 = '#01579B',
|
|
||||||
hue_A100 = '#80D8FF',
|
|
||||||
hue_A200 = '#40C4FF',
|
|
||||||
hue_A400 = '#00B0FF',
|
|
||||||
hue_A700 = '#0091EA'
|
|
||||||
},
|
|
||||||
-- Cyan
|
|
||||||
cyan = {
|
|
||||||
hue_50 = '#E0F7FA',
|
|
||||||
hue_100 = '#B2EBF2',
|
|
||||||
hue_200 = '#80DEEA',
|
|
||||||
hue_300 = '#4DD0E1',
|
|
||||||
hue_400 = '#26C6DA',
|
|
||||||
hue_500 = '#00BCD4',
|
|
||||||
hue_600 = '#00ACC1',
|
|
||||||
hue_700 = '#0097A7',
|
|
||||||
hue_800 = '#00838F',
|
|
||||||
hue_900 = '#006064',
|
|
||||||
hue_A100 = '#84FFFF',
|
|
||||||
hue_A200 = '#18FFFF',
|
|
||||||
hue_A400 = '#00E5FF',
|
|
||||||
hue_A700 = '#00B8D4'
|
|
||||||
},
|
|
||||||
-- Teal
|
|
||||||
teal = {
|
|
||||||
hue_50 = '#E0F2F1',
|
|
||||||
hue_100 = '#B2DFDB',
|
|
||||||
hue_200 = '#80CBC4',
|
|
||||||
hue_300 = '#4DB6AC',
|
|
||||||
hue_400 = '#26A69A',
|
|
||||||
hue_500 = '#009688',
|
|
||||||
hue_600 = '#00897B',
|
|
||||||
hue_700 = '#00796B',
|
|
||||||
hue_800 = '#00695C',
|
|
||||||
hue_900 = '#004D40',
|
|
||||||
hue_A100 = '#A7FFEB',
|
|
||||||
hue_A200 = '#64FFDA',
|
|
||||||
hue_A400 = '#1DE9B6',
|
|
||||||
hue_A700 = '#00BFA5'
|
|
||||||
},
|
|
||||||
-- Green
|
|
||||||
green = {
|
|
||||||
hue_50 = '#E8F5E9',
|
|
||||||
hue_100 = '#C8E6C9',
|
|
||||||
hue_200 = '#A5D6A7',
|
|
||||||
hue_300 = '#81C784',
|
|
||||||
hue_400 = '#66BB6A',
|
|
||||||
hue_500 = '#4CAF50',
|
|
||||||
hue_600 = '#43A047',
|
|
||||||
hue_700 = '#388E3C',
|
|
||||||
hue_800 = '#2E7D32',
|
|
||||||
hue_900 = '#1B5E20',
|
|
||||||
hue_A100 = '#B9F6CA',
|
|
||||||
hue_A200 = '#69F0AE',
|
|
||||||
hue_A400 = '#00E676',
|
|
||||||
hue_A700 = '#00C853'
|
|
||||||
},
|
|
||||||
-- Light Green
|
|
||||||
hue_green = {
|
|
||||||
hue_50 = '#F1F8E9',
|
|
||||||
hue_100 = '#DCEDC8',
|
|
||||||
hue_200 = '#C5E1A5',
|
|
||||||
hue_300 = '#AED581',
|
|
||||||
hue_400 = '#9CCC65',
|
|
||||||
hue_500 = '#8BC34A',
|
|
||||||
hue_600 = '#7CB342',
|
|
||||||
hue_700 = '#689F38',
|
|
||||||
hue_800 = '#558B2F',
|
|
||||||
hue_900 = '#33691E',
|
|
||||||
hue_A100 = '#CCFF90',
|
|
||||||
hue_A200 = '#B2FF59',
|
|
||||||
hue_A400 = '#76FF03',
|
|
||||||
hue_A700 = '#64DD17'
|
|
||||||
},
|
|
||||||
-- Lime
|
|
||||||
lime = {
|
|
||||||
hue_50 = '#F9FBE7',
|
|
||||||
hue_100 = '#F0F4C3',
|
|
||||||
hue_200 = '#E6EE9C',
|
|
||||||
hue_300 = '#DCE775',
|
|
||||||
hue_400 = '#D4E157',
|
|
||||||
hue_500 = '#CDDC39',
|
|
||||||
hue_600 = '#C0CA33',
|
|
||||||
hue_700 = '#AFB42B',
|
|
||||||
hue_800 = '#9E9D24',
|
|
||||||
hue_900 = '#827717',
|
|
||||||
hue_A100 = '#F4FF81',
|
|
||||||
hue_A200 = '#EEFF41',
|
|
||||||
hue_A400 = '#C6FF00',
|
|
||||||
hue_A700 = '#AEEA00'
|
|
||||||
},
|
|
||||||
-- Yellow
|
|
||||||
yellow = {
|
|
||||||
hue_50 = '#FFFDE7',
|
|
||||||
hue_100 = '#FFF9C4',
|
|
||||||
hue_200 = '#FFF59D',
|
|
||||||
hue_300 = '#FFF176',
|
|
||||||
hue_400 = '#FFEE58',
|
|
||||||
hue_500 = '#FFEB3B',
|
|
||||||
hue_600 = '#FDD835',
|
|
||||||
hue_700 = '#FBC02D',
|
|
||||||
hue_800 = '#F9A825',
|
|
||||||
hue_900 = '#F57F17',
|
|
||||||
hue_A100 = '#FFFF8D',
|
|
||||||
hue_A200 = '#FFFF00',
|
|
||||||
hue_A400 = '#FFEA00',
|
|
||||||
hue_A700 = '#FFD600'
|
|
||||||
},
|
|
||||||
-- Amber
|
|
||||||
amber = {
|
|
||||||
hue_50 = '#FFF8E1',
|
|
||||||
hue_100 = '#FFECB3',
|
|
||||||
hue_200 = '#FFE082',
|
|
||||||
hue_300 = '#FFD54F',
|
|
||||||
hue_400 = '#FFCA28',
|
|
||||||
hue_500 = '#FFC107',
|
|
||||||
hue_600 = '#FFB300',
|
|
||||||
hue_700 = '#FFA000',
|
|
||||||
hue_800 = '#FF8F00',
|
|
||||||
hue_900 = '#FF6F00',
|
|
||||||
hue_A100 = '#FFE57F',
|
|
||||||
hue_A200 = '#FFD740',
|
|
||||||
hue_A400 = '#FFC400',
|
|
||||||
hue_A700 = '#FFAB00'
|
|
||||||
},
|
|
||||||
-- Orange
|
|
||||||
orange = {
|
|
||||||
hue_50 = '#FFF3E0',
|
|
||||||
hue_100 = '#FFE0B2',
|
|
||||||
hue_200 = '#FFCC80',
|
|
||||||
hue_300 = '#FFB74D',
|
|
||||||
hue_400 = '#FFA726',
|
|
||||||
hue_500 = '#FF9800',
|
|
||||||
hue_600 = '#FB8C00',
|
|
||||||
hue_700 = '#F57C00',
|
|
||||||
hue_800 = '#EF6C00',
|
|
||||||
hue_900 = '#E65100',
|
|
||||||
hue_A100 = '#FFD180',
|
|
||||||
hue_A200 = '#FFAB40',
|
|
||||||
hue_A400 = '#FF9100',
|
|
||||||
hue_A700 = '#FF6D00'
|
|
||||||
},
|
|
||||||
-- Deep Orange
|
|
||||||
deep_orange = {
|
|
||||||
hue_50 = '#FBE9E7',
|
|
||||||
hue_100 = '#FFCCBC',
|
|
||||||
hue_200 = '#FFAB91',
|
|
||||||
hue_300 = '#FF8A65',
|
|
||||||
hue_400 = '#FF7043',
|
|
||||||
hue_500 = '#FF5722',
|
|
||||||
hue_600 = '#F4511E',
|
|
||||||
hue_700 = '#E64A19',
|
|
||||||
hue_800 = '#D84315',
|
|
||||||
hue_900 = '#BF360C',
|
|
||||||
hue_A100 = '#FF9E80',
|
|
||||||
hue_A200 = '#FF6E40',
|
|
||||||
hue_A400 = '#FF3D00',
|
|
||||||
hue_A700 = '#DD2C00'
|
|
||||||
},
|
|
||||||
-- Brown
|
|
||||||
brown = {
|
|
||||||
hue_50 = '#EFEBE9',
|
|
||||||
hue_100 = '#D7CCC8',
|
|
||||||
hue_200 = '#BCAAA4',
|
|
||||||
hue_300 = '#A1887F',
|
|
||||||
hue_400 = '#8D6E63',
|
|
||||||
hue_500 = '#795548',
|
|
||||||
hue_600 = '#6D4C41',
|
|
||||||
hue_700 = '#5D4037',
|
|
||||||
hue_800 = '#4E342E',
|
|
||||||
hue_900 = '#3E2723'
|
|
||||||
},
|
|
||||||
-- Grey
|
|
||||||
grey = {
|
|
||||||
hue_50 = '#FAFAFA',
|
|
||||||
hue_100 = '#F5F5F5',
|
|
||||||
hue_200 = '#EEEEEE',
|
|
||||||
hue_300 = '#E0E0E0',
|
|
||||||
hue_400 = '#BDBDBD',
|
|
||||||
hue_500 = '#9E9E9E',
|
|
||||||
hue_600 = '#757575',
|
|
||||||
hue_700 = '#616161',
|
|
||||||
hue_800 = '#424242',
|
|
||||||
hue_900 = '#212121'
|
|
||||||
},
|
|
||||||
-- Blue Grey
|
|
||||||
blue_grey = {
|
|
||||||
hue_50 = '#ECEFF1',
|
|
||||||
hue_100 = '#CFD8DC',
|
|
||||||
hue_200 = '#B0BEC5',
|
|
||||||
hue_300 = '#90A4AE',
|
|
||||||
hue_400 = '#78909C',
|
|
||||||
hue_500 = '#607D8B',
|
|
||||||
hue_600 = '#546E7A',
|
|
||||||
hue_700 = '#455A64',
|
|
||||||
hue_800 = '#37474F',
|
|
||||||
hue_900 = '#263238'
|
|
||||||
},
|
|
||||||
-- Black
|
|
||||||
black = '#000000',
|
|
||||||
-- White
|
|
||||||
white = '#FFFFFF'
|
|
||||||
}
|
|
|
@ -6,18 +6,16 @@ local dpi = require('beautiful').xresources.apply_dpi
|
||||||
local theme = {}
|
local theme = {}
|
||||||
|
|
||||||
-- Color Scheme
|
-- Color Scheme
|
||||||
theme.primary = color_schemes.flat_remix_teal.primary
|
theme.primary = color_schemes.default.primary
|
||||||
theme.accent = color_schemes.flat_remix_teal.accent
|
theme.accent = color_schemes.default.accent
|
||||||
|
|
||||||
local awesome_overrides = function(theme)
|
local awesome_overrides = function(theme)
|
||||||
theme.dir = os.getenv('HOME') .. '/.config/awesome/theme'
|
theme.dir = os.getenv('HOME') .. '/.config/awesome/theme'
|
||||||
|
|
||||||
theme.icons = theme.dir .. '/.config/awesome/theme/icons/'
|
theme.icons = theme.dir .. '/.config/awesome/theme/icons/'
|
||||||
theme.font = 'Google Sans Regular 9' -- Glyphs don't work properly with this (#442)
|
theme.font = 'Google Sans Regular 9'
|
||||||
--theme.font = 'Robotomono nerd font 9' -- Glyphs don't work properly with this (#442)
|
|
||||||
theme.font_large = 'Google Sans Regular 11'
|
theme.font_large = 'Google Sans Regular 11'
|
||||||
theme.icon_font = 'Google Sans Medium 10' -- Fira mono patched version
|
theme.icon_font = 'Google Sans Medium 10'
|
||||||
--theme.icon_font = 'firamono nerd font 11' -- Fira mono patched version
|
|
||||||
|
|
||||||
-- Layout icons
|
-- Layout icons
|
||||||
theme.layout_txt_tile = "|til|"
|
theme.layout_txt_tile = "|til|"
|
||||||
|
|
|
@ -1,124 +0,0 @@
|
||||||
-------------------------------------------------
|
|
||||||
-- Battery Widget for Awesome Window Manager
|
|
||||||
-- Shows the battery status using the ACPI tool
|
|
||||||
-- More details could be found here:
|
|
||||||
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/battery-widget
|
|
||||||
-- @author Pavel Makhov
|
|
||||||
-- @copyright 2017 Pavel Makhov
|
|
||||||
-------------------------------------------------
|
|
||||||
local awful = require('awful')
|
|
||||||
local watch = require('awful.widget.watch')
|
|
||||||
local wibox = require('wibox')
|
|
||||||
local beautiful = require('beautiful')
|
|
||||||
local dpi = require('beautiful').xresources.apply_dpi
|
|
||||||
|
|
||||||
-- acpi sample outputs
|
|
||||||
-- Battery 0: Discharging, 75%, 01:51:38 remaining
|
|
||||||
-- Battery 0: Charging, 53%, 00:57:43 until charged
|
|
||||||
|
|
||||||
local percentage = wibox.widget.textbox()
|
|
||||||
local battery_icon = wibox.widget.textbox()
|
|
||||||
battery_icon.font = beautiful.icon_font
|
|
||||||
|
|
||||||
local battery_popup = awful.tooltip({
|
|
||||||
objects = {percentage},
|
|
||||||
mode = 'outside',
|
|
||||||
align = 'left',
|
|
||||||
preferred_positions = {'right', 'left', 'top', 'bottom'}
|
|
||||||
})
|
|
||||||
|
|
||||||
watch('acpi -i', 10, function(_, stdout)
|
|
||||||
local battery_info = {}
|
|
||||||
local capacities = {}
|
|
||||||
for s in stdout:gmatch('[^\r\n]+') do
|
|
||||||
local status, charge_str, time = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?.*')
|
|
||||||
if status ~= nil then
|
|
||||||
table.insert(battery_info, {
|
|
||||||
status = status,
|
|
||||||
charge = tonumber(charge_str)
|
|
||||||
})
|
|
||||||
else
|
|
||||||
local cap_str = string.match(s, '.+:.+last full capacity (%d+)')
|
|
||||||
table.insert(capacities, tonumber(cap_str))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local capacity = 0
|
|
||||||
for _, cap in ipairs(capacities) do
|
|
||||||
capacity = capacity + cap
|
|
||||||
end
|
|
||||||
|
|
||||||
local charge = 0
|
|
||||||
local status
|
|
||||||
for i, batt in ipairs(battery_info) do
|
|
||||||
if batt.charge >= charge then
|
|
||||||
status = batt.status -- use most charged battery status
|
|
||||||
-- this is arbitrary, and maybe another metric should be used
|
|
||||||
end
|
|
||||||
|
|
||||||
charge = charge + batt.charge * capacities[i]
|
|
||||||
end
|
|
||||||
charge = charge / capacity
|
|
||||||
|
|
||||||
battery_popup.text = string.gsub(stdout, '\n$', '')
|
|
||||||
percentage.text = math.floor(charge)
|
|
||||||
|
|
||||||
if status == 'Charging' then
|
|
||||||
battery_icon.text = ''
|
|
||||||
if math.floor(charge) <= 20 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 30 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 40 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 60 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 80 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 90 then
|
|
||||||
--battery_icon.text = ''
|
|
||||||
battery_icon.text = '90'
|
|
||||||
elseif math.floor(charge) <= 100 then
|
|
||||||
--battery_icon.text = ''
|
|
||||||
battery_icon.text = '90'
|
|
||||||
end
|
|
||||||
elseif status == 'Full' then
|
|
||||||
battery_icon.text = ''
|
|
||||||
else
|
|
||||||
if math.floor(charge) <= 10 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 20 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 30 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 40 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 50 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 60 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 60 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 80 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
elseif math.floor(charge) <= 90 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
battery_icon.text = '90'
|
|
||||||
elseif math.floor(charge) <= 100 then
|
|
||||||
battery_icon.text = ''
|
|
||||||
battery_icon.text = '90'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
collectgarbage('collect')
|
|
||||||
end)
|
|
||||||
|
|
||||||
return wibox.widget {
|
|
||||||
wibox.widget{
|
|
||||||
battery_icon,
|
|
||||||
fg = beautiful.accent.hue_300,
|
|
||||||
widget = wibox.container.background
|
|
||||||
},
|
|
||||||
percentage,
|
|
||||||
spacing = dpi(2),
|
|
||||||
layout = wibox.layout.fixed.horizontal
|
|
||||||
}
|
|
|
@ -1,52 +0,0 @@
|
||||||
local awful = require("awful")
|
|
||||||
local wibox = require('wibox')
|
|
||||||
local mat_list_item = require('widget.material.list-item')
|
|
||||||
local dpi = require('beautiful').xresources.apply_dpi
|
|
||||||
local watch = require('awful.widget.watch')
|
|
||||||
local beautiful = require('beautiful')
|
|
||||||
|
|
||||||
local battery_icon = wibox.widget.textbox()
|
|
||||||
battery_icon.font = beautiful.icon_font
|
|
||||||
local battery_widget = wibox.widget.textbox()
|
|
||||||
battery_widget.align = 'center'
|
|
||||||
battery_widget.valign = 'center'
|
|
||||||
battery_widget.font = beautiful.font
|
|
||||||
|
|
||||||
local battery
|
|
||||||
|
|
||||||
function update_battery()
|
|
||||||
awful.spawn.easy_async_with_shell("pamixer --get-volume", function(stdout)
|
|
||||||
battery = stdout
|
|
||||||
--battery = string.match(stdout, '(%d?%d?%d)%%')
|
|
||||||
awful.spawn.easy_async_with_shell("bash -c 'pacmd list-sinks | awk '/muted/ { print $2 }''", function(muted)
|
|
||||||
--muted = string.gsub(muted, "%s+", "")
|
|
||||||
muted = 'no'
|
|
||||||
if muted == 'muted:no' and (battery > '50' or battery == '100') then
|
|
||||||
battery_icon.text = '墳'
|
|
||||||
elseif muted == 'muted:no' and battery <= '50' and battery > '0' then
|
|
||||||
battery_icon.text = '奔'
|
|
||||||
elseif muted == 'muted:yes' then
|
|
||||||
battery_icon.text = '婢'
|
|
||||||
elseif battery == '0' then
|
|
||||||
battery_icon.text = '奄'
|
|
||||||
end
|
|
||||||
battery_widget.text = battery
|
|
||||||
end)
|
|
||||||
collectgarbage('collect')
|
|
||||||
end)
|
|
||||||
end
|
|
||||||
|
|
||||||
watch('bash -c', 3, function(_, stdout)
|
|
||||||
update_battery()
|
|
||||||
end)
|
|
||||||
|
|
||||||
return wibox.widget {
|
|
||||||
wibox.widget{
|
|
||||||
battery_icon,
|
|
||||||
fg = beautiful.accent.hue_100,
|
|
||||||
widget = wibox.container.background
|
|
||||||
},
|
|
||||||
battery_widget,
|
|
||||||
spacing = dpi(2),
|
|
||||||
layout = wibox.layout.fixed.horizontal
|
|
||||||
}
|
|
|
@ -1,191 +0,0 @@
|
||||||
-------------------------------------------------
|
|
||||||
-- Battery Widget for Awesome Window Manager
|
|
||||||
-- Shows the battery status using the ACPI tool
|
|
||||||
-- More details could be found here:
|
|
||||||
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/battery-widget
|
|
||||||
|
|
||||||
-- @author Pavel Makhov
|
|
||||||
-- @copyright 2017 Pavel Makhov
|
|
||||||
-------------------------------------------------
|
|
||||||
|
|
||||||
local awful = require("awful")
|
|
||||||
local naughty = require("naughty")
|
|
||||||
local watch = require("awful.widget.watch")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
local gfs = require("gears.filesystem")
|
|
||||||
local dpi = require('beautiful').xresources.apply_dpi
|
|
||||||
|
|
||||||
-- acpi sample outputs
|
|
||||||
-- Battery 0: Discharging, 75%, 01:51:38 remaining
|
|
||||||
-- Battery 0: Charging, 53%, 00:57:43 until charged
|
|
||||||
|
|
||||||
local HOME = os.getenv("HOME")
|
|
||||||
|
|
||||||
local battery_widget = {}
|
|
||||||
local function worker(args)
|
|
||||||
local args = args or {}
|
|
||||||
|
|
||||||
local bat_num = '1'
|
|
||||||
local font = args.font or 'Play 8'
|
|
||||||
local path_to_icons = args.path_to_icons or "/usr/share/icons/Arc/status/symbolic/"
|
|
||||||
local show_current_level = args.show_current_level or false
|
|
||||||
local margin_left = args.margin_left or 0
|
|
||||||
local margin_right = args.margin_right or 0
|
|
||||||
|
|
||||||
local display_notification = args.display_notification or false
|
|
||||||
local position = args.notification_position or "top_right"
|
|
||||||
local timeout = args.timeout or 10
|
|
||||||
|
|
||||||
local warning_msg_title = args.warning_msg_title or 'Huston, we have a problem'
|
|
||||||
local warning_msg_text = args.warning_msg_text or 'Battery is dying'
|
|
||||||
local warning_msg_position = args.warning_msg_position or 'bottom_right'
|
|
||||||
local warning_msg_icon = args.warning_msg_icon or HOME .. '/.config/awesome/awesome-wm-widgets/batteryarc-widget/spaceman.jpg'
|
|
||||||
local enable_battery_warning = args.enable_battery_warning
|
|
||||||
if enable_battery_warning == nil then
|
|
||||||
enable_battery_warning = true
|
|
||||||
end
|
|
||||||
|
|
||||||
local bat_expr = 'Battery ' .. bat_num
|
|
||||||
if not gfs.dir_readable(path_to_icons) then
|
|
||||||
naughty.notify{
|
|
||||||
title = "Battery Widget",
|
|
||||||
text = "Folder with icons doesn't exist: " .. path_to_icons,
|
|
||||||
preset = naughty.config.presets.critical
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local icon_widget = wibox.widget {
|
|
||||||
{
|
|
||||||
id = "icon",
|
|
||||||
widget = wibox.widget.imagebox,
|
|
||||||
resize = false
|
|
||||||
},
|
|
||||||
layout = wibox.container.margin(_, 0, 0, 3)
|
|
||||||
}
|
|
||||||
local level_widget = wibox.widget {
|
|
||||||
font = font,
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
}
|
|
||||||
|
|
||||||
battery_widget = wibox.widget {
|
|
||||||
icon_widget,
|
|
||||||
level_widget,
|
|
||||||
layout = wibox.layout.fixed.horizontal,
|
|
||||||
}
|
|
||||||
-- Popup with battery info
|
|
||||||
-- One way of creating a pop-up notification - naughty.notify
|
|
||||||
local notification
|
|
||||||
local function show_battery_status(batteryType)
|
|
||||||
awful.spawn.easy_async('bash -c "acpi | grep \'' .. bat_expr .. '\'"',
|
|
||||||
function(stdout, _, _, _)
|
|
||||||
naughty.destroy(notification)
|
|
||||||
notification = naughty.notify{
|
|
||||||
text = stdout,
|
|
||||||
title = "Battery status",
|
|
||||||
icon = path_to_icons .. batteryType .. ".svg",
|
|
||||||
icon_size = dpi(16),
|
|
||||||
position = position,
|
|
||||||
timeout = 5, hover_timeout = 0.5,
|
|
||||||
width = 200,
|
|
||||||
screen = mouse.screen
|
|
||||||
}
|
|
||||||
end
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Alternative to naughty.notify - tooltip. You can compare both and choose the preferred one
|
|
||||||
--battery_popup = awful.tooltip({objects = {battery_widget}})
|
|
||||||
|
|
||||||
-- To use colors from beautiful theme put
|
|
||||||
-- following lines in rc.lua before require("battery"):
|
|
||||||
-- beautiful.tooltip_fg = beautiful.fg_normal
|
|
||||||
-- beautiful.tooltip_bg = beautiful.bg_normal
|
|
||||||
|
|
||||||
local function show_battery_warning()
|
|
||||||
naughty.notify {
|
|
||||||
icon = warning_msg_icon,
|
|
||||||
icon_size = 100,
|
|
||||||
text = warning_msg_text,
|
|
||||||
title = warning_msg_title,
|
|
||||||
timeout = 25, -- show the warning for a longer time
|
|
||||||
hover_timeout = 0.5,
|
|
||||||
position = warning_msg_position,
|
|
||||||
bg = "#F06060",
|
|
||||||
fg = "#EEE9EF",
|
|
||||||
width = 300,
|
|
||||||
screen = mouse.screen
|
|
||||||
}
|
|
||||||
end
|
|
||||||
local last_battery_check = os.time()
|
|
||||||
local batteryType = "battery-good-symbolic"
|
|
||||||
|
|
||||||
watch('bash -c "acpi -i | grep \'' .. bat_expr .. '\'"', timeout,
|
|
||||||
function(widget, stdout, stderr, exitreason, exitcode)
|
|
||||||
local battery_info = {}
|
|
||||||
local capacities = {}
|
|
||||||
for s in stdout:gmatch("[^\r\n]+") do
|
|
||||||
local status, charge_str, time = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?(.*)')
|
|
||||||
if status ~= nil then
|
|
||||||
table.insert(battery_info, {status = status, charge = tonumber(charge_str)})
|
|
||||||
else
|
|
||||||
local cap_str = string.match(s, '.+:.+last full capacity (%d+)')
|
|
||||||
table.insert(capacities, tonumber(cap_str))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local capacity = 0
|
|
||||||
for i, cap in ipairs(capacities) do
|
|
||||||
capacity = capacity + cap
|
|
||||||
end
|
|
||||||
|
|
||||||
local charge = 0
|
|
||||||
local status
|
|
||||||
for i, batt in ipairs(battery_info) do
|
|
||||||
if batt.charge >= charge then
|
|
||||||
status = batt.status -- use most charged battery status
|
|
||||||
-- this is arbitrary, and maybe another metric should be used
|
|
||||||
end
|
|
||||||
|
|
||||||
charge = charge + batt.charge * capacities[i]
|
|
||||||
end
|
|
||||||
charge = charge / capacity
|
|
||||||
|
|
||||||
if show_current_level then
|
|
||||||
level_widget.text = string.format('%d%%', charge)
|
|
||||||
end
|
|
||||||
|
|
||||||
if (charge >= 0 and charge < 15) then
|
|
||||||
batteryType = "battery-empty%s-symbolic"
|
|
||||||
if enable_battery_warning and status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then
|
|
||||||
-- if 5 minutes have elapsed since the last warning
|
|
||||||
last_battery_check = os.time()
|
|
||||||
|
|
||||||
show_battery_warning()
|
|
||||||
end
|
|
||||||
elseif (charge >= 15 and charge < 40) then batteryType = "battery-caution%s-symbolic"
|
|
||||||
elseif (charge >= 40 and charge < 60) then batteryType = "battery-low%s-symbolic"
|
|
||||||
elseif (charge >= 60 and charge < 80) then batteryType = "battery-good%s-symbolic"
|
|
||||||
elseif (charge >= 80 and charge <= 100) then batteryType = "battery-full%s-symbolic"
|
|
||||||
end
|
|
||||||
|
|
||||||
if status == 'Charging' then
|
|
||||||
batteryType = string.format(batteryType, '-charging')
|
|
||||||
else
|
|
||||||
batteryType = string.format(batteryType, '')
|
|
||||||
end
|
|
||||||
|
|
||||||
widget.icon:set_image(path_to_icons .. batteryType .. ".svg")
|
|
||||||
|
|
||||||
-- Update popup text
|
|
||||||
-- battery_popup.text = string.gsub(stdout, "\n$", "")
|
|
||||||
end,
|
|
||||||
icon_widget)
|
|
||||||
|
|
||||||
if display_notification then
|
|
||||||
battery_widget:connect_signal("mouse::enter", function() show_battery_status(batteryType) end)
|
|
||||||
battery_widget:connect_signal("mouse::leave", function() naughty.destroy(notification) end)
|
|
||||||
end
|
|
||||||
return wibox.container.margin(battery_widget, margin_left, margin_right)
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(battery_widget, { __call = function(_, ...) return worker(...) end })
|
|
|
@ -1,53 +0,0 @@
|
||||||
# Calendar Widget
|
|
||||||
|
|
||||||
Calendar widget for Awesome WM - slightly improved version of the `wibox.widget.calendar`.
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- mouse support: scroll up - shows next month, scroll down - previous
|
|
||||||
- themes:
|
|
||||||
|
|
||||||
| Name | Screenshot |
|
|
||||||
|---|---|
|
|
||||||
|nord (default) |  |
|
|
||||||
| outrun |  |
|
|
||||||
| light |  |
|
|
||||||
| dark |  |
|
|
||||||
|
|
||||||
- setup widget placement
|
|
||||||
|
|
||||||
top center - in case you clock is centered:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
top right - for default awesome config:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
bottom right - in case your wibar at the bottom:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
|
|
||||||
## How to use
|
|
||||||
|
|
||||||
This widget needs an 'anchor' - another widget which triggers visibility of the calendar. Default `mytextclock` is the perfect candidate!
|
|
||||||
Just after mytextclock is instantiated, create the widget and add the mouse listener to it.
|
|
||||||
|
|
||||||
```lua
|
|
||||||
local calendar_widget = require("awesome-wm-widgets.calendar-widget.calendar")
|
|
||||||
-- ...
|
|
||||||
-- Create a textclock widget
|
|
||||||
mytextclock = wibox.widget.textclock()
|
|
||||||
-- default
|
|
||||||
local cw = calendar_widget()
|
|
||||||
-- or customized
|
|
||||||
local cw = calendar_widget({
|
|
||||||
theme = 'outrun',
|
|
||||||
placement = 'bottom_right'
|
|
||||||
})
|
|
||||||
mytextclock:connect_signal("button::press",
|
|
||||||
function(_, _, _, button)
|
|
||||||
if button == 1 then cw.toggle() end
|
|
||||||
end)
|
|
||||||
```
|
|
|
@ -1,235 +0,0 @@
|
||||||
-------------------------------------------------
|
|
||||||
-- Calendar Widget for Awesome Window Manager
|
|
||||||
-- Shows the current month and supports scroll up/down to switch month
|
|
||||||
-- More details could be found here:
|
|
||||||
-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/calendar-widget
|
|
||||||
|
|
||||||
-- @author Pavel Makhov
|
|
||||||
-- @copyright 2019 Pavel Makhov
|
|
||||||
-------------------------------------------------
|
|
||||||
|
|
||||||
local awful = require("awful")
|
|
||||||
local beautiful = require("beautiful")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
local gears = require("gears")
|
|
||||||
local naughty = require("naughty")
|
|
||||||
|
|
||||||
local calendar_widget = {}
|
|
||||||
|
|
||||||
local function worker(args)
|
|
||||||
|
|
||||||
local calendar_themes = {
|
|
||||||
nord = {
|
|
||||||
bg = '#2E3440',
|
|
||||||
fg = '#D8DEE9',
|
|
||||||
focus_date_bg = '#88C0D0',
|
|
||||||
focus_date_fg = '#000000',
|
|
||||||
weekend_day_bg = '#3B4252',
|
|
||||||
weekday_fg = '#88C0D0',
|
|
||||||
header_fg = '#E5E9F0',
|
|
||||||
border = '#4C566A'
|
|
||||||
},
|
|
||||||
outrun = {
|
|
||||||
bg = '#0d0221',
|
|
||||||
fg = '#D8DEE9',
|
|
||||||
focus_date_bg = '#650d89',
|
|
||||||
focus_date_fg = '#2de6e2',
|
|
||||||
weekend_day_bg = '#261447',
|
|
||||||
weekday_fg = '#2de6e2',
|
|
||||||
header_fg = '#f6019d',
|
|
||||||
border = '#261447'
|
|
||||||
},
|
|
||||||
dark = {
|
|
||||||
bg = '#000000',
|
|
||||||
fg = '#ffffff',
|
|
||||||
focus_date_bg = '#ffffff',
|
|
||||||
focus_date_fg = '#000000',
|
|
||||||
weekend_day_bg = '#444444',
|
|
||||||
weekday_fg = '#ffffff',
|
|
||||||
header_fg = '#ffffff',
|
|
||||||
border = '#333333'
|
|
||||||
},
|
|
||||||
light = {
|
|
||||||
bg = '#ffffff',
|
|
||||||
fg = '#000000',
|
|
||||||
focus_date_bg = '#000000',
|
|
||||||
focus_date_fg = '#ffffff',
|
|
||||||
weekend_day_bg = '#AAAAAA',
|
|
||||||
weekday_fg = '#000000',
|
|
||||||
header_fg = '#000000',
|
|
||||||
border = '#CCCCCC'
|
|
||||||
},
|
|
||||||
monokai = {
|
|
||||||
bg = '#272822',
|
|
||||||
fg = '#F8F8F2',
|
|
||||||
focus_date_bg = '#AE81FF',
|
|
||||||
focus_date_fg = '#ffffff',
|
|
||||||
weekend_day_bg = '#75715E',
|
|
||||||
weekday_fg = '#FD971F',
|
|
||||||
header_fg = '#F92672',
|
|
||||||
border = '#75715E'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
local args = args or {}
|
|
||||||
|
|
||||||
if args.theme ~= nil and calendar_themes[args.theme] == nil then
|
|
||||||
naughty.notify({
|
|
||||||
preset = naughty.config.presets.critical,
|
|
||||||
title = 'Calendar Widget',
|
|
||||||
text = 'Theme "' .. args.theme .. '" not found, fallback to default'})
|
|
||||||
args.theme = 'nord'
|
|
||||||
end
|
|
||||||
|
|
||||||
local theme = args.theme or 'nord'
|
|
||||||
local placement = args.placement or 'top'
|
|
||||||
|
|
||||||
|
|
||||||
local styles = {}
|
|
||||||
local function rounded_shape(size)
|
|
||||||
return function(cr, width, height)
|
|
||||||
gears.shape.rounded_rect(cr, width, height, size)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
styles.month = {
|
|
||||||
padding = 4,
|
|
||||||
bg_color = calendar_themes[theme].bg,
|
|
||||||
border_width = 0,
|
|
||||||
}
|
|
||||||
|
|
||||||
styles.normal = {
|
|
||||||
markup = function(t) return t end,
|
|
||||||
shape = rounded_shape(4)
|
|
||||||
}
|
|
||||||
|
|
||||||
styles.focus = {
|
|
||||||
fg_color = calendar_themes[theme].focus_date_fg,
|
|
||||||
bg_color = calendar_themes[theme].focus_date_bg,
|
|
||||||
markup = function(t) return '<b>' .. t .. '</b>' end,
|
|
||||||
shape = rounded_shape(4)
|
|
||||||
}
|
|
||||||
|
|
||||||
styles.header = {
|
|
||||||
fg_color = calendar_themes[theme].header_fg,
|
|
||||||
bg_color = calendar_themes[theme].bg,
|
|
||||||
markup = function(t) return '<b>' .. t .. '</b>' end
|
|
||||||
}
|
|
||||||
|
|
||||||
styles.weekday = {
|
|
||||||
fg_color = calendar_themes[theme].weekday_fg,
|
|
||||||
bg_color = calendar_themes[theme].bg,
|
|
||||||
markup = function(t) return '<b>' .. t .. '</b>' end,
|
|
||||||
}
|
|
||||||
|
|
||||||
local function decorate_cell(widget, flag, date)
|
|
||||||
if flag == 'monthheader' and not styles.monthheader then
|
|
||||||
flag = 'header'
|
|
||||||
end
|
|
||||||
|
|
||||||
-- highlight only today's day
|
|
||||||
if flag == 'focus' then
|
|
||||||
local today = os.date('*t')
|
|
||||||
if today.month ~= date.month then
|
|
||||||
flag = 'normal'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local props = styles[flag] or {}
|
|
||||||
if props.markup and widget.get_text and widget.set_markup then
|
|
||||||
widget:set_markup(props.markup(widget:get_text()))
|
|
||||||
end
|
|
||||||
-- Change bg color for weekends
|
|
||||||
local d = { year = date.year, month = (date.month or 1), day = (date.day or 1) }
|
|
||||||
local weekday = tonumber(os.date('%w', os.time(d)))
|
|
||||||
local default_bg = (weekday == 0 or weekday == 6) and calendar_themes[theme].weekend_day_bg or calendar_themes[theme].bg
|
|
||||||
local ret = wibox.widget {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
widget,
|
|
||||||
halign = 'center',
|
|
||||||
widget = wibox.container.place
|
|
||||||
},
|
|
||||||
margins = (props.padding or 2) + (props.border_width or 0),
|
|
||||||
widget = wibox.container.margin
|
|
||||||
},
|
|
||||||
shape = props.shape,
|
|
||||||
shape_border_color = props.border_color or '#000000',
|
|
||||||
shape_border_width = props.border_width or 0,
|
|
||||||
fg = props.fg_color or calendar_themes[theme].fg,
|
|
||||||
bg = props.bg_color or default_bg,
|
|
||||||
widget = wibox.container.background
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret
|
|
||||||
end
|
|
||||||
|
|
||||||
local cal = wibox.widget {
|
|
||||||
date = os.date('*t'),
|
|
||||||
font = beautiful.get_font(),
|
|
||||||
fn_embed = decorate_cell,
|
|
||||||
long_weekdays = true,
|
|
||||||
widget = wibox.widget.calendar.month
|
|
||||||
}
|
|
||||||
|
|
||||||
local popup = awful.popup {
|
|
||||||
ontop = true,
|
|
||||||
visible = false,
|
|
||||||
shape = gears.shape.rounded_rect,
|
|
||||||
offset = { y = 5 },
|
|
||||||
border_width = 1,
|
|
||||||
border_color = calendar_themes[theme].border,
|
|
||||||
widget = cal
|
|
||||||
}
|
|
||||||
|
|
||||||
popup:buttons(
|
|
||||||
awful.util.table.join(
|
|
||||||
awful.button({}, 4, function()
|
|
||||||
local a = cal:get_date()
|
|
||||||
a.month = a.month + 1
|
|
||||||
cal:set_date(nil)
|
|
||||||
cal:set_date(a)
|
|
||||||
popup:set_widget(cal)
|
|
||||||
end),
|
|
||||||
awful.button({}, 5, function()
|
|
||||||
local a = cal:get_date()
|
|
||||||
a.month = a.month - 1
|
|
||||||
cal:set_date(nil)
|
|
||||||
cal:set_date(a)
|
|
||||||
popup:set_widget(cal)
|
|
||||||
end)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
function calendar_widget.toggle()
|
|
||||||
|
|
||||||
if popup.visible then
|
|
||||||
-- to faster render the calendar refresh it and just hide
|
|
||||||
cal:set_date(nil) -- the new date is not set without removing the old one
|
|
||||||
cal:set_date(os.date('*t'))
|
|
||||||
popup:set_widget(nil) -- just in case
|
|
||||||
popup:set_widget(cal)
|
|
||||||
popup.visible = not popup.visible
|
|
||||||
else
|
|
||||||
if placement == 'top' then
|
|
||||||
awful.placement.top(popup, { margins = { top = 30 }, parent = awful.screen.focused() })
|
|
||||||
elseif placement == 'top_right' then
|
|
||||||
awful.placement.top_right(popup, { margins = { top = 30, right = 10}, parent = awful.screen.focused() })
|
|
||||||
elseif placement == 'bottom_right' then
|
|
||||||
awful.placement.bottom_right(popup, { margins = { bottom = 30, right = 10}, parent = awful.screen.focused() })
|
|
||||||
else
|
|
||||||
awful.placement.top(popup, { margins = { top = 30 }, parent = awful.screen.focused() })
|
|
||||||
end
|
|
||||||
|
|
||||||
popup.visible = true
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return calendar_widget
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(calendar_widget, { __call = function(_, ...)
|
|
||||||
return worker(...)
|
|
||||||
end })
|
|
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 130 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 9.6 KiB |
|
@ -1,70 +0,0 @@
|
||||||
local awful = require('awful')
|
|
||||||
local gears = require('gears')
|
|
||||||
local wibox = require('wibox')
|
|
||||||
local beautiful = require('beautiful')
|
|
||||||
local icons = require('theme.icons')
|
|
||||||
local clickable_container = require('widget.material.clickable-container')
|
|
||||||
local dpi = require('beautiful').xresources.apply_dpi
|
|
||||||
|
|
||||||
local styles = {}
|
|
||||||
local function rounded_shape(size, partial)
|
|
||||||
if partial then
|
|
||||||
return function(cr, width, height)
|
|
||||||
gears.shape.rectangle(cr, width + 5, height, 11)
|
|
||||||
end
|
|
||||||
else
|
|
||||||
return function(cr, width, height)
|
|
||||||
gears.shape.rectangle(cr, width, height, size)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
styles.month = {padding = 5, bg_color = '#555555', shape = rounded_shape(10)}
|
|
||||||
styles.normal = {shape = rounded_shape(5)}
|
|
||||||
styles.focus = {
|
|
||||||
fg_color = beautiful.primary.hue_400, -- Current day Color
|
|
||||||
markup = function(t) return '<b>' .. t .. '</b>' end,
|
|
||||||
shape = rounded_shape(5, true)
|
|
||||||
}
|
|
||||||
styles.header = {
|
|
||||||
fg_color = beautiful.primary.hue_200, -- Month Name Color
|
|
||||||
markup = function(t) return '<b>' .. t .. '</b>' end,
|
|
||||||
shape = rounded_shape(10)
|
|
||||||
}
|
|
||||||
styles.weekday = {
|
|
||||||
fg_color = beautiful.background.hue_50, -- Day Color
|
|
||||||
markup = function(t) return '<b>' .. t .. '</b>' end,
|
|
||||||
shape = rounded_shape(5)
|
|
||||||
}
|
|
||||||
local function decorate_cell(widget, flag, date)
|
|
||||||
if flag == 'monthheader' and not styles.monthheader then flag = 'header' end
|
|
||||||
local props = styles[flag] or {}
|
|
||||||
if props.markup and widget.get_text and widget.set_markup then
|
|
||||||
widget:set_markup(props.markup(widget:get_text()))
|
|
||||||
end
|
|
||||||
local d = {
|
|
||||||
year = date.year,
|
|
||||||
month = (date.month or 1),
|
|
||||||
day = (date.day or 1)
|
|
||||||
}
|
|
||||||
local weekday = tonumber(os.date('%w', os.time(d)))
|
|
||||||
local ret = wibox.widget {
|
|
||||||
{
|
|
||||||
widget,
|
|
||||||
margins = (props.padding or 2) + (props.border_width or 0),
|
|
||||||
widget = wibox.container.margin
|
|
||||||
},
|
|
||||||
fg = props.fg_color or '#999999',
|
|
||||||
widget = wibox.container.background
|
|
||||||
}
|
|
||||||
return ret
|
|
||||||
end
|
|
||||||
|
|
||||||
local cal = wibox.widget {
|
|
||||||
date = os.date('*t'),
|
|
||||||
font = 'Roboto 10',
|
|
||||||
fn_embed = decorate_cell,
|
|
||||||
start_sunday = true,
|
|
||||||
widget = wibox.widget.calendar.month
|
|
||||||
}
|
|
||||||
|
|
||||||
return cal
|
|
|
@ -8,7 +8,7 @@ local dpi = require('beautiful').xresources.apply_dpi
|
||||||
local wibox = require('wibox')
|
local wibox = require('wibox')
|
||||||
local gears = require('gears')
|
local gears = require('gears')
|
||||||
local beautiful = require('beautiful')
|
local beautiful = require('beautiful')
|
||||||
local mat_colors = require('theme.mat-colors')
|
local mat_colors = require('theme.color-schemes')
|
||||||
-- Local declarations
|
-- Local declarations
|
||||||
|
|
||||||
local mat_slider = {
|
local mat_slider = {
|
||||||
|
|
|
@ -1,560 +0,0 @@
|
||||||
-------------------------------------------------
|
|
||||||
-- Weather Widget based on the OpenWeatherMap
|
|
||||||
-- https://openweathermap.org/
|
|
||||||
--
|
|
||||||
-- @author Pavel Makhov
|
|
||||||
-- @copyright 2020 Pavel Makhov
|
|
||||||
-------------------------------------------------
|
|
||||||
local awful = require("awful")
|
|
||||||
local watch = require("awful.widget.watch")
|
|
||||||
local json = require("json")
|
|
||||||
local naughty = require("naughty")
|
|
||||||
local wibox = require("wibox")
|
|
||||||
local gears = require("gears")
|
|
||||||
local beautiful = require("beautiful")
|
|
||||||
|
|
||||||
local HOME_DIR = os.getenv("HOME")
|
|
||||||
local WIDGET_DIR = HOME_DIR .. '/.config/awesome/awesome-wm-widgets/weather-widget'
|
|
||||||
local GET_FORECAST_CMD = [[bash -c "curl -s --show-error -X GET '%s'"]]
|
|
||||||
|
|
||||||
local function show_warning(message)
|
|
||||||
naughty.notify {
|
|
||||||
preset = naughty.config.presets.critical,
|
|
||||||
title = 'Weather Widget',
|
|
||||||
text = message
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
local weather_widget = {}
|
|
||||||
local warning_shown = false
|
|
||||||
local tooltip = awful.tooltip {
|
|
||||||
mode = 'outside',
|
|
||||||
preferred_positions = {'bottom'}
|
|
||||||
}
|
|
||||||
|
|
||||||
local weather_popup = awful.popup {
|
|
||||||
ontop = true,
|
|
||||||
visible = false,
|
|
||||||
shape = gears.shape.rounded_rect,
|
|
||||||
border_width = 1,
|
|
||||||
border_color = beautiful.bg_focus,
|
|
||||||
maximum_width = 400,
|
|
||||||
offset = {y = 5},
|
|
||||||
widget = {}
|
|
||||||
}
|
|
||||||
|
|
||||||
--- Maps openWeatherMap icon name to file name w/o extension
|
|
||||||
local icon_map = {
|
|
||||||
["01d"] = "clear-sky",
|
|
||||||
["02d"] = "few-clouds",
|
|
||||||
["03d"] = "scattered-clouds",
|
|
||||||
["04d"] = "broken-clouds",
|
|
||||||
["09d"] = "shower-rain",
|
|
||||||
["10d"] = "rain",
|
|
||||||
["11d"] = "thunderstorm",
|
|
||||||
["13d"] = "snow",
|
|
||||||
["50d"] = "mist",
|
|
||||||
["01n"] = "clear-sky-night",
|
|
||||||
["02n"] = "few-clouds-night",
|
|
||||||
["03n"] = "scattered-clouds-night",
|
|
||||||
["04n"] = "broken-clouds-night",
|
|
||||||
["09n"] = "shower-rain-night",
|
|
||||||
["10n"] = "rain-night",
|
|
||||||
["11n"] = "thunderstorm-night",
|
|
||||||
["13n"] = "snow-night",
|
|
||||||
["50n"] = "mist-night"
|
|
||||||
}
|
|
||||||
|
|
||||||
--- Return wind direction as a string
|
|
||||||
local function to_direction(degrees)
|
|
||||||
-- Ref: https://www.campbellsci.eu/blog/convert-wind-directions
|
|
||||||
if degrees == nil then return "Unknown dir" end
|
|
||||||
local directions = {
|
|
||||||
"N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW",
|
|
||||||
"WSW", "W", "WNW", "NW", "NNW", "N"
|
|
||||||
}
|
|
||||||
return directions[math.floor((degrees % 360) / 22.5) + 1]
|
|
||||||
end
|
|
||||||
|
|
||||||
--- Convert degrees Celsius to Fahrenheit
|
|
||||||
local function celsius_to_fahrenheit(c) return c * 9 / 5 + 32 end
|
|
||||||
|
|
||||||
-- Convert degrees Fahrenheit to Celsius
|
|
||||||
local function fahrenheit_to_celsius(f) return (f - 32) * 5 / 9 end
|
|
||||||
|
|
||||||
local function gen_temperature_str(temp, fmt_str, show_other_units, units)
|
|
||||||
local temp_str = string.format(fmt_str, temp)
|
|
||||||
local s = temp_str .. '°' .. (units == 'metric' and 'C' or 'F')
|
|
||||||
|
|
||||||
if (show_other_units) then
|
|
||||||
local temp_conv, units_conv
|
|
||||||
if (units == 'metric') then
|
|
||||||
temp_conv = celsius_to_fahrenheit(temp)
|
|
||||||
units_conv = 'F'
|
|
||||||
else
|
|
||||||
temp_conv = fahrenheit_to_celsius(temp)
|
|
||||||
units_conv = 'C'
|
|
||||||
end
|
|
||||||
|
|
||||||
local temp_conv_str = string.format(fmt_str, temp_conv)
|
|
||||||
s = s .. ' ' .. '(' .. temp_conv_str .. '°' .. units_conv .. ')'
|
|
||||||
end
|
|
||||||
return s
|
|
||||||
end
|
|
||||||
|
|
||||||
local function uvi_index_color(uvi)
|
|
||||||
local color
|
|
||||||
if uvi >= 0 and uvi < 3 then color = '#A3BE8C'
|
|
||||||
elseif uvi >= 3 and uvi < 6 then color = '#EBCB8B'
|
|
||||||
elseif uvi >= 6 and uvi < 8 then color = '#D08770'
|
|
||||||
elseif uvi >= 8 and uvi < 11 then color = '#BF616A'
|
|
||||||
elseif uvi >= 11 then color = '#B48EAD'
|
|
||||||
end
|
|
||||||
|
|
||||||
return '<span weight="bold" foreground="' .. color .. '">' .. uvi .. '</span>'
|
|
||||||
end
|
|
||||||
|
|
||||||
local function worker(user_args)
|
|
||||||
|
|
||||||
local args = user_args or {}
|
|
||||||
|
|
||||||
--- Validate required parameters
|
|
||||||
if args.coordinates == nil or args.api_key == nil then
|
|
||||||
show_warning('Required parameters are not set: ' ..
|
|
||||||
(args.coordinates == nil and '<b>coordinates</b>' or '') ..
|
|
||||||
(args.api_key == nil and ', <b>api_key</b> ' or ''))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local coordinates = args.coordinates
|
|
||||||
local api_key = args.api_key
|
|
||||||
local font_name = args.font_name or beautiful.font:gsub("%s%d+$", "")
|
|
||||||
local units = args.units or 'metric'
|
|
||||||
local time_format_12h = args.time_format_12h
|
|
||||||
local both_units_widget = args.both_units_widget or false
|
|
||||||
local show_hourly_forecast = args.show_hourly_forecast
|
|
||||||
local show_daily_forecast = args.show_daily_forecast
|
|
||||||
local icon_pack_name = args.icons or 'weather-underground-icons'
|
|
||||||
local icons_extension = args.icons_extension or '.png'
|
|
||||||
local timeout = args.timeout or 120
|
|
||||||
|
|
||||||
local ICONS_DIR = WIDGET_DIR .. '/icons/' .. icon_pack_name .. '/'
|
|
||||||
local owm_one_cal_api =
|
|
||||||
('https://api.openweathermap.org/data/2.5/onecall' ..
|
|
||||||
'?lat=' .. coordinates[1] .. '&lon=' .. coordinates[2] .. '&appid=' .. api_key ..
|
|
||||||
'&units=' .. units .. '&exclude=minutely' ..
|
|
||||||
(show_hourly_forecast == false and ',hourly' or '') ..
|
|
||||||
(show_daily_forecast == false and ',daily' or ''))
|
|
||||||
|
|
||||||
weather_widget = wibox.widget {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
{
|
|
||||||
{
|
|
||||||
id = 'icon',
|
|
||||||
resize = true,
|
|
||||||
widget = wibox.widget.imagebox
|
|
||||||
},
|
|
||||||
valign = 'center',
|
|
||||||
widget = wibox.container.place,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id = 'txt',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
layout = wibox.layout.fixed.horizontal,
|
|
||||||
},
|
|
||||||
margins = 4,
|
|
||||||
layout = wibox.container.margin
|
|
||||||
},
|
|
||||||
shape = function(cr, width, height)
|
|
||||||
gears.shape.rounded_rect(cr, width, height, 4)
|
|
||||||
end,
|
|
||||||
widget = wibox.container.background,
|
|
||||||
set_image = function(self, path)
|
|
||||||
self:get_children_by_id('icon')[1].image = path
|
|
||||||
end,
|
|
||||||
set_text = function(self, text)
|
|
||||||
self:get_children_by_id('txt')[1].text = text
|
|
||||||
end,
|
|
||||||
is_ok = function(self, is_ok)
|
|
||||||
if is_ok then
|
|
||||||
self:get_children_by_id('icon')[1]:set_opacity(1)
|
|
||||||
self:get_children_by_id('icon')[1]:emit_signal('widget:redraw_needed')
|
|
||||||
else
|
|
||||||
self:get_children_by_id('icon')[1]:set_opacity(0.2)
|
|
||||||
self:get_children_by_id('icon')[1]:emit_signal('widget:redraw_needed')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
local current_weather_widget = wibox.widget {
|
|
||||||
{
|
|
||||||
{
|
|
||||||
{
|
|
||||||
id = 'icon',
|
|
||||||
resize = true,
|
|
||||||
forced_width = 128,
|
|
||||||
forced_height = 128,
|
|
||||||
widget = wibox.widget.imagebox
|
|
||||||
},
|
|
||||||
align = 'center',
|
|
||||||
widget = wibox.container.place
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id = 'description',
|
|
||||||
font = font_name .. ' 10',
|
|
||||||
align = 'center',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
forced_width = 128,
|
|
||||||
layout = wibox.layout.align.vertical
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
{
|
|
||||||
id = 'temp',
|
|
||||||
font = font_name .. ' 36',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id = 'feels_like_temp',
|
|
||||||
align = 'center',
|
|
||||||
font = font_name .. ' 9',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
id = 'wind',
|
|
||||||
font = font_name .. ' 9',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id = 'humidity',
|
|
||||||
font = font_name .. ' 9',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id = 'uv',
|
|
||||||
font = font_name .. ' 9',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
expand = 'inside',
|
|
||||||
layout = wibox.layout.align.vertical
|
|
||||||
},
|
|
||||||
spacing = 16,
|
|
||||||
forced_width = 150,
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
},
|
|
||||||
forced_width = 300,
|
|
||||||
layout = wibox.layout.flex.horizontal,
|
|
||||||
update = function(self, weather)
|
|
||||||
self:get_children_by_id('icon')[1]:set_image(
|
|
||||||
ICONS_DIR .. icon_map[weather.weather[1].icon] .. icons_extension)
|
|
||||||
self:get_children_by_id('temp')[1]:set_text(gen_temperature_str(weather.temp, '%.0f', false, units))
|
|
||||||
self:get_children_by_id('feels_like_temp')[1]:set_text(
|
|
||||||
'Feels like ' .. gen_temperature_str(weather.feels_like, '%.0f', false, units))
|
|
||||||
self:get_children_by_id('description')[1]:set_text(weather.weather[1].description)
|
|
||||||
self:get_children_by_id('wind')[1]:set_markup(
|
|
||||||
'Wind: <b>' .. weather.wind_speed .. 'm/s (' .. to_direction(weather.wind_deg) .. ')</b>')
|
|
||||||
self:get_children_by_id('humidity')[1]:set_markup('Humidity: <b>' .. weather.humidity .. '%</b>')
|
|
||||||
self:get_children_by_id('uv')[1]:set_markup('UV: ' .. uvi_index_color(weather.uvi))
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
local daily_forecast_widget = {
|
|
||||||
forced_width = 300,
|
|
||||||
layout = wibox.layout.flex.horizontal,
|
|
||||||
update = function(self, forecast, timezone_offset)
|
|
||||||
local count = #self
|
|
||||||
for i = 0, count do self[i]=nil end
|
|
||||||
for i, day in ipairs(forecast) do
|
|
||||||
if i > 5 then break end
|
|
||||||
local day_forecast = wibox.widget {
|
|
||||||
{
|
|
||||||
text = os.date('%a', tonumber(day.dt) + tonumber(timezone_offset)),
|
|
||||||
align = 'center',
|
|
||||||
font = font_name .. ' 9',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
{
|
|
||||||
image = ICONS_DIR .. icon_map[day.weather[1].icon] .. icons_extension,
|
|
||||||
resize = true,
|
|
||||||
forced_width = 48,
|
|
||||||
forced_height = 48,
|
|
||||||
widget = wibox.widget.imagebox
|
|
||||||
},
|
|
||||||
align = 'center',
|
|
||||||
layout = wibox.container.place
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = day.weather[1].description,
|
|
||||||
font = font_name .. ' 8',
|
|
||||||
align = 'center',
|
|
||||||
forced_height = 50,
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
},
|
|
||||||
{
|
|
||||||
{
|
|
||||||
text = gen_temperature_str(day.temp.day, '%.0f', false, units),
|
|
||||||
align = 'center',
|
|
||||||
font = font_name .. ' 9',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
{
|
|
||||||
text = gen_temperature_str(day.temp.night, '%.0f', false, units),
|
|
||||||
align = 'center',
|
|
||||||
font = font_name .. ' 9',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
},
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
},
|
|
||||||
spacing = 8,
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
}
|
|
||||||
table.insert(self, day_forecast)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
local hourly_forecast_graph = wibox.widget {
|
|
||||||
step_width = 12,
|
|
||||||
color = '#EBCB8B',
|
|
||||||
background_color = beautiful.bg_normal,
|
|
||||||
forced_height = 100,
|
|
||||||
forced_width = 300,
|
|
||||||
widget = wibox.widget.graph,
|
|
||||||
set_max_value = function(self, new_max_value)
|
|
||||||
self.max_value = new_max_value
|
|
||||||
end,
|
|
||||||
set_min_value = function(self, new_min_value)
|
|
||||||
self.min_value = new_min_value
|
|
||||||
end
|
|
||||||
}
|
|
||||||
local hourly_forecast_negative_graph = wibox.widget {
|
|
||||||
step_width = 12,
|
|
||||||
color = '#5E81AC',
|
|
||||||
background_color = beautiful.bg_normal,
|
|
||||||
forced_height = 100,
|
|
||||||
forced_width = 300,
|
|
||||||
widget = wibox.widget.graph,
|
|
||||||
set_max_value = function(self, new_max_value)
|
|
||||||
self.max_value = new_max_value
|
|
||||||
end,
|
|
||||||
set_min_value = function(self, new_min_value)
|
|
||||||
self.min_value = new_min_value
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
local hourly_forecast_widget = {
|
|
||||||
layout = wibox.layout.fixed.vertical,
|
|
||||||
update = function(self, hourly)
|
|
||||||
local hours_below = {
|
|
||||||
id = 'hours',
|
|
||||||
forced_width = 300,
|
|
||||||
layout = wibox.layout.flex.horizontal
|
|
||||||
}
|
|
||||||
local temp_below = {
|
|
||||||
id = 'temp',
|
|
||||||
forced_width = 300,
|
|
||||||
layout = wibox.layout.flex.horizontal
|
|
||||||
}
|
|
||||||
|
|
||||||
local max_temp = -1000
|
|
||||||
local min_temp = 1000
|
|
||||||
local values = {}
|
|
||||||
for i, hour in ipairs(hourly) do
|
|
||||||
if i > 25 then break end
|
|
||||||
values[i] = hour.temp
|
|
||||||
if max_temp < hour.temp then max_temp = hour.temp end
|
|
||||||
if min_temp > hour.temp then min_temp = hour.temp end
|
|
||||||
if (i - 1) % 5 == 0 then
|
|
||||||
table.insert(hours_below, wibox.widget {
|
|
||||||
text = os.date(time_format_12h and '%I%p' or '%H:00', tonumber(hour.dt)),
|
|
||||||
align = 'center',
|
|
||||||
font = font_name .. ' 9',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
})
|
|
||||||
table.insert(temp_below, wibox.widget {
|
|
||||||
markup = '<span foreground="'
|
|
||||||
.. (tonumber(hour.temp) > 0 and '#2E3440' or '#ECEFF4') .. '">'
|
|
||||||
.. string.format('%.0f', hour.temp) .. '°' .. '</span>',
|
|
||||||
align = 'center',
|
|
||||||
font = font_name .. ' 9',
|
|
||||||
widget = wibox.widget.textbox
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
hourly_forecast_graph:set_max_value(math.max(max_temp, math.abs(min_temp)))
|
|
||||||
hourly_forecast_graph:set_min_value(min_temp > 0 and min_temp * 0.7 or 0) -- move graph a bit up
|
|
||||||
|
|
||||||
hourly_forecast_negative_graph:set_max_value(math.abs(min_temp))
|
|
||||||
hourly_forecast_negative_graph:set_min_value(max_temp < 0 and math.abs(max_temp) * 0.7 or 0)
|
|
||||||
|
|
||||||
for _, value in ipairs(values) do
|
|
||||||
if value >= 0 then
|
|
||||||
hourly_forecast_graph:add_value(value)
|
|
||||||
hourly_forecast_negative_graph:add_value(0)
|
|
||||||
else
|
|
||||||
hourly_forecast_graph:add_value(0)
|
|
||||||
hourly_forecast_negative_graph:add_value(math.abs(value))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local count = #self
|
|
||||||
for i = 0, count do self[i]=nil end
|
|
||||||
|
|
||||||
-- all temperatures are positive
|
|
||||||
if min_temp > 0 then
|
|
||||||
table.insert(self, wibox.widget{
|
|
||||||
{
|
|
||||||
hourly_forecast_graph,
|
|
||||||
reflection = {horizontal = true},
|
|
||||||
widget = wibox.container.mirror
|
|
||||||
},
|
|
||||||
{
|
|
||||||
temp_below,
|
|
||||||
valign = 'bottom',
|
|
||||||
widget = wibox.container.place
|
|
||||||
},
|
|
||||||
id = 'graph',
|
|
||||||
layout = wibox.layout.stack
|
|
||||||
})
|
|
||||||
table.insert(self, hours_below)
|
|
||||||
|
|
||||||
-- all temperatures are negative
|
|
||||||
elseif max_temp < 0 then
|
|
||||||
table.insert(self, hours_below)
|
|
||||||
table.insert(self, wibox.widget{
|
|
||||||
{
|
|
||||||
hourly_forecast_negative_graph,
|
|
||||||
reflection = {horizontal = true, vertical = true},
|
|
||||||
widget = wibox.container.mirror
|
|
||||||
},
|
|
||||||
{
|
|
||||||
temp_below,
|
|
||||||
valign = 'top',
|
|
||||||
widget = wibox.container.place
|
|
||||||
},
|
|
||||||
id = 'graph',
|
|
||||||
layout = wibox.layout.stack
|
|
||||||
})
|
|
||||||
|
|
||||||
-- there are both negative and positive temperatures
|
|
||||||
else
|
|
||||||
table.insert(self, wibox.widget{
|
|
||||||
{
|
|
||||||
hourly_forecast_graph,
|
|
||||||
reflection = {horizontal = true},
|
|
||||||
widget = wibox.container.mirror
|
|
||||||
},
|
|
||||||
{
|
|
||||||
temp_below,
|
|
||||||
valign = 'bottom',
|
|
||||||
widget = wibox.container.place
|
|
||||||
},
|
|
||||||
id = 'graph',
|
|
||||||
layout = wibox.layout.stack
|
|
||||||
})
|
|
||||||
table.insert(self, wibox.widget{
|
|
||||||
{
|
|
||||||
hourly_forecast_negative_graph,
|
|
||||||
reflection = {horizontal = true, vertical = true},
|
|
||||||
widget = wibox.container.mirror
|
|
||||||
},
|
|
||||||
{
|
|
||||||
hours_below,
|
|
||||||
valign = 'top',
|
|
||||||
widget = wibox.container.place
|
|
||||||
},
|
|
||||||
id = 'graph',
|
|
||||||
layout = wibox.layout.stack
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end
|
|
||||||
}
|
|
||||||
|
|
||||||
local function update_widget(widget, stdout, stderr)
|
|
||||||
if stderr ~= '' then
|
|
||||||
if not warning_shown then
|
|
||||||
if (stderr ~= 'curl: (52) Empty reply from server'
|
|
||||||
and stderr ~= 'curl: (28) Failed to connect to api.openweathermap.org port 443: Connection timed out'
|
|
||||||
and stderr:find('^curl: %(18%) transfer closed with %d+ bytes remaining to read$') ~= nil
|
|
||||||
) then
|
|
||||||
show_warning(stderr)
|
|
||||||
end
|
|
||||||
warning_shown = true
|
|
||||||
widget:is_ok(false)
|
|
||||||
tooltip:add_to_object(widget)
|
|
||||||
|
|
||||||
widget:connect_signal('mouse::enter', function() tooltip.text = stderr end)
|
|
||||||
end
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
warning_shown = false
|
|
||||||
tooltip:remove_from_object(widget)
|
|
||||||
widget:is_ok(true)
|
|
||||||
|
|
||||||
local result = json.decode(stdout)
|
|
||||||
|
|
||||||
widget:set_image(ICONS_DIR .. icon_map[result.current.weather[1].icon] .. icons_extension)
|
|
||||||
widget:set_text(gen_temperature_str(result.current.temp, '%.0f', both_units_widget, units))
|
|
||||||
|
|
||||||
current_weather_widget:update(result.current)
|
|
||||||
|
|
||||||
local final_widget = {
|
|
||||||
current_weather_widget,
|
|
||||||
spacing = 16,
|
|
||||||
layout = wibox.layout.fixed.vertical
|
|
||||||
}
|
|
||||||
|
|
||||||
if show_hourly_forecast then
|
|
||||||
hourly_forecast_widget:update(result.hourly)
|
|
||||||
table.insert(final_widget, hourly_forecast_widget)
|
|
||||||
end
|
|
||||||
|
|
||||||
if show_daily_forecast then
|
|
||||||
daily_forecast_widget:update(result.daily, result.timezone_offset)
|
|
||||||
table.insert(final_widget, daily_forecast_widget)
|
|
||||||
end
|
|
||||||
|
|
||||||
weather_popup:setup({
|
|
||||||
{
|
|
||||||
final_widget,
|
|
||||||
margins = 10,
|
|
||||||
widget = wibox.container.margin
|
|
||||||
},
|
|
||||||
bg = beautiful.bg_normal,
|
|
||||||
widget = wibox.container.background
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
weather_widget:buttons(gears.table.join(awful.button({}, 1, function()
|
|
||||||
if weather_popup.visible then
|
|
||||||
weather_widget:set_bg('#00000000')
|
|
||||||
weather_popup.visible = not weather_popup.visible
|
|
||||||
else
|
|
||||||
weather_widget:set_bg(beautiful.bg_focus)
|
|
||||||
weather_popup:move_next_to(mouse.current_widget_geometry)
|
|
||||||
end
|
|
||||||
end)))
|
|
||||||
|
|
||||||
watch(
|
|
||||||
string.format(GET_FORECAST_CMD, owm_one_cal_api),
|
|
||||||
timeout, -- API limit is 1k req/day; day has 1440 min; every 2 min is good
|
|
||||||
update_widget, weather_widget
|
|
||||||
)
|
|
||||||
|
|
||||||
return weather_widget
|
|
||||||
end
|
|
||||||
|
|
||||||
return setmetatable(weather_widget, {__call = function(_, ...) return worker(...) end})
|
|