From d32c5fd6b45d3abd94a0a9034ca1454533b17acf Mon Sep 17 00:00:00 2001 From: vincent Date: Sat, 19 Oct 2019 10:30:01 +0200 Subject: [PATCH 1/5] modif icon --- awesome/.config/awesome/rc.lua | 3 +- .../.config/awesome/themes/default/theme.lua | 33 +++++++++---------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/awesome/.config/awesome/rc.lua b/awesome/.config/awesome/rc.lua index 97d5a45..cdfb9c9 100644 --- a/awesome/.config/awesome/rc.lua +++ b/awesome/.config/awesome/rc.lua @@ -78,10 +78,9 @@ awful.layout.layouts = { awful.layout.suit.tile.bottom, awful.layout.suit.tile.top, awful.layout.suit.fair, - awful.layout.suit.fair.horizontal, --awful.layout.suit.spiral, --awful.layout.suit.spiral.dwindle, - --awful.layout.suit.max, + awful.layout.suit.max, --awful.layout.suit.max.fullscreen, --awful.layout.suit.magnifier, awful.layout.suit.corner.nw, diff --git a/awesome/.config/awesome/themes/default/theme.lua b/awesome/.config/awesome/themes/default/theme.lua index 6dc55b2..030d611 100644 --- a/awesome/.config/awesome/themes/default/theme.lua +++ b/awesome/.config/awesome/themes/default/theme.lua @@ -104,22 +104,21 @@ theme.titlebar_maximized_button_focus_active = themes_path.."default/titlebar/m --theme.wallpaper = themes_path.."default/background.png" theme.wallpaper = "~/Images/wallpaper.jpg" -- You can use your own layout icons like this: -theme.layout_fairh = themes_path.."default/layouts/fairhw.png" -theme.layout_fairv = themes_path.."default/layouts/fairvw.png" -theme.layout_floating = themes_path.."default/layouts/floatingw.png" -theme.layout_magnifier = themes_path.."default/layouts/magnifierw.png" -theme.layout_max = themes_path.."default/layouts/maxw.png" -theme.layout_fullscreen = themes_path.."default/layouts/fullscreenw.png" -theme.layout_tilebottom = themes_path.."default/layouts/tilebottomw.png" -theme.layout_tileleft = themes_path.."default/layouts/tileleftw.png" -theme.layout_tile = themes_path.."default/layouts/tilew.png" -theme.layout_tiletop = themes_path.."default/layouts/tiletopw.png" -theme.layout_spiral = themes_path.."default/layouts/spiralw.png" -theme.layout_dwindle = themes_path.."default/layouts/dwindlew.png" -theme.layout_cornernw = themes_path.."default/layouts/cornernww.png" -theme.layout_cornerne = themes_path.."default/layouts/cornernew.png" -theme.layout_cornersw = themes_path.."default/layouts/cornersww.png" -theme.layout_cornerse = themes_path.."default/layouts/cornersew.png" +theme.layout_fairv = themes_path.."default/layouts/fair.svg" +theme.layout_floating = themes_path.."default/layouts/floating.svg" +theme.layout_magnifier = themes_path.."default/layouts/magnifier.svg" +theme.layout_max = themes_path.."default/layouts/max.svg" +theme.layout_fullscreen = themes_path.."default/layouts/fullscreen.svg" +theme.layout_tilebottom = themes_path.."default/layouts/tilebottom.svg" +theme.layout_tileleft = themes_path.."default/layouts/tileleft.svg" +theme.layout_tile = themes_path.."default/layouts/tile.svg" +theme.layout_tiletop = themes_path.."default/layouts/tiletop.svg" +theme.layout_spiral = themes_path.."default/layouts/spiral.svg" +theme.layout_dwindle = themes_path.."default/layouts/dwindle.svg" +theme.layout_cornernw = themes_path.."default/layouts/cornernw.svg" +theme.layout_cornerne = themes_path.."default/layouts/cornerne.svg" +theme.layout_cornersw = themes_path.."default/layouts/cornersw.svg" +theme.layout_cornerse = themes_path.."default/layouts/cornerse.svg" @@ -129,7 +128,7 @@ theme.cpu_icon = icon_dir .. "cpu.png" theme.net_up = icon_dir .. "net_up.png" theme.net_down = icon_dir .. "net_down.png" theme.spr_right = icon_dir .. "spr_right.png" -theme.mpd_icon = icon_dir .. "mpd.png" +theme.mpd_icon = icon_dir .. "audio.svg" theme.ram_icon = icon_dir .. "ram.png" -- Generate Awesome icon: theme.awesome_icon = theme_assets.awesome_icon( From a345c863268b0255a678b7c63a6ea7639758b557 Mon Sep 17 00:00:00 2001 From: vincent Date: Sat, 19 Oct 2019 18:52:29 +0200 Subject: [PATCH 2/5] add layout env edge menu rules signal --- .../.config/awesome/hotkeys_popup/termite.lua | 2 +- awesome/.config/awesome/rc.lua | 355 +++++------------- .../.config/awesome/themes/default/theme.lua | 4 +- 3 files changed, 103 insertions(+), 258 deletions(-) diff --git a/awesome/.config/awesome/hotkeys_popup/termite.lua b/awesome/.config/awesome/hotkeys_popup/termite.lua index 57b431e..d6a0a9e 100644 --- a/awesome/.config/awesome/hotkeys_popup/termite.lua +++ b/awesome/.config/awesome/hotkeys_popup/termite.lua @@ -5,7 +5,7 @@ -- @copyright 2017 ikselven -- @module awful.hotkeys_popup.keys.termite --------------------------------------------------------------------------- - +require("awful.hotkeys_popup.keys") local hotkeys_popup = require("awful.hotkeys_popup.widget") local termite_rule = { class = "Termite" } diff --git a/awesome/.config/awesome/rc.lua b/awesome/.config/awesome/rc.lua index cdfb9c9..aaf6ca5 100644 --- a/awesome/.config/awesome/rc.lua +++ b/awesome/.config/awesome/rc.lua @@ -1,6 +1,13 @@ -- Standard awesome library local gears = require("gears") local awful = require("awful") + +-- User modules +------------------------------------------------------------ +local redflat = require("redflat") + +redflat.startup:activate() + require("awful.autofocus") -- Widget and layout library local wibox = require("wibox") @@ -14,114 +21,52 @@ local xrandr = require("xrandr") local naughty = require("naughty") local menubar = require("menubar") --load revelation plugin -local revelation=require("revelation") + --load hotkey_popup local hotkeys_popup = require("awful.hotkeys_popup").widget -- Enable hotkeys help widget for VIM and other apps -- when client with a matching name is opened: -require("awful.hotkeys_popup.keys") + require("hotkeys_popup.termite") --- {{{ Error handling --- Check if awesome encountered an error during startup and fell back to --- another config (This code will only ever execute for the fallback config) -if awesome.startup_errors then - naughty.notify({ preset = naughty.config.presets.critical, - title = "Oops, there were errors during startup!", - text = awesome.startup_errors }) -end +-- Error handling +----------------------------------------------------------------------------------------------------------------------- +require("ercheck-config") -- load file with error handling --- Handle runtime errors after startup -do - local in_error = false - awesome.connect_signal("debug::error", function (err) - -- Make sure we don't go into an endless error loop - if in_error then return end - in_error = true - - naughty.notify({ preset = naughty.config.presets.critical, - title = "Oops, an error happened!", - text = tostring(err) }) - in_error = false - end) -end --- }}} - --- {{{ Variable definitions --- Themes define colours, icons, font and wallpapers. -beautiful.init(awful.util.getdir("config") .. "/themes/default/theme.lua") -beautiful.useless_gap = 5 +env=require("env-config") +env:init() -- revelation init +local revelation=require("revelation") revelation.init() -- -- This is used later as the default terminal and editor to run. -local terminal = "termite" awful.util.terminal = terminal editor = os.getenv("EDITOR") or "vim" -editor_cmd = terminal .. " -e " .. editor +editor_cmd = env.terminal .. " -e " .. editor --- Default modkey. +-- Default env.mod. -- Usually, Mod4 is the key with a logo between Control and Alt. -- If you do not like this or do not have such a key, -- I suggest you to remap Mod4 to another key using xmodmap or other tools. -- However, you can use another modifier like Mod1, but it may interact with others. -modkey = "Mod4" -- Table of layouts to cover with awful.layout.inc, order matters. -awful.layout.layouts = { - awful.layout.suit.floating, - awful.layout.suit.tile, - awful.layout.suit.tile.left, - awful.layout.suit.tile.bottom, - awful.layout.suit.tile.top, - awful.layout.suit.fair, - --awful.layout.suit.spiral, - --awful.layout.suit.spiral.dwindle, - awful.layout.suit.max, - --awful.layout.suit.max.fullscreen, - --awful.layout.suit.magnifier, - awful.layout.suit.corner.nw, - awful.layout.suit.corner.ne, - -- awful.layout.suit.corner.sw, - -- awful.layout.suit.corner.se, -} --- }}} --- {{{ Helper functions -local function client_menu_toggle_fn() - local instance = nil - - return function () - if instance and instance.wibox.visible then - instance:hide() - instance = nil - else - instance = awful.menu.clients({ theme = { width = 250 } }) - end - end -end --- }}} -- {{{ Menu --- Create a launcher widget and a main menu -myawesomemenu = { - { "hotkeys", function() return false, hotkeys_popup.show_help end}, - { "manual", terminal .. " -e man awesome" }, - { "edit config", editor_cmd .. " " .. awesome.conffile }, - { "restart", awesome.restart }, - { "quit", function() awesome.quit() end} -} +local mainmenu=require("menu") +mainmenu:init({ env = env }) -mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, - { "open terminal", terminal } - } - }) +local layouts = require("layout-config") -- load file with tile layouts setup +layouts:init() -mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, - menu = mymainmenu }) + + +--mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, + -- menu = mymainmenu }) -- Menubar configuration menubar.utils.terminal = terminal -- Set the terminal for applications that require it -- }}} @@ -133,7 +78,7 @@ mykeyboardlayout = awful.widget.keyboardlayout() -- Create a textclock widget mytextclock = wibox.widget.textclock() -local spr_right = wibox.widget.imagebox(beautiful.spr_right) +local spr_right = redflat.gauge.separator.vertical() local cpuicon = wibox.widget.imagebox(beautiful.cpu_icon,true) local cpu = lain.widget.cpu({ settings = function() @@ -206,13 +151,13 @@ local bat = lain.widget.bat({ -- Create a wibox for each screen and add it local taglist_buttons = gears.table.join( awful.button({ }, 1, function(t) t:view_only() end), - awful.button({ modkey }, 1, function(t) + awful.button({ env.mod }, 1, function(t) if client.focus then client.focus:move_to_tag(t) end end), awful.button({ }, 3, awful.tag.viewtoggle), - awful.button({ modkey }, 3, function(t) + awful.button({ env.mod }, 3, function(t) if client.focus then client.focus:toggle_tag(t) end @@ -242,7 +187,7 @@ awful.screen.connect_for_each_screen(function(s) set_wallpaper(s) -- Each screen has its own tag taawful.util.terminable. - awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[2]) + awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[3]) -- Create a promptbox for each screen @@ -266,7 +211,6 @@ awful.screen.connect_for_each_screen(function(s) layout = wibox.layout.align.horizontal, { -- Left widgets layout = wibox.layout.fixed.horizontal, - mylauncher, s.mytaglist, s.mypromptbox, spr_right, @@ -276,7 +220,6 @@ awful.screen.connect_for_each_screen(function(s) nil -- Middle widget ,{ -- Right widgets layout = wibox.layout.fixed.horizontal, - myredshift_stack, spr_right, netdownicon, netdowninfo, @@ -288,8 +231,11 @@ awful.screen.connect_for_each_screen(function(s) mymem, baticon, bat, + spr_right, mykeyboardlayout, + spr_right, wibox.widget.systray(), + spr_right, mytextclock, s.mylayoutbox, }, @@ -299,7 +245,7 @@ end) -- {{{ Mouse bindings root.buttons(gears.table.join( - awful.button({ }, 3, function () mymainmenu:toggle() end), + awful.button({ }, 3, function () mainmenu.mainmenu:toggle() end), awful.button({ }, 4, awful.tag.viewnext), awful.button({ }, 5, awful.tag.viewprev) )) @@ -307,49 +253,49 @@ root.buttons(gears.table.join( -- {{{ Key bindings globalkeys = gears.table.join( - awful.key({ modkey }, "b", function () + awful.key({ env.mod }, "b", function () mouse.screen.mywibox.visible = not mouse.screen.mywibox.visible - end,{description="toble wibox",group="awesome"}), - awful.key({ modkey, }, "s", hotkeys_popup.show_help, + end,{description="togle wibox",group="awesome"}), + awful.key({ env.mod, }, "s", hotkeys_popup.show_help, {description="show help", group="awesome"}), - awful.key({ modkey, }, "e", revelation, + awful.key({ env.mod, }, "e", revelation, {description="revelation shortcut",group="awesome"}), - awful.key({ modkey, }, "Left", awful.tag.viewprev, + awful.key({ env.mod, }, "Left", awful.tag.viewprev, {description = "view previous", group = "tag"}), - awful.key({ modkey, }, "Right", awful.tag.viewnext, + awful.key({ env.mod, }, "Right", awful.tag.viewnext, {description = "view next", group = "tag"}), - awful.key({ modkey, }, "Escape", awful.tag.history.restore, + awful.key({ env.mod, }, "Escape", awful.tag.history.restore, {description = "go back", group = "tag"}), awful.key({ "Shift" }, "Alt_L", function() mykeyboardlayout.next_layout(); end), - awful.key({ modkey, }, "j", + awful.key({ env.mod, }, "j", function () awful.client.focus.byidx( 1) end, {description = "focus next by index", group = "client"} ), - awful.key({ modkey, }, "k", + awful.key({ env.mod, }, "k", function () awful.client.focus.byidx(-1) end, {description = "focus previous by index", group = "client"} ), - awful.key({modkey,"Shift"},"o" , function() xrandr.xrandr() end, + awful.key({env.mod,"Shift"},"o" , function() xrandr.xrandr() end, {description = "xrandr shortcut", group = "awesome"}), - awful.key({ modkey, }, "w", function () mymainmenu:show() end, + awful.key({ env.mod, }, "w", function () mainmenu.mainmenu:show() end, {description = "show main menu", group = "awesome"}), -- Layout manipulation - awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, + awful.key({ env.mod, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, {description = "swap with next client by index", group = "client"}), - awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, + awful.key({ env.mod, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, {description = "swap with previous client by index", group = "client"}), - awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end, + awful.key({ env.mod, "Control" }, "j", function () awful.screen.focus_relative( 1) end, {description = "focus the next screen", group = "screen"}), - awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end, + awful.key({ env.mod, "Control" }, "k", function () awful.screen.focus_relative(-1) end, {description = "focus the previous screen", group = "screen"}), - awful.key({ modkey, }, "u", awful.client.urgent.jumpto, + awful.key({ env.mod, }, "u", awful.client.urgent.jumpto, {description = "jump to urgent client", group = "client"}), - awful.key({ modkey, }, "Tab", + awful.key({ env.mod, }, "Tab", function () awful.client.focus.history.previous() if client.focus then @@ -360,31 +306,31 @@ globalkeys = gears.table.join( -- Standard program -- Dropdown application - awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end, + awful.key({ env.mod, }, "Return", function () awful.spawn(terminal) end, {description = "open a terminal", group = "launcher"}), - awful.key({ modkey, "Control" }, "r", awesome.restart, + awful.key({ env.mod, "Control" }, "r", awesome.restart, {description = "reload awesome", group = "awesome"}), - awful.key({ modkey, "Shift" }, "q", awesome.quit, + awful.key({ env.mod, "Shift" }, "q", awesome.quit, {description = "quit awesome", group = "awesome"}), - awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end, + awful.key({ env.mod, }, "l", function () awful.tag.incmwfact( 0.05) end, {description = "increase master width factor", group = "layout"}), - awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end, + awful.key({ env.mod, }, "h", function () awful.tag.incmwfact(-0.05) end, {description = "decrease master width factor", group = "layout"}), - awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end, + awful.key({ env.mod, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end, {description = "increase the number of master clients", group = "layout"}), - awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end, + awful.key({ env.mod, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end, {description = "decrease the number of master clients", group = "layout"}), - awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end, + awful.key({ env.mod, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end, {description = "increase the number of columns", group = "layout"}), - awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end, + awful.key({ env.mod, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end, {description = "decrease the number of columns", group = "layout"}), - awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end, + awful.key({ env.mod, }, "space", function () awful.layout.inc( 1) end, {description = "select next", group = "layout"}), - awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(-1) end, + awful.key({ env.mod, "Shift" }, "space", function () awful.layout.inc(-1) end, {description = "select previous", group = "layout"}), - awful.key({ modkey, "Control" }, "n", + awful.key({ env.mod, "Control" }, "n", function () local c = awful.client.restore() -- Focus restored client @@ -396,10 +342,10 @@ globalkeys = gears.table.join( {description = "restore minimized", group = "client"}), -- Prompt - awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end, + awful.key({ env.mod }, "r", function () awful.screen.focused().mypromptbox:run() end, {description = "run prompt", group = "launcher"}), - awful.key({ modkey }, "x", + awful.key({ env.mod }, "x", function () awful.prompt.run { prompt = "Run Lua code: ", @@ -410,7 +356,7 @@ globalkeys = gears.table.join( end, {description = "lua execute prompt", group = "awesome"}), -- Menubar - awful.key({ modkey }, "p", function() menubar.show() end, + awful.key({ env.mod }, "p", function() menubar.show() end, {description = "show the menubar", group = "launcher"}), awful.key({ },"XF86AudioRaiseVolume", function() awful.spawn("pamixer -i 5") end), awful.key({ }, "XF86AudioLowerVolume", function () awful.spawn("pamixer -d 5") end), @@ -436,42 +382,42 @@ globalkeys = gears.table.join( ) clientkeys = gears.table.join( - awful.key({ modkey, }, "f", + awful.key({ env.mod, }, "f", function (c) c.fullscreen = not c.fullscreen c:raise() end, {description = "toggle fullscreen", group = "client"}), - awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end, + awful.key({ env.mod, "Shift" }, "c", function (c) c:kill() end, {description = "close", group = "client"}), - awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle , + awful.key({ env.mod, "Control" }, "space", awful.client.floating.toggle , {description = "toggle floating", group = "client"}), - awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end, + awful.key({ env.mod, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end, {description = "move to master", group = "client"}), - awful.key({ modkey, }, "o", function (c) c:move_to_screen() end, + awful.key({ env.mod, }, "o", function (c) c:move_to_screen() end, {description = "move to screen", group = "client"}), - awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end, + awful.key({ env.mod, }, "t", function (c) c.ontop = not c.ontop end, {description = "toggle keep on top", group = "client"}), - awful.key({ modkey, }, "n", + awful.key({ env.mod, }, "n", function (c) -- The client currently has the input focus, so it cannot be -- minimized, since minimized clients can't have the focus. c.minimized = true end , {description = "minimize", group = "client"}), - awful.key({ modkey, }, "m", + awful.key({ env.mod, }, "m", function (c) c.maximized = not c.maximized c:raise() end , {description = "(un)maximize", group = "client"}), - awful.key({ modkey, "Control" }, "m", + awful.key({ env.mod, "Control" }, "m", function (c) c.maximized_vertical = not c.maximized_vertical c:raise() end , {description = "(un)maximize vertically", group = "client"}), - awful.key({ modkey, "Shift" }, "m", + awful.key({ env.mod, "Shift" }, "m", function (c) c.maximized_horizontal = not c.maximized_horizontal c:raise() @@ -485,7 +431,7 @@ clientkeys = gears.table.join( for i = 1, 9 do globalkeys = gears.table.join(globalkeys, -- View tag only. - awful.key({ modkey }, "#" .. i + 9, + awful.key({ env.mod }, "#" .. i + 9, function () local screen = awful.screen.focused() local tag = screen.tags[i] @@ -495,7 +441,7 @@ for i = 1, 9 do end, {description = "view tag #"..i, group = "tag"}), -- Toggle tag display. - awful.key({ modkey, "Control" }, "#" .. i + 9, + awful.key({ env.mod, "Control" }, "#" .. i + 9, function () local screen = awful.screen.focused() local tag = screen.tags[i] @@ -505,7 +451,7 @@ for i = 1, 9 do end, {description = "toggle tag #" .. i, group = "tag"}), -- Move client to tag. - awful.key({ modkey, "Shift" }, "#" .. i + 9, + awful.key({ env.mod, "Shift" }, "#" .. i + 9, function () if client.focus then local tag = client.focus.screen.tags[i] @@ -516,7 +462,7 @@ for i = 1, 9 do end, {description = "move focused client to tag #"..i, group = "tag"}), -- Toggle tag on focused client. - awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, + awful.key({ env.mod, "Control", "Shift" }, "#" .. i + 9, function () if client.focus then local tag = client.focus.screen.tags[i] @@ -531,140 +477,37 @@ end clientbuttons = gears.table.join( awful.button({ }, 1, function (c) client.focus = c; c:raise() end), - awful.button({ modkey }, 1, awful.mouse.client.move), - awful.button({ modkey }, 3, awful.mouse.client.resize)) + awful.button({ env.mod }, 1, awful.mouse.client.move), + awful.button({ env.mod }, 3, awful.mouse.client.resize)) + + +-- Active screen edges +----------------------------------------------------------------------------------------------------------------------- +local edges = require("edges-config") -- load file with edges configuration +edges:init() -- Set keys root.keys(globalkeys) -- }}} - +local hotkeys = require("keys-config") -- load file with hotkeys configuration +hotkeys:init({ env = env, menu = mainmenu.mainmenu }) -- {{{ Rules -- Rules to apply to new clients (through the "manage" signal). -awful.rules.rules = { - -- All clients will match this rule. - { rule = { }, - properties = { border_width = beautiful.border_width, - border_color = beautiful.border_normal, - focus = awful.client.focus.filter, - raise = true, - keys = clientkeys, - buttons = clientbuttons, - screen = awful.screen.preferred, - placement = awful.placement.no_overlap+awful.placement.no_offscreen - } - }, +local rules = require("rules-config") -- load file with rules configuration +rules:init({ hotkeys = hotkeys}) - -- Floating clients. - { rule_any = { - instance = { - "DTA", -- Firefox addon DownThemAll. - "copyq", -- Includes session name in class. - }, - class = { - "Arandr", - "Gpick", - "Kruler", - "MessageWin", -- kalarm. - "Sxiv", - "Wpa_gui", - "pinentry", - "veromix", - "xtightvncviewer", - "keepassxc", - }, - - name = { - "Calculatrice", - "Event Tester", -- xev. - }, - role = { - "AlarmWindow", -- Thunderbird's calendar. - "pop-up", -- e.g. Google Chrome's (detached) Developer Tools. - } - }, properties = { floating = true, - ontop=true - } - }, - - -- Add titlebars to normal clients and dialogs - { rule_any = {type = { "normal", "dialog" } - }, properties = { titlebars_enabled = true } - }, - - -- Set Firefox to always map on the tag named "2" on screen 1. - -- { rule = { class = "Firefox" }, - -- properties = { screen = 1, tag = "2" } }, -} --- }}} +-- Titlebar setup +----------------------------------------------------------------------------------------------------------------------- +local titlebar = require("titlebar-config") -- load file with titlebar configuration +titlebar:init() -- {{{ Signals -- Signal function to execute when a new client appears. -client.connect_signal("manage", function (c) - -- Set the windows at the slave, - -- i.e. put it at the end of others instead of setting it master. - -- if not awesome.startup then awful.client.setslave(c) end +-- Base signal set for awesome wm +----------------------------------------------------------------------------------------------------------------------- +local signals = require("signals-config") -- load file with signals configuration +signals:init({ env = env }) - if awesome.startup and - not c.size_hints.user_position - and not c.size_hints.program_position then - -- Prevent clients from being unreachable after screen count changes. - awful.placement.no_offscreen(c) - end -end) - --- Add a titlebar if titlebars_enabled is set to true in the rules. -client.connect_signal("request::titlebars", function(c) - -- buttons for the titlebar - local buttons = gears.table.join( - awful.button({ }, 1, function() - client.focus = c - c:raise() - awful.mouse.client.move(c) - end), - awful.button({ }, 3, function() - client.focus = c - c:raise() - awful.mouse.client.resize(c) - end) - ) - - awful.titlebar(c) : setup { - { -- Left - awful.titlebar.widget.iconwidget(c), - buttons = buttons, - layout = wibox.layout.fixed.horizontal - }, - { -- Middle - { -- Title - align = "center", - widget = awful.titlebar.widget.titlewidget(c) - }, - buttons = buttons, - layout = wibox.layout.flex.horizontal - }, - { -- Right - awful.titlebar.widget.floatingbutton (c), - awful.titlebar.widget.maximizedbutton(c), - awful.titlebar.widget.stickybutton (c), - awful.titlebar.widget.ontopbutton (c), - awful.titlebar.widget.closebutton (c), - layout = wibox.layout.fixed.horizontal() - }, - layout = wibox.layout.align.horizontal - } -end) - --- Enable sloppy focus, so that focus follows mouse. -client.connect_signal("mouse::enter", function(c) - if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier - and awful.client.focus.filter(c) then - client.focus = c - end -end) - -client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) -client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) --- }}} -- --include autorun file awful.spawn.with_shell("~/.config/awesome/autorun.sh") diff --git a/awesome/.config/awesome/themes/default/theme.lua b/awesome/.config/awesome/themes/default/theme.lua index 030d611..a966cdc 100644 --- a/awesome/.config/awesome/themes/default/theme.lua +++ b/awesome/.config/awesome/themes/default/theme.lua @@ -10,7 +10,7 @@ local gfs = require("gears.filesystem") local themes_path =os.getenv("HOME") .. "/.config/awesome/themes/" local icon_dir = themes_path .. "default/icons/" -local theme = {} +local theme = require("themes/colorless/theme") theme.font = "Roboto Bold 10" @@ -108,6 +108,8 @@ theme.layout_fairv = themes_path.."default/layouts/fair.svg" theme.layout_floating = themes_path.."default/layouts/floating.svg" theme.layout_magnifier = themes_path.."default/layouts/magnifier.svg" theme.layout_max = themes_path.."default/layouts/max.svg" +theme.layout_grid = themes_path.."default/layouts/grid.svg" +theme.layout_usermap = themes_path.."default/layouts/map.svg" theme.layout_fullscreen = themes_path.."default/layouts/fullscreen.svg" theme.layout_tilebottom = themes_path.."default/layouts/tilebottom.svg" theme.layout_tileleft = themes_path.."default/layouts/tileleft.svg" From 8b1c4c1a4aed041fc7690f2c1d89f4a5bc728451 Mon Sep 17 00:00:00 2001 From: vincent Date: Sat, 19 Oct 2019 18:54:31 +0200 Subject: [PATCH 3/5] add layout env edge menu rules signal --- awesome/.config/awesome/edges-config.lua | 76 + awesome/.config/awesome/env-config.lua | 100 ++ awesome/.config/awesome/ercheck-config.lua | 27 + awesome/.config/awesome/keys-config.lua | 871 ++++++++++ awesome/.config/awesome/layout-config.lua | 86 + awesome/.config/awesome/menu.lua | 96 ++ awesome/.config/awesome/redflat/.gitignore | 2 + awesome/.config/awesome/redflat/.luacheckrc | 39 + .../awesome/redflat/desktop/calendar.lua | 201 +++ .../redflat/desktop/common/bar/init.lua | 10 + .../redflat/desktop/common/bar/plain.lua | 114 ++ .../redflat/desktop/common/bar/shaped.lua | 144 ++ .../awesome/redflat/desktop/common/chart.lua | 121 ++ .../awesome/redflat/desktop/common/init.lua | 10 + .../redflat/desktop/common/pack/init.lua | 10 + .../redflat/desktop/common/pack/lines.lua | 137 ++ .../redflat/desktop/common/pack/upright.lua | 72 + .../redflat/desktop/common/textbox.lua | 158 ++ .../.config/awesome/redflat/desktop/init.lua | 10 + .../awesome/redflat/desktop/multiline.lua | 136 ++ .../awesome/redflat/desktop/multimeter.lua | 167 ++ .../awesome/redflat/desktop/singleline.lua | 138 ++ .../redflat/desktop/speedmeter/compact.lua | 173 ++ .../redflat/desktop/speedmeter/init.lua | 10 + .../redflat/desktop/speedmeter/normal.lua | 199 +++ .../awesome/redflat/desktop/textset.lua | 98 ++ .../awesome/redflat/float/apprunner.lua | 367 +++++ .../awesome/redflat/float/appswitcher.lua | 459 ++++++ .../.config/awesome/redflat/float/bartip.lua | 221 +++ .../awesome/redflat/float/brightness.lua | 62 + .../awesome/redflat/float/clientmenu.lua | 383 +++++ .../.config/awesome/redflat/float/control.lua | 358 ++++ .../awesome/redflat/float/decoration.lua | 88 + .../.config/awesome/redflat/float/hotkeys.lua | 361 ++++ .../.config/awesome/redflat/float/init.lua | 10 + .../awesome/redflat/float/keychain.lua | 202 +++ .../.config/awesome/redflat/float/notify.lua | 140 ++ .../.config/awesome/redflat/float/player.lua | 506 ++++++ .../.config/awesome/redflat/float/prompt.lua | 99 ++ .../.config/awesome/redflat/float/qlaunch.lua | 510 ++++++ .../.config/awesome/redflat/float/tooltip.lua | 156 ++ awesome/.config/awesome/redflat/float/top.lua | 379 +++++ .../awesome/redflat/gauge/audio/blue.lua | 80 + .../awesome/redflat/gauge/audio/init.lua | 10 + .../awesome/redflat/gauge/audio/red.lua | 93 ++ .../awesome/redflat/gauge/graph/bar.lua | 80 + .../awesome/redflat/gauge/graph/dash.lua | 88 + .../awesome/redflat/gauge/graph/dots.lua | 109 ++ .../awesome/redflat/gauge/graph/init.lua | 10 + .../awesome/redflat/gauge/icon/double.lua | 96 ++ .../awesome/redflat/gauge/icon/init.lua | 10 + .../awesome/redflat/gauge/icon/single.lua | 95 ++ .../.config/awesome/redflat/gauge/init.lua | 10 + .../awesome/redflat/gauge/monitor/circle.lua | 109 ++ .../awesome/redflat/gauge/monitor/dash.lua | 98 ++ .../awesome/redflat/gauge/monitor/double.lua | 130 ++ .../awesome/redflat/gauge/monitor/init.lua | 10 + .../awesome/redflat/gauge/monitor/plain.lua | 113 ++ .../awesome/redflat/gauge/separator.lua | 87 + .../.config/awesome/redflat/gauge/svgbox.lua | 218 +++ .../awesome/redflat/gauge/tag/blue.lua | 125 ++ .../awesome/redflat/gauge/tag/green.lua | 89 + .../awesome/redflat/gauge/tag/init.lua | 10 + .../awesome/redflat/gauge/tag/orange.lua | 141 ++ .../.config/awesome/redflat/gauge/tag/red.lua | 191 +++ .../awesome/redflat/gauge/tag/ruby.lua | 114 ++ .../awesome/redflat/gauge/task/green.lua | 116 ++ .../awesome/redflat/gauge/task/init.lua | 10 + .../awesome/redflat/gauge/task/red.lua | 120 ++ .../awesome/redflat/gauge/task/ruby.lua | 137 ++ awesome/.config/awesome/redflat/init.lua | 12 + .../.config/awesome/redflat/layout/common.lua | 371 +++++ .../.config/awesome/redflat/layout/grid.lua | 480 ++++++ .../.config/awesome/redflat/layout/init.lua | 10 + .../.config/awesome/redflat/layout/map.lua | 688 ++++++++ awesome/.config/awesome/redflat/menu.lua | 676 ++++++++ .../awesome/redflat/service/dfparser.lua | 412 +++++ .../.config/awesome/redflat/service/init.lua | 10 + .../awesome/redflat/service/navigator.lua | 355 ++++ awesome/.config/awesome/redflat/startup.lua | 44 + awesome/.config/awesome/redflat/system.lua | 753 +++++++++ awesome/.config/awesome/redflat/titlebar.lua | 442 +++++ awesome/.config/awesome/redflat/util/base.lua | 66 + .../.config/awesome/redflat/util/cairo.lua | 35 + .../.config/awesome/redflat/util/client.lua | 54 + .../.config/awesome/redflat/util/desktop.lua | 126 ++ awesome/.config/awesome/redflat/util/init.lua | 14 + awesome/.config/awesome/redflat/util/key.lua | 67 + .../awesome/redflat/util/placement.lua | 64 + awesome/.config/awesome/redflat/util/read.lua | 32 + .../.config/awesome/redflat/util/table.lua | 45 + awesome/.config/awesome/redflat/util/text.lua | 41 + .../awesome/redflat/widget/battery.lua | 99 ++ .../awesome/redflat/widget/binclock.lua | 125 ++ .../.config/awesome/redflat/widget/init.lua | 10 + .../awesome/redflat/widget/keyboard.lua | 135 ++ .../awesome/redflat/widget/layoutbox.lua | 168 ++ .../.config/awesome/redflat/widget/mail.lua | 196 +++ .../awesome/redflat/widget/minitray.lua | 175 ++ .../.config/awesome/redflat/widget/net.lua | 101 ++ .../.config/awesome/redflat/widget/pulse.lua | 215 +++ .../.config/awesome/redflat/widget/sysmon.lua | 73 + .../awesome/redflat/widget/taglist.lua | 210 +++ .../awesome/redflat/widget/tasklist.lua | 895 ++++++++++ .../awesome/redflat/widget/textclock.lua | 80 + .../awesome/redflat/widget/updates.lua | 413 +++++ awesome/.config/awesome/rules-config.lua | 114 ++ awesome/.config/awesome/signals-config.lua | 103 ++ .../themes/colorless/common/awesome.svg | 3 + .../awesome/themes/colorless/common/blank.svg | 1 + .../awesome/themes/colorless/common/check.svg | 3 + .../themes/colorless/common/submenu.svg | 3 + .../themes/colorless/common/system.svg | 3 + .../themes/colorless/common/unknown.svg | 3 + .../themes/colorless/common/warning.svg | 3 + .../themes/colorless/layouts/cornerne.svg | 6 + .../themes/colorless/layouts/cornernw.svg | 4 + .../themes/colorless/layouts/cornerse.svg | 6 + .../themes/colorless/layouts/cornersw.svg | 6 + .../awesome/themes/colorless/layouts/fair.svg | 8 + .../themes/colorless/layouts/floating.svg | 3 + .../themes/colorless/layouts/fullscreen.svg | 6 + .../awesome/themes/colorless/layouts/grid.svg | 10 + .../themes/colorless/layouts/magnifier.svg | 9 + .../awesome/themes/colorless/layouts/map.svg | 3 + .../awesome/themes/colorless/layouts/max.svg | 8 + .../themes/colorless/layouts/spiral.svg | 10 + .../awesome/themes/colorless/layouts/tile.svg | 7 + .../themes/colorless/layouts/tilebottom.svg | 7 + .../themes/colorless/layouts/tileleft.svg | 7 + .../themes/colorless/layouts/tiletop.svg | 7 + .../awesome/themes/colorless/player/cover.svg | 3 + .../awesome/themes/colorless/player/next.svg | 6 + .../awesome/themes/colorless/player/pause.svg | 6 + .../awesome/themes/colorless/player/play.svg | 3 + .../themes/colorless/player/previous.svg | 6 + .../awesome/themes/colorless/theme.lua | 1454 +++++++++++++++++ .../themes/colorless/titlebar/absent.svg | 3 + .../themes/colorless/titlebar/active.svg | 3 + .../themes/colorless/titlebar/below.svg | 4 + .../themes/colorless/titlebar/close.svg | 3 + .../themes/colorless/titlebar/disabled.svg | 3 + .../themes/colorless/titlebar/floating.svg | 3 + .../themes/colorless/titlebar/focus.svg | 3 + .../themes/colorless/titlebar/hidden.svg | 3 + .../themes/colorless/titlebar/maximized.svg | 3 + .../themes/colorless/titlebar/menu.svg | 3 + .../themes/colorless/titlebar/minimize.svg | 3 + .../themes/colorless/titlebar/ontop.svg | 6 + .../awesome/themes/colorless/titlebar/pin.svg | 3 + .../themes/colorless/titlebar/title.svg | 3 + .../awesome/themes/default/icons/audio.svg | 3 + .../themes/default/layouts/cornerne.svg | 6 + .../themes/default/layouts/cornernw.svg | 4 + .../themes/default/layouts/cornerse.svg | 6 + .../themes/default/layouts/cornersw.svg | 6 + .../awesome/themes/default/layouts/fair.svg | 8 + .../themes/default/layouts/floating.svg | 3 + .../themes/default/layouts/fullscreen.svg | 6 + .../awesome/themes/default/layouts/grid.svg | 10 + .../themes/default/layouts/magnifier.svg | 9 + .../awesome/themes/default/layouts/map.svg | 3 + .../awesome/themes/default/layouts/max.svg | 8 + .../awesome/themes/default/layouts/spiral.svg | 10 + .../awesome/themes/default/layouts/tile.svg | 7 + .../themes/default/layouts/tilebottom.svg | 7 + .../themes/default/layouts/tileleft.svg | 7 + .../themes/default/layouts/tiletop.svg | 7 + awesome/.config/awesome/titlebar-config.lua | 150 ++ 169 files changed, 19824 insertions(+) create mode 100644 awesome/.config/awesome/edges-config.lua create mode 100644 awesome/.config/awesome/env-config.lua create mode 100644 awesome/.config/awesome/ercheck-config.lua create mode 100644 awesome/.config/awesome/keys-config.lua create mode 100644 awesome/.config/awesome/layout-config.lua create mode 100644 awesome/.config/awesome/menu.lua create mode 100644 awesome/.config/awesome/redflat/.gitignore create mode 100644 awesome/.config/awesome/redflat/.luacheckrc create mode 100644 awesome/.config/awesome/redflat/desktop/calendar.lua create mode 100644 awesome/.config/awesome/redflat/desktop/common/bar/init.lua create mode 100644 awesome/.config/awesome/redflat/desktop/common/bar/plain.lua create mode 100644 awesome/.config/awesome/redflat/desktop/common/bar/shaped.lua create mode 100644 awesome/.config/awesome/redflat/desktop/common/chart.lua create mode 100644 awesome/.config/awesome/redflat/desktop/common/init.lua create mode 100644 awesome/.config/awesome/redflat/desktop/common/pack/init.lua create mode 100644 awesome/.config/awesome/redflat/desktop/common/pack/lines.lua create mode 100644 awesome/.config/awesome/redflat/desktop/common/pack/upright.lua create mode 100644 awesome/.config/awesome/redflat/desktop/common/textbox.lua create mode 100644 awesome/.config/awesome/redflat/desktop/init.lua create mode 100644 awesome/.config/awesome/redflat/desktop/multiline.lua create mode 100644 awesome/.config/awesome/redflat/desktop/multimeter.lua create mode 100644 awesome/.config/awesome/redflat/desktop/singleline.lua create mode 100644 awesome/.config/awesome/redflat/desktop/speedmeter/compact.lua create mode 100644 awesome/.config/awesome/redflat/desktop/speedmeter/init.lua create mode 100644 awesome/.config/awesome/redflat/desktop/speedmeter/normal.lua create mode 100644 awesome/.config/awesome/redflat/desktop/textset.lua create mode 100644 awesome/.config/awesome/redflat/float/apprunner.lua create mode 100644 awesome/.config/awesome/redflat/float/appswitcher.lua create mode 100644 awesome/.config/awesome/redflat/float/bartip.lua create mode 100644 awesome/.config/awesome/redflat/float/brightness.lua create mode 100644 awesome/.config/awesome/redflat/float/clientmenu.lua create mode 100644 awesome/.config/awesome/redflat/float/control.lua create mode 100644 awesome/.config/awesome/redflat/float/decoration.lua create mode 100644 awesome/.config/awesome/redflat/float/hotkeys.lua create mode 100644 awesome/.config/awesome/redflat/float/init.lua create mode 100644 awesome/.config/awesome/redflat/float/keychain.lua create mode 100644 awesome/.config/awesome/redflat/float/notify.lua create mode 100644 awesome/.config/awesome/redflat/float/player.lua create mode 100644 awesome/.config/awesome/redflat/float/prompt.lua create mode 100644 awesome/.config/awesome/redflat/float/qlaunch.lua create mode 100644 awesome/.config/awesome/redflat/float/tooltip.lua create mode 100644 awesome/.config/awesome/redflat/float/top.lua create mode 100644 awesome/.config/awesome/redflat/gauge/audio/blue.lua create mode 100644 awesome/.config/awesome/redflat/gauge/audio/init.lua create mode 100644 awesome/.config/awesome/redflat/gauge/audio/red.lua create mode 100644 awesome/.config/awesome/redflat/gauge/graph/bar.lua create mode 100644 awesome/.config/awesome/redflat/gauge/graph/dash.lua create mode 100644 awesome/.config/awesome/redflat/gauge/graph/dots.lua create mode 100644 awesome/.config/awesome/redflat/gauge/graph/init.lua create mode 100644 awesome/.config/awesome/redflat/gauge/icon/double.lua create mode 100644 awesome/.config/awesome/redflat/gauge/icon/init.lua create mode 100644 awesome/.config/awesome/redflat/gauge/icon/single.lua create mode 100644 awesome/.config/awesome/redflat/gauge/init.lua create mode 100644 awesome/.config/awesome/redflat/gauge/monitor/circle.lua create mode 100644 awesome/.config/awesome/redflat/gauge/monitor/dash.lua create mode 100644 awesome/.config/awesome/redflat/gauge/monitor/double.lua create mode 100644 awesome/.config/awesome/redflat/gauge/monitor/init.lua create mode 100644 awesome/.config/awesome/redflat/gauge/monitor/plain.lua create mode 100644 awesome/.config/awesome/redflat/gauge/separator.lua create mode 100644 awesome/.config/awesome/redflat/gauge/svgbox.lua create mode 100644 awesome/.config/awesome/redflat/gauge/tag/blue.lua create mode 100644 awesome/.config/awesome/redflat/gauge/tag/green.lua create mode 100644 awesome/.config/awesome/redflat/gauge/tag/init.lua create mode 100644 awesome/.config/awesome/redflat/gauge/tag/orange.lua create mode 100644 awesome/.config/awesome/redflat/gauge/tag/red.lua create mode 100644 awesome/.config/awesome/redflat/gauge/tag/ruby.lua create mode 100644 awesome/.config/awesome/redflat/gauge/task/green.lua create mode 100644 awesome/.config/awesome/redflat/gauge/task/init.lua create mode 100644 awesome/.config/awesome/redflat/gauge/task/red.lua create mode 100644 awesome/.config/awesome/redflat/gauge/task/ruby.lua create mode 100644 awesome/.config/awesome/redflat/init.lua create mode 100644 awesome/.config/awesome/redflat/layout/common.lua create mode 100644 awesome/.config/awesome/redflat/layout/grid.lua create mode 100644 awesome/.config/awesome/redflat/layout/init.lua create mode 100644 awesome/.config/awesome/redflat/layout/map.lua create mode 100644 awesome/.config/awesome/redflat/menu.lua create mode 100644 awesome/.config/awesome/redflat/service/dfparser.lua create mode 100644 awesome/.config/awesome/redflat/service/init.lua create mode 100644 awesome/.config/awesome/redflat/service/navigator.lua create mode 100644 awesome/.config/awesome/redflat/startup.lua create mode 100644 awesome/.config/awesome/redflat/system.lua create mode 100644 awesome/.config/awesome/redflat/titlebar.lua create mode 100644 awesome/.config/awesome/redflat/util/base.lua create mode 100644 awesome/.config/awesome/redflat/util/cairo.lua create mode 100644 awesome/.config/awesome/redflat/util/client.lua create mode 100644 awesome/.config/awesome/redflat/util/desktop.lua create mode 100644 awesome/.config/awesome/redflat/util/init.lua create mode 100644 awesome/.config/awesome/redflat/util/key.lua create mode 100644 awesome/.config/awesome/redflat/util/placement.lua create mode 100644 awesome/.config/awesome/redflat/util/read.lua create mode 100644 awesome/.config/awesome/redflat/util/table.lua create mode 100644 awesome/.config/awesome/redflat/util/text.lua create mode 100644 awesome/.config/awesome/redflat/widget/battery.lua create mode 100644 awesome/.config/awesome/redflat/widget/binclock.lua create mode 100644 awesome/.config/awesome/redflat/widget/init.lua create mode 100644 awesome/.config/awesome/redflat/widget/keyboard.lua create mode 100644 awesome/.config/awesome/redflat/widget/layoutbox.lua create mode 100644 awesome/.config/awesome/redflat/widget/mail.lua create mode 100644 awesome/.config/awesome/redflat/widget/minitray.lua create mode 100644 awesome/.config/awesome/redflat/widget/net.lua create mode 100644 awesome/.config/awesome/redflat/widget/pulse.lua create mode 100644 awesome/.config/awesome/redflat/widget/sysmon.lua create mode 100644 awesome/.config/awesome/redflat/widget/taglist.lua create mode 100644 awesome/.config/awesome/redflat/widget/tasklist.lua create mode 100644 awesome/.config/awesome/redflat/widget/textclock.lua create mode 100644 awesome/.config/awesome/redflat/widget/updates.lua create mode 100644 awesome/.config/awesome/rules-config.lua create mode 100644 awesome/.config/awesome/signals-config.lua create mode 100644 awesome/.config/awesome/themes/colorless/common/awesome.svg create mode 100644 awesome/.config/awesome/themes/colorless/common/blank.svg create mode 100644 awesome/.config/awesome/themes/colorless/common/check.svg create mode 100644 awesome/.config/awesome/themes/colorless/common/submenu.svg create mode 100644 awesome/.config/awesome/themes/colorless/common/system.svg create mode 100644 awesome/.config/awesome/themes/colorless/common/unknown.svg create mode 100644 awesome/.config/awesome/themes/colorless/common/warning.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/cornerne.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/cornernw.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/cornerse.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/cornersw.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/fair.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/floating.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/fullscreen.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/grid.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/magnifier.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/map.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/max.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/spiral.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/tile.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/tilebottom.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/tileleft.svg create mode 100644 awesome/.config/awesome/themes/colorless/layouts/tiletop.svg create mode 100644 awesome/.config/awesome/themes/colorless/player/cover.svg create mode 100644 awesome/.config/awesome/themes/colorless/player/next.svg create mode 100644 awesome/.config/awesome/themes/colorless/player/pause.svg create mode 100644 awesome/.config/awesome/themes/colorless/player/play.svg create mode 100644 awesome/.config/awesome/themes/colorless/player/previous.svg create mode 100644 awesome/.config/awesome/themes/colorless/theme.lua create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/absent.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/active.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/below.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/close.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/disabled.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/floating.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/focus.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/hidden.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/maximized.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/menu.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/minimize.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/ontop.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/pin.svg create mode 100644 awesome/.config/awesome/themes/colorless/titlebar/title.svg create mode 100644 awesome/.config/awesome/themes/default/icons/audio.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/cornerne.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/cornernw.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/cornerse.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/cornersw.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/fair.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/floating.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/fullscreen.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/grid.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/magnifier.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/map.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/max.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/spiral.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/tile.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/tilebottom.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/tileleft.svg create mode 100644 awesome/.config/awesome/themes/default/layouts/tiletop.svg create mode 100644 awesome/.config/awesome/titlebar-config.lua diff --git a/awesome/.config/awesome/edges-config.lua b/awesome/.config/awesome/edges-config.lua new file mode 100644 index 0000000..373b632 --- /dev/null +++ b/awesome/.config/awesome/edges-config.lua @@ -0,0 +1,76 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Active screen edges config -- +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +local awful = require("awful") +local redflat = require("redflat") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local edges = {} + +local switcher = redflat.float.appswitcher +local currenttags = redflat.widget.tasklist.filter.currenttags +local allscreen = redflat.widget.tasklist.filter.allscreen + +-- Active screen edges +----------------------------------------------------------------------------------------------------------------------- +function edges:init(args) + + args = args or {} + local ew = args.width or 1 -- edge width + local workarea = args.workarea or screen[mouse.screen].workarea + + -- edge geometry + local egeometry = { + top = { width = workarea.width - 2 * ew, height = ew , x = ew, y = 0 }, + right = { width = ew, height = workarea.height, x = workarea.width - ew, y = 0 }, + left = { width = ew, height = workarea.height, x = 0, y = 0 } + } + + -- Top + -------------------------------------------------------------------------------- + local top = redflat.util.desktop.edge("horizontal") + top.wibox:geometry(egeometry["top"]) + + top.layout:buttons(awful.util.table.join( + awful.button({}, 1, + function() + if client.focus then client.focus.maximized = not client.focus.maximized end + end + ) + )) + + -- Right + -------------------------------------------------------------------------------- + local right = redflat.util.desktop.edge("vertical") + right.wibox:geometry(egeometry["right"]) + + right.layout:buttons(awful.util.table.join( + awful.button({}, 5, function() awful.tag.viewnext(mouse.screen) end), + awful.button({}, 4, function() awful.tag.viewprev(mouse.screen) end) + )) + + -- Left + -------------------------------------------------------------------------------- + local left = redflat.util.desktop.edge("vertical", { ew, workarea.height - ew }) + left.wibox:geometry(egeometry["left"]) + + left.area[1]:buttons(awful.util.table.join( + awful.button({}, 4, function() switcher:show({ filter = allscreen }) end), + awful.button({}, 5, function() switcher:show({ filter = allscreen, reverse = true }) end) + )) + + left.area[2]:buttons(awful.util.table.join( + awful.button({}, 9, function() if client.focus then client.focus.minimized = true end end), + awful.button({}, 4, function() switcher:show({ filter = currenttags }) end), + awful.button({}, 5, function() switcher:show({ filter = currenttags, reverse = true }) end) + )) + + left.wibox:connect_signal("mouse::leave", function() redflat.float.appswitcher:hide() end) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return edges diff --git a/awesome/.config/awesome/env-config.lua b/awesome/.config/awesome/env-config.lua new file mode 100644 index 0000000..acc792e --- /dev/null +++ b/awesome/.config/awesome/env-config.lua @@ -0,0 +1,100 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Environment config -- +----------------------------------------------------------------------------------------------------------------------- + +local awful = require("awful") +local gears = require("gears") +local beautiful = require("beautiful") +local wibox = require("wibox") +local naughty = require("naughty") + +local redflat = require("redflat") + +local unpack = unpack or table.unpack + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local env = {} + +-- Build hotkeys depended on config parameters +----------------------------------------------------------------------------------------------------------------------- +function env:init(args) + + -- init vars + args = args or {} + + -- environment vars + self.terminal = args.terminal or "termite" + self.editor = os.getenv("EDITOR") or "vim" + self.editor_cmd = self.terminal .. " -e " .. self.editor + + self.mod = args.mod or "Mod4" + self.fm = args.fm or "nemo" + self.mail = args.mail or "thunderbird" + self.player = args.player or self.terminal .. "-e ncmpcpp" + self.updates = args.updates or "bash -c 'pacman -Qu | grep -v ignored | wc -l'" + self.home = os.getenv("HOME") + self.themedir = awful.util.get_configuration_dir() .. "themes/default" + + -- boolean defaults is pain + self.sloppy_focus = args.sloppy_focus or false + self.color_border_focus = args.color_border_focus or false + self.set_slave = args.set_slave == nil and true or false + self.set_center = args.set_center or false + self.desktop_autohide = args.desktop_autohide or false + + -- theme setup + beautiful.init(env.themedir .. "/theme.lua") + beautiful.useless_gap = 5 + -- naughty config + naughty.config.padding = beautiful.useless_gap and 2 * beautiful.useless_gap or 0 + + if beautiful.naughty then + naughty.config.presets.normal = redflat.util.table.merge(beautiful.naughty.base, beautiful.naughty.normal) + naughty.config.presets.critical = redflat.util.table.merge(beautiful.naughty.base, beautiful.naughty.critical) + naughty.config.presets.low = redflat.util.table.merge(beautiful.naughty.base, beautiful.naughty.low) + end +end + + +-- Common functions +----------------------------------------------------------------------------------------------------------------------- + +-- Wallpaper setup +-------------------------------------------------------------------------------- +env.wallpaper = function(s) + if beautiful.wallpaper then + if not env.desktop_autohide and awful.util.file_readable(beautiful.wallpaper) then + gears.wallpaper.maximized(beautiful.wallpaper, s, true) + else + gears.wallpaper.set(beautiful.color and beautiful.color.bg) + end + end +end + +-- Tag tooltip text generation +-------------------------------------------------------------------------------- +env.tagtip = function(t) + local layname = awful.layout.getname(awful.tag.getproperty(t, "layout")) + if redflat.util.table.check(beautiful, "widget.layoutbox.name_alias") then + layname = beautiful.widget.layoutbox.name_alias[layname] or layname + end + return string.format("%s (%d apps) [%s]", t.name, #(t:clients()), layname) +end + +-- Panel widgets wrapper +-------------------------------------------------------------------------------- +env.wrapper = function(widget, name, buttons) + local margin = redflat.util.table.check(beautiful, "widget.wrapper") + and beautiful.widget.wrapper[name] or { 0, 0, 0, 0 } + if buttons then + widget:buttons(buttons) + end + + return wibox.container.margin(widget, unpack(margin)) +end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return env diff --git a/awesome/.config/awesome/ercheck-config.lua b/awesome/.config/awesome/ercheck-config.lua new file mode 100644 index 0000000..e7e9c54 --- /dev/null +++ b/awesome/.config/awesome/ercheck-config.lua @@ -0,0 +1,27 @@ +local naughty = require("naughty") + +if awesome.startup_errors then + naughty.notify({ + preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_error + }) +end + +do + local in_error = false + awesome.connect_signal( + "debug::error", + function (err) + if in_error then return end + in_error = true + + naughty.notify({ + preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = err + }) + in_error = false + end + ) +end diff --git a/awesome/.config/awesome/keys-config.lua b/awesome/.config/awesome/keys-config.lua new file mode 100644 index 0000000..42a76dc --- /dev/null +++ b/awesome/.config/awesome/keys-config.lua @@ -0,0 +1,871 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Hotkeys and mouse buttons config -- +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +local table = table +local awful = require("awful") +local redflat = require("redflat") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local hotkeys = { mouse = {}, raw = {}, keys = {}, fake = {} } + +-- key aliases +local apprunner = redflat.float.apprunner +local appswitcher = redflat.float.appswitcher +local current = redflat.widget.tasklist.filter.currenttags +local allscr = redflat.widget.tasklist.filter.allscreen +local laybox = redflat.widget.layoutbox +local redtip = redflat.float.hotkeys +local laycom = redflat.layout.common +local grid = redflat.layout.grid +local map = redflat.layout.map +local redtitle = redflat.titlebar +local qlaunch = redflat.float.qlaunch + +-- Key support functions +----------------------------------------------------------------------------------------------------------------------- + +-- change window focus by history +local function focus_to_previous() + awful.client.focus.history.previous() + if client.focus then client.focus:raise() end +end + +-- change window focus by direction +local focus_switch_byd = function(dir) + return function() + awful.client.focus.bydirection(dir) + if client.focus then client.focus:raise() end + end +end + +-- minimize and restore windows +local function minimize_all() + for _, c in ipairs(client.get()) do + if current(c, mouse.screen) then c.minimized = true end + end +end + +local function minimize_all_except_focused() + for _, c in ipairs(client.get()) do + if current(c, mouse.screen) and c ~= client.focus then c.minimized = true end + end +end + +local function restore_all() + for _, c in ipairs(client.get()) do + if current(c, mouse.screen) and c.minimized then c.minimized = false end + end +end + +local function restore_client() + local c = awful.client.restore() + if c then client.focus = c; c:raise() end +end + +-- close window +local function kill_all() + for _, c in ipairs(client.get()) do + if current(c, mouse.screen) and not c.sticky then c:kill() end + end +end + +-- new clients placement +local function toggle_placement(env) + env.set_slave = not env.set_slave + redflat.float.notify:show({ text = (env.set_slave and "Slave" or "Master") .. " placement" }) +end + +-- numeric keys function builders +local function tag_numkey(i, mod, action) + return awful.key( + mod, "#" .. i + 9, + function () + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then action(tag) end + end + ) +end + +local function client_numkey(i, mod, action) + return awful.key( + mod, "#" .. i + 9, + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then action(tag) end + end + end + ) +end + +-- brightness functions +local brightness = function(args) + redflat.float.brightness:change_with_xbacklight(args) -- use xbacklight +end + +-- right bottom corner position +local rb_corner = function() + return { x = screen[mouse.screen].workarea.x + screen[mouse.screen].workarea.width, + y = screen[mouse.screen].workarea.y + screen[mouse.screen].workarea.height } +end + +-- Build hotkeys depended on config parameters +----------------------------------------------------------------------------------------------------------------------- +function hotkeys:init(args) + + -- Init vars + args = args or {} + local env = args.env + local volume = args.volume + local mainmenu = args.menu + local appkeys = args.appkeys or {} + + self.mouse.root = (awful.util.table.join( + awful.button({ }, 3, function () mainmenu:toggle() end), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) + )) + + -- volume functions + local volume_raise = function() volume:change_volume({ show_notify = true }) end + local volume_lower = function() volume:change_volume({ show_notify = true, down = true }) end + local volume_mute = function() volume:mute() end + + -- Init widgets + redflat.float.qlaunch:init() + + -- Application hotkeys helper + -------------------------------------------------------------------------------- + local apphelper = function(keys) + if not client.focus then return end + + local app = client.focus.class:lower() + for name, sheet in pairs(keys) do + if name == app then + redtip:set_pack( + client.focus.class, sheet.pack, sheet.style.column, sheet.style.geometry, + function() redtip:remove_pack() end + ) + redtip:show() + return + end + end + + redflat.float.notify:show({ text = "No tips for " .. client.focus.class }) + end + + -- Keys for widgets + -------------------------------------------------------------------------------- + + -- Apprunner widget + ------------------------------------------------------------ + local apprunner_keys_move = { + { + { env.mod }, "k", function() apprunner:down() end, + { description = "Select next item", group = "Navigation" } + }, + { + { env.mod }, "i", function() apprunner:up() end, + { description = "Select previous item", group = "Navigation" } + }, + } + + -- apprunner:set_keys(awful.util.table.join(apprunner.keys.move, apprunner_keys_move), "move") + apprunner:set_keys(apprunner_keys_move, "move") + + -- Menu widget + ------------------------------------------------------------ + local menu_keys_move = { + { + { env.mod }, "k", redflat.menu.action.down, + { description = "Select next item", group = "Navigation" } + }, + { + { env.mod }, "i", redflat.menu.action.up, + { description = "Select previous item", group = "Navigation" } + }, + { + { env.mod }, "j", redflat.menu.action.back, + { description = "Go back", group = "Navigation" } + }, + { + { env.mod }, "l", redflat.menu.action.enter, + { description = "Open submenu", group = "Navigation" } + }, + } + + -- redflat.menu:set_keys(awful.util.table.join(redflat.menu.keys.move, menu_keys_move), "move") + redflat.menu:set_keys(menu_keys_move, "move") + + -- Appswitcher widget + ------------------------------------------------------------ + local appswitcher_keys = { + { + { env.mod }, "a", function() appswitcher:switch() end, + { description = "Select next app", group = "Navigation" } + }, + { + { env.mod, "Shift" }, "a", function() appswitcher:switch() end, + {} -- hidden key + }, + { + { env.mod }, "q", function() appswitcher:switch({ reverse = true }) end, + { description = "Select previous app", group = "Navigation" } + }, + { + { env.mod, "Shift" }, "q", function() appswitcher:switch({ reverse = true }) end, + {} -- hidden key + }, + { + {}, "Super_L", function() appswitcher:hide() end, + { description = "Activate and exit", group = "Action" } + }, + { + { env.mod }, "Super_L", function() appswitcher:hide() end, + {} -- hidden key + }, + { + { env.mod, "Shift" }, "Super_L", function() appswitcher:hide() end, + {} -- hidden key + }, + { + {}, "Return", function() appswitcher:hide() end, + { description = "Activate and exit", group = "Action" } + }, + { + {}, "Escape", function() appswitcher:hide(true) end, + { description = "Exit", group = "Action" } + }, + { + { env.mod }, "Escape", function() appswitcher:hide(true) end, + {} -- hidden key + }, + { + { env.mod }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, + } + + appswitcher:set_keys(appswitcher_keys) + + -- Emacs like key sequences + -------------------------------------------------------------------------------- + + -- initial key + local keyseq = { { env.mod }, "c", {}, {} } + + -- group + keyseq[3] = { + { {}, "k", {}, {} }, -- application kill group + { {}, "c", {}, {} }, -- client managment group + { {}, "r", {}, {} }, -- client managment group + { {}, "n", {}, {} }, -- client managment group + { {}, "g", {}, {} }, -- run or rise group + { {}, "f", {}, {} }, -- launch application group + } + + -- quick launch key sequence actions + for i = 1, 9 do + local ik = tostring(i) + table.insert(keyseq[3][5][3], { + {}, ik, function() qlaunch:run_or_raise(ik) end, + { description = "Run or rise application №" .. ik, group = "Run or Rise", keyset = { ik } } + }) + table.insert(keyseq[3][6][3], { + {}, ik, function() qlaunch:run_or_raise(ik, true) end, + { description = "Launch application №".. ik, group = "Quick Launch", keyset = { ik } } + }) + end + + -- application kill sequence actions + keyseq[3][1][3] = { + { + {}, "f", function() if client.focus then client.focus:kill() end end, + { description = "Kill focused client", group = "Kill application", keyset = { "f" } } + }, + { + {}, "a", kill_all, + { description = "Kill all clients with current tag", group = "Kill application", keyset = { "a" } } + }, + } + + -- client managment sequence actions + keyseq[3][2][3] = { + { + {}, "p", function () toggle_placement(env) end, + { description = "Switch master/slave window placement", group = "Clients managment", keyset = { "p" } } + }, + } + + keyseq[3][3][3] = { + { + {}, "f", restore_client, + { description = "Restore minimized client", group = "Clients managment", keyset = { "f" } } + }, + { + {}, "a", restore_all, + { description = "Restore all clients with current tag", group = "Clients managment", keyset = { "a" } } + }, + } + + keyseq[3][4][3] = { + { + {}, "f", function() if client.focus then client.focus.minimized = true end end, + { description = "Minimized focused client", group = "Clients managment", keyset = { "f" } } + }, + { + {}, "a", minimize_all, + { description = "Minimized all clients with current tag", group = "Clients managment", keyset = { "a" } } + }, + { + {}, "e", minimize_all_except_focused, + { description = "Minimized all clients except focused", group = "Clients managment", keyset = { "e" } } + }, + } + + + -- Layouts + -------------------------------------------------------------------------------- + + -- shared layout keys + local layout_tile = { + { + { env.mod }, "l", function () awful.tag.incmwfact( 0.05) end, + { description = "Increase master width factor", group = "Layout" } + }, + { + { env.mod }, "j", function () awful.tag.incmwfact(-0.05) end, + { description = "Decrease master width factor", group = "Layout" } + }, + { + { env.mod }, "i", function () awful.client.incwfact( 0.05) end, + { description = "Increase window factor of a client", group = "Layout" } + }, + { + { env.mod }, "k", function () awful.client.incwfact(-0.05) end, + { description = "Decrease window factor of a client", group = "Layout" } + }, + { + { env.mod, }, "+", function () awful.tag.incnmaster( 1, nil, true) end, + { description = "Increase the number of master clients", group = "Layout" } + }, + { + { env.mod }, "-", function () awful.tag.incnmaster(-1, nil, true) end, + { description = "Decrease the number of master clients", group = "Layout" } + }, + { + { env.mod, "Control" }, "+", function () awful.tag.incncol( 1, nil, true) end, + { description = "Increase the number of columns", group = "Layout" } + }, + { + { env.mod, "Control" }, "-", function () awful.tag.incncol(-1, nil, true) end, + { description = "Decrease the number of columns", group = "Layout" } + }, + } + + laycom:set_keys(layout_tile, "tile") + + -- grid layout keys + local layout_grid_move = { + { + { env.mod }, "KP_Up", function() grid.move_to("up") end, + { description = "Move window up", group = "Movement" } + }, + { + { env.mod }, "KP_Down", function() grid.move_to("down") end, + { description = "Move window down", group = "Movement" } + }, + { + { env.mod }, "KP_Left", function() grid.move_to("left") end, + { description = "Move window left", group = "Movement" } + }, + { + { env.mod }, "KP_right", function() grid.move_to("right") end, + { description = "Move window right", group = "Movement" } + }, + { + { env.mod, "Control" }, "KP_Up", function() grid.move_to("up", true) end, + { description = "Move window up by bound", group = "Movement" } + }, + { + { env.mod, "Control" }, "KP_Down", function() grid.move_to("down", true) end, + { description = "Move window down by bound", group = "Movement" } + }, + { + { env.mod, "Control" }, "KP_Left", function() grid.move_to("left", true) end, + { description = "Move window left by bound", group = "Movement" } + }, + { + { env.mod, "Control" }, "KP_Right", function() grid.move_to("right", true) end, + { description = "Move window right by bound", group = "Movement" } + }, + } + + local layout_grid_resize = { + { + { env.mod }, "i", function() grid.resize_to("up") end, + { description = "Inrease window size to the up", group = "Resize" } + }, + { + { env.mod }, "k", function() grid.resize_to("down") end, + { description = "Inrease window size to the down", group = "Resize" } + }, + { + { env.mod }, "j", function() grid.resize_to("left") end, + { description = "Inrease window size to the left", group = "Resize" } + }, + { + { env.mod }, "l", function() grid.resize_to("right") end, + { description = "Inrease window size to the right", group = "Resize" } + }, + { + { env.mod, "Shift" }, "i", function() grid.resize_to("up", nil, true) end, + { description = "Decrease window size from the up", group = "Resize" } + }, + { + { env.mod, "Shift" }, "k", function() grid.resize_to("down", nil, true) end, + { description = "Decrease window size from the down", group = "Resize" } + }, + { + { env.mod, "Shift" }, "j", function() grid.resize_to("left", nil, true) end, + { description = "Decrease window size from the left", group = "Resize" } + }, + { + { env.mod, "Shift" }, "l", function() grid.resize_to("right", nil, true) end, + { description = "Decrease window size from the right", group = "Resize" } + }, + { + { env.mod, "Control" }, "i", function() grid.resize_to("up", true) end, + { description = "Increase window size to the up by bound", group = "Resize" } + }, + { + { env.mod, "Control" }, "k", function() grid.resize_to("down", true) end, + { description = "Increase window size to the down by bound", group = "Resize" } + }, + { + { env.mod, "Control" }, "j", function() grid.resize_to("left", true) end, + { description = "Increase window size to the left by bound", group = "Resize" } + }, + { + { env.mod, "Control" }, "l", function() grid.resize_to("right", true) end, + { description = "Increase window size to the right by bound", group = "Resize" } + }, + { + { env.mod, "Control", "Shift" }, "i", function() grid.resize_to("up", true, true) end, + { description = "Decrease window size from the up by bound ", group = "Resize" } + }, + { + { env.mod, "Control", "Shift" }, "k", function() grid.resize_to("down", true, true) end, + { description = "Decrease window size from the down by bound ", group = "Resize" } + }, + { + { env.mod, "Control", "Shift" }, "j", function() grid.resize_to("left", true, true) end, + { description = "Decrease window size from the left by bound ", group = "Resize" } + }, + { + { env.mod, "Control", "Shift" }, "l", function() grid.resize_to("right", true, true) end, + { description = "Decrease window size from the right by bound ", group = "Resize" } + }, + } + + redflat.layout.grid:set_keys(layout_grid_move, "move") + redflat.layout.grid:set_keys(layout_grid_resize, "resize") + + -- user map layout keys + local layout_map_layout = { + { + { env.mod }, "s", function() map.swap_group() end, + { description = "Change placement direction for group", group = "Layout" } + }, + { + { env.mod }, "v", function() map.new_group(true) end, + { description = "Create new vertical group", group = "Layout" } + }, + { + { env.mod }, "h", function() map.new_group(false) end, + { description = "Create new horizontal group", group = "Layout" } + }, + { + { env.mod, "Control" }, "v", function() map.insert_group(true) end, + { description = "Insert new vertical group before active", group = "Layout" } + }, + { + { env.mod, "Control" }, "h", function() map.insert_group(false) end, + { description = "Insert new horizontal group before active", group = "Layout" } + }, + { + { env.mod }, "d", function() map.delete_group() end, + { description = "Destroy group", group = "Layout" } + }, + { + { env.mod, "Control" }, "d", function() map.clean_groups() end, + { description = "Destroy all empty groups", group = "Layout" } + }, + { + { env.mod }, "f", function() map.set_active() end, + { description = "Set active group", group = "Layout" } + }, + { + { env.mod }, "g", function() map.move_to_active() end, + { description = "Move focused client to active group", group = "Layout" } + }, + { + { env.mod, "Control" }, "f", function() map.hilight_active() end, + { description = "Hilight active group", group = "Layout" } + }, + { + { env.mod }, "a", function() map.switch_active(1) end, + { description = "Activate next group", group = "Layout" } + }, + { + { env.mod }, "q", function() map.switch_active(-1) end, + { description = "Activate previous group", group = "Layout" } + }, + { + { env.mod }, "]", function() map.move_group(1) end, + { description = "Move active group to the top", group = "Layout" } + }, + { + { env.mod }, "[", function() map.move_group(-1) end, + { description = "Move active group to the bottom", group = "Layout" } + }, + { + { env.mod }, "r", function() map.reset_tree() end, + { description = "Reset layout structure", group = "Layout" } + }, + } + + local layout_map_resize = { + { + { env.mod }, "j", function() map.incfactor(nil, 0.1, false) end, + { description = "Increase window horizontal size factor", group = "Resize" } + }, + { + { env.mod }, "l", function() map.incfactor(nil, -0.1, false) end, + { description = "Decrease window horizontal size factor", group = "Resize" } + }, + { + { env.mod }, "i", function() map.incfactor(nil, 0.1, true) end, + { description = "Increase window vertical size factor", group = "Resize" } + }, + { + { env.mod }, "k", function() map.incfactor(nil, -0.1, true) end, + { description = "Decrease window vertical size factor", group = "Resize" } + }, + { + { env.mod, "Control" }, "j", function() map.incfactor(nil, 0.1, false, true) end, + { description = "Increase group horizontal size factor", group = "Resize" } + }, + { + { env.mod, "Control" }, "l", function() map.incfactor(nil, -0.1, false, true) end, + { description = "Decrease group horizontal size factor", group = "Resize" } + }, + { + { env.mod, "Control" }, "i", function() map.incfactor(nil, 0.1, true, true) end, + { description = "Increase group vertical size factor", group = "Resize" } + }, + { + { env.mod, "Control" }, "k", function() map.incfactor(nil, -0.1, true, true) end, + { description = "Decrease group vertical size factor", group = "Resize" } + }, + } + + redflat.layout.map:set_keys(layout_map_layout, "layout") + redflat.layout.map:set_keys(layout_map_resize, "resize") + + + -- Global keys + -------------------------------------------------------------------------------- + self.raw.root = { + { + { env.mod }, "F1", function() redtip:show() end, + { description = "[Hold] Show awesome hotkeys helper", group = "Main" } + }, + { + { env.mod, "Control" }, "F1", function() apphelper(appkeys) end, + { description = "[Hold] Show hotkeys helper for application", group = "Main" } + }, + { + { env.mod }, "c", function() redflat.float.keychain:activate(keyseq, "User") end, + { description = "[Hold] User key sequence", group = "Main" } + }, + + { + { env.mod }, "F2", function () redflat.service.navigator:run() end, + { description = "[Hold] Tiling window control mode", group = "Window control" } + }, + { + { env.mod }, "h", function() redflat.float.control:show() end, + { description = "[Hold] Floating window control mode", group = "Window control" } + }, + + { + { env.mod }, "Return", function() awful.spawn(env.terminal) end, + { description = "Open a terminal", group = "Actions" } + }, + { + { env.mod, "Mod1" }, "space", function() awful.spawn("clipflap --show") end, + { description = "Clipboard manager", group = "Actions" } + }, + { + { env.mod, "Control" }, "r", awesome.restart, + { description = "Reload WM", group = "Actions" } + }, + + { + { env.mod }, "l", focus_switch_byd("right"), + { description = "Go to right client", group = "Client focus" } + }, + { + { env.mod }, "j", focus_switch_byd("left"), + { description = "Go to left client", group = "Client focus" } + }, + { + { env.mod }, "i", focus_switch_byd("up"), + { description = "Go to upper client", group = "Client focus" } + }, + { + { env.mod }, "k", focus_switch_byd("down"), + { description = "Go to lower client", group = "Client focus" } + }, + { + { env.mod }, "u", awful.client.urgent.jumpto, + { description = "Go to urgent client", group = "Client focus" } + }, + { + { env.mod }, "Tab", focus_to_previous, + { description = "Go to previos client", group = "Client focus" } + }, + + { + { env.mod }, "w", function() mainmenu:show() end, + { description = "Show main menu", group = "Widgets" } + }, + { + { env.mod }, "r", function() apprunner:show() end, + { description = "Application launcher", group = "Widgets" } + }, + { + { env.mod }, "p", function() redflat.float.prompt:run() end, + { description = "Show the prompt box", group = "Widgets" } + }, + { + { env.mod }, "x", function() redflat.float.top:show("cpu") end, + { description = "Show the top process list", group = "Widgets" } + }, + { + { env.mod, "Control" }, "m", function() redflat.widget.mail:update(true) end, + { description = "Check new mail", group = "Widgets" } + }, + { + { env.mod, "Control" }, "i", function() redflat.widget.minitray:toggle() end, + { description = "Show minitray", group = "Widgets" } + }, + { + { env.mod, "Control" }, "u", function() redflat.widget.updates:update(true) end, + { description = "Check available updates", group = "Widgets" } + }, + { + { env.mod }, "g", function() qlaunch:show() end, + { description = "Application quick launcher", group = "Widgets" } + }, + + { + { env.mod }, "y", function() laybox:toggle_menu(mouse.screen.selected_tag) end, + { description = "Show layout menu", group = "Layouts" } + }, + { + { env.mod}, "Up", function() awful.layout.inc(1) end, + { description = "Select next layout", group = "Layouts" } + }, + { + { env.mod }, "Down", function() awful.layout.inc(-1) end, + { description = "Select previous layout", group = "Layouts" } + }, + + { + {}, "XF86MonBrightnessUp", function() brightness({ step = 2 }) end, + { description = "Increase brightness", group = "Brightness control" } + }, + { + {}, "XF86MonBrightnessDown", function() brightness({ step = 2, down = true }) end, + { description = "Reduce brightness", group = "Brightness control" } + }, + + { + {}, "XF86AudioRaiseVolume", volume_raise, + { description = "Increase volume", group = "Volume control" } + }, + { + {}, "XF86AudioLowerVolume", volume_lower, + { description = "Reduce volume", group = "Volume control" } + }, + { + {}, "XF86AudioMute", volume_mute, + { description = "Mute audio", group = "Volume control" } + }, + + { + { env.mod }, "a", nil, function() appswitcher:show({ filter = current }) end, + { description = "Switch to next with current tag", group = "Application switcher" } + }, + { + { env.mod }, "q", nil, function() appswitcher:show({ filter = current, reverse = true }) end, + { description = "Switch to previous with current tag", group = "Application switcher" } + }, + { + { env.mod, "Shift" }, "a", nil, function() appswitcher:show({ filter = allscr }) end, + { description = "Switch to next through all tags", group = "Application switcher" } + }, + { + { env.mod, "Shift" }, "q", nil, function() appswitcher:show({ filter = allscr, reverse = true }) end, + { description = "Switch to previous through all tags", group = "Application switcher" } + }, + + { + { env.mod }, "Escape", awful.tag.history.restore, + { description = "Go previos tag", group = "Tag navigation" } + }, + { + { env.mod }, "Right", awful.tag.viewnext, + { description = "View next tag", group = "Tag navigation" } + }, + { + { env.mod }, "Left", awful.tag.viewprev, + { description = "View previous tag", group = "Tag navigation" } + }, + + { + { env.mod }, "t", function() redtitle.toggle(client.focus) end, + { description = "Show/hide titlebar for focused client", group = "Titlebar" } + }, + --{ + -- { env.mod, "Control" }, "t", function() redtitle.switch(client.focus) end, + -- { description = "Switch titlebar view for focused client", group = "Titlebar" } + --}, + { + { env.mod, "Shift" }, "t", function() redtitle.toggle_all() end, + { description = "Show/hide titlebar for all clients", group = "Titlebar" } + }, + { + { env.mod, "Control", "Shift" }, "t", function() redtitle.global_switch() end, + { description = "Switch titlebar view for all clients", group = "Titlebar" } + }, + + { + { env.mod }, "e", function() redflat.float.player:show(rb_corner()) end, + { description = "Show/hide widget", group = "Audio player" } + }, + { + {}, "XF86AudioPlay", function() redflat.float.player:action("PlayPause") end, + { description = "Play/Pause track", group = "Audio player" } + }, + { + {}, "XF86AudioNext", function() redflat.float.player:action("Next") end, + { description = "Next track", group = "Audio player" } + }, + { + {}, "XF86AudioPrev", function() redflat.float.player:action("Previous") end, + { description = "Previous track", group = "Audio player" } + }, + + { + { env.mod, "Control" }, "s", function() for s in screen do env.wallpaper(s) end end, + {} -- hidden key + } + } + + -- Client keys + -------------------------------------------------------------------------------- + self.raw.client = { + { + { env.mod }, "f", function(c) c.fullscreen = not c.fullscreen; c:raise() end, + { description = "Toggle fullscreen", group = "Client keys" } + }, + { + { env.mod }, "F4", function(c) c:kill() end, + { description = "Close", group = "Client keys" } + }, + { + { env.mod, "Control" }, "f", awful.client.floating.toggle, + { description = "Toggle floating", group = "Client keys" } + }, + { + { env.mod, "Control" }, "o", function(c) c.ontop = not c.ontop end, + { description = "Toggle keep on top", group = "Client keys" } + }, + { + { env.mod }, "n", function(c) c.minimized = true end, + { description = "Minimize", group = "Client keys" } + }, + { + { env.mod }, "m", function(c) c.maximized = not c.maximized; c:raise() end, + { description = "Maximize", group = "Client keys" } + } + } + + self.keys.root = redflat.util.key.build(self.raw.root) + self.keys.client = redflat.util.key.build(self.raw.client) + + -- Numkeys + -------------------------------------------------------------------------------- + + -- add real keys without description here + for i = 1, 9 do + self.keys.root = awful.util.table.join( + self.keys.root, + tag_numkey(i, { env.mod }, function(t) t:view_only() end), + tag_numkey(i, { env.mod, "Control" }, function(t) awful.tag.viewtoggle(t) end), + client_numkey(i, { env.mod, "Shift" }, function(t) client.focus:move_to_tag(t) end), + client_numkey(i, { env.mod, "Control", "Shift" }, function(t) client.focus:toggle_tag(t) end) + ) + end + + -- make fake keys with description special for key helper widget + local numkeys = { "1", "2", "3", "4", "5", "6", "7", "8", "9" } + + self.fake.numkeys = { + { + { env.mod }, "1..9", nil, + { description = "Switch to tag", group = "Numeric keys", keyset = numkeys } + }, + { + { env.mod, "Control" }, "1..9", nil, + { description = "Toggle tag", group = "Numeric keys", keyset = numkeys } + }, + { + { env.mod, "Shift" }, "1..9", nil, + { description = "Move focused client to tag", group = "Numeric keys", keyset = numkeys } + }, + { + { env.mod, "Control", "Shift" }, "1..9", nil, + { description = "Toggle focused client on tag", group = "Numeric keys", keyset = numkeys } + }, + } + + -- Hotkeys helper setup + -------------------------------------------------------------------------------- + redflat.float.hotkeys:set_pack("Main", awful.util.table.join(self.raw.root, self.raw.client, self.fake.numkeys), 2) + + -- Mouse buttons + -------------------------------------------------------------------------------- + self.mouse.client = awful.util.table.join( + awful.button({}, 1, function (c) client.focus = c; c:raise() end), + awful.button({}, 2, awful.mouse.client.move), + awful.button({ env.mod }, 3, awful.mouse.client.resize), + awful.button({}, 8, function(c) c:kill() end) + ) + + -- Set root hotkeys + -------------------------------------------------------------------------------- + root.keys(self.keys.root) + root.buttons(self.mouse.root) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return hotkeys diff --git a/awesome/.config/awesome/layout-config.lua b/awesome/.config/awesome/layout-config.lua new file mode 100644 index 0000000..acb05f8 --- /dev/null +++ b/awesome/.config/awesome/layout-config.lua @@ -0,0 +1,86 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Layouts config -- +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +local awful = require("awful") +local redflat = require("redflat") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local layouts = {} + + +-- Build table +----------------------------------------------------------------------------------------------------------------------- +function layouts:init() + + -- layouts list + local layset = { + awful.layout.suit.floating, + redflat.layout.grid, + awful.layout.suit.tile, + awful.layout.suit.tile.left, + awful.layout.suit.tile.bottom, + awful.layout.suit.tile.top, + awful.layout.suit.fair, + redflat.layout.map, + awful.layout.suit.max, + awful.layout.suit.max.fullscreen, + } + + awful.layout.layouts = layset +end + +-- some advanced layout settings +redflat.layout.map.notification = false + + +-- connect alternative moving handler to allow using custom handler per layout +-- by now custom handler provided for 'redflat.layout.grid' only +-- feel free to remove if you don't use this one +client.disconnect_signal("request::geometry", awful.layout.move_handler) +client.connect_signal("request::geometry", redflat.layout.common.mouse.move) + + +-- connect additional signal for 'redflat.layout.map' +-- this one removing client in smart way and correct tiling scheme +-- feel free to remove if you want to restore plain queue behavior +client.connect_signal("unmanage", redflat.layout.map.clean_client) + +client.connect_signal("property::minimized", function(c) + if c.minimized and redflat.layout.map.check_client(c) then redflat.layout.map.clean_client(c) end +end) +client.connect_signal("property::floating", function(c) + if c.floating and redflat.layout.map.check_client(c) then redflat.layout.map.clean_client(c) end +end) + +client.connect_signal("untagged", function(c, t) + if redflat.layout.map.data[t] then redflat.layout.map.clean_client(c) end +end) + + +-- user map layout preset +-- preset can be defined for individual tags, but this should be done after tag initialization + +-- redflat.layout.map.base_construct = function(wa) +-- local tree = { set = {}, active = 1, autoaim = true } + +-- tree.set[1] = redflat.layout.map.construct_itempack({}, wa, false) +-- tree.set[2] = redflat.layout.map.base_set_new_pack({}, wa, true, tree.set[1]) +-- tree.set[3] = redflat.layout.map.base_set_new_pack({}, wa, true, tree.set[1]) +-- tree.set[4] = redflat.layout.map.base_set_new_pack({}, wa, true, tree.set[1]) + +-- function tree:aim() +-- for i = 2, 4 do if #self.set[i].items == 0 then return i end end +-- local active = #self.set[4].items >= #self.set[2].items and 2 or 4 +-- return active +-- end + +-- return tree +-- end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return layouts diff --git a/awesome/.config/awesome/menu.lua b/awesome/.config/awesome/menu.lua new file mode 100644 index 0000000..b313e42 --- /dev/null +++ b/awesome/.config/awesome/menu.lua @@ -0,0 +1,96 @@ +local beautiful = require("beautiful") +local redflat = require("redflat") +local awful = require("awful") +local naughty = require("naughty") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local menu = {} + +-- Build function +-------------------------------------------------------------------------------- +function menu:init(args) + + -- vars + args = args or {} + local env = args.env or {} -- fix this? + local separator = args.separator or { widget = redflat.gauge.separator.horizontal() } + local theme = args.theme or { auto_hotkey = true } + local icon_style = args.icon_style or { custom_only = true, scalable_only = true } + + -- theme vars + local default_icon = redflat.util.base.placeholder() + local icon = redflat.util.table.check(beautiful, "icon.awesome") and beautiful.icon.awesome or default_icon + local color = redflat.util.table.check(beautiful, "color.icon") and beautiful.color.icon or nil + + -- icon finder + local function micon(name) + return redflat.service.dfparser.lookup_icon(name, icon_style) + end + + -- extra commands + local ranger_comm = env.terminal .. " -e ranger" + + -- Application submenu + ------------------------------------------------------------ + local appmenu = redflat.service.dfparser.menu({ icons = icon_style, wm_name = "awesome" }) + + -- Awesome submenu + ------------------------------------------------------------ + local awesomemenu = { + { "Restart", awesome.restart, micon("gnome-session-reboot") }, + separator, + { "Awesome config", env.fm .. " ~/.config/awesome", micon("folder-bookmarks") }, + } + + -- Places submenu + ------------------------------------------------------------ + local placesmenu = { + { "Documents", env.fm .. " Documents", micon("folder-documents") }, + { "Downloads", env.fm .. " Downloads", micon("folder-download") }, + { "Music", env.fm .. " Music", micon("folder-music") }, + { "Pictures", env.fm .. " Pictures", micon("folder-pictures") }, + { "Videos", env.fm .. " Videos", micon("folder-videos") }, + separator, + { "Media", env.fm .. " /mnt/media", micon("folder-bookmarks") }, + { "Storage", env.fm .. " /mnt/storage", micon("folder-bookmarks") }, + } + + -- Exit submenu + ------------------------------------------------------------ + local exitmenu = { + { "Reboot", "reboot", micon("gnome-session-reboot") }, + { "Shutdown", "shutdown now", micon("system-shutdown") }, + separator, + { "Switch user", "dm-tool switch-to-greeter", micon("gnome-session-switch") }, + { "Suspend", "systemctl suspend" , micon("gnome-session-suspend") }, + { "Log out", awesome.quit, micon("exit") }, + } + + -- Main menu + ------------------------------------------------------------ + self.mainmenu = redflat.menu({ theme = theme, + items = { + { "Awesome", awesomemenu, micon("awesome") }, + { "Applications", appmenu, micon("distributor-logo") }, + { "Places", placesmenu, micon("folder_home"), key = "c" }, + separator, + { "Terminal", env.terminal, micon("terminal") }, + { "Nemo", env.fm, micon("folder"), key = "n" }, + { "Ranger", ranger_comm, micon("folder"), key = "r" }, + { "Editor", "emacs", micon("emacs") }, + separator, + { "Exit", exitmenu, micon("exit") }, + } + }) + + -- Menu panel widget + ------------------------------------------------------------ + + self.widget = redflat.gauge.svgbox(icon, nil, color) + self.buttons = awful.util.table.join( + awful.button({ }, 1, function () self.mainmenu:toggle() end) + ) +end + +return menu \ No newline at end of file diff --git a/awesome/.config/awesome/redflat/.gitignore b/awesome/.config/awesome/redflat/.gitignore new file mode 100644 index 0000000..e504a36 --- /dev/null +++ b/awesome/.config/awesome/redflat/.gitignore @@ -0,0 +1,2 @@ +# IDE settings +.idea \ No newline at end of file diff --git a/awesome/.config/awesome/redflat/.luacheckrc b/awesome/.config/awesome/redflat/.luacheckrc new file mode 100644 index 0000000..88eaa72 --- /dev/null +++ b/awesome/.config/awesome/redflat/.luacheckrc @@ -0,0 +1,39 @@ +-- Only allow symbols available in all Lua versions +std = "min" + +-- Get rid of "unused argument self" - warnings +self = false + +-- Do not check files outside of config +exclude_files = { + ".luacheckrc", -- this file itself +} + +-- Global objects defined by the C code +read_globals = { + -- awesome API + "awesome", + "button", + "dbus", + "drawable", + "drawin", + "key", + "keygrabber", + "mousegrabber", + "root", + "selection", + "tag", + "window", + + -- lua unpack + "table.unpack", + "unpack" +} + +-- Not read-only globals. +globals = { + -- awesome API + "screen", + "mouse", + "client", +} \ No newline at end of file diff --git a/awesome/.config/awesome/redflat/desktop/calendar.lua b/awesome/.config/awesome/redflat/desktop/calendar.lua new file mode 100644 index 0000000..639efc8 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/calendar.lua @@ -0,0 +1,201 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Red Flat calendar desktop widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Multi monitoring widget +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local os = os +local string = string +local setmetatable = setmetatable + +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") +local timer = require("gears.timer") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local calendar = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + show_pointer = true, + label = { gap = 12, font = { font = "Sans", size = 18, face = 1, slant = 0 }, sep = "-" }, + mark = { height = 20, width = 40, dx = 10, line = 4 }, + color = { main = "#b1222b", wibox = "#161616", gray = "#404040", bg = "#161616" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.calendar") or {}) +end + +local days_in_month = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function is_leap_year(year) + return year % 4 == 0 and (year % 100 ~= 0 or year % 400 == 0) +end + +-- Drawing function +----------------------------------------------------------------------------------------------------------------------- +local function daymarks(style) + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + widg._data = { + gap = 1, + label_x = 0, + pointer = { show = false, index = 1, label = "01-01" }, + days = 31, + marks = 31, + today = 1, + label = "01-01", + weekend = { 6, 0 } + } + + -- User functions + ------------------------------------------------------------ + function widg:update_data() + local date = os.date('*t') + local first_week_day = os.date('%w', os.time({ year = date.year, month = date.month, day = 1 })) + + self._data.today = date.day + self._data.days = date.month == 2 and is_leap_year(date.year) and 29 or days_in_month[date.month] + self._data.weekend = { (7 - first_week_day) % 7, (8 - first_week_day) % 7 } + self._data.label = string.format("%.2d%s%.2d", date.day, style.label.sep, date.month) + + self:emit_signal("widget::redraw_needed") + end + + function widg:update_pointer(show, index) + self._data.pointer.show = show + if index then self._data.pointer.index = index end + + local date = os.date('*t') + self._data.pointer.label = string.format("%.2d%s%.2d", self._data.pointer.index, style.label.sep, date.month) + + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + return width, height + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + + -- main draw + self._data.gap = (height - self._data.days * style.mark.height) / (self._data.days - 1) + self._data.label_x = width - style.mark.width - style.mark.dx - style.label.gap + cr:set_line_width(style.mark.line) + + for i = 1, self._data.days do + -- calendar marks + local id = i % 7 + local is_weekend = id == self._data.weekend[1] or id == self._data.weekend[2] + + cr:set_source(color(is_weekend and style.color.main or style.color.gray)) + cr:move_to(width, (style.mark.height + self._data.gap) * (i - 1)) + cr:rel_line_to(0, style.mark.height) + cr:rel_line_to(-style.mark.width, 0) + cr:rel_line_to(-style.mark.dx, -style.mark.height / 2) + cr:rel_line_to(style.mark.dx, -style.mark.height / 2) + cr:close_path() + cr:fill() + + -- data label + if i == self._data.today or (self._data.pointer.show and i == self._data.pointer.index) then + cr:set_source(color(i == self._data.today and style.color.main or style.color.gray)) + local coord_y = ((style.mark.height + self._data.gap) * (i - 1)) + style.mark.height / 2 + redutil.cairo.set_font(cr, style.label.font) + + local ext = cr:text_extents(self._data.label) + cr:move_to( + self._data.label_x - (ext.width + 2 * ext.x_bearing), coord_y - (ext.height/2 + ext.y_bearing) + ) + cr:show_text(i == self._data.today and self._data.label or self._data.pointer.label) + end + end + end + + -------------------------------------------------------------------------------- + return widg +end + + +-- Create a new widget +----------------------------------------------------------------------------------------------------------------------- +function calendar.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + local dwidget = {} + args = args or {} + style = redutil.table.merge(default_style(), style or {}) + local timeout = args.timeout or 300 + + dwidget.style = style + + -- Create calendar widget + -------------------------------------------------------------------------------- + dwidget.calendar = daymarks(style) + dwidget.area = wibox.container.margin(dwidget.calendar) + + -- Set update timer + -------------------------------------------------------------------------------- + local t = timer({ timeout = timeout }) + t:connect_signal("timeout", function () dwidget.calendar:update_data() end) + t:start() + t:emit_signal("timeout") + + -- Drawing date label under mouse + -------------------------------------------------------------------------------- + function dwidget:activate_wibox(wbox) + if style.show_pointer then + wbox:connect_signal("mouse::move", function(_, x, y) + local show_poiter = false + local index + + if x > self.calendar._data.label_x then + for i = 1, self.calendar._data.days do + local cy = y - (i - 1) * (self.calendar._data.gap + style.mark.height) + if cy > 0 and cy < style.mark.height then + show_poiter = true + index = i + break + end + end + end + + if self.calendar._data.pointer.show ~= show_poiter then + self.calendar:update_pointer(show_poiter, index) + end + end) + + wbox:connect_signal("mouse::leave", function() + if self.calendar._data.pointer.show then self.calendar:update_pointer(false) end + end) + end + end + + -------------------------------------------------------------------------------- + return dwidget +end + +-- Config metatable to call module as function +----------------------------------------------------------------------------------------------------------------------- +function calendar.mt:__call(...) + return calendar.new(...) +end + +return setmetatable(calendar, calendar.mt) diff --git a/awesome/.config/awesome/redflat/desktop/common/bar/init.lua b/awesome/.config/awesome/redflat/desktop/common/bar/init.lua new file mode 100644 index 0000000..e90fe55 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/common/bar/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.desktop.common.bar" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/desktop/common/bar/plain.lua b/awesome/.config/awesome/redflat/desktop/common/bar/plain.lua new file mode 100644 index 0000000..03d0091 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/common/bar/plain.lua @@ -0,0 +1,114 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat desktop progressbar widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Dashed horizontal progress bar +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local wibox = require("wibox") +local color = require("gears.color") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local progressbar = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + maxm = 1, + width = nil, + height = nil, + chunk = { gap = 5, width = 5 }, + autoscale = false, + color = { main = "#b1222b", gray = "#404040" } + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.common.bar.plain") or {}) +end + +-- Cairo drawing functions +----------------------------------------------------------------------------------------------------------------------- + +local function draw_progressbar(cr, width, height, gap, first_point, last_point, fill_color) + cr:set_source(color(fill_color)) + for i = first_point, last_point do + cr:rectangle((i - 1) * (width + gap), 0, width, height) + end + cr:fill() +end + +-- Create a new progressbar widget +-- @param style.chunk Table containing dash parameters +-- @param style.color.main Main color +-- @param style.width Widget width (optional) +-- @param style.height Widget height (optional) +-- @param style.autoscale Scaling received values, true by default +-- @param style.maxm Scaling value if autoscale = false +----------------------------------------------------------------------------------------------------------------------- +function progressbar.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + local maxm = style.maxm + + --style aliases + local stg, stw = style.chunk.gap, style.chunk.width + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + widg._data = { value = 0, chunks = 1, gap = 1, cnum = 0 } + + function widg:set_value(x) + if style.autoscale then + if x > maxm then maxm = x end + end + + local cx = x / maxm + if cx > 1 then cx = 1 end + + self._data.value = cx + local num = math.ceil(self._data.chunks * self._data.value) + + if num ~= self._data.cnum then + self:emit_signal("widget::redraw_needed") + end + end + + function widg:fit(_, width, height) + local w = style.width and math.min(style.width, width) or width + local h = style.height and math.min(style.height, height) or height + return w, h + end + + -- Draw function + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + -- progressbar + self._data.chunks = math.floor((width + stg) / (stw + stg)) + self._data.gap = stg + (width - (self._data.chunks - 1) * (stw + stg) - stw) / (self._data.chunks - 1) + self._data.cnum = math.ceil(self._data.chunks * self._data.value) + + draw_progressbar(cr, stw, height, self._data.gap, 1, self._data.cnum, style.color.main) + draw_progressbar(cr, stw, height, self._data.gap, self._data.cnum + 1, self._data.chunks, style.color.gray) + end + -------------------------------------------------------------------------------- + + return widg +end + +-- Config metatable to call progressbar module as function +----------------------------------------------------------------------------------------------------------------------- +function progressbar.mt:__call(...) + return progressbar.new(...) +end + +return setmetatable(progressbar, progressbar.mt) diff --git a/awesome/.config/awesome/redflat/desktop/common/bar/shaped.lua b/awesome/.config/awesome/redflat/desktop/common/bar/shaped.lua new file mode 100644 index 0000000..672b5a0 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/common/bar/shaped.lua @@ -0,0 +1,144 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat corners widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Vertical progress indicator with custom shape +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local wibox = require("wibox") +local color = require("gears.color") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") +local tooltip = require("redflat.float.tooltip") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local progressbar = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + chunk = { num = 10, line = 5, height = 10 }, + maxm = 1, + width = nil, + height = nil, + autoscale = false, + show = { tooltip = false }, + tooltip = {}, + shape = "corner", + color = { main = "#b1222b", gray = "#404040" } + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.common.bar.shaped") or {}) +end + +-- Cairo drawing functions +----------------------------------------------------------------------------------------------------------------------- + +local function draw_corner(cr, width, height, gap, first_point, last_point, fill_color, style) + cr:set_source(color(fill_color)) + for i = first_point, last_point do + cr:move_to(0, height - (i - 1) * (style.chunk.line + gap)) + cr:rel_line_to(width / 2, - style.chunk.height) + cr:rel_line_to(width / 2, style.chunk.height) + cr:rel_line_to(- style.chunk.line, 0) + cr:rel_line_to(- width / 2 + style.chunk.line, - style.chunk.height + style.chunk.line) + cr:rel_line_to(- width / 2 + style.chunk.line, style.chunk.height - style.chunk.line) + cr:close_path() + end + cr:fill() +end + +local function draw_line(cr, width, height, dy, first_point, last_point, fill_color, style) + cr:set_source(color(fill_color)) + for i = first_point, last_point do + cr:rectangle(0, height - (i - 1) * dy, width, - style.chunk.line) + end + cr:fill() +end + +-- Create a new progressbar widget +-- @param style.chunk Table containing number and sizes for progress bar chunks +-- @param style.color Main color +-- @param style.width Widget width (optional) +-- @param style.height Widget height (optional) +-- @param style.autoscale Scaling received values, true by default +-- @param style.maxm Scaling value if autoscale = false +----------------------------------------------------------------------------------------------------------------------- +function progressbar.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + local maxm = style.maxm + + --style aliases + local stn = style.chunk.num + + -- Create custom widget + -------------------------------------------------------------------------------- + local shapewidg = wibox.widget.base.make_widget() + shapewidg._data = { value = 0, cnum = 0 } + + -- tooltip + if style.show.tooltip then + shapewidg._tp = tooltip({ objects = { shapewidg } }, style.tooltip) + end + + -- setup + function shapewidg:set_value(x) + if style.autoscale then + if x > maxm then maxm = x end + end + + local cx = x / maxm + if cx > 1 then cx = 1 end + + self._data.value = cx + local num = math.ceil(stn * self._data.value) + + if num ~= self._data.cnum then + self:emit_signal("widget::redraw_needed") + end + end + + function shapewidg:set_tip(txt) + if self._tp then self._tp:set_text(txt) end + end + + function shapewidg:fit(_, width, height) + return style.width or width, style.height or height + end + + -- Draw function + ------------------------------------------------------------ + function shapewidg:draw(_, cr, width, height) + self._data.cnum = math.ceil(stn * self._data.value) + + if style.shape == "plain" then + local line_gap = style.chunk.line + (height - style.chunk.line * stn)/(stn - 1) + draw_line(cr, width, height, line_gap, 1, self._data.cnum, style.color.main, style) + draw_line(cr, width, height, line_gap, self._data.cnum + 1, stn, style.color.gray, style) + elseif style.shape == "corner" then + local corner_gap = (height - (stn - 1) * style.chunk.line - style.chunk.height) / (stn - 1) + draw_corner(cr, width, height, corner_gap, 1, self._data.cnum, style.color.main, style) + draw_corner(cr, width, height, corner_gap, self._data.cnum + 1, stn, style.color.gray, style) + end + end + + -------------------------------------------------------------------------------- + return shapewidg +end + +-- Config metatable to call progressbar module as function +----------------------------------------------------------------------------------------------------------------------- +function progressbar.mt:__call(...) + return progressbar.new(...) +end + +return setmetatable(progressbar, progressbar.mt) diff --git a/awesome/.config/awesome/redflat/desktop/common/chart.lua b/awesome/.config/awesome/redflat/desktop/common/chart.lua new file mode 100644 index 0000000..79bb1d8 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/common/chart.lua @@ -0,0 +1,121 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat chart widget -- +----------------------------------------------------------------------------------------------------------------------- +-- History graph for desktop widgets +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local table = table +local ipairs = ipairs +local math = math +local wibox = require("wibox") +local color = require("gears.color") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local chart = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + maxm = 1, + color = "#404040", + width = nil, + height = nil, + zero_height = 4, + bar = { gap = 5, width = 5 }, + autoscale = true + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.common.chart") or {}) +end + +-- Create a new chart widget +-- @param style Table containing chart geometry and style +-- See block of local vars below for more details +----------------------------------------------------------------------------------------------------------------------- +function chart.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + local count = 0 + local barnum + local current_maxm = style.maxm + + -- updating values + local data = { + values = {} + } + + -- Create custom widget + -------------------------------------------------------------------------------- + local chartwidg = wibox.widget.base.make_widget() + + -- User functions + ------------------------------------------------------------ + function chartwidg:set_value(x) + if barnum then + count = count % barnum + 1 + data.values[count] = x + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit function + ------------------------------------------------------------ + function chartwidg:fit(_, width, height) + return style.width or width, style.height or height + end + + -- Draw function + ------------------------------------------------------------ + function chartwidg:draw(_, cr, width, height) + + --scale + if style.autoscale then + current_maxm = style.maxm + + for _, v in ipairs(data.values) do + if v > current_maxm then current_maxm = v end + end + end + + -- chart + barnum = math.floor((width + style.bar.gap) / (style.bar.width + style.bar.gap)) + while #data.values < barnum do + table.insert(data.values, 0) + end + local real_gap = style.bar.gap + (width - (barnum - 1) * (style.bar.width + style.bar.gap) + - style.bar.width) / (barnum - 1) + + cr:set_source(color(style.color)) + for i = 0, barnum - 1 do + local n = (count + i) % barnum + 1 + local k = data.values[n] / current_maxm + if k > 1 then k = 1 end + local bar_height = - k * (height - style.zero_height) + cr:rectangle(i * (style.bar.width + real_gap), height, style.bar.width, - style.zero_height) + cr:rectangle(i * (style.bar.width + real_gap), height - style.zero_height, style.bar.width, bar_height) + end + + cr:fill() + end + + -------------------------------------------------------------------------------- + return chartwidg +end + +-- Config metatable to call chart module as function +----------------------------------------------------------------------------------------------------------------------- +function chart.mt:__call(...) + return chart.new(...) +end + +return setmetatable(chart, chart.mt) diff --git a/awesome/.config/awesome/redflat/desktop/common/init.lua b/awesome/.config/awesome/redflat/desktop/common/init.lua new file mode 100644 index 0000000..c982503 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/common/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.desktop.common" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/desktop/common/pack/init.lua b/awesome/.config/awesome/redflat/desktop/common/pack/init.lua new file mode 100644 index 0000000..26e3e72 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/common/pack/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.desktop.common.pack" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/desktop/common/pack/lines.lua b/awesome/.config/awesome/redflat/desktop/common/pack/lines.lua new file mode 100644 index 0000000..792ae81 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/common/pack/lines.lua @@ -0,0 +1,137 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat barpack widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Group of indicators with progressbar, label and text in every line +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local wibox = require("wibox") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") +local dcommon = require("redflat.desktop.common") +local tooltip = require("redflat.float.tooltip") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local barpack = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + label = {}, + text = {}, + show = { text = true, label = true, tooltip = false }, + progressbar = {}, + line = { height = 20 }, + gap = { text = 20, label = 20 }, + tooltip = {}, + color = {} + } + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.common.pack.lines") or {}) +end + + +-- Create a new barpack widget +----------------------------------------------------------------------------------------------------------------------- +function barpack.new(num, style) + + local pack = {} + style = redutil.table.merge(default_style(), style or {}) + local progressbar_style = redutil.table.merge(style.progressbar, { color = style.color }) + local label_style = redutil.table.merge(style.label, { color = style.color.gray }) + local text_style = redutil.table.merge(style.text, { color = style.color.gray }) + + -- Construct group of lines + -------------------------------------------------------------------------------- + pack.layout = wibox.layout.align.vertical() + local flex_vertical = wibox.layout.flex.vertical() + local lines = {} + + for i = 1, num do + lines[i] = {} + + -- bar + local line_align = wibox.layout.align.horizontal() + line_align:set_forced_height(style.line.height) + lines[i].bar = dcommon.bar.plain(progressbar_style) + line_align:set_middle(lines[i].bar) + + -- label + lines[i]._label_txt = "" + lines[i].label = dcommon.textbox("", label_style) + lines[i].label:set_width(0) + lines[i].label_margin = wibox.container.margin(lines[i].label) + line_align:set_left(lines[i].label_margin) + + -- value text + lines[i].text = dcommon.textbox("", text_style) + lines[i].text:set_width(0) + lines[i].text_margin = wibox.container.margin(lines[i].text) + line_align:set_right(lines[i].text_margin) + + -- tooltip + if style.show.tooltip then + lines[i].tooltip = tooltip({ objects = { line_align } }, style.tooltip) + end + + if i == 1 then + pack.layout:set_top(line_align) + else + local line_space = wibox.layout.align.vertical() + line_space:set_bottom(line_align) + flex_vertical:add(line_space) + end + end + pack.layout:set_middle(flex_vertical) + + -- Setup functions + -------------------------------------------------------------------------------- + + function pack:set_values(value, index) + lines[index].bar:set_value(value) + end + + function pack:set_text(value, index) + if style.show.text then + lines[index].text:set_text(value) + lines[index].text:set_width(value and text_style.width or 0) + lines[index].text_margin:set_left(value and style.gap.text or 0) + end + + if lines[index].tooltip then + lines[index].tooltip:set_text(string.format("%s %s", lines[index]._label_txt, value)) + end + end + + function pack:set_text_color(value, index) + lines[index].text:set_color(value) + end + + function pack:set_label_color(value, index) + lines[index].label:set_color(value) + end + + function pack:set_label(value, index) + lines[index]._label_txt = value + if style.show.label then + lines[index].label:set_text(value) + lines[index].label:set_width(value and label_style.width or 0) + lines[index].label_margin:set_right(value and style.gap.label or 0) + end + end + + -------------------------------------------------------------------------------- + return pack +end + +-- Config metatable to call barpack module as function +----------------------------------------------------------------------------------------------------------------------- +function barpack.mt:__call(...) + return barpack.new(...) +end + +return setmetatable(barpack, barpack.mt) diff --git a/awesome/.config/awesome/redflat/desktop/common/pack/upright.lua b/awesome/.config/awesome/redflat/desktop/common/pack/upright.lua new file mode 100644 index 0000000..784b801 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/common/pack/upright.lua @@ -0,0 +1,72 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat ber pack widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Group of upright indicators placed in horizontal layout +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable + +local wibox = require("wibox") +--local beautiful = require("beautiful") + +local progressbar = require("redflat.desktop.common.bar.shaped") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local barpack = { mt = {} } + +-- Create a new barpack widget +-- @param num Number of indicators +-- @param style Style variables for redflat shaped progressbar widget +----------------------------------------------------------------------------------------------------------------------- +function barpack.new(num, style) + + local pack = {} + style = style or {} + + -- construct group of bar indicators + pack.layout = wibox.layout.align.horizontal() + local flex_horizontal = wibox.layout.flex.horizontal() + local crn = {} + + for i = 1, num do + crn[i] = progressbar(style) + if i == 1 then + pack.layout:set_left(crn[i]) + else + local bar_space = wibox.layout.align.horizontal() + bar_space:set_right(crn[i]) + flex_horizontal:add(bar_space) + end + end + pack.layout:set_middle(flex_horizontal) + + -- setup functions + function pack:set_values(values, n, tip) + if n then + if crn[n] then + crn[n]:set_value(values) + if tip then crn[n]:set_tip(tip) end + end + else + for i, v in ipairs(values) do + if crn[i] then + crn[i]:set_value(v) + if tip then crn[n]:set_tip(tip) end + end + end + end + end + + return pack +end + +-- Config metatable to call barpack module as function +----------------------------------------------------------------------------------------------------------------------- +function barpack.mt:__call(...) + return barpack.new(...) +end + +return setmetatable(barpack, barpack.mt) diff --git a/awesome/.config/awesome/redflat/desktop/common/textbox.lua b/awesome/.config/awesome/redflat/desktop/common/textbox.lua new file mode 100644 index 0000000..866dc64 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/common/textbox.lua @@ -0,0 +1,158 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat textbox widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom textbox for desktop widgets +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local wibox = require("wibox") +local color = require("gears.color") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local textbox = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = nil, + height = nil, + draw = "by_left", + separator = '%s', + color = "#404040", + font = { font = "Sans", size = 20, face = 0, slant = 0 } + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.common.textbox") or {}) +end + +-- Text alignment functions +----------------------------------------------------------------------------------------------------------------------- +local align = {} + +function align.by_left(cr, _, _, text) + local ext = cr:text_extents(text) + --cr:move_to(0, height) + cr:move_to(0, ext.height) + cr:show_text(text) +end + +function align.by_right(cr, width, _, text) + local ext = cr:text_extents(text) + --cr:move_to(width - (ext.width + ext.x_bearing), height) + cr:move_to(width - (ext.width + ext.x_bearing), ext.height) + cr:show_text(text) +end + +function align.by_edges(cr, width, height, text, style) + local left_text, right_text = string.match(text, "(.+)" .. style.separator .. "(.+)") + if left_text and right_text then + align.by_left(cr, width, height, left_text) + align.by_right(cr, width, height, right_text) + else + align.by_right(cr, width, height, text) + end +end + +function align.by_width(cr, width, _, text) + local ext = cr:text_extents(text) + local text_gap = (width - ext.width - ext.x_bearing)/(#text - 1) + local gap = 0 + + for i = 1, #text do + local c = string.sub(text, i, i) + --cr:move_to(gap, height) + cr:move_to(gap, ext.height) + cr:show_text(c) + + local c_ext = cr:text_extents(c) + gap = gap + text_gap + c_ext.width + c_ext.x_bearing + -- !!! WORKAROUND for space character width only for font size = 24 font = "Play bold" !!! + --if c == " " then + -- gap = gap + 6 + --end + end +end + +-- Create a new textbox widget +-- @param txt Text to display +-- @param style.text Table containing font parameters +-- @param style.color Font color +-- @param style.draw Text align method +-- @param style.width Widget width (optional) +-- @param style.height Widget height (optional) +----------------------------------------------------------------------------------------------------------------------- +function textbox.new(txt, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) +-- local textdraw = align[style.draw] or align.by_left + + -- Create custom widget + -------------------------------------------------------------------------------- + local textwidg = wibox.widget.base.make_widget() + textwidg._data = { + text = txt or "", + width = style.width, + color = style.color + } + + -- User functions + ------------------------------------------------------------ + function textwidg:set_text(text) + if self._data.text ~= text then + self._data.text = text + self:emit_signal("widget::redraw_needed") + end + end + + function textwidg:set_color(value) + if self._data.color ~= value then + self._data.color = value + self:emit_signal("widget::redraw_needed") + end + end + + function textwidg:set_width(width) + if self._data.width ~= width then + self._data.width = width + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit + ------------------------------------------------------------ + function textwidg:fit(_, width, height) + local w = self._data.width and math.min(self._data.width, width) or width + local h = style.height and math.min(style.height, height) or height + return w, h + end + + -- Draw + ------------------------------------------------------------ + function textwidg:draw(_, cr, width, height) + cr:set_source(color(self._data.color)) + redutil.cairo.set_font(cr, style.font) + + align[style.draw](cr, width, height, self._data.text, style) + end + + -------------------------------------------------------------------------------- + return textwidg +end + +-- Config metatable to call textbox module as function +----------------------------------------------------------------------------------------------------------------------- +function textbox.mt:__call(...) + return textbox.new(...) +end + +return setmetatable(textbox, textbox.mt) diff --git a/awesome/.config/awesome/redflat/desktop/init.lua b/awesome/.config/awesome/redflat/desktop/init.lua new file mode 100644 index 0000000..82f61a3 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.desktop" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/desktop/multiline.lua b/awesome/.config/awesome/redflat/desktop/multiline.lua new file mode 100644 index 0000000..3a0627f --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/multiline.lua @@ -0,0 +1,136 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat dashpack desktop widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Multi monitoring widget +-- Several lines with progressbar, label and text +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local string = string +local unpack = unpack or table.unpack + +local wibox = require("wibox") +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") +local lines = require("redflat.desktop.common.pack.lines") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local dashpack = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icon = { image = nil, margin = { 0, 0, 0, 0 } }, + lines = {}, + margin = { 0, 0, 0, 0 }, + digits = 3, + dislabel = "OFF", + unit = { { "B", -1 }, { "KB", 1024 }, { "MB", 1024^2 }, { "GB", 1024^3 } }, + color = { main = "#b1222b", wibox = "#161616", gray = "#404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.multiline") or {}) +end + +local default_args = { timeout = 60, sensors = {} } + +-- Create a new widget +----------------------------------------------------------------------------------------------------------------------- +function dashpack.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + local dwidget = {} + args = redutil.table.merge(default_args, args or {}) + style = redutil.table.merge(default_style(), style or {}) + local alert_data = { counter = 0, state = false } + + dwidget.style = style + + -- initialize progressbar lines + local lines_style = redutil.table.merge(style.lines, { color = style.color }) + local pack = lines(#args.sensors, lines_style) + + -- add icon if needed + if style.icon.image then + dwidget.icon = svgbox(style.icon.image) + dwidget.icon:set_color(style.color.gray) + + dwidget.area = wibox.layout.align.horizontal() + dwidget.area:set_middle(wibox.container.margin(pack.layout, unpack(style.margin))) + dwidget.area:set_left(wibox.container.margin(dwidget.icon, unpack(style.icon.margin))) + else + dwidget.area = wibox.container.margin(pack.layout, unpack(style.margin)) + end + + for i, sensor in ipairs(args.sensors) do + if sensor.name then pack:set_label(string.upper(sensor.name), i) end + end + + -- Update info function + -------------------------------------------------------------------------------- + local function set_raw_state(state, maxm, crit, i) + local alert = crit and state[1] > crit + local text_color = alert and style.color.main or style.color.gray + + pack:set_values(state[1] / maxm, i) + pack:set_label_color(text_color, i) + + if style.lines.show.text or style.lines.show.tooltip then + local txt = state.off and style.dislabel + or redutil.text.dformat(state[2] or state[1], style.unit, style.digits) + pack:set_text(txt, i) + pack:set_text_color(text_color, i) + end + + if style.icon.image then + alert_data.counter = alert_data.counter + 1 + alert_data.state = alert_data.state or alert + if alert_data.counter == #args.sensors then + dwidget.icon:set_color(alert_data.state and style.color.main or style.color.gray) + end + end + end + + local function line_hadnler(maxm, crit, i) + return function(state) set_raw_state(state, maxm, crit, i) end + end + + local function update() + alert_data = { counter = 0, state = false } + --if style.icon.image then dwidget.icon:set_color(style.color.gray) end + for i, sens in ipairs(args.sensors) do + local maxm, crit = sens.maxm, sens.crit + if sens.meter_function then + local state = sens.meter_function(sens.args) + set_raw_state(state, maxm, crit, i) + else + sens.async_function(line_hadnler(maxm, crit, i)) + end + end + end + + -- Set update timer + -------------------------------------------------------------------------------- + local t = timer({ timeout = args.timeout }) + t:connect_signal("timeout", update) + t:start() + t:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return dwidget +end + +-- Config metatable to call module as function +----------------------------------------------------------------------------------------------------------------------- +function dashpack.mt:__call(...) + return dashpack.new(...) +end + +return setmetatable(dashpack, dashpack.mt) diff --git a/awesome/.config/awesome/redflat/desktop/multimeter.lua b/awesome/.config/awesome/redflat/desktop/multimeter.lua new file mode 100644 index 0000000..80de75f --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/multimeter.lua @@ -0,0 +1,167 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat multi monitoring deskotp widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Multi monitoring widget +-- Pack of vertical indicators and two lines with labeled progressbar +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +--local awful = require("awful") +local wibox = require("wibox") +local beautiful = require("beautiful") +local timer = require("gears.timer") +local unpack = unpack or table.unpack + +local dcommon = require("redflat.desktop.common") +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local multim = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + lines = {}, + upbar = { width = 40 }, + digits = 3, + height = { upright = 100, lines = 60 }, + icon = { image = nil, margin = { 0, 20, 0, 0 }, full = false }, + labels = {}, + unit = { { "MB", - 1 }, { "GB", 1024 } }, + color = { main = "#b1222b", wibox = "#161616", gray = "#404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.multimeter") or {}) +end + +local default_args = { + topbars = { num = 1, maxm = 1}, + lines = { maxm = 1 }, + meter = {}, + timeout = 60, +} + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function set_info(value, args, upright, lines, icon, last, style) + local upright_alert = value.alert + + -- set progressbar values and color + for i, line in ipairs(args.lines) do + lines:set_values(value.lines[i][1] / line.maxm, i) + lines:set_text(redutil.text.dformat(value.lines[i][2], line.unit or style.unit, style.digits), i) + + if line.crit then + local cc = value.lines[i][1] > line.crit and style.color.main or style.color.gray + lines:set_text_color(cc, i) + if style.labels[i] then lines:set_label_color(cc, i) end + end + end + + -- set upright value + for i = 1, args.topbars.num do + local v = value.bars[i] and value.bars[i].value or 0 + local tip = value.bars[i] and value.bars[i].text or nil + upright:set_values(v / args.topbars.maxm, i, tip) + if args.topbars.crit then upright_alert = upright_alert or v > args.topbars.crit end + end + + -- colorize icon if needed + if style.icon.image and upright_alert ~= last.alert then + icon:set_color(upright_alert and style.color.main or style.color.gray) + last.alert = upright_alert + end +end + + +-- Create a new widget +----------------------------------------------------------------------------------------------------------------------- +function multim.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + local dwidget = {} + local icon + local last = { alert = false } + + args = redutil.table.merge(default_args, args or {}) + --local geometry = redutil.table.merge(default_geometry, geometry or {}) + style = redutil.table.merge(default_style(), style or {}) + + local lines_style = redutil.table.merge(style.lines, { progressbar = { color = style.color } }) + local upbar_style = redutil.table.merge(style.upbar, { color = style.color }) + + dwidget.style = style + + -- Construct layouts + -------------------------------------------------------------------------------- + local lines = dcommon.pack.lines(#args.lines, lines_style) + local upright = dcommon.pack.upright(args.topbars.num, upbar_style) + lines.layout:set_forced_height(style.height.lines) + + if style.icon.image then + icon = svgbox(style.icon.image) + icon:set_color(style.color.gray) + end + + dwidget.area = wibox.widget({ + { + icon and not style.icon.full and wibox.container.margin(icon, unpack(style.icon.margin)), + upright.layout, + nil, + forced_height = style.height.upright, + layout = wibox.layout.align.horizontal + }, + nil, + lines.layout, + layout = wibox.layout.align.vertical + }) + + if icon and style.icon.full then + dwidget.area = wibox.widget({ + wibox.container.margin(icon, unpack(style.icon.margin)), + dwidget.area, + nil, + layout = wibox.layout.align.horizontal + }) + end + + for i, label in ipairs(style.labels) do + lines:set_label(label, i) + end + + -- Update info function + -------------------------------------------------------------------------------- + local function raw_set(state) + set_info(state, args, upright, lines, icon, last, style) + end + + local function update_plain() + local state = args.meter.func(args.meter.args) + set_info(state, args, upright, lines, icon, last, style) + end + + local update = args.meter.async and function() args.meter.async(raw_set, args.meter.args) end or update_plain + + -- Set update timer + -------------------------------------------------------------------------------- + local t = timer({ timeout = args.timeout }) + t:connect_signal("timeout", update) + t:start() + t:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return dwidget +end + +-- Config metatable to call module as function +----------------------------------------------------------------------------------------------------------------------- +function multim.mt:__call(...) + return multim.new(...) +end + +return setmetatable(multim, multim.mt) diff --git a/awesome/.config/awesome/redflat/desktop/singleline.lua b/awesome/.config/awesome/redflat/desktop/singleline.lua new file mode 100644 index 0000000..7af6a34 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/singleline.lua @@ -0,0 +1,138 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat simple line desktop widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Multi monitoring widget +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local string = string + +local wibox = require("wibox") +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") +local textbox = require("redflat.desktop.common.textbox") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local sline = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + lbox = { draw = "by_left", width = 50 }, + rbox = { draw = "by_right", width = 50 }, + digits = 3, + icon = nil, + iwidth = 120, + unit = { { "B", -1 }, { "KB", 1024 }, { "MB", 1024^2 }, { "GB", 1024^3 } }, + color = { main = "#b1222b", wibox = "#161616", gray = "#404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.singleline") or {}) +end + +local default_args = { timeout = 60, sensors = {} } + +-- Create a new widget +----------------------------------------------------------------------------------------------------------------------- +function sline.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + local dwidget = {} + args = redutil.table.merge(default_args, args or {}) + style = redutil.table.merge(default_style(), style or {}) + + dwidget.style = style + + -- Initialize layouts + -------------------------------------------------------------------------------- + dwidget.item = {} + dwidget.icon = {} + dwidget.area = wibox.layout.align.horizontal() + + local mid = wibox.layout.flex.horizontal() + + -- construct line + for i, _ in ipairs(args.sensors) do + dwidget.item[i] = textbox("", style.rbox) + + if style.icon then dwidget.icon[i] = svgbox(style.icon) end + + local boxlayout = wibox.widget({ + textbox(string.upper(args.sensors[i].name or "mon"), style.lbox), + style.icon and { + nil, dwidget.icon[i], nil, + expand = "outside", + layout = wibox.layout.align.horizontal + }, + dwidget.item[i], + forced_width = style.iwidth, + layout = wibox.layout.align.horizontal + }) + + if i == 1 then + dwidget.area:set_left(boxlayout) + else + local space = wibox.layout.align.horizontal() + space:set_right(boxlayout) + mid:add(space) + end + end + + dwidget.area:set_middle(mid) + + -- Update info function + -------------------------------------------------------------------------------- + local function set_raw_state(state, crit, i) + local text_color = crit and state[1] > crit and style.color.main or style.color.gray + local txt = redutil.text.dformat(state[2] or state[1], style.unit, style.digits) + + dwidget.item[i]:set_text(txt) + dwidget.item[i]:set_color(text_color) + + if dwidget.icon[i] then + local icon_color = state.off and style.color.gray or style.color.main + dwidget.icon[i]:set_color(icon_color) + end + end + + local function item_hadnler(crit, i) + return function(state) set_raw_state(state, crit, i) end + end + + local function update() + for i, sens in ipairs(args.sensors) do + local crit = sens.crit + if sens.meter_function then + local state = sens.meter_function(sens.args) + set_raw_state(state, crit, i) + else + sens.async_function(item_hadnler(crit, i)) + end + end + end + + -- Set update timer + -------------------------------------------------------------------------------- + local t = timer({ timeout = args.timeout }) + t:connect_signal("timeout", update) + t:start() + t:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return dwidget +end + +-- Config metatable to call module as function +----------------------------------------------------------------------------------------------------------------------- +function sline.mt:__call(...) + return sline.new(...) +end + +return setmetatable(sline, sline.mt) diff --git a/awesome/.config/awesome/redflat/desktop/speedmeter/compact.lua b/awesome/.config/awesome/redflat/desktop/speedmeter/compact.lua new file mode 100644 index 0000000..c31f2d0 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/speedmeter/compact.lua @@ -0,0 +1,173 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat speed meter deskotp widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Network or disk i/o speed indicators +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable + +local wibox = require("wibox") +local beautiful = require("beautiful") +local timer = require("gears.timer") +local unpack = unpack or table.unpack + +local system = require("redflat.system") +local redutil = require("redflat.util") +local dcommon = require("redflat.desktop.common") +local svgbox = require("redflat.gauge.svgbox") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local speedmeter = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icon = { margin = { 0, 0, 0, 0 }, }, + label = { width = 100 }, + margins = { label = { 0, 0, 0, 0 }, chart = { 0, 0, 2, 2 } }, + progressbar = { chunk = { width = 10, gap = 5 }, height = 4 }, + chart = {}, + height = { chart = 50 }, + digits = 2, + unit = { { "B", -1 }, { "KB", 1024 }, { "MB", 1024^2 }, { "GB", 1024^3 } }, + color = { main = "#b1222b", wibox = "#161616", gray = "#404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.speedmeter.compact") or {}) +end + +local default_args = { + autoscale = true, + label = "NETWORK", + timeout = 5, + interface = "eth0", + meter_function = system.net_speed +} + +local default_maxspeed = { up = 10 * 1024, down = 10 * 1024 } + + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Construct chart with support elements +-------------------------------------------------------------------------------- +local function value_chart(style, image, maxspeed) + local chart = dcommon.chart(redutil.table.merge(style.chart, { maxm = maxspeed })) + local progressbar = dcommon.bar.plain(redutil.table.merge(style.progressbar, { maxm = maxspeed })) + + local text = dcommon.textbox("", style.label) + local icon = image and svgbox(image) or nil + + local area = wibox.widget({ + progressbar, + { + { + nil, + wibox.container.margin(text, unpack(style.margins.label)), + nil, + expand = "outside", + layout = wibox.layout.align.vertical + }, + wibox.container.margin(chart, unpack(style.margins.chart)), + nil, + layout = wibox.layout.align.horizontal + }, + progressbar, + forced_height = style.height.chart, + layout = wibox.layout.align.vertical + }) + + if image then + icon:set_color(style.color.gray) + area = wibox.widget({ + wibox.container.margin(icon, unpack(style.icon.margin)), + area, + nil, + forced_height = style.height.chart, + layout = wibox.layout.align.horizontal + }) + end + + return { chart = chart, progressbar = progressbar, text = text, icon = icon, area = area } +end + + +-- Create a new speed meter widget +----------------------------------------------------------------------------------------------------------------------- +function speedmeter.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + local dwidget = {} + local storage = {} + local last_state = { false, false } + + args = redutil.table.merge(default_args, args or {}) + style = redutil.table.merge(default_style(), style or {}) + local maxspeed = redutil.table.merge(default_maxspeed, args.maxspeed or {}) + + style.chart = redutil.table.merge(style.chart, { autoscale = args.autoscale, color = style.color.gray }) + style.progressbar = redutil.table.merge(style.progressbar, { autoscale = args.autoscale, color = style.color }) + style.label = redutil.table.merge(style.label, { draw = "by_edges", color = style.color.gray }) + + dwidget.style = style + + -- Construct indicators + -------------------------------------------------------------------------------- + local widg = { {}, {} } + local placement = { "up", "down" } + + for i = 1, 2 do + widg[i] = value_chart(style, style.icon[placement[i]], maxspeed[placement[i]]) + end + + dwidget.area = wibox.widget({ + widg[1].area, nil, widg[2].area, + layout = wibox.layout.align.vertical + }) + + -- Update info + -------------------------------------------------------------------------------- + local function update() + local state = args.meter_function(args.interface, storage) + + for i = 1, 2 do + widg[i].chart:set_value(state[i]) + widg[i].progressbar:set_value(state[i]) + widg[i].text:set_text(redutil.text.dformat(state[i], style.unit, style.digits)) + + if widg[i].icon and args.crit then + local st = state[i] > args.crit[placement[i]] + if st ~= last_state[i] then + local newc = st and style.color.main or style.color.gray + widg[i].icon:set_color(newc) + widg[i].text:set_color(newc) + last_state[i] = st + end + end + end + end + + -- Set update timer + -------------------------------------------------------------------------------- + local t = timer({ timeout = args.timeout }) + t:connect_signal("timeout", update) + t:start() + t:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return dwidget +end + +-- Config metatable to call module as function +----------------------------------------------------------------------------------------------------------------------- +function speedmeter.mt:__call(...) + return speedmeter.new(...) +end + +return setmetatable(speedmeter, speedmeter.mt) diff --git a/awesome/.config/awesome/redflat/desktop/speedmeter/init.lua b/awesome/.config/awesome/redflat/desktop/speedmeter/init.lua new file mode 100644 index 0000000..6081eb2 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/speedmeter/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.desktop.speedmeter" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/desktop/speedmeter/normal.lua b/awesome/.config/awesome/redflat/desktop/speedmeter/normal.lua new file mode 100644 index 0000000..3c5b178 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/speedmeter/normal.lua @@ -0,0 +1,199 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat speed meter deskotp widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Network or disk i/o speed indicators +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable + +local wibox = require("wibox") +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local system = require("redflat.system") +local redutil = require("redflat.util") +local dcommon = require("redflat.desktop.common") +local svgbox = require("redflat.gauge.svgbox") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local speedmeter = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + images = {}, + label = { height = 20, separator = "^" }, + progressbar = { chunk = { width = 10, gap = 5 }, height = 4 }, + chart = {}, + barvalue_height = 32, + fullchart_height = 78, + digits = 2, + image_gap = 20, + unit = { { "B", -1 }, { "KB", 1024 }, { "MB", 1024^2 }, { "GB", 1024^3 } }, + color = { main = "#b1222b", wibox = "#161616", gray = "#404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.speedmeter.normal") or {}) +end + +local default_args = { + autoscale = true, + label = "NETWORK", + timeout = 5, + interface = "eth0", + meter_function = system.net_speed +} + +local default_maxspeed = { up = 10 * 1024, down = 10 * 1024 } + + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function set_fullchart_info(objects, label, state, style) + for i, o in ipairs(objects) do + o.barvalue:set_value(state[i]) + o.barvalue:set_text( + label .. style.label.separator .. redutil.text.dformat(state[i], style.unit, style.digits, " ") + ) + o.chart:set_value(state[i]) + end +end + +local function colorize_icon(objects, last_state, values, crit, style) + for i, o in ipairs(objects) do + local st = values[i] > crit[i] + if st ~= last_state[i] then + o:set_color(st and style.color.main or style.color.gray) + last_state[i] = st + end + end +end + +-- Construct complex indicator with progress bar and label on top of it +-------------------------------------------------------------------------------- +local function barvalue(progressbar_style, label_style) + local widg = {} + + -- construct layout with indicators + local progressbar = dcommon.bar.plain(progressbar_style) + local label = dcommon.textbox(nil, label_style) + + widg.layout = wibox.widget({ + label, nil, progressbar, + layout = wibox.layout.align.vertical, + }) + + -- setup functions + function widg:set_text(text) label:set_text(text) end + function widg:set_value(x) progressbar:set_value(x) end + + return widg +end + +-- Construct complex indicator with history chart, progress bar and label +-------------------------------------------------------------------------------- +local function fullchart(label_style, progressbar_style, chart_style, barvalue_height, maxm) + + local widg = {} + chart_style = redutil.table.merge(chart_style, { maxm = maxm }) + progressbar_style = redutil.table.merge(progressbar_style, { maxm = maxm }) + + -- construct layout with indicators + widg.barvalue = barvalue(progressbar_style, label_style) + widg.chart = dcommon.chart(chart_style) + widg.barvalue.layout:set_forced_height(barvalue_height) + + widg.layout = wibox.widget({ + widg.barvalue.layout, nil, widg.chart, + layout = wibox.layout.align.vertical, + }) + + return widg +end + +-- Construct speed info elements (fullchart and icon in one layout) +-------------------------------------------------------------------------------- +local function speed_line(image, maxm, el_style, style) + local fc = fullchart(el_style.label, el_style.progressbar, el_style.chart, style.barvalue_height, maxm) + local align = wibox.layout.align.horizontal() + local icon + + align:set_right(fc.layout) + align:set_forced_height(style.fullchart_height) + + if image then + icon = svgbox(image) + icon:set_color(style.color.gray) + align:set_left(wibox.container.margin(icon, 0, style.image_gap)) + end + + return fc, align, icon +end + + +-- Create a new speed meter widget +----------------------------------------------------------------------------------------------------------------------- +function speedmeter.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + local dwidget = {} + local storage = {} + local last = {} + + args = redutil.table.merge(default_args, args or {}) + style = redutil.table.merge(default_style(), style or {}) + local maxspeed = redutil.table.merge(default_maxspeed, args.maxspeed or {}) + + local elements_style = { + label = redutil.table.merge(style.label, { draw = "by_edges", color = style.color.gray }), + progressbar = redutil.table.merge(style.progressbar, { autoscale = args.autoscale, color = style.color }), + chart = redutil.table.merge(style.chart, { autoscale = args.autoscale, color = style.color.gray }) + } + + dwidget.style = style + + -- Construct indicators + -------------------------------------------------------------------------------- + local up_widget, up_layout, up_icon = speed_line(style.images[1], maxspeed.up, elements_style, style) + local down_widget, down_layout, down_icon = speed_line(style.images[2], maxspeed.down, elements_style, style) + + dwidget.area = wibox.widget({ + up_layout, nil, down_layout, + layout = wibox.layout.align.vertical + }) + + -- Update info + -------------------------------------------------------------------------------- + local function update() + local state = args.meter_function(args.interface, storage) + + set_fullchart_info({ up_widget, down_widget }, args.label, state, style) + + if style.images and args.crit then + colorize_icon({ up_icon, down_icon }, last, state, { args.crit.up, args.crit.down }, style) + end + end + + -- Set update timer + -------------------------------------------------------------------------------- + local t = timer({ timeout = args.timeout }) + t:connect_signal("timeout", update) + t:start() + t:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return dwidget +end + +-- Config metatable to call module as function +----------------------------------------------------------------------------------------------------------------------- +function speedmeter.mt:__call(...) + return speedmeter.new(...) +end + +return setmetatable(speedmeter, speedmeter.mt) diff --git a/awesome/.config/awesome/redflat/desktop/textset.lua b/awesome/.config/awesome/redflat/desktop/textset.lua new file mode 100644 index 0000000..41587b7 --- /dev/null +++ b/awesome/.config/awesome/redflat/desktop/textset.lua @@ -0,0 +1,98 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat desktop text widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Text widget with text update function +----------------------------------------------------------------------------------------------------------------------- + +local setmetatable = setmetatable + +local textbox = require("wibox.widget.textbox") +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local lgi = require("lgi") +local Pango = lgi.Pango + +local redutil = require("redflat.util") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local textset = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + font = "Sans 12", + spacing = 0, + color = { gray = "#525252" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "desktop.textset") or {}) +end + +-- Create a textset widget. It draws the time it is in a textbox. +-- @param format The time format. Default is " %a %b %d, %H:%M ". +-- @param timeout How often update the time. Default is 60. +-- @return A textbox widget +----------------------------------------------------------------------------------------------------------------------- +function textset.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + --local funcarg = args.arg or {} + --local timeout = args.timeout or { 60 } + --local actions = args.actions or {} + --local async = args.async or {} + style = redutil.table.merge(default_style(), style or {}) + + -- Create widget + -------------------------------------------------------------------------------- + local widg = textbox() + widg:set_font(style.font) + widg:set_valign("top") + + -- Some pivate properties of awesome textbox v4.0 + widg._private.layout:set_justify(true) + widg._private.layout:set_spacing(Pango.units_from_double(style.spacing)) + + -- data setup + local data = {} + local timers = {} + for i = 1, #args do data[i] = "" end + + -- update info function + local function update() + local state = {} + for _, txt in ipairs(data) do state[#state + 1] = txt end + widg:set_markup(string.format('%s', style.color.gray, table.concat(state))) + end + + -- Set update timers + -------------------------------------------------------------------------------- + for i, block in ipairs(args) do + timers[i] = timer({ timeout = block.timeout or args[1].timeout }) + if block.async then + timers[i]:connect_signal("timeout", function() + block.async(function(state) data[i] = block.action(state); update() end) + end) + else + timers[i]:connect_signal("timeout", function() + data[i] = block.action(); update() + end) + end + timers[i]:start() + timers[i]:emit_signal("timeout") + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call textset module as function +----------------------------------------------------------------------------------------------------------------------- +function textset.mt:__call(...) + return textset.new(...) +end + +return setmetatable(textset, textset.mt) diff --git a/awesome/.config/awesome/redflat/float/apprunner.lua b/awesome/.config/awesome/redflat/float/apprunner.lua new file mode 100644 index 0000000..40b4918 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/apprunner.lua @@ -0,0 +1,367 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat application launcher widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget with application list and quick search +-- Application list generated by redflat.dfparser +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.menubar v3.5.2 +------ (c) 2009, 2011-2012 Antonio Terceiro, Alexander Yakushev +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local unpack = unpack or table.unpack + +local awful = require("awful") +local beautiful = require("beautiful") +local wibox = require("wibox") + +local svgbox = require("redflat.gauge.svgbox") +local dfparser = require("redflat.service.dfparser") +local redutil = require("redflat.util") +local decoration = require("redflat.float.decoration") +local redtip = require("redflat.float.hotkeys") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local apprunner = { applist = {}, command = "", keys = {} } + +local programs = {} +local lastquery + +-- key bindings +apprunner.keys.move = { + { + {}, "Down", function() apprunner:down() end, + { description = "Select next item", group = "Navigation" } + }, + { + {}, "Up", function() apprunner:up() end, + { description = "Select previous item", group = "Navigation" } + }, +} + +apprunner.keys.action = { + { + { "Mod4" }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, + -- fake keys used for hotkeys helper + { + {}, "Enter", nil, + { description = "Activate item", group = "Action" } + }, + { + {}, "Escape", nil, + { description = "Close widget", group = "Action" } + }, +} + +apprunner.keys.all = awful.util.table.join(apprunner.keys.move, apprunner.keys.action) + + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + itemnum = 5, + geometry = { width = 620, height = 520 }, + border_margin = { 10, 10, 10, 10 }, + title_height = 48, + prompt_height = 35, + title_icon = nil, + icon_margin = { 8, 12, 0, 0 }, + parser = {}, + list_text_vgap = 4, + list_icon_margin = { 6, 12, 6, 6 }, + name_font = "Sans 12", + comment_font = "Sans 12", + border_width = 2, + keytip = { geometry = { width = 400 } }, + dimage = redutil.base.placeholder(), + color = { border = "#575757", text = "#aaaaaa", highlight = "#eeeeee", main = "#b1222b", + bg = "#161616", bg_second = "#181818", wibox = "#202020", icon = "a0a0a0" }, + shape = nil + } + return redutil.table.merge(style, redutil.table.check(beautiful, "float.apprunner") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Fuction to build list item +-------------------------------------------------------------------------------- +local function construct_item(style) + local item = { + icon = wibox.widget.imagebox(), + name = wibox.widget.textbox(), + comment = wibox.widget.textbox(), + bg = style.color.bg, + cmd = "" + } + + item.name:set_font(style.name_font) + item.comment:set_font(style.comment_font) + + -- Construct item layouts + ------------------------------------------------------------ + local text_vertical = wibox.layout.align.vertical() + local text_horizontal = wibox.layout.align.horizontal() + text_horizontal:set_left(text_vertical) + text_vertical:set_top(wibox.container.margin(item.name, 0, 0, style.list_text_vgap)) + text_vertical:set_middle(item.comment) + + local item_horizontal = wibox.layout.align.horizontal() + item_horizontal:set_left(wibox.container.margin(item.icon, unpack(style.list_icon_margin))) + item_horizontal:set_middle(text_horizontal) + + item.layout = wibox.container.background(item_horizontal, item.bg) + + -- Item functions + ------------------------------------------------------------ + function item:set(args) + args = args or {} + + local name_text = awful.util.escape(args.Name) or "" + item.name:set_markup(name_text) + + local comment_text = args.Comment and awful.util.escape(args.Comment) + or args.Name and "No description" + or "" + item.comment:set_markup(comment_text) + + item.icon:set_image(args.icon_path or style.dimage) + item.icon:set_visible((args.Name)) + + item.cmd = args.cmdline + end + + function item:set_bg(color) + item.bg = color + item.layout:set_bg(color) + end + + function item:set_select() + item.layout:set_bg(style.color.main) + item.layout:set_fg(style.color.highlight) + end + + function item:set_unselect() + item.layout:set_bg(item.bg) + item.layout:set_fg(style.color.text) + end + + function item:run() + awful.spawn(item.cmd) + end + + ------------------------------------------------------------ + return item +end + +-- Fuction to build application list +-------------------------------------------------------------------------------- +local function construct_list(num, progs, style) + local list = { selected = 1, position = 1 } + + -- Construct application list + ------------------------------------------------------------ + local list_layout = wibox.layout.flex.vertical() + list.layout = wibox.container.background(list_layout, style.color.bg) + + list.items = {} + for i = 1, num do + list.items[i] = construct_item(style) + list.items[i]:set_bg((i % 2) == 1 and style.color.bg or style.color.bg_second) + list_layout:add(list.items[i].layout) + end + + -- Application list functions + ------------------------------------------------------------ + function list:set_select(index) + list.items[list.selected]:set_unselect() + list.selected = index + list.items[list.selected]:set_select() + end + + function list:update(t) + for i = list.position, (list.position - 1 + num) do list.items[i - list.position + 1]:set(t[i]) end + list:set_select(list.selected) + end + + -- First run actions + ------------------------------------------------------------ + list:update(progs) + list:set_select(1) + + ------------------------------------------------------------ + return list +end + +-- Sort function +-------------------------------------------------------------------------------- +local function sort_by_query(t, query) + local l = string.len(query) + local function s(a, b) + return string.lower(string.sub(a.Name, 1, l)) == query and string.lower(string.sub(b.Name, 1, l)) ~= query + end + table.sort(t, s) +end + +-- Function to filter application list by quick search input +-------------------------------------------------------------------------------- +local function list_filtrate(query) + if lastquery ~= query then + programs.current = {} + + for _, p in ipairs(programs.all) do + if string.match(string.lower(p.Name), query) then + table.insert(programs.current, p) + end + end + + sort_by_query(programs.current, query) + + apprunner.applist.position = 1 + apprunner.applist:update(programs.current) + apprunner.applist:set_select(1) + lastquery = query + end +end + +-- Functions to navigate through application list +----------------------------------------------------------------------------------------------------------------------- +function apprunner:down() + if self.applist.selected < math.min(self.itemnum, #programs.current) then + self.applist:set_select(self.applist.selected + 1) + elseif self.applist.selected + self.applist.position - 1 < #programs.current then + self.applist.position = self.applist.position + 1 + self.applist:update(programs.current) + end +end + +function apprunner:up() + if self.applist.selected > 1 then + self.applist:set_select(self.applist.selected - 1) + elseif self.applist.position > 1 then + self.applist.position = self.applist.position - 1 + self.applist:update(programs.current) + end +end + +-- Keypress handler +----------------------------------------------------------------------------------------------------------------------- +local function keypressed_callback(mod, key) + for _, k in ipairs(apprunner.keys.all) do + if redutil.key.match_prompt(k, mod, key) and k[3] then k[3](); return true end + end + return false +end + +-- Initialize apprunner widget +----------------------------------------------------------------------------------------------------------------------- +function apprunner:init() + + -- Initialize vars + -------------------------------------------------------------------------------- + local style = default_style() + self.itemnum = style.itemnum + self.keytip = style.keytip + + -- get full application list + programs.all = dfparser.program_list(style.parser) + programs.current = awful.util.table.clone(programs.all) + + -- Create quick search widget + -------------------------------------------------------------------------------- + self.textbox = wibox.widget.textbox() + self.textbox:set_ellipsize("start") + self.decorated_widget = decoration.textfield(self.textbox, style.field) + + -- Build application list + -------------------------------------------------------------------------------- + self.applist = construct_list(apprunner.itemnum, programs.current, style) + + -- Construct widget layouts + -------------------------------------------------------------------------------- + local prompt_width = style.geometry.width - 2 * style.border_margin[1] + - style.title_height - style.icon_margin[1] - style.icon_margin[2] + local prompt_layout = wibox.container.constraint(self.decorated_widget, "exact", prompt_width, style.prompt_height) + + local prompt_vertical = wibox.layout.align.vertical() + prompt_vertical:set_expand("outside") + prompt_vertical:set_middle(prompt_layout) + + local prompt_area_horizontal = wibox.layout.align.horizontal() + local title_image = svgbox(style.title_icon) + title_image:set_color(style.color.icon) + prompt_area_horizontal:set_left(wibox.container.margin(title_image, unpack(style.icon_margin))) + prompt_area_horizontal:set_right(prompt_vertical) + + local prompt_area_layout = wibox.container.constraint(prompt_area_horizontal, "exact", nil, style.title_height) + + local area_vertical = wibox.layout.align.vertical() + area_vertical:set_top(prompt_area_layout) + area_vertical:set_middle(wibox.container.margin(self.applist.layout, 0, 0, style.border_margin[3])) + local area_layout = wibox.container.margin(area_vertical, unpack(style.border_margin)) + + -- Create floating wibox for apprunner widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + self.wibox:set_widget(area_layout) + self.wibox:geometry(style.geometry) +end + +-- Show apprunner widget +-- Wibox appears on call and hides after "enter" or "esc" pressed +----------------------------------------------------------------------------------------------------------------------- +function apprunner:show() + if not self.wibox then + self:init() + else + list_filtrate("") + self.applist:set_select(1) + end + + redutil.placement.centered(self.wibox, nil, mouse.screen.workarea) + self.wibox.visible = true + redtip:set_pack("Apprunner", self.keys.all, self.keytip.column, self.keytip.geometry) + + return awful.prompt.run({ + prompt = "", + textbox = self.textbox, + exe_callback = function () self.applist.items[self.applist.selected]:run() end, + done_callback = function () self:hide() end, + keypressed_callback = keypressed_callback, + changed_callback = list_filtrate, + }) +end + +function apprunner:hide() + self.wibox.visible = false + redtip:remove_pack() +end + +-- Set user hotkeys +----------------------------------------------------------------------------------------------------------------------- +function apprunner:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then self.keys.all = awful.util.table.join(self.keys.move, self.keys.action) end + end + + -- self.tip = awful.util.table.join(self.keys.all, self._fake_keys) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return apprunner diff --git a/awesome/.config/awesome/redflat/float/appswitcher.lua b/awesome/.config/awesome/redflat/float/appswitcher.lua new file mode 100644 index 0000000..f15783b --- /dev/null +++ b/awesome/.config/awesome/redflat/float/appswitcher.lua @@ -0,0 +1,459 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat appswitcher widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Advanced application switcher +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ Familiar Alt Tab by Joren Heit +------ https://github.com/jorenheit/awesome_alttab +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local type = type +local math = math +local unpack = unpack or table.unpack +local table = table + +local awful = require("awful") +local beautiful = require("beautiful") +local wibox = require("wibox") +local timer = require("gears.timer") +local gears = require("gears") + +local pixbuf +local function load_pixbuf() + local _ = require("lgi").Gdk + pixbuf = require("lgi").GdkPixbuf +end +local is_pixbuf_loaded = pcall(load_pixbuf) + +local dfparser = require("redflat.service.dfparser") +local redutil = require("redflat.util") +local redtip = require("redflat.float.hotkeys") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local appswitcher = { clients_list = {}, index = 1, hotkeys = {}, svgsize = 256, keys = {} } + +local cache = {} +local svgcache = {} +local _empty_surface = redutil.base.placeholder({ txt = " " }) + +-- key bindings +appswitcher.keys.move = { + { + {}, "Right", function() appswitcher:switch() end, + { description = "Select next app", group = "Navigation" } + }, + { + {}, "Left", function() appswitcher:switch({ reverse = true }) end, + { description = "Select previous app", group = "Navigation" } + }, +} + +appswitcher.keys.action = { + { + {}, "Return", function() appswitcher:hide() end, + { description = "Activate and exit", group = "Action" } + }, + { + { "Mod4" }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, +} + +appswitcher.keys.all = awful.util.table.join(appswitcher.keys.move, appswitcher.keys.action) + +appswitcher._fake_keys = { + { + {}, "N", nil, + { description = "Select app by key", group = "Navigation" } + }, +} + + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + wibox_height = 200, + label_height = 20, + title_height = 20, + icon_size = 48, + preview_gap = 20, + preview_format = 16/10, + preview_margin = { 20, 20, 20, 20 }, + border_margin = { 6, 6, 6, 6 }, + border_width = 2, + parser = {}, + update_timeout = 1, + min_icon_number = 4, + keytip = { geometry = { width = 400 }, exit = false }, + title_font = "Sans 12", + hotkeys = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" }, + font = { font = "Sans", size = 16, face = 0, slant = 0 }, + color = { border = "#575757", text = "#aaaaaa", main = "#b1222b", preview_bg = "#b1222b80", + wibox = "#202020", icon = "#a0a0a0", bg = "#161616", gray = "#575757" }, + shape = nil + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "float.appswitcher") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Create icon visual for client +-------------------------------------------------------------------------------- +local function get_icon_visual(icon_db, c, size) + local surface, buf + + if icon_db[string.lower(c.class)] then + local icon = icon_db[string.lower(c.class)] + + if type(icon) == "string" and string.match(icon, "%.svg") and is_pixbuf_loaded then + if svgcache[icon] then + buf = svgcache[icon] + else + buf = pixbuf.Pixbuf.new_from_file_at_scale(icon, size, size, true) + svgcache[icon] = buf + end + else + surface = gears.surface(icon) + end + else + surface = c.icon and gears.surface(c.icon) or _empty_surface + end + + return surface, buf +end + +-- Find all clients to be shown +-------------------------------------------------------------------------------- +local function clients_find(filter) + local clients = {} + for _, c in ipairs(client.get()) do + if not (c.skip_taskbar or c.hidden or c.type == "splash" or c.type == "dock" or c.type == "desktop") + and filter(c, mouse.screen) then + table.insert(clients, c) + end + end + return clients +end + +-- Loop iterating through table +-------------------------------------------------------------------------------- +local function iterate(tabl, i, diff) + local nxt = i + diff + + if nxt > #tabl then nxt = 1 + elseif nxt < 1 then nxt = #tabl end + + return nxt +end + +-- Select new focused window +-------------------------------------------------------------------------------- +local function focus_and_raise(c) + if c.minimized then c.minimized = false end + + if not c:isvisible() then + awful.tag.viewmore(c:tags(), c.screen) + end + + client.focus = c + c:raise() +end + +-- Initialize appswitcher widget +----------------------------------------------------------------------------------------------------------------------- +function appswitcher:init() + + -- Initialize style vars + -------------------------------------------------------------------------------- + local style = default_style() + local icon_db = dfparser.icon_list(style.parser) + local iscf = 1 -- icon size correction factor + + self.keytip = style.keytip + self._fake_keys[1][4].keyset = style.hotkeys + self:set_keys() + + -- Create floating wibox for appswitcher widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + -- Keygrabber + -------------------------------------------------------------------------------- + local function focus_by_key(key) + self:switch({ index = awful.util.table.hasitem(style.hotkeys, key) }) + end + + self.keygrabber = function(mod, key, event) + if event == "press" then return false end + + for _, k in ipairs(self.keys.all) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return false end + end + + if awful.util.table.hasitem(style.hotkeys, key) then focus_by_key(key) end + end + + -- Function to form title string for given client (name and tags) + -------------------------------------------------------------------------------- + function self.title_generator(c) + local client_tags = {} + + for _, t in ipairs(c:tags()) do + client_tags[#client_tags + 1] = string.upper(t.name) + end + + local tag_text = string.format('[%s]', style.color.gray, table.concat(client_tags, " ")) + + return string.format("%s %s", awful.util.escape(c.name) or "Untitled", tag_text) + end + + -- Function to correct wibox size for given namber of icons + -------------------------------------------------------------------------------- + function self.size_correction(inum) + local w, h + inum = math.max(inum, style.min_icon_number) + local expen_h = (inum - 1) * style.preview_gap + style.preview_margin[1] + style.preview_margin[2] + + style.border_margin[1] + style.border_margin[2] + local expen_v = style.label_height + style.preview_margin[3] + style.preview_margin[4] + style.title_height + + style.border_margin[3] + style.border_margin[4] + + -- calculate width + local widget_height = style.wibox_height - expen_v + style.label_height + local max_width = screen[mouse.screen].geometry.width - 2 * self.wibox.border_width + local wanted_width = inum * ((widget_height - style.label_height) * style.preview_format) + expen_h + + -- check if need size correction + if wanted_width <= max_width then + -- correct width + w = wanted_width + h = style.wibox_height + iscf = 1 + else + -- correct height + local wanted_widget_width = (max_width - expen_h) / inum + local corrected_height = wanted_widget_width / style.preview_format + expen_v + + w = max_width + h = corrected_height + iscf = (corrected_height - expen_v) / (style.wibox_height - expen_v) + end + + -- set wibox size + self.wibox:geometry({ width = w, height = h }) + end + + -- Create custom widget to draw previews + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) return width, height end + + -- Draw + ------------------------------------------------------------ + function widg.draw(_, _, cr, _, height) + + -- calculate preview pattern size + local psize = { + width = (height - style.label_height) * style.preview_format, + height = (height - style.label_height) + } + + -- Shift pack of preview icons to center of widget if needed + if #self.clients_list < style.min_icon_number then + local tr = (style.min_icon_number - #self.clients_list) * (style.preview_gap + psize.width) / 2 + cr:translate(tr, 0) + end + + -- draw all previews + for i = 1, #self.clients_list do + + -- support vars + local sc, tr, surface, pixbuf_ + local c = self.clients_list[i] + + -- create surface and calculate scale and translate factors + if c:isvisible() then + surface = gears.surface(c.content) + local cg = c:geometry() + + if cg.width/cg.height > style.preview_format then + sc = psize.width / cg.width + tr = {0, (psize.height - sc * cg.height) / 2} + else + sc = psize.height / cg.height + tr = {(psize.width - sc * cg.width) / 2, 0} + end + else + -- surface = gears.surface(icon_db[string.lower(c.class)] or c.icon) + surface, pixbuf_ = get_icon_visual(icon_db, c, self.svgsize) + + -- sc = style.icon_size / surface.width * iscf + sc = style.icon_size / (surface and surface.width or pixbuf_.width) * iscf + tr = {(psize.width - style.icon_size * iscf) / 2, (psize.height - style.icon_size * iscf) / 2} + end + + -- translate cairo for every icon + if i > 1 then cr:translate(style.preview_gap + psize.width, 0) end + + -- draw background for preview + cr:set_source(gears.color(i == self.index and style.color.main or style.color.preview_bg)) + cr:rectangle(0, 0, psize.width, psize.height) + cr:fill() + + -- draw current preview or application icon + cr:save() + cr:translate(unpack(tr)) + cr:scale(sc, sc) + + if pixbuf_ then + cr:set_source_pixbuf(pixbuf_, 0, 0) + else + cr:set_source_surface(surface, 0, 0) + end + cr:paint() + cr:restore() + + -- draw label + local txt = style.hotkeys[i] or "?" + cr:set_source(gears.color(i == self.index and style.color.main or style.color.text)) + redutil.cairo.set_font(cr, style.font) + redutil.cairo.textcentre.horizontal(cr, { psize.width/2, psize.height + style.label_height }, txt) + end + + collectgarbage() -- prevents memory leak after complex draw function + end + + -- Set widget and create title for wibox + -------------------------------------------------------------------------------- + self.widget = widg + + self.titlebox = wibox.widget.textbox("TEXT") + self.titlebox:set_align("center") + self.titlebox:set_font(style.title_font) + + local title_layout = wibox.container.constraint(self.titlebox, "exact", nil, style.title_height) + local vertical_layout = wibox.layout.fixed.vertical() + local widget_bg = wibox.container.background( + wibox.container.margin(self.widget, unpack(style.preview_margin)), + style.color.bg + ) + vertical_layout:add(title_layout) + vertical_layout:add(widget_bg) + + self.wibox:set_widget(wibox.container.margin(vertical_layout, unpack(style.border_margin))) + + -- Set preview icons update timer + -------------------------------------------------------------------------------- + self.update_timer = timer({ timeout = style.update_timeout }) + self.update_timer:connect_signal("timeout", function() self.widget:emit_signal("widget::redraw_needed") end) + + -- Restart switcher if any client was closed + -------------------------------------------------------------------------------- + client.connect_signal("unmanage", + function(c) + if self.wibox.visible and awful.util.table.hasitem(self.clients_list, c) then + self:hide(true) + self:show(cache.args) + end + end + ) +end + +-- Show appswitcher widget +----------------------------------------------------------------------------------------------------------------------- +function appswitcher:show(args) + + args = args or {} + local filter = args.filter + local noaction = args.noaction + + if not self.wibox then self:init() end + if self.wibox.visible then + self:switch(args) + return + end + + local clients = clients_find(filter) + if #clients == 0 then return end + + self.clients_list = clients + cache.args = args + self.size_correction(#clients) + redutil.placement.centered(self.wibox, nil, mouse.screen.workarea) + self.update_timer:start() + awful.keygrabber.run(self.keygrabber) + + self.index = awful.util.table.hasitem(self.clients_list, client.focus) or 1 + self.titlebox:set_markup(self.title_generator(self.clients_list[self.index])) + if not noaction then self:switch(args) end + self.widget:emit_signal("widget::redraw_needed") + + self.wibox.visible = true + + redtip:set_pack( + "Appswitcher", self.tip, self.keytip.column, self.keytip.geometry, + self.keytip.exit and function() appswitcher:hide(true) end + ) +end + +-- Hide appswitcher widget +----------------------------------------------------------------------------------------------------------------------- +function appswitcher:hide(is_empty_call) + + if not self.wibox then self:init() end + if not self.wibox.visible then return end + self.wibox.visible = false + redtip:remove_pack() + self.update_timer:stop() + awful.keygrabber.stop(self.keygrabber) + + if not is_empty_call then focus_and_raise(self.clients_list[self.index]) end +end + +-- Toggle appswitcher widget +----------------------------------------------------------------------------------------------------------------------- +function appswitcher:switch(args) + args = args or {} + + if args.index then + if self.clients_list[args.index] then self.index = args.index end + else + local reverse = args.reverse or false + local diff = reverse and -1 or 1 + self.index = iterate(self.clients_list, self.index, diff) + end + + self.titlebox:set_markup(self.title_generator(self.clients_list[self.index])) + self.widget:emit_signal("widget::redraw_needed") +end + +-- Set user hotkeys +----------------------------------------------------------------------------------------------------------------------- +function appswitcher:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then self.keys.all = awful.util.table.join(self.keys.move, self.keys.action) end + end + + self.tip = awful.util.table.join(self.keys.all, self._fake_keys) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return appswitcher diff --git a/awesome/.config/awesome/redflat/float/bartip.lua b/awesome/.config/awesome/redflat/float/bartip.lua new file mode 100644 index 0000000..6931a15 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/bartip.lua @@ -0,0 +1,221 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat titlebar helper widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Titlebar info widget +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local unpack = unpack or table.unpack + +local beautiful = require("beautiful") +local awful = require("awful") +local wibox = require("wibox") + +local redutil = require("redflat.util") +local redtitle = require("redflat.titlebar") +local redtip = require("redflat.float.hotkeys") +local svgbox = require("redflat.gauge.svgbox") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local bartip = {} + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + geometry = { width = 400, height = 60 }, + border_width = 2, + font = "Sans 14", + set_position = nil, + names = {}, + keytip = { geometry = { width = 600 } }, + shape = nil, + margin = { icon = { title = { 10, 10, 2, 2 }, state = { 10, 10, 2, 2 } } }, + icon = { + title = redutil.base.placeholder({ txt = "[]" }), + active = redutil.base.placeholder({ txt = "+" }), + absent = redutil.base.placeholder({ txt = "!" }), + disabled = redutil.base.placeholder({ txt = "X" }), + hidden = redutil.base.placeholder({ txt = "↓" }), + unknown = redutil.base.placeholder({ txt = "?" }), + }, + color = { border = "#575757", text = "#aaaaaa", main = "#b1222b", wibox = "#202020", + gray = "#575757", icon = "#a0a0a0" }, + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "float.bartip") or {}) +end + +-- key bindings +bartip.keys = {} +bartip.keys.bar = { + { + { "Mod4" }, "b", function() redtitle.toggle(client.focus); bartip:update() end, + { description = "Show/hide titlebar for focused client", group = "Titlebar control" } + }, + { + { "Mod4" }, "a", function() redtitle.toggle_all(); bartip:update() end, + { description = "Show/hide titlebar for all clients", group = "Titlebar control" } + }, + --{ + -- { "Mod4" }, "v", function() redtitle.switch(client.focus); bartip:update() end, + -- { description = "Switch titlebar view for focused client", group = "Titlebar control" } + --}, + { + { "Mod4" }, "n", function() redtitle.global_switch(); bartip:update() end, + { description = "Switch titlebar view for all clients", group = "Titlebar control" } + }, +} +bartip.keys.action = { + { + { "Mod4" }, "Super_L", function() bartip:hide() end, + { description = "Close top list widget", group = "Action" } + }, + { + { "Mod4" }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, +} + +bartip.keys.all = awful.util.table.join(bartip.keys.bar, bartip.keys.action) + + +-- Initialize widget +----------------------------------------------------------------------------------------------------------------------- +function bartip:init() + + -- Initialize vars + -------------------------------------------------------------------------------- + local style = default_style() + self.style = style + + -- Create floating wibox for top widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + self.wibox:geometry(style.geometry) + + -- Widget layout setup + -------------------------------------------------------------------------------- + self.label = wibox.widget.textbox() + self.label:set_align("center") + self.label:set_font(style.font) + + local title_icon = svgbox(self.style.icon.title) + title_icon:set_color(self.style.color.icon) + + self.state_icon = svgbox() + + --self.wibox:set_widget(self.label) + self.wibox:setup({ + wibox.container.margin(title_icon, unpack(self.style.margin.icon.title)), + self.label, + wibox.container.margin(self.state_icon, unpack(self.style.margin.icon.state)), + layout = wibox.layout.align.horizontal + }) + + -- Keygrabber + -------------------------------------------------------------------------------- + self.keygrabber = function(mod, key, event) + if event == "release" then + for _, k in ipairs(self.keys.action) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return end + end + else + for _, k in ipairs(self.keys.all) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return end + end + end + end + + -- First run actions + -------------------------------------------------------------------------------- + self:set_keys() +end + +-- Widget actions +----------------------------------------------------------------------------------------------------------------------- + +local function get_title_state(c) + if not c then return "unknown" end + + local model = redtitle.get_model(c) + local state = not model and "absent" + or model.hidden and "disabled" + or model.cutted and "hidden" + or "active" + + return state, model and model.size or nil +end + +-- Update +-------------------------------------------------------------------------------- +function bartip:update() + local name = self.style.names[redtitle._index] or "Unknown" + local state, size = get_title_state(client.focus) + local size_mark = size and string.format(" [%d]", size) or "" + + self.label:set_markup(string.format( + '%s%s', + self.style.color.text, name, self.style.color.gray, size_mark + )) + + self.state_icon:set_image(self.style.icon[state]) + self.state_icon:set_color(state == "absent" and self.style.color.main or self.style.color.icon) +end + +-- Show +-------------------------------------------------------------------------------- +function bartip:show() + if not self.wibox then self:init() end + + if not self.wibox.visible then + if self.style.set_position then + self.style.set_position(self.wibox) + else + redutil.placement.centered(self.wibox, nil, mouse.screen.workarea) + end + redutil.placement.no_offscreen(self.wibox, self.style.screen_gap, screen[mouse.screen].workarea) + + self:update() + self.wibox.visible = true + awful.keygrabber.run(self.keygrabber) + redtip:set_pack( + "Titlebar", self.tip, self.style.keytip.column, self.style.keytip.geometry, + function() self:hide() end + ) + end +end + +-- Hide +-------------------------------------------------------------------------------- +function bartip:hide() + self.wibox.visible = false + awful.keygrabber.stop(self.keygrabber) + redtip:remove_pack() +end + +-- Set user hotkeys +----------------------------------------------------------------------------------------------------------------------- +function bartip:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then self.keys.all = awful.util.table.join(self.keys.bar, self.keys.action) end + end + + self.tip = self.keys.all +end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return bartip diff --git a/awesome/.config/awesome/redflat/float/brightness.lua b/awesome/.config/awesome/redflat/float/brightness.lua new file mode 100644 index 0000000..e7e36e0 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/brightness.lua @@ -0,0 +1,62 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat brightness control widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Brightness control using xbacklight +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local string = string +local awful = require("awful") +local beautiful = require("beautiful") + +local rednotify = require("redflat.float.notify") +local redutil = require("redflat.util") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local brightness = { dbus_correction = 1 } + +local defaults = { down = false, step = 2 } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + notify = {}, + } + return redutil.table.merge(style, redutil.table.check(beautiful, "float.brightness") or {}) +end + +-- Change brightness level +----------------------------------------------------------------------------------------------------------------------- + +-- Change with xbacklight +------------------------------------------------------------ +function brightness:change_with_xbacklight(args) + args = redutil.table.merge(defaults, args or {}) + + local command = string.format("xbacklight %s %d", args.down and "-dec" or "-inc", args.step) + awful.spawn.easy_async(command, self.info_with_xbacklight) +end + +-- Update brightness level info +----------------------------------------------------------------------------------------------------------------------- + +-- Update from xbacklight +------------------------------------------------------------ +function brightness.info_with_xbacklight() + if not brightness.style then brightness.style = default_style() end + awful.spawn.easy_async( + "xbacklight -get", + function(output) + rednotify:show(redutil.table.merge( + { value = output / 100, text = string.format('%.0f', output) .. "%" }, + brightness.style.notify + )) + end + ) +end + +----------------------------------------------------------------------------------------------------------------------- +return brightness diff --git a/awesome/.config/awesome/redflat/float/clientmenu.lua b/awesome/.config/awesome/redflat/float/clientmenu.lua new file mode 100644 index 0000000..852ede2 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/clientmenu.lua @@ -0,0 +1,383 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat client menu widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom float widget that provides client actions like the tasklist's window +-- menu but may be used outside of the tasklist context on any client. Useful +-- for titlebar click action or other custom client-related keybindings for +-- faster access of client actions without traveling to the tasklist. +----------------------------------------------------------------------------------------------------------------------- +-- Authored by M4he +-- Some code was taken from +------ redflat.widget.tasklist +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local ipairs = ipairs +local table = table +local beautiful = require("beautiful") +local awful = require("awful") +local wibox = require("wibox") + +local redutil = require("redflat.util") +local separator = require("redflat.gauge.separator") +local redmenu = require("redflat.menu") +local svgbox = require("redflat.gauge.svgbox") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local clientmenu = { mt = {}, } + +local last = { + client = nil, + screen = mouse.screen, + tag_screen = mouse.screen +} + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icon = { unknown = redutil.base.placeholder(), + minimize = redutil.base.placeholder(), + close = redutil.base.placeholder() }, + micon = { blank = redutil.base.placeholder({ txt = " " }), + check = redutil.base.placeholder({ txt = "+" }) }, + layout_icon = { unknown = redutil.base.placeholder() }, + actionline = { height = 28 }, + stateline = { height = 35 }, + state_iconsize = { width = 20, height = 20 }, + action_iconsize = { width = 18, height = 18 }, + separator = { marginh = { 3, 3, 5, 5 }, marginv = { 3, 3, 3, 3 } }, + tagmenu = { icon_margin = { 2, 2, 2, 2 } }, + hide_action = { move = true, + add = false, + min = true, + floating = false, + sticky = false, + ontop = false, + below = false, + maximized = false }, + color = { main = "#b1222b", icon = "#a0a0a0", gray = "#404040", highlight = "#eeeeee" }, + } + style.menu = { + ricon_margin = { 2, 2, 2, 2 }, + hide_timeout = 1, + select_first = false, + nohide = true + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "float.clientmenu") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Function to build item list for submenu +-------------------------------------------------------------------------------- +local function tagmenu_items(action, style) + local items = {} + for _, t in ipairs(last.screen.tags) do + if not awful.tag.getproperty(t, "hide") then + table.insert( + items, + { t.name, function() action(t) end, style.micon.blank, style.micon.blank } + ) + end + end + return items +end + +-- Function to rebuild the submenu entries according to current screen's tags +-------------------------------------------------------------------------------- +local function tagmenu_rebuild(menu, submenu_index, style) + for _, index in ipairs(submenu_index) do + local new_items + if index == 1 then + new_items = tagmenu_items(clientmenu.movemenu_action, style) + else + new_items = tagmenu_items(clientmenu.addmenu_action, style) + end + menu.items[index].child:replace_items(new_items) + end +end + +-- Function to update tag submenu icons +-------------------------------------------------------------------------------- +local function tagmenu_update(c, menu, submenu_index, style) + -- if the screen has changed (and thus the tags) since the last time the + -- tagmenu was built, rebuild it first + if last.tag_screen ~= mouse.screen then + tagmenu_rebuild(menu, submenu_index, style) + last.tag_screen = mouse.screen + end + for k, t in ipairs(last.screen.tags) do + if not awful.tag.getproperty(t, "hide") then + + -- set layout icon for every tag + local l = awful.layout.getname(awful.tag.getproperty(t, "layout")) + + local check_icon = style.micon.blank + if c then + local client_tags = c:tags() + check_icon = awful.util.table.hasitem(client_tags, t) and style.micon.check or check_icon + end + + for _, index in ipairs(submenu_index) do + local submenu = menu.items[index].child + if submenu.items[k].icon then + submenu.items[k].icon:set_image(style.layout_icon[l] or style.layout_icon.unknown) + end + + -- set "checked" icon if tag active for given client + -- otherwise set empty icon + if c then + if submenu.items[k].right_icon then + submenu.items[k].right_icon:set_image(check_icon) + end + end + + -- update position of any visible submenu + if submenu.wibox.visible then submenu:show() end + end + end + end +end + +-- Function to construct menu line with state icons +-------------------------------------------------------------------------------- +local function state_line_construct(state_icons, setup_layout, style) + local stateboxes = {} + + for i, v in ipairs(state_icons) do + -- create widget + stateboxes[i] = svgbox(v.icon) + stateboxes[i]:set_forced_width(style.state_iconsize.width) + stateboxes[i]:set_forced_height(style.state_iconsize.height) + + -- set widget in line + local l = wibox.layout.align.horizontal() + l:set_expand("outside") + l:set_second(stateboxes[i]) + setup_layout:add(l) + + -- set mouse action + stateboxes[i]:buttons(awful.util.table.join(awful.button({}, 1, + function() + v.action() + stateboxes[i]:set_color(v.indicator(last.client) and style.color.main or style.color.gray) + end + ))) + end + + return stateboxes +end + +-- Function to construct menu line with action icons (minimize, close) +-------------------------------------------------------------------------------- +local function action_line_construct(setup_layout, style) + local sep = separator.vertical(style.separator) + + local function actionbox_construct(icon, action) + local iconbox = svgbox(icon, nil, style.color.icon) + iconbox:set_forced_width(style.action_iconsize.width) + iconbox:set_forced_height(style.action_iconsize.height) + + -- center iconbox both vertically and horizontally + local vert_wrapper = wibox.layout.align.vertical() + vert_wrapper:set_second(iconbox) + vert_wrapper:set_expand("outside") + local horiz_wrapper = wibox.layout.align.horizontal() + horiz_wrapper:set_second(vert_wrapper) + horiz_wrapper:set_expand("outside") + + -- wrap into a background container to allow bg color change of area + local actionbox = wibox.container.background(horiz_wrapper) + + -- set mouse action + actionbox:buttons(awful.util.table.join(awful.button({}, 1, + function() + action() + end + ))) + actionbox:connect_signal("mouse::enter", + function() + iconbox:set_color(style.color.highlight) + actionbox.bg = style.color.main + end + ) + actionbox:connect_signal("mouse::leave", + function() + iconbox:set_color(style.color.icon) + actionbox.bg = nil + end + ) + return actionbox + end + + -- minimize button + local minimize_box = actionbox_construct( + style.icon.minimize, + function() + last.client.minimized = not last.client.minimized + if style.hide_action["min"] then clientmenu.menu:hide() end + end + ) + setup_layout:set_first(minimize_box) + + -- separator + setup_layout:set_second(sep) + + -- close button + local close_box = actionbox_construct( + style.icon.close, + function() + last.client:kill() + clientmenu.menu:hide() + end + ) + setup_layout:set_third(close_box) +end + +-- Calculate menu position +-------------------------------------------------------------------------------- +local function coords_calc(menu) + local coords = mouse.coords() + coords.x = coords.x - menu.wibox.width / 2 - menu.wibox.border_width + + return coords +end + +-- Initialize window menu widget +----------------------------------------------------------------------------------------------------------------------- +function clientmenu:init(style) + style = redutil.table.merge(default_style(), style or {}) + + self.hide_check = function(action) + if style.hide_action[action] then self.menu:hide() end + end + + -- Create array of state icons + -- associate every icon with action and state indicator + -------------------------------------------------------------------------------- + local function icon_table_generator_prop(property) + return { + icon = style.icon[property] or style.icon.unknown, + action = function() last.client[property] = not last.client[property]; self.hide_check(property) end, + indicator = function(c) return c[property] end + } + end + + local state_icons = { + icon_table_generator_prop("floating"), + icon_table_generator_prop("sticky"), + icon_table_generator_prop("ontop"), + icon_table_generator_prop("below"), + icon_table_generator_prop("maximized"), + } + + -- Construct menu + -------------------------------------------------------------------------------- + + -- Window action line construction + ------------------------------------------------------------ + + local actionline_horizontal = wibox.layout.align.horizontal() + actionline_horizontal:set_expand("outside") + local actionline = wibox.container.constraint(actionline_horizontal, "exact", nil, style.actionline.height) + action_line_construct(actionline_horizontal, style) + + -- Window state line construction + ------------------------------------------------------------ + + -- layouts + local stateline_horizontal = wibox.layout.flex.horizontal() + local stateline_vertical = wibox.layout.align.vertical() + stateline_vertical:set_second(stateline_horizontal) + stateline_vertical:set_expand("outside") + local stateline = wibox.container.constraint(stateline_vertical, "exact", nil, style.stateline.height) + + -- set all state icons in line + local stateboxes = state_line_construct(state_icons, stateline_horizontal, style) + + -- update function for state icons + local function stateboxes_update(c, icons, boxes) + for i, v in ipairs(icons) do + boxes[i]:set_color(v.indicator(c) and style.color.main or style.color.gray) + end + end + + -- Separators config + ------------------------------------------------------------ + local menusep = { widget = separator.horizontal(style.separator) } + + -- menu item actions + self.movemenu_action = function(t) + last.client:move_to_tag(t); awful.layout.arrange(t.screen); self.hide_check("move") + end + + self.addmenu_action = function(t) + last.client:toggle_tag(t); awful.layout.arrange(t.screen); self.hide_check("add") + end + + -- Construct tag submenus ("move" and "add") + ------------------------------------------------------------ + local movemenu_items = tagmenu_items(self.movemenu_action, style) + local addmenu_items = tagmenu_items(self.addmenu_action, style) + + -- Create menu + ------------------------------------------------------------ + self.menu = redmenu({ + theme = style.menu, + items = { + { widget = actionline, focus = true }, + menusep, + { "Move to tag", { items = movemenu_items, theme = style.tagmenu } }, + { "Add to tag", { items = addmenu_items, theme = style.tagmenu } }, + menusep, + { widget = stateline, focus = true } + } + }) + + -- Widget update functions + -------------------------------------------------------------------------------- + function self:update(c) + if self.menu.wibox.visible then + stateboxes_update(c, state_icons, stateboxes) + tagmenu_update(c, self.menu, { 1, 2 }, style) + end + end + + -- Signals setup + -------------------------------------------------------------------------------- + local client_signals = { + "property::ontop", "property::floating", "property::below", "property::maximized", + "tagged", "untagged" -- refresh tagmenu when client's tags change + } + for _, sg in ipairs(client_signals) do + client.connect_signal(sg, function() self:update(last.client) end) + end +end + +-- Show window menu widget +----------------------------------------------------------------------------------------------------------------------- +function clientmenu:show(c) + + -- init menu if needed + if not self.menu then self:init() end + + -- toggle menu + if self.menu.wibox.visible and c == last.client and mouse.screen == last.screen then + self.menu:hide() + else + last.client = c + last.screen = mouse.screen + self.menu:show({ coords = coords_calc(self.menu) }) + + if self.menu.hidetimer.started then self.menu.hidetimer:stop() end + self:update(c) + end +end + +return setmetatable(clientmenu, clientmenu.mt) diff --git a/awesome/.config/awesome/redflat/float/control.lua b/awesome/.config/awesome/redflat/float/control.lua new file mode 100644 index 0000000..b8e75a5 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/control.lua @@ -0,0 +1,358 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat floating window manager -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget to control single flating window size and posioning +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local unpack = unpack or table.unpack + +local beautiful = require("beautiful") +local awful = require("awful") +local wibox = require("wibox") + +local rednotify = require("redflat.float.notify") +local redutil = require("redflat.util") +local redtip = require("redflat.float.hotkeys") +local svgbox = require("redflat.gauge.svgbox") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local control = {} + +-- Resize mode alias +local RESIZE_MODE = { FULL = 1, HORIZONTAL = 2, VERTICAL = 3 } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + geometry = { width = 400, height = 60 }, + border_width = 2, + font = "Sans 14", + set_position = nil, + notify = {}, + keytip = { geometry = { width = 600 } }, + shape = nil, + steps = { 1, 10, 20, 50 }, + default_step = 2, + onscreen = true, + margin = { icon = { onscreen = { 10, 10, 2, 2 }, mode = { 10, 10, 2, 2 } } }, + icon = { + resize = {}, + onscreen = redutil.base.placeholder({ txt = "X" }), + }, + color = { border = "#575757", text = "#aaaaaa", main = "#b1222b", wibox = "#202020", + gray = "#575757", icon = "#a0a0a0" }, + } + + style.icon.resize[RESIZE_MODE.FULL] = redutil.base.placeholder({ txt = "F" }) + style.icon.resize[RESIZE_MODE.HORIZONTAL] = redutil.base.placeholder({ txt = "H" }) + style.icon.resize[RESIZE_MODE.VERTICAL] = redutil.base.placeholder({ txt = "V" }) + + return redutil.table.merge(style, redutil.table.check(beautiful, "float.control") or {}) +end + +-- key bindings +control.keys = {} +control.keys.control = { + { + { "Mod4" }, "c", function() control:center() end, + { description = "Put window at the center", group = "Window control" } + }, + { + { "Mod4" }, "q", function() control:resize() end, + { description = "Increase window size", group = "Window control" } + }, + { + { "Mod4" }, "a", function() control:resize(true) end, + { description = "Decrease window size", group = "Window control" } + }, + { + { "Mod4" }, "l", function() control:move("right") end, + { description = "Move window to right", group = "Window control" } + }, + { + { "Mod4" }, "j", function() control:move("left") end, + { description = "Move window to left", group = "Window control" } + }, + { + { "Mod4" }, "k", function() control:move("bottom") end, + { description = "Move window to bottom", group = "Window control" } + }, + { + { "Mod4" }, "i", function() control:move("top") end, + { description = "Move window to top", group = "Window control" } + }, + { + { "Mod4" }, "n", function() control:switch_resize_mode() end, + { description = "Switch moving/resizing mode", group = "Mode" } + }, + { + { "Mod4" }, "s", function() control:switch_onscreen() end, + { description = "Switch off screen check", group = "Mode" } + }, +} +control.keys.action = { + { + { "Mod4" }, "Super_L", function() control:hide() end, + { description = "Close top list widget", group = "Action" } + }, + { + { "Mod4" }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, +} + +control.keys.all = awful.util.table.join(control.keys.control, control.keys.action) + +control._fake_keys = { + { + {}, "N", nil, + { description = "Select move/resize step", group = "Mode", + keyset = { "1", "2", "3", "4", "5", "6", "7", "8", "9" } } + }, +} + + +-- Support function +----------------------------------------------------------------------------------------------------------------------- +local function control_off_screen(window) + local wa = screen[mouse.screen].workarea + local newg = window:geometry() + + if newg.width > wa.width then window:geometry({ width = wa.width, x = wa.x }) end + if newg.height > wa.height then window:geometry({ height = wa.height, y = wa.y }) end + + redutil.placement.no_offscreen(window, nil, wa) +end + +-- Initialize widget +----------------------------------------------------------------------------------------------------------------------- +function control:init() + + -- Initialize vars + -------------------------------------------------------------------------------- + local style = default_style() + self.style = style + self.client = nil + self.step = style.steps[style.default_step] + + self.resize_mode = RESIZE_MODE.FULL + self.onscreen = style.onscreen + + -- Create floating wibox for top widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + self.wibox:geometry(style.geometry) + + -- Widget layout setup + -------------------------------------------------------------------------------- + self.label = wibox.widget.textbox() + self.label:set_align("center") + self.label:set_font(style.font) + + self.onscreen_icon = svgbox(self.style.icon.onscreen) + self.onscreen_icon:set_color(self.onscreen and self.style.color.main or self.style.color.icon) + + self.mode_icon = svgbox(self.style.icon.resize[self.resize_mode]) + self.mode_icon:set_color(self.style.color.icon) + + self.wibox:setup({ + wibox.container.margin(self.onscreen_icon, unpack(self.style.margin.icon.onscreen)), + self.label, + wibox.container.margin(self.mode_icon, unpack(self.style.margin.icon.mode)), + layout = wibox.layout.align.horizontal + }) + + -- Keygrabber + -------------------------------------------------------------------------------- + self.keygrabber = function(mod, key, event) + if event == "release" then + for _, k in ipairs(self.keys.action) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return end + end + else + for _, k in ipairs(self.keys.all) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return end + end + if string.match("123456789", key) then self:choose_step(tonumber(key)) end + end + end + + -- First run actions + -------------------------------------------------------------------------------- + self:set_keys() +end + +-- Window control +----------------------------------------------------------------------------------------------------------------------- + +-- Put window at center of screen +-------------------------------------------------------------------------------- +function control:center() + if not self.client then return end + redutil.placement.centered(self.client, nil, mouse.screen.workarea) + + if self.onscreen then control_off_screen(self.client) end + self:update() +end + +-- Change window size +-------------------------------------------------------------------------------- +function control:resize(is_shrinking) + if not self.client then return end + + -- calculate new size + local g = self.client:geometry() + local d = self.step * (is_shrinking and -1 or 1) + local newg + + if self.resize_mode == RESIZE_MODE.FULL then + newg = { x = g.x - d, y = g.y - d, width = g.width + 2 * d, height = g.height + 2 * d } + elseif self.resize_mode == RESIZE_MODE.HORIZONTAL then + newg = { x = g.x - d, width = g.width + 2 * d } + elseif self.resize_mode == RESIZE_MODE.VERTICAL then + newg = { y = g.y - d, height = g.height + 2 * d } + end + + -- validate new size + if newg.height and newg.height <= 0 or newg.width and newg.width < 0 then return end + + -- apply new size + self.client:geometry(newg) + if self.onscreen then control_off_screen(self.client) end + self:update() +end + +-- Move by direction +-------------------------------------------------------------------------------- +function control:move(direction) + if not self.client then return end + + local g = self.client:geometry() + local d = self.step * ((direction == "left" or direction == "top") and -1 or 1) + + if direction == "left" or direction == "right" then + self.client:geometry({ x = g.x + d }) + else + self.client:geometry({ y = g.y + d }) + end + + if self.onscreen then control_off_screen(self.client) end +end + + +-- Widget actions +----------------------------------------------------------------------------------------------------------------------- + +-- Update +-------------------------------------------------------------------------------- +function control:update() + if not self.client then return end + + local g = self.client:geometry() + local size_label = string.format("%sx%s", g.width, g.height) + + self.label:set_markup(string.format( + '%s [%d]', + self.style.color.text, size_label, self.style.color.gray, self.step + )) +end + +-- Select move/resize step by index +-------------------------------------------------------------------------------- +function control:choose_step(index) + if self.style.steps[index] then self.step = self.style.steps[index] end + self:update() +end + +-- Switch resize mode +-------------------------------------------------------------------------------- +function control:switch_resize_mode() + self.resize_mode = self.resize_mode + 1 + if not awful.util.table.hasitem(RESIZE_MODE, self.resize_mode) then self.resize_mode = RESIZE_MODE.FULL end + + self.mode_icon:set_image(self.style.icon.resize[self.resize_mode]) +end + +-- Switch onscreen mode +-------------------------------------------------------------------------------- +function control:switch_onscreen() + self.onscreen = not self.onscreen + self.onscreen_icon:set_color(self.onscreen and self.style.color.main or self.style.color.icon) + + if self.onscreen then + control_off_screen(self.client) + self:update() + end +end + +-- Show +-------------------------------------------------------------------------------- +function control:show() + if not self.wibox then self:init() end + + if not self.wibox.visible then + -- check if focused client floating + local layout = awful.layout.get(mouse.screen) + local is_floating = client.focus and (client.focus.floating or layout.name == "floating") + and not client.focus.maximized + + if not is_floating then + rednotify:show(redutil.table.merge({ text = "No floating window focused" }, self.style.notify)) + return + end + self.client = client.focus + + -- show widget + if self.style.set_position then + self.style.set_position(self.wibox) + else + redutil.placement.centered(self.wibox, nil, mouse.screen.workarea) + end + redutil.placement.no_offscreen(self.wibox, self.style.screen_gap, screen[mouse.screen].workarea) + + self:update() + self.wibox.visible = true + awful.keygrabber.run(self.keygrabber) + redtip:set_pack( + "Floating window", self.tip, self.style.keytip.column, self.style.keytip.geometry, + function() self:hide() end + ) + end +end + +-- Hide +-------------------------------------------------------------------------------- +function control:hide() + self.wibox.visible = false + awful.keygrabber.stop(self.keygrabber) + redtip:remove_pack() + self.client = nil +end + +-- Set user hotkeys +----------------------------------------------------------------------------------------------------------------------- +function control:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then self.keys.all = awful.util.table.join(self.keys.control, self.keys.action) end + end + + self.tip = awful.util.table.join(self.keys.all, self._fake_keys) +end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return control diff --git a/awesome/.config/awesome/redflat/float/decoration.lua b/awesome/.config/awesome/redflat/float/decoration.lua new file mode 100644 index 0000000..1b32068 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/decoration.lua @@ -0,0 +1,88 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat decorations -- +----------------------------------------------------------------------------------------------------------------------- +-- +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local awful = require("awful") +local wibox = require("wibox") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local decor = {} + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function button_style() + local style = { + color = { shadow3 = "#1c1c1c", button = "#575757", + shadow4 = "#767676", text = "#cccccc", pressed = "404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "float.decoration.button") or {}) +end + +local function field_style() + local style = { + color = { bg = "#161616", shadow1 = "#141414", shadow2 = "#313131" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "float.decoration.field") or {}) +end + +-- Button element +----------------------------------------------------------------------------------------------------------------------- +function decor.button(textbox, action, style) + + style = redutil.table.merge(button_style(), style or {}) + + -- Widget and layouts + -------------------------------------------------------------------------------- + textbox:set_align("center") + local button_widget = wibox.container.background(textbox, style.color.button) + button_widget:set_fg(style.color.text) + + local bord1 = wibox.container.background(wibox.container.margin(button_widget, 1, 1, 1, 1), style.color.shadow4) + local bord2 = wibox.container.background(wibox.container.margin(bord1, 1, 1, 1, 1), style.color.shadow3) + + -- Button + -------------------------------------------------------------------------------- + local press_func = function() + button_widget:set_bg(style.color.pressed) + end + local release_func = function() + button_widget:set_bg(style.color.button) + action() + end + + button_widget:buttons(awful.button({}, 1, press_func, release_func)) + + -- Signals + -------------------------------------------------------------------------------- + button_widget:connect_signal( + "mouse::leave", + function() + button_widget:set_bg(style.color.button) + end + ) + + -------------------------------------------------------------------------------- + return bord2 +end + +-- Input text field +----------------------------------------------------------------------------------------------------------------------- +function decor.textfield(textbox, style) + style = redutil.table.merge(field_style(), style or {}) + local field = wibox.container.background(textbox, style.color.bg) + local bord1 = wibox.container.background(wibox.container.margin(field, 1, 1, 1, 1), style.color.shadow1) + local bord2 = wibox.container.background(wibox.container.margin(bord1, 1, 1, 1, 1), style.color.shadow2) + return bord2 +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return decor diff --git a/awesome/.config/awesome/redflat/float/hotkeys.lua b/awesome/.config/awesome/redflat/float/hotkeys.lua new file mode 100644 index 0000000..a3bb7d1 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/hotkeys.lua @@ -0,0 +1,361 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat hotkeys helper widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget with list of hotkeys +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local math = math +local unpack = unpack or table.unpack + +local awful = require("awful") +local beautiful = require("beautiful") +local wibox = require("wibox") +local timer = require("gears.timer") + +local redflat = require("redflat") +local redutil = require("redflat.util") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local hotkeys = { keypack = {}, lastkey = nil, cache = {}, boxes = {} } +local hasitem = awful.util.table.hasitem + +-- key bindings +hotkeys.keys = { close = { "Escape" }, close_all = { "Super_L" } } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + geometry = { width = 800 }, + border_margin = { 10, 10, 10, 10 }, + tspace = 5, + delim = " ", + border_width = 2, + ltimeout = 0.05, + font = "Sans 12", + keyfont = "Sans bold 12", + titlefont = "Sans bold 14", + is_align = false, + separator = {}, + heights = { key = 20, title = 24 }, + color = { border = "#575757", text = "#aaaaaa", main = "#b1222b", wibox = "#202020", + gray = "#575757" }, + shape = nil + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "float.hotkeys") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Calculate keytip length +-------------------------------------------------------------------------------- +local function check_key_len(k) + local res = k.key:len() + for _, v in pairs(k.mod) do res = res + v:len() + 1 end + return res +end + +-- Parse raw key table +-------------------------------------------------------------------------------- +local keysort = function(a, b) + if a.length ~= b.length then + return a.length < b.length + else + return a.key < b.key + end +end + +local function parse(rawkeys, columns) + local keys = {} + columns = columns or 1 + + local rk = {} + for _, k in ipairs(rawkeys) do if k[#k].description then table.insert(rk, k) end end + local p = math.ceil(#rk / columns) + + -- dirty trick for raw sorting + local sp = {} + for _, v in ipairs(rk) do + if not hasitem(sp, v[#v].group) then table.insert(sp, v[#v].group) end + end + table.sort(rk, function(a, b) + local ai, bi = hasitem(sp, a[#a].group), hasitem(sp, b[#b].group) + if ai ~= bi then + return ai < bi + else + return a[2] < b[2] + end + end) + + -- split keys to columns + for i = 1, columns do + keys[i] = { groups = {}, length = nil, names = {} } + local chunk = { unpack(rk, 1, p) } + rk = { unpack(rk, p + 1) } + + -- build key column + for _, v in ipairs(chunk) do + local data = v[#v] + local k = { + mod = v[1], key = v[2], + description = data.description, + group = data.group, + keyset = data.keyset or { v[2] }, + length = check_key_len({ mod = v[1], key = v[2] }) + } + + if not keys[i].groups[k.group] then + keys[i].groups[k.group] = {} + table.insert(keys[i].names, k.group) -- sorted names list to save group order + end + table.insert(keys[i].groups[k.group], k) + + -- calculate max tip lenght + if not keys[i].length or keys[i].length < k.length then keys[i].length = k.length end + end + + -- sort key by lenght inside group + for _, group in pairs(keys[i].groups) do table.sort(group, keysort) end + end + + return keys +end + +-- Form hotkeys helper text +-------------------------------------------------------------------------------- +local function build_tip(pack, style, keypressed) + local text = {} + + for i, column in ipairs(pack) do + local coltxt = {} + local height = 0 + + for _, name in pairs(column.names) do + local group = column.groups[name] + + -- set group title + coltxt[#coltxt + 1] = string.format( + '%s', + style.titlefont, style.color.gray, name + ) + height = height + style.heights.title + + -- build key tip line + for _, key in ipairs(group) do + + -- key with align + local line = string.format('%s', key.key) + if style.is_align then + --noinspection StringConcatenationInLoops + line = line .. string.rep(" ", column.length - key.length) + end + + -- key with mods + if #key.mod > 0 then + local fm = {} + for ki, v in ipairs(key.mod) do fm[ki] = string.format('%s', v) end + table.insert(fm, line) + line = table.concat(fm, string.format('+', style.color.gray)) + end + + -- key with description + local clr = keypressed and hasitem(key.keyset, keypressed) and style.color.main or style.color.text + line = string.format( + '%s%s%s', + clr, style.keyfont, line, style.delim, key.description + ) + coltxt[#coltxt + 1] = line + height = height + style.heights.key + end + end + + text[i] = { text = table.concat(coltxt, '\n'), height = height } + end + + return text +end + +-- Initialize widget +----------------------------------------------------------------------------------------------------------------------- +function hotkeys:init() + + -- Initialize vars + -------------------------------------------------------------------------------- + local style = default_style() + self.style = style + self.tip = {} + + -- summary vertical size for all elements except tip textboxes + -- used to auto adjust widget height + self.vertical_pag = style.border_margin[3] + style.border_margin[4] + style.tspace + 2 + if style.separator.marginh then + self.vertical_pag = self.vertical_pag + style.separator.marginh[3] + style.separator.marginh[4] + end + + -- alias + local bm = style.border_margin + + -- Create floating wibox for top widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + self.wibox:geometry(style.geometry) + + -- Widget layout setup + -------------------------------------------------------------------------------- + self.layout = wibox.layout.flex.horizontal() + + self.title = wibox.widget.textbox("Title") + self.title:set_align("center") + self.title:set_font(style.titlefont) + + local _, th = self.title:get_preferred_size() + self.vertical_pag = self.vertical_pag + th + + local subtitle = wibox.widget.textbox("Press any key to highlight tip, Escape for exit") + subtitle:set_align("center") + + local _, sh = subtitle:get_preferred_size() + self.vertical_pag = self.vertical_pag + sh + + self.wibox:setup({ + { + { + self.title, + subtitle, + redflat.gauge.separator.horizontal(style.separator), + spacing = style.tspace, + layout = wibox.layout.fixed.vertical, + }, + self.layout, + layout = wibox.layout.align.vertical, + }, + left = bm[1], right = bm[2], top = bm[3], bottom = bm[4], + layout = wibox.container.margin, + }) + + -- Highlight timer + -------------------------------------------------------------------------------- + local ltimer = timer({ timeout = style.ltimeout }) + ltimer:connect_signal("timeout", + function() + ltimer:stop() + self:highlight() + end + ) + + -- Keygrabber + -------------------------------------------------------------------------------- + self.keygrabber = function(_, key, event) + if event == "release" then + if hasitem(self.keys.close, key) then + self:hide(); return + end + + if hasitem(self.keys.close_all, key) then + self:hide() + if self.keypack[#self.keypack].on_close then self.keypack[#self.keypack].on_close() end + return + end + end + + self.lastkey = event == "press" and key or nil + ltimer:again() + end +end + + +-- Keypack managment +----------------------------------------------------------------------------------------------------------------------- + +-- Set new keypack +-------------------------------------------------------------------------------- +function hotkeys:set_pack(name, pack, columns, geometry, on_close) + if not self.wibox then self:init() end + + if not self.cache[name] then self.cache[name] = parse(pack, columns) end + table.insert( + self.keypack, + { name = name, pack = self.cache[name], geometry = geometry or self.style.geometry, on_close = on_close } + ) + self.title:set_text(name .. " hotkeys") + self:highlight() + self:update_geometry(self.keypack[#self.keypack].geometry) +end + +-- Remove current keypack +-------------------------------------------------------------------------------- +function hotkeys:remove_pack() + table.remove(self.keypack) + self.title:set_text(self.keypack[#self.keypack].name .. " hotkeys") + self:highlight() + self:update_geometry(self.keypack[#self.keypack].geometry) +end + +-- Calculate and set widget height +-------------------------------------------------------------------------------- +function hotkeys:update_geometry(predefined) + local height = 0 + for _, column in ipairs(self.tip) do height = math.max(height, column.height) end + + self.wibox:geometry({ width = predefined.width, height = predefined.height or height + self.vertical_pag }) +end + +-- Highlight key tip +-------------------------------------------------------------------------------- +function hotkeys:highlight() + self.tip = build_tip(self.keypack[#self.keypack].pack, self.style, self.lastkey) + + self.layout:reset() + for i, column in ipairs(self.tip) do + if not self.boxes[i] then + self.boxes[i] = wibox.widget.textbox() + self.boxes[i]:set_valign("top") + self.boxes[i]:set_font(self.style.font) + end + + self.boxes[i]:set_markup(column.text) + self.layout:add(self.boxes[i]) + end +end + + +-- Show/hide widget +----------------------------------------------------------------------------------------------------------------------- + +-- show +function hotkeys:show() + if not self.wibox then self:init() end + + if not self.wibox.visible then + redutil.placement.centered(self.wibox, nil, mouse.screen.workarea) + self.wibox.visible = true + awful.keygrabber.run(self.keygrabber) + -- else + -- self:hide() + end +end + +-- hide +function hotkeys:hide() + self.wibox.visible = false + self.lastkey = nil + self:highlight() + awful.keygrabber.stop(self.keygrabber) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return hotkeys diff --git a/awesome/.config/awesome/redflat/float/init.lua b/awesome/.config/awesome/redflat/float/init.lua new file mode 100644 index 0000000..08da504 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.float" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/float/keychain.lua b/awesome/.config/awesome/redflat/float/keychain.lua new file mode 100644 index 0000000..d98d24f --- /dev/null +++ b/awesome/.config/awesome/redflat/float/keychain.lua @@ -0,0 +1,202 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat prefix hotkey manager -- +----------------------------------------------------------------------------------------------------------------------- +-- Emacs like key key sequences +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local string = string +local table = table + +local wibox = require("wibox") +local awful = require("awful") +local beautiful = require("beautiful") + +local redflat = require("redflat") +local redutil = require("redflat.util") +local redtip = require("redflat.float.hotkeys") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local keychain = {} +local tip_cache = {} + +local label_pattern = { Mod1 = "A", Mod4 = "M", Control = "C", Shift = "S" } + +-- key bindings +keychain.service = { close = { "Escape" }, help = { "F1" }, stepback = { "BackSpace" } } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + geometry = { width = 220, height = 60 }, + font = "Sans 14 bold", + border_width = 2, + keytip = { geometry = { width = 500 }, exit = false }, + color = { border = "#575757", wibox = "#202020" }, + shape = nil + } + + return redflat.util.table.merge(style, redflat.util.table.check(beautiful, "float.keychain") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function build_label(item) + if #item[1] == 0 then return item[2] end + + local mods = {} + for _, m in ipairs(item[1]) do mods[#mods + 1] = label_pattern[m] end + return string.format("%s-%s", table.concat(mods, '-'), item[2]) +end + +local function build_tip(store, item, prefix) + prefix = prefix or build_label(item) + for _, k in ipairs(item[3]) do + local p = prefix .. " " .. build_label(k) + if type(k[3]) == "table" then + build_tip(store, k, p) + else + table.insert(store, { {}, p, nil, k[#k] }) + end + end + + return store +end + +local function build_fake_keys(keys) + local res = {} + for _, keygroup in ipairs({ + { description = "Undo last key", group = "Action", keyname = "stepback" }, + { description = "Undo sequence", group = "Action", keyname = "close" }, + { description = "Show hotkeys helper", group = "Action", keyname = "help" }, + }) + do + for _, k in ipairs(keys[keygroup.keyname]) do + table.insert(res, { + {}, k, nil, + { description = keygroup.description, group = keygroup.group } + }) + end + end + return res +end + +-- Main widget +----------------------------------------------------------------------------------------------------------------------- + +-- Initialize keychain widget +-------------------------------------------------------------------------------- +function keychain:init(style) + + -- Init vars + ------------------------------------------------------------ + self.active = nil + self.parents = {} + self.sequence = "" + + style = redflat.util.table.merge(default_style(), style or {}) + self.style = style + + -- Wibox + ------------------------------------------------------------ + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + self.wibox:geometry(style.geometry) + + self.label = wibox.widget.textbox() + self.label:set_align("center") + self.wibox:set_widget(self.label) + + self.label:set_font(style.font) + + -- Keygrabber + ------------------------------------------------------------ + self.keygrabber = function(mod, key, event) + if event == "press" then return false end + + -- dirty fix for first key release + if self.actkey == key and #mod == 0 then self.actkey = nil; return end + + if awful.util.table.hasitem(self.service.close, key) then self:hide() + elseif awful.util.table.hasitem(self.service.stepback, key) then self:undo() + elseif awful.util.table.hasitem(self.service.help, key) then redtip:show() + else + for _, item in ipairs(self.active[3]) do + if redutil.key.match_grabber(item, mod, key) then self:activate(item); return end + end + end + end +end + +-- Set current key item +-------------------------------------------------------------------------------- +function keychain:activate(item, keytip) + if not self.wibox then self:init() end + self.actkey = keytip and item[2] + + if type(item[3]) == "function" then + item[3]() + self:hide() + else + if not self.active then + redutil.placement.centered(self.wibox, nil, mouse.screen.workarea) + self.wibox.visible = true + awful.keygrabber.run(self.keygrabber) + else + self.parents[#self.parents + 1] = self.active + end + + self.active = item + local label = build_label(self.active) + self.sequence = self.sequence == "" and label or self.sequence .. " " .. label + self.label:set_text(self.sequence) + end + + -- build keys helper tip + if keytip then + if tip_cache[keytip] then + self.tip = tip_cache[keytip] + else + self.tip = awful.util.table.join(build_tip({}, item), build_fake_keys(self.service)) + tip_cache[keytip] = self.tip + end + redtip:set_pack(keytip .. " keychain", self.tip, self.style.keytip.column, self.style.keytip.geometry) + end +end + +-- Deactivate last key item +-------------------------------------------------------------------------------- +function keychain:undo() + if #self.parents > 0 then + self.sequence = self.sequence:sub(1, - (#build_label(self.active) + 2)) + self.label:set_text(self.sequence) + + self.active = self.parents[#self.parents] + self.parents[#self.parents] = nil + else + self:hide() + end +end + +-- Hide widget +-------------------------------------------------------------------------------- +function keychain:hide() + self.wibox.visible = false + awful.keygrabber.stop(self.keygrabber) + self.active = nil + self.parents = {} + self.sequence = "" + redtip:remove_pack() +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return keychain diff --git a/awesome/.config/awesome/redflat/float/notify.lua b/awesome/.config/awesome/redflat/float/notify.lua new file mode 100644 index 0000000..db62a4f --- /dev/null +++ b/awesome/.config/awesome/redflat/float/notify.lua @@ -0,0 +1,140 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat notify widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Floating widget with icon, text, and progress bar +-- special for volume and brightness indication +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local unpack = unpack or table.unpack +local beautiful = require("beautiful") +local wibox = require("wibox") +local timer = require("gears.timer") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") +local progressbar = require("redflat.gauge.graph.bar") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local notify = { last = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + geometry = { width = 480, height = 100 }, + screen_gap = 0, + set_position = nil, + border_margin = { 20, 20, 20, 20 }, + elements_margin = { 20, 0, 10, 10 }, + bar_width = 8, + font = "Sans 14", + border_width = 2, + timeout = 5, + icon = nil, + progressbar = {}, + color = { border = "#575757", icon = "#aaaaaa", wibox = "#202020" }, + shape = nil + } + return redutil.table.merge(style, redutil.table.check(beautiful, "float.notify") or {}) +end + +-- Initialize notify widget +----------------------------------------------------------------------------------------------------------------------- +function notify:init() + + local style = default_style() + -- local icon = style.icon + + self.style = style + + -- Construct layouts + -------------------------------------------------------------------------------- + local area = wibox.layout.align.horizontal() + + local bar = progressbar(style.progressbar) + local image = svgbox() + local text = wibox.widget.textbox("100%") + text:set_align("center") + -- text:set_font(style.font) + + local align_vertical = wibox.layout.align.vertical() + bar:set_forced_height(style.bar_width) + + area:set_left(image) + area:set_middle(wibox.container.margin(align_vertical, unpack(style.elements_margin))) + + -- Create floating wibox for notify widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + self.wibox:set_widget(wibox.container.margin(area, unpack(style.border_margin))) + self.wibox:geometry(style.geometry) + + -- Set info function + -------------------------------------------------------------------------------- + function self:set(args) + args = args or {} + align_vertical:reset() + + if args.value then + bar:set_value(args.value) + align_vertical:set_top(text) + align_vertical:set_bottom(bar) + else + align_vertical:set_middle(text) + end + + if args.text then + text:set_text(args.text) + text:set_font(args.font ~= nil and args.font or style.font) + end + + image:set_image(args.icon ~= nil and args.icon or style.icon) + image:set_color(args.color or style.color.icon) + end + + -- Set autohide timer + -------------------------------------------------------------------------------- + self.hidetimer = timer({ timeout = style.timeout }) + self.hidetimer:connect_signal("timeout", function() self:hide() end) + + -- Signals setup + -------------------------------------------------------------------------------- + self.wibox:connect_signal("mouse::enter", function() self:hide() end) +end + +-- Hide notify widget +----------------------------------------------------------------------------------------------------------------------- +function notify:hide() + self.wibox.visible = false + self.hidetimer:stop() +end + +-- Show notify widget +----------------------------------------------------------------------------------------------------------------------- +function notify:show(args) + if not self.wibox then self:init() end + self:set(args) + + if not self.wibox.visible or mouse.screen.index ~= self.last.screen then + if self.style.set_position then self.style.set_position(self.wibox) end + redutil.placement.no_offscreen(self.wibox, self.style.screen_gap, mouse.screen.workarea) + self.wibox.visible = true + end + + self.last.screen = mouse.screen.index + self.hidetimer:again() +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return notify diff --git a/awesome/.config/awesome/redflat/float/player.lua b/awesome/.config/awesome/redflat/float/player.lua new file mode 100644 index 0000000..33d04d5 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/player.lua @@ -0,0 +1,506 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat audio player widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Music player widget +-- Display audio track information with mpris2 +-- Using dbus-send to control +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local unpack = unpack or table.unpack +local math = math + +local awful = require("awful") +local beautiful = require("beautiful") +local wibox = require("wibox") +local timer = require("gears.timer") + +local redutil = require("redflat.util") +local progressbar = require("redflat.gauge.graph.bar") +local dashcontrol = require("redflat.gauge.graph.dash") +local svgbox = require("redflat.gauge.svgbox") + +-- Initialize and vars for module +----------------------------------------------------------------------------------------------------------------------- +local player = { box = {}, listening = false } + +local dbus_mpris = "dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.%s " + .. "/org/mpris/MediaPlayer2 " + +local dbus_get = dbus_mpris + .. "org.freedesktop.DBus.Properties.Get " + .. "string:'org.mpris.MediaPlayer2.Player' %s" + +local dbus_getall = dbus_mpris + .. "org.freedesktop.DBus.Properties.GetAll " + .. "string:'org.mpris.MediaPlayer2.Player'" + +local dbus_set = dbus_mpris + .. "org.freedesktop.DBus.Properties.Set " + .. "string:'org.mpris.MediaPlayer2.Player' %s" + +local dbus_action = dbus_mpris + .. "org.mpris.MediaPlayer2.Player." + +-- Helper function to decode URI string format +----------------------------------------------------------------------------------------------------------------------- +local function decodeURI(s) + return string.gsub(s, '%%(%x%x)', function(hex) return string.char(tonumber(hex, 16)) end) +end + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + geometry = { width = 520, height = 150 }, + screen_gap = 0, + set_position = nil, + dashcontrol = {}, + progressbar = {}, + border_margin = { 20, 20, 20, 20 }, + elements_margin = { 20, 0, 0, 0 }, + volume_margin = { 0, 0, 0, 3 }, + controls_margin = { 0, 0, 18, 8 }, + buttons_margin = { 0, 0, 3, 3 }, + pause_margin = { 12, 12, 0, 0 }, + timeout = 5, + line_height = 26, + bar_width = 8, -- progress bar height + volume_width = 50, + titlefont = "Sans 12", + timefont = "Sans 12", + artistfont = "Sans 12", + border_width = 2, + icon = { + cover = redutil.base.placeholder(), + play = redutil.base.placeholder({ txt = "►" }), + pause = redutil.base.placeholder({ txt = "[]" }), + next_tr = redutil.base.placeholder({ txt = "→" }), + prev_tr = redutil.base.placeholder({ txt = "←" }), + }, + color = { border = "#575757", main = "#b1222b", + wibox = "#202020", gray = "#575757", icon = "#a0a0a0" }, + shape = nil + } + return redutil.table.merge(style, redutil.table.check(beautiful, "float.player") or {}) +end + + +-- Initialize player widget +----------------------------------------------------------------------------------------------------------------------- +function player:init(args) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + local _player = args.name or "vlc" + local style = default_style() + local show_album = false + + self.info = { artist = "Unknown", album = "Unknown" } + self.style = style + self.last = { status = "Stopped", length = 5 * 60 * 1000000, volume = nil } + + -- dbus vars + self.command = { + get_all = string.format(dbus_getall, _player), + get_position = string.format(dbus_get, _player, "string:'Position'"), + get_volume = string.format(dbus_get, _player, "string:'Volume'"), + set_volume = string.format(dbus_set, _player, "string:'Volume' variant:double:"), + action = string.format(dbus_action, _player), + set_position = string.format(dbus_action, _player) .. "SetPosition objpath:/not/used int64:", + } + + self._actions = { "PlayPause", "Next", "Previous" } + + -- Construct layouts + -------------------------------------------------------------------------------- + + -- progressbar and icon + self.bar = progressbar(style.progressbar) + self.box.image = svgbox(style.icon.cover) + self.box.image:set_color(style.color.gray) + + -- Text lines + ------------------------------------------------------------ + self.box.title = wibox.widget.textbox("Title") + self.box.artist = wibox.widget.textbox("Artist") + self.box.title:set_font(style.titlefont) + self.box.title:set_valign("top") + self.box.artist:set_font(style.artistfont) + self.box.artist:set_valign("top") + + local text_area = wibox.layout.fixed.vertical() + text_area:add(wibox.container.constraint(self.box.title, "exact", nil, style.line_height)) + text_area:add(wibox.container.constraint(self.box.artist, "exact", nil, style.line_height)) + + -- Control line + ------------------------------------------------------------ + + -- playback buttons + local player_buttons = wibox.layout.fixed.horizontal() + local prev_button = svgbox(style.icon.prev_tr, nil, style.color.icon) + player_buttons:add(prev_button) + + self.play_button = svgbox(style.icon.play, nil, style.color.icon) + player_buttons:add(wibox.container.margin(self.play_button, unpack(style.pause_margin))) + + local next_button = svgbox(style.icon.next_tr, nil, style.color.icon) + player_buttons:add(next_button) + + -- time indicator + self.box.time = wibox.widget.textbox("0:00") + self.box.time:set_font(style.timefont) + + -- volume + self.volume = dashcontrol(style.dashcontrol) + local volumespace = wibox.container.margin(self.volume, unpack(style.volume_margin)) + local volume_area = wibox.container.constraint(volumespace, "exact", style.volume_width, nil) + + -- full line + local buttons_align = wibox.layout.align.horizontal() + buttons_align:set_expand("outside") + buttons_align:set_middle(wibox.container.margin(player_buttons, unpack(style.buttons_margin))) + + local control_align = wibox.layout.align.horizontal() + control_align:set_middle(buttons_align) + control_align:set_right(self.box.time) + control_align:set_left(volume_area) + + -- Bring it all together + ------------------------------------------------------------ + local align_vertical = wibox.layout.align.vertical() + align_vertical:set_top(text_area) + align_vertical:set_middle(wibox.container.margin(control_align, unpack(style.controls_margin))) + align_vertical:set_bottom(wibox.container.constraint(self.bar, "exact", nil, style.bar_width)) + local area = wibox.layout.fixed.horizontal() + area:add(self.box.image) + area:add(wibox.container.margin(align_vertical, unpack(style.elements_margin))) + + -- Buttons + ------------------------------------------------------------ + + -- playback controll + self.play_button:buttons(awful.util.table.join(awful.button({}, 1, function() self:action("PlayPause") end))) + next_button:buttons(awful.util.table.join(awful.button({}, 1, function() self:action("Next") end))) + prev_button:buttons(awful.util.table.join(awful.button({}, 1, function() self:action("Previous") end))) + + -- volume + self.volume:buttons(awful.util.table.join( + awful.button({}, 4, function() self:change_volume( 0.05) end), + awful.button({}, 5, function() self:change_volume(-0.05) end) + )) + + -- position + self.bar:buttons(awful.util.table.join( + awful.button( + {}, 1, function() + local coords = { + bar = mouse.current_widget_geometry, + wibox = mouse.current_wibox:geometry(), + mouse = mouse.coords(), + } + + local position = (coords.mouse.x - coords.wibox.x - coords.bar.x) / coords.bar.width + awful.spawn.with_shell(self.command.set_position .. math.floor(self.last.length * position)) + end + ) + )) + + -- switch between artist and album info on mouse click + self.box.artist:buttons(awful.util.table.join( + awful.button({}, 1, + function() + show_album = not show_album + self.update_artist() + end + ) + )) + + -- Create floating wibox for player widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + self.wibox:set_widget(wibox.container.margin(area, unpack(style.border_margin))) + self.wibox:geometry(style.geometry) + + -- Update info functions + -------------------------------------------------------------------------------- + + -- Function to set play button state + ------------------------------------------------------------ + self.set_play_button = function(state) + self.play_button:set_image(style.icon[state]) + end + + -- Function to set info for artist/album line + ------------------------------------------------------------ + self.update_artist = function() + if show_album then + self.box.artist:set_markup('From ' .. self.info.album) + else + self.box.artist:set_markup('By ' .. self.info.artist) + end + end + + -- Set defs + ------------------------------------------------------------ + self.clear_info = function(is_att) + self.box.image:set_image(style.icon.cover) + self.box.image:set_color(is_att and style.color.main or style.color.gray) + + self.box.time:set_text("0:00") + self.bar:set_value(0) + -- self.box.title:set_text("Stopped") + self.info = { artist = "", album = "" } + self.update_artist() + + self.last.volume = nil + end + + -- Main update function + ------------------------------------------------------------ + function self:update() + if self.last.status ~= "Stopped" then + awful.spawn.easy_async( + self.command.get_position, + function(output, _, _, exit_code) + + -- dirty trick to clean up if player closed + if exit_code ~= 0 then + self.clear_info(true) + self.last.status = "Stopped" + return + end + + -- set progress bar + local position = string.match(output, "int64%s+(%d+)") + local progress = position / self.last.length + self.bar:set_value(progress) + + -- set current time + local ps = math.floor(position / 10^6) + local ct = string.format("%d:%02d", math.floor(ps / 60), ps % 60) + self.box.time:set_text(ct) + end + ) + end + end + + -- Set update timer + -------------------------------------------------------------------------------- + self.updatetimer = timer({ timeout = style.timeout }) + self.updatetimer:connect_signal("timeout", function() self:update() end) + + -- Run dbus servise + -------------------------------------------------------------------------------- + if not self.listening then self:listen() end + self:initialize_info() +end + +-- Initialize all properties via dbus call +-- should be called only once for initialization before the dbus signals trigger the updates +----------------------------------------------------------------------------------------------------------------------- +function player:initialize_info() + awful.spawn.easy_async( + self.command.get_all, + function(output, _, _, exit_code) + + local data = { Metadata = {} } + + local function parse_dbus_value(ident) + local regex = "(" .. ident .. ")%s+([a-z0-9]+)%s+(.-)%s-%)\n" + local _, _, value = output:match(regex) + if not value then return nil end + + -- check for int64 type field + local int64_val = value:match("int64%s+(%d+)") + if int64_val then return tonumber(int64_val) end + + -- check for double type field + local double_val = value:match("double%s+([%d.]+)") + if double_val then return tonumber(double_val) end + + -- check for array type field as table, extract first entry only + local array_val = value:match("array%s%[%s+([^%],]+)") + if array_val then return { array_val } end + + return value + end + + if exit_code == 0 then + data.Metadata["xesam:title"] = parse_dbus_value("xesam:title") + data.Metadata["xesam:artist"] = parse_dbus_value("xesam:artist") + data.Metadata["xesam:album"] = parse_dbus_value("xesam:album") + data.Metadata["mpris:artUrl"] = parse_dbus_value("mpris:artUrl") + data.Metadata["mpris:length"] = parse_dbus_value("mpris:length") + data["Volume"] = parse_dbus_value("Volume") + data["Position"] = parse_dbus_value("Position") + data["PlaybackStatus"] = parse_dbus_value("PlaybackStatus") + self:update_from_metadata(data) + end + end + ) +end + +-- Player playback control +----------------------------------------------------------------------------------------------------------------------- +function player:action(args) + if not awful.util.table.hasitem(self._actions, args) then return end + if not self.wibox then self:init() end + + awful.spawn.with_shell(self.command.action .. args) + self:update() +end + +-- Player volume control +----------------------------------------------------------------------------------------------------------------------- +function player:change_volume(step) + local v = (self.last.volume or 0) + step + if v > 1 then v = 1 + elseif v < 0 then v = 0 end + + self.last.volume = v + awful.spawn.with_shell(self.command.set_volume .. v) +end + +-- Hide player widget +----------------------------------------------------------------------------------------------------------------------- +function player:hide() + self.wibox.visible = false + if self.updatetimer.started then self.updatetimer:stop() end +end + +-- Show player widget +----------------------------------------------------------------------------------------------------------------------- +function player:show(geometry) + if not self.wibox then self:init() end + + if not self.wibox.visible then + self:update() + + if geometry then + self.wibox:geometry(geometry) + elseif self.style.set_position then + self.style.set_position(self.wibox) + else + awful.placement.under_mouse(self.wibox) + end + redutil.placement.no_offscreen(self.wibox, self.style.screen_gap, screen[mouse.screen].workarea) + + self.wibox.visible = true + if self.last.status == "Playing" then self.updatetimer:start() end + else + self:hide() + end +end + +-- Update property values from received metadata +----------------------------------------------------------------------------------------------------------------------- +function player:update_from_metadata(data) + -- empty call + if not data then return end + + -- set track info if playing + if data.Metadata then + -- set song title + self.box.title:set_text(data.Metadata["xesam:title"] or "Unknown") + + -- set album or artist info + + self.info.artist = data.Metadata["xesam:artist"] and data.Metadata["xesam:artist"][1] or "Unknown" + self.info.album = data.Metadata["xesam:album"] or "Unknown" + self.update_artist() + + -- set cover art + local has_cover = false + if data.Metadata["mpris:artUrl"] then + local image = string.match(data.Metadata["mpris:artUrl"], "file://(.+)") + if image then + self.box.image:set_color(nil) + has_cover = self.box.image:set_image(decodeURI(image)) + end + end + if not has_cover then + -- reset to generic icon if no cover available + self.box.image:set_color(self.style.color.gray) + self.box.image:set_image(self.style.icon.cover) + end + + -- track length + if data.Metadata["mpris:length"] then self.last.length = data.Metadata["mpris:length"] end + end + + if data.PlaybackStatus then + + -- check player status and set suitable play/pause button image + local state = data.PlaybackStatus == "Playing" and "pause" or "play" + self.set_play_button(state) + self.last.status = data.PlaybackStatus + + -- stop/start update timer + if data.PlaybackStatus == "Playing" then + if self.wibox.visible then self.updatetimer:start() end + else + if self.updatetimer.started then self.updatetimer:stop() end + self:update() + end + + -- clear track info if stoppped + if data.PlaybackStatus == "Stopped" then + self.clear_info() + end + end + + -- volume + if data.Volume then + self.volume:set_value(data.Volume) + self.last.volume = data.Volume + elseif not self.last.volume then + -- try to grab volume explicitly if not supplied + awful.spawn.easy_async( + self.command.get_volume, + function(output, _, _, exit_code) + + if exit_code ~= 0 then + return + end + + local volume = tonumber(string.match(output, "double%s+([%d.]+)")) + if volume then + self.volume:set_value(volume) + self.last.volume = volume + end + end + ) + end +end + +-- Dbus signal setup +-- update some info which avaliable from dbus signal +----------------------------------------------------------------------------------------------------------------------- +function player:listen() + dbus.request_name("session", "org.freedesktop.DBus.Properties") + dbus.add_match( + "session", + "path=/org/mpris/MediaPlayer2, interface='org.freedesktop.DBus.Properties', member='PropertiesChanged'" + ) + dbus.connect_signal("org.freedesktop.DBus.Properties", + function (_, _, data) + self:update_from_metadata(data) + end + ) + + self.listening = true +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return player diff --git a/awesome/.config/awesome/redflat/float/prompt.lua b/awesome/.config/awesome/redflat/float/prompt.lua new file mode 100644 index 0000000..525e79f --- /dev/null +++ b/awesome/.config/awesome/redflat/float/prompt.lua @@ -0,0 +1,99 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat promt widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Promt widget with his own wibox placed on center of screen +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.widget.prompt v3.5.2 +------ (c) 2009 Julien Danjou +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local type = type +local unpack = unpack or table.unpack + +local awful = require("awful") +local beautiful = require("beautiful") +local wibox = require("wibox") +local naughty = require("naughty") + +local redutil = require("redflat.util") +local decoration = require("redflat.float.decoration") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local floatprompt = {} + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + geometry = { width = 620, height = 120 }, + margin = { 20, 20, 40, 40 }, + border_width = 2, + naughty = {}, + color = { border = "#575757", wibox = "#202020" }, + shape = nil + } + return redutil.table.merge(style, redutil.table.check(beautiful, "float.prompt") or {}) +end + +-- Initialize prompt widget +-- @param prompt Prompt to use +----------------------------------------------------------------------------------------------------------------------- +function floatprompt:init(args) + + args = args or {} + local style = default_style() + self.style = style + + -- Create prompt widget + -------------------------------------------------------------------------------- + self.widget = wibox.widget.textbox() + self.widget:set_ellipsize("start") + self.prompt = args.prompt or " Run: " + self.decorated_widget = decoration.textfield(self.widget, style.field) + + -- Create floating wibox for promt widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + self.wibox:set_widget(wibox.container.margin(self.decorated_widget, unpack(style.margin))) + self.wibox:geometry(style.geometry) +end + +-- Run method for prompt widget +-- Wibox appears on call and hides after command entered +----------------------------------------------------------------------------------------------------------------------- +function floatprompt:run() + if not self.wibox then self:init() end + redutil.placement.centered(self.wibox, nil, mouse.screen.workarea) + self.wibox.visible = true + + awful.prompt.run({ + prompt = self.prompt, + textbox = self.widget, + exe_callback = function(input) + local result = awful.spawn(input) + if type(result) == "string" then + local notify_args = redutil.table.merge({ title = "Prompt", text = result }, self.style.naughty) + naughty.notify(notify_args) + end + end, + history_path = awful.util.getdir("cache") .. "/history", + history_max = 30, + completion_callback = awful.completion.shell, + done_callback = function () self.wibox.visible = false end, + }) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return floatprompt diff --git a/awesome/.config/awesome/redflat/float/qlaunch.lua b/awesome/.config/awesome/redflat/float/qlaunch.lua new file mode 100644 index 0000000..813e167 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/qlaunch.lua @@ -0,0 +1,510 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat quick laucnher widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Quick application launch or switch +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local table = table +local unpack = unpack or table.unpack +local string = string +local math = math +local io = io +local os = os + +local wibox = require("wibox") +local awful = require("awful") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redflat = require("redflat") +local redutil = require("redflat.util") +local redtip = require("redflat.float.hotkeys") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local qlaunch = { history = {}, store = {}, keys = {} } + +local sw = redflat.float.appswitcher +local TPI = math.pi * 2 + +local switcher_keys = {} +for i = 1, 9 do switcher_keys[tostring(i)] = { app = "", run = "" } end + +-- key bindings +qlaunch.forcemod = { "Control" } +qlaunch.keys.action = { + { + {}, "Escape", function() qlaunch:hide(true) end, + { description = "Close widget", group = "Action" } + }, + { + {}, "Return", function() qlaunch:run_and_hide() end, + { description = "Run or rise selected app", group = "Action" } + }, + { + {}, "s", function() qlaunch:set_new_app(qlaunch.switcher.selected, client.focus) end, + { description = "Bind focused app to selected key", group = "Action" } + }, + { + {}, "d", function() qlaunch:set_new_app(qlaunch.switcher.selected) end, + { description = "Clear selected key", group = "Action" } + }, + { + {}, "r", function() qlaunch:load_config(true) end, + { description = "Reload config from disk", group = "Action" } + }, + { + { "Mod4" }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, +} + +qlaunch.keys.all = awful.util.table.join({}, qlaunch.keys.action) + +qlaunch._fake_keys = { + { + {}, "N", nil, + { description = "Select app (run or rise if selected already) by key", group = "Action", + keyset = { "1", "2", "3", "4", "5", "6", "7", "8", "9" } } + }, + { + {}, "N", nil, + { description = "Select app (launch if selected already) by key", group = "Action" } + }, +} + + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + df_icon = redutil.base.placeholder({ txt = "X" }), + no_icon = redutil.base.placeholder(), + parser = {}, + recoloring = false, + notify = {}, + geometry = { width = 1680, height = 180 }, + border_margin = { 20, 20, 10, 10 }, + appline = { iwidth = 160, im = { 10, 10, 5, 5 }, igap = { 0, 0, 10, 10 }, lheight = 30 }, + state = { gap = 4, radius = 3, size = 10, height = 20, width = 20 }, + configfile = os.getenv("HOME") .. "/.cache/awesome/applist", + label_font = "Sans 14", + border_width = 2, + keytip = { geometry = { width = 500 }, exit = false }, + color = { border = "#575757", text = "#aaaaaa", main = "#b1222b", urgent = "#32882d", + wibox = "#202020", icon = "#a0a0a0", bg = "#161616", gray = "#575757" }, + shape = nil + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "float.qlaunch") or {}) +end + + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Get list of clients with given class +------------------------------------------------------------ +local function get_clients(app) + local clients = {} + for _, c in ipairs(client.get()) do + if c.class:lower() == app then table.insert(clients, c) end + end + return clients +end + +-- Set focus on given client +------------------------------------------------------------ +local function focus_and_raise(c) + if c.minimized then c.minimized = false end + if not c:isvisible() then awful.tag.viewmore(c:tags(), c.screen) end + + client.focus = c + c:raise() +end + +-- Build filter for clients with given class +------------------------------------------------------------ +local function build_filter(app) + return function(c) + return c.class:lower() == app + end +end + +-- Check if file exist +------------------------------------------------------------ +local function is_file_exists(file) + local f = io.open(file, "r") + if f then f:close(); return true else return false end +end + +-- Widget construction functions +----------------------------------------------------------------------------------------------------------------------- + +-- Build application state indicator +-------------------------------------------------------------------------------- +local function build_state_indicator(style) + + -- Initialize vars + ------------------------------------------------------------ + local widg = wibox.widget.base.make_widget() + + local dx = style.state.size + style.state.gap + local ds = style.state.size - style.state.radius + local r = style.state.radius + + -- updating values + local data = { + state = {}, + height = style.state.height or nil, + width = style.state.width or nil + } + + -- User functions + ------------------------------------------------------------ + function widg:setup(clist) + data.state = {} + for _, c in ipairs(clist) do + table.insert(data.state, { focused = client.focus == c, urgent = c.urgent, minimized = c.minimized }) + end + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + return data.width or width, data.height or height + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + local n = #data.state + local x0 = (width - n * style.state.size - (n - 1) * style.state.gap) / 2 + local y0 = (height - style.state.size) / 2 + + for i = 1, n do + cr:set_source(color( + data.state[i].focused and style.color.main or + data.state[i].urgent and style.color.urgent or + data.state[i].minimized and style.color.gray or style.color.icon + )) + -- draw rounded rectangle + cr:arc(x0 + (i -1) * dx + ds, y0 + r, r, -TPI / 4, 0) + cr:arc(x0 + (i -1) * dx + ds, y0 + ds, r, 0, TPI / 4) + cr:arc(x0 + (i -1) * dx + r, y0 + ds, r, TPI / 4, TPI / 2) + cr:arc(x0 + (i -1) * dx + r, y0 + r, r, TPI / 2, 3 * TPI / 4) + cr:fill() + end + end + + ------------------------------------------------------------ + return widg +end + +-- Build icon with label item +-------------------------------------------------------------------------------- +local function build_item(key, style) + local widg = {} + + -- Label + ------------------------------------------------------------ + local label = wibox.widget({ + markup = string.format('%s', style.color.text, key), + align = "center", + font = style.label_font, + forced_height = style.appline.lheight, + widget = wibox.widget.textbox, + }) + + widg.background = wibox.container.background(label, style.color.bg) + + -- Icon + ------------------------------------------------------------ + widg.svgbox = redflat.gauge.svgbox() + local icon_align = wibox.widget({ + nil, + widg.svgbox, + forced_width = style.appline.iwidth, + expand = "outside", + layout = wibox.layout.align.horizontal, + }) + + -- State + ------------------------------------------------------------ + widg.state = build_state_indicator(style) + + -- Layout setup + ------------------------------------------------------------ + widg.layout = wibox.layout.align.vertical() + widg.layout:set_top(widg.state) + widg.layout:set_middle(wibox.container.margin(icon_align, unpack(style.appline.igap))) + widg.layout:set_bottom(widg.background) + + ------------------------------------------------------------ + return widg +end + +-- Build widget with application list +-------------------------------------------------------------------------------- +local function build_switcher(keys, style) + + -- Init vars + ------------------------------------------------------------ + local widg = { items = {}, selected = nil } + local middle_layout = wibox.layout.fixed.horizontal() + + -- Sorted keys + ------------------------------------------------------------ + local sk = {} + for k in pairs(keys) do table.insert(sk, k) end + table.sort(sk) + + -- Build icon row + ------------------------------------------------------------ + for _, key in ipairs(sk) do + widg.items[key] = build_item(key, style) + middle_layout:add(wibox.container.margin(widg.items[key].layout, unpack(style.appline.im))) + end + + widg.layout = wibox.widget({ + nil, + wibox.container.margin(middle_layout, unpack(style.border_margin)), + expand = "outside", + layout = wibox.layout.align.horizontal, + }) + + -- Winget functions + ------------------------------------------------------------ + function widg:update(store, idb) + self.selected = nil + for key, data in pairs(store) do + local icon = data.app == "" and style.no_icon or idb[data.app] or style.df_icon + self.items[key].svgbox:set_image(icon) + if style.recoloring then self.items[key].svgbox:set_color(style.color.icon) end + end + self:set_state(store) + end + + function widg:set_state(store) + for k, item in pairs(self.items) do + local clist = get_clients(store[k].app) + item.state:setup(clist) + end + end + + function widg:reset() + for _, item in pairs(self.items) do item.background:set_bg(style.color.bg) end + self.selected = nil + end + + function widg:check_key(key, mod) + if self.items[key] then + if self.selected then self.items[self.selected].background:set_bg(style.color.bg) end + self.items[key].background:set_bg(style.color.main) + + if self.selected == key then + local modcheck = #mod == #qlaunch.forcemod + for _, v in ipairs(mod) do modcheck = modcheck and awful.util.table.hasitem(qlaunch.forcemod, v) end + qlaunch:run_and_hide(modcheck) + else + self.selected = key + end + end + end + + ------------------------------------------------------------ + return widg +end + +-- Main widget +----------------------------------------------------------------------------------------------------------------------- + +-- Build widget +-------------------------------------------------------------------------------- +function qlaunch:init(args, style) + + -- Init vars + ------------------------------------------------------------ + args = args or {} + local keys = args.keys or switcher_keys + + style = redutil.table.merge(default_style(), style or {}) + self.style = style + self.default_switcher_keys = keys + self.icon_db = redflat.service.dfparser.icon_list(style.parser) + + self:load_config() + + -- Wibox + ------------------------------------------------------------ + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + self.wibox:geometry(style.geometry) + redutil.placement.centered(self.wibox, nil, screen[mouse.screen].workarea) + + -- Switcher widget + ------------------------------------------------------------ + self.switcher = build_switcher(self.store, style) + self.switcher:update(self.store, self.icon_db) + + self.wibox:set_widget(self.switcher.layout) + self:set_keys() + + -- Keygrabber + ------------------------------------------------------------ + self.keygrabber = function(mod, key, event) + if event == "press" then return false end + for _, k in ipairs(self.keys.all) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return end + end + self.switcher:check_key(key, mod) + end + + -- Connect additional signals + ------------------------------------------------------------ + client.connect_signal("focus", function(c) self:set_last(c) end) + awesome.connect_signal("exit", function() self:save_config() end) +end + +-- Widget show/hide +-------------------------------------------------------------------------------- +function qlaunch:show() + if not self.wibox then self:init() end + + self.switcher:set_state(self.store) + self.wibox.visible = true + awful.keygrabber.run(self.keygrabber) + + redtip:set_pack( + "Quick launch", self.tip, self.style.keytip.column, self.style.keytip.geometry, + self.style.keytip.exit and function() self:hide() end + ) +end + +function qlaunch:hide() + self.wibox.visible = false + awful.keygrabber.stop(self.keygrabber) + self.switcher:reset() + redtip:remove_pack() +end + +function qlaunch:run_and_hide(forced_run) + if self.switcher.selected then + self:run_or_raise(self.switcher.selected, forced_run) + end + self:hide() +end + +-- Switch to app +-------------------------------------------------------------------------------- +function qlaunch:run_or_raise(key, forced_run) + local app = self.store[key].app + if app == "" then return end + + local clients = get_clients(app) + local cnum = #clients + + if cnum == 0 or forced_run then + -- open new application + if self.store[key].run ~= "" then awful.spawn.with_shell(self.store[key].run) end + elseif cnum == 1 then + -- switch to sole app + focus_and_raise(clients[1]) + else + if awful.util.table.hasitem(clients, client.focus) then + -- run selection widget if wanted app focused + sw:show({ filter = build_filter(app), noaction = true }) + else + -- switch to last focused if availible or first in list otherwise + local last = awful.util.table.hasitem(clients, self.history[app]) + if last then + focus_and_raise(self.history[app]) + else + focus_and_raise(clients[1]) + end + end + end +end + +-- Bind new application to given hotkey +-------------------------------------------------------------------------------- +function qlaunch:set_new_app(key, c) + if not key then return end + + if c then + local run_command = redutil.read.output(string.format("tr '\\0' ' ' < /proc/%s/cmdline", c.pid)) + self.store[key] = { app = c.class:lower(), run = run_command } + local note = redutil.table.merge({text = string.format("%s binded with '%s'", c.class, key)}, self.style.notify) + redflat.float.notify:show(note) + else + self.store[key] = { app = "", run = "" } + local note = redutil.table.merge({text = string.format("'%s' key unbinded", key)}, self.style.notify) + redflat.float.notify:show(note) + end + + self.switcher:reset() + self.switcher:update(self.store, self.icon_db) +end + +-- Save information about last focused client in widget store +-------------------------------------------------------------------------------- +function qlaunch:set_last(c) + if not c.class then return end + for _, data in pairs(self.store) do + if c.class:lower() == data.app then + self.history[data.app] = c + break + end + end +end + +-- Application list save/load +-------------------------------------------------------------------------------- +function qlaunch:load_config(need_reset) + if is_file_exists(self.style.configfile) then + for line in io.lines(self.style.configfile) do + local key, app, run = string.match(line, "key=(.+);app=(.*);run=(.*);") + self.store[key] = { app = app, run = run } + end + else + self.store = self.default_switcher_keys + end + + if need_reset then + self.switcher:reset() + self.switcher:update(self.store, self.icon_db) + end +end + +function qlaunch:save_config() + local file = io.open(self.style.configfile, "w+") + for key, data in pairs(self.store) do + file:write(string.format("key=%s;app=%s;run=%s;\n", key, data.app, data.run)) + end + file:close() +end + +-- Set user hotkeys +----------------------------------------------------------------------------------------------------------------------- +function qlaunch:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then self.keys.all = awful.util.table.join({}, self.keys.action) end + end + + self._fake_keys[2][1] = self.forcemod + self.tip = awful.util.table.join(self.keys.all, self._fake_keys) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return qlaunch diff --git a/awesome/.config/awesome/redflat/float/tooltip.lua b/awesome/.config/awesome/redflat/float/tooltip.lua new file mode 100644 index 0000000..c4aac62 --- /dev/null +++ b/awesome/.config/awesome/redflat/float/tooltip.lua @@ -0,0 +1,156 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat tooltip -- +----------------------------------------------------------------------------------------------------------------------- +-- Slightly modded awful tooltip +-- padding added +-- Proper placement on every text update +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.tooltip v3.5.2 +------ (c) 2009 Sébastien Gross +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local ipairs = ipairs +local wibox = require("wibox") +local awful = require("awful") +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local tooltip = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + padding = { vertical = 3, horizontal = 5 }, + timeout = 1, + font = "Sans 12", + border_width = 2, + set_position = nil, + color = { border = "#404040", text = "#aaaaaa", wibox = "#202020" }, + shape = nil + } + return redutil.table.merge(style, redutil.table.check(beautiful, "float.tooltip") or {}) +end + +-- Create a new tooltip +----------------------------------------------------------------------------------------------------------------------- +function tooltip.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + local objects = args.objects or {} + style = redutil.table.merge(default_style(), style or {}) + + -- Construct tooltip window with wibox and textbox + -------------------------------------------------------------------------------- + local ttp = { wibox = wibox({ type = "tooltip" }), tip = nil } + local tb = wibox.widget.textbox() + tb:set_align("center") + + ttp.widget = tb + ttp.wibox:set_widget(tb) + tb:set_font(style.font) + + -- configure wibox properties + ttp.wibox.visible = false + ttp.wibox.ontop = true + ttp.wibox.border_width = style.border_width + ttp.wibox.border_color = style.color.border + ttp.wibox.shape = style.shape + ttp.wibox:set_bg(style.color.wibox) + ttp.wibox:set_fg(style.color.text) + + -- Tooltip size configurator + -------------------------------------------------------------------------------- + function ttp:set_geometry() + local wibox_sizes = self.wibox:geometry() + local w, h = self.widget:get_preferred_size() + local requsted_width = w + 2*style.padding.horizontal + local requsted_height = h + 2*style.padding.vertical + + if wibox_sizes.width ~= requsted_width or wibox_sizes.height ~= requsted_height then + self.wibox:geometry({ + width = requsted_width, + height = requsted_height + }) + end + end + + -- Set timer to make delay before tooltip show + -------------------------------------------------------------------------------- + local show_timer = timer({ timeout = style.timeout }) + show_timer:connect_signal("timeout", + function() + ttp:set_geometry() + if style.set_position then + style.set_position(ttp.wibox) + else + awful.placement.under_mouse(ttp.wibox) + end + awful.placement.no_offscreen(ttp.wibox) + ttp.wibox.visible = true + show_timer:stop() + end) + + -- Tooltip metods + -------------------------------------------------------------------------------- + function ttp.show() + if not show_timer.started then show_timer:start() end + end + + function ttp.hide() + if show_timer.started then show_timer:stop() end + if ttp.wibox.visible then ttp.wibox.visible = false end + end + + function ttp:set_text(text) + if self.tip ~= text then + self.widget:set_text(text) + self.tip = text + + if self.wibox.visible then + self:set_geometry() + self.wibox.x = mouse.coords().x - self.wibox.width / 2 + awful.placement.no_offscreen(self.wibox) + end + end + end + + function ttp:add_to_object(object) + object:connect_signal("mouse::enter", self.show) + object:connect_signal("mouse::leave", self.hide) + end + + function ttp:remove_from_object(object) + object:disconnect_signal("mouse::enter", self.show) + object:disconnect_signal("mouse::leave", self.hide) + end + + -- Add tooltip to objects + -------------------------------------------------------------------------------- + if objects then + for _, object in ipairs(objects) do + ttp:add_to_object(object) + end + end + + -------------------------------------------------------------------------------- + return ttp +end + +-- Config metatable to call tooltip module as function +----------------------------------------------------------------------------------------------------------------------- +function tooltip.mt:__call(...) + return tooltip.new(...) +end + +return setmetatable(tooltip, tooltip.mt) diff --git a/awesome/.config/awesome/redflat/float/top.lua b/awesome/.config/awesome/redflat/float/top.lua new file mode 100644 index 0000000..9c8112a --- /dev/null +++ b/awesome/.config/awesome/redflat/float/top.lua @@ -0,0 +1,379 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat top widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget with list of top processes +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local unpack = unpack or table.unpack + +local awful = require("awful") +local beautiful = require("beautiful") +local wibox = require("wibox") +local timer = require("gears.timer") + +local redutil = require("redflat.util") +local system = require("redflat.system") +local decoration = require("redflat.float.decoration") +local redtip = require("redflat.float.hotkeys") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local top = { keys = {} } + +-- key bindings +top.keys.management = { + { + {}, "c", function() top:set_sort("cpu") end, + { description = "Sort by CPU usage", group = "Management" } + }, + { + {}, "m", function() top:set_sort("mem") end, + { description = "Sort by RAM usage", group = "Management" } + }, +} + +top.keys.action = { + { + {}, "k", function() top.kill_selected() end, + { description = "Kill process", group = "Action" } + }, + { + {}, "Escape", function() top:hide() end, + { description = "Close top list widget", group = "Action" } + }, + { + { "Mod4" }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, +} + +top.keys.all = awful.util.table.join(top.keys.management, top.keys.action) + +top._fake_keys = { + { + {}, "N", nil, + { description = "Select process by key", group = "Management", + keyset = { "1", "2", "3", "4", "5", "6", "7", "8", "9" } } + }, +} + + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + timeout = 2, + screen_gap = 0, + set_position = nil, + geometry = { width = 460, height = 380 }, + border_margin = { 10, 10, 10, 10 }, + labels_width = { num = 30, cpu = 70, mem = 120 }, + title_height = 48, + list_side_gap = 8, + border_width = 2, + bottom_height = 80, + button_margin = { 140, 140, 22, 22 }, + keytip = { geometry = { width = 400 } }, + title_font = "Sans 14 bold", + unit = { { "KB", -1 }, { "MB", 1024 }, { "GB", 1024^2 } }, + color = { border = "#575757", text = "#aaaaaa", highlight = "#eeeeee", main = "#b1222b", + bg = "#161616", bg_second = "#181818", wibox = "#202020" }, + shape = nil + + } + return redutil.table.merge(style, redutil.table.check(beautiful, "float.top") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Sort functions +-------------------------------------------------------------------------------- +local function sort_by_cpu(a, b) + return a.pcpu > b.pcpu +end + +local function sort_by_mem(a, b) + return a.mem > b.mem +end + +-- Fuction to build list item +-------------------------------------------------------------------------------- +local function construct_item(style) + local item = {} + item.label = { + number = wibox.widget.textbox(), + name = wibox.widget.textbox(), + cpu = wibox.widget.textbox(), + mem = wibox.widget.textbox() + } + + item.label.cpu:set_align("right") + item.label.mem:set_align("right") + + local bg = style.color.bg + + -- Construct item layouts + ------------------------------------------------------------ + local mem_label_with_gap = wibox.container.margin(item.label.mem, 0, style.list_side_gap) + local num_label_with_gap = wibox.container.margin(item.label.number, style.list_side_gap) + + local right = wibox.layout.fixed.horizontal() + right:add(wibox.container.constraint(item.label.cpu, "exact", style.labels_width.cpu, nil)) + right:add(wibox.container.constraint(mem_label_with_gap, "exact", style.labels_width.mem, nil)) + + local middle = wibox.layout.align.horizontal() + middle:set_left(item.label.name) + + local left = wibox.container.constraint(num_label_with_gap, "exact", style.labels_width.num, nil) + + local item_horizontal = wibox.layout.align.horizontal() + item_horizontal:set_left(left) + item_horizontal:set_middle(middle) + item_horizontal:set_right(right) + item.layout = wibox.container.background(item_horizontal, bg) + + -- item functions + ------------------------------------------------------------ + function item:set_bg(color) + bg = color + item.layout:set_bg(color) + end + + function item:set_select() + item.layout:set_bg(style.color.main) + item.layout:set_fg(style.color.highlight) + end + + function item:set_unselect() + item.layout:set_bg(bg) + item.layout:set_fg(style.color.text) + end + + function item:set(args) + if args.number then item.label.number:set_text(args.number) end + if args.name then item.label.name:set_text(args.name) end + if args.cpu then item.label.cpu:set_text(args.cpu) end + if args.mem then item.label.mem:set_text(args.mem) end + if args.pid then item.pid = args.pid end + end + + ------------------------------------------------------------ + return item +end + +-- Fuction to build top list +-------------------------------------------------------------------------------- +local function list_construct(n, style, select_function) + local list = {} + + local list_layout = wibox.layout.flex.vertical() + list.layout = wibox.container.background(list_layout, style.color.bg) + + list.items = {} + for i = 1, n do + list.items[i] = construct_item(style) + list.items[i]:set({ number = i}) + list.items[i]:set_bg((i % 2) == 1 and style.color.bg or style.color.bg_second) + list_layout:add(list.items[i].layout) + + list.items[i].layout:buttons(awful.util.table.join( + awful.button({ }, 1, function() select_function(i) end) + )) + end + + return list +end + +-- Initialize top widget +----------------------------------------------------------------------------------------------------------------------- +function top:init() + + -- Initialize vars + -------------------------------------------------------------------------------- + local number_of_lines = 9 -- number of lines in process list + local selected = {} + local cpu_storage = { cpu_total = {}, cpu_active = {} } + local style = default_style() + local sort_function, title, toplist + + self.style = style + + -- Select process function + -------------------------------------------------------------------------------- + local function select_item(i) + if selected.number and selected.number ~= i then toplist.items[selected.number]:set_unselect() end + toplist.items[i]:set_select() + selected.pid = toplist.items[i].pid + selected.number = i + end + + -- Set sorting rule + -------------------------------------------------------------------------------- + function self:set_sort(args) + if args == "cpu" then + sort_function = sort_by_cpu + title:set({ cpu = "↓CPU", mem = "Memory"}) + elseif args == "mem" then + sort_function = sort_by_mem + title:set({ cpu = "CPU", mem = "↓Memory"}) + end + end + + -- Kill selected process + -------------------------------------------------------------------------------- + function self.kill_selected() + if selected.number then awful.spawn.with_shell("kill " .. selected.pid) end + self:update_list() + end + + -- Widget keygrabber + -------------------------------------------------------------------------------- + self.keygrabber = function(mod, key, event) + if event ~= "press" then return end + for _, k in ipairs(self.keys.all) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return end + end + if string.match("123456789", key) then select_item(tonumber(key)) end + end + + -- Build title + -------------------------------------------------------------------------------- + title = construct_item(style) + title:set_bg(style.color.wibox) + title:set({ number = "#", name = "Process Name", cpu = "↓ CPU", mem = "Memory"}) + + for _, txtbox in pairs(title.label) do + txtbox:set_font(style.title_font) + end + + title.label.cpu:buttons(awful.util.table.join( + awful.button({ }, 1, function() self:set_sort("cpu") end) + )) + title.label.mem:buttons(awful.util.table.join( + awful.button({ }, 1, function() self:set_sort("mem") end) + )) + + -- Build top list + -------------------------------------------------------------------------------- + toplist = list_construct(number_of_lines, style, select_item) + + -- Update function + -------------------------------------------------------------------------------- + function self:update_list() + local proc = system.proc_info(cpu_storage) + table.sort(proc, sort_function) + + if selected.number then + toplist.items[selected.number]:set_unselect() + selected.number = nil + end + + for i = 1, number_of_lines do + toplist.items[i]:set({ + name = proc[i].name, + cpu = string.format("%.1f", proc[i].pcpu * 100), + --mem = string.format("%.0f", proc[i].mem) .. " MB", + mem = redutil.text.dformat(proc[i].mem, style.unit, 2, " "), + pid = proc[i].pid + }) + + if selected.pid and selected.pid == proc[i].pid then + toplist.items[i]:set_select() + selected.number = i + end + end + end + + -- Construct widget layouts + -------------------------------------------------------------------------------- + local buttonbox = wibox.widget.textbox("Kill") + + local button_widget = decoration.button(buttonbox, self.kill_selected) + + local button_layout = wibox.container.margin(button_widget, unpack(style.button_margin)) + local bottom_area = wibox.container.constraint(button_layout, "exact", nil, style.bottom_height) + + local area = wibox.layout.align.vertical() + area:set_top(wibox.container.constraint(title.layout, "exact", nil, style.title_height)) + area:set_middle(toplist.layout) + area:set_bottom(bottom_area) + local list_layout = wibox.container.margin(area, unpack(style.border_margin)) + + -- Create floating wibox for top widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + self.wibox:set_widget(list_layout) + self.wibox:geometry(style.geometry) + + -- Update timer + -------------------------------------------------------------------------------- + self.update_timer = timer({timeout = style.timeout}) + self.update_timer:connect_signal("timeout", function() self:update_list() end) + + -- First run actions + -------------------------------------------------------------------------------- + self:set_keys() + self:set_sort("cpu") + self:update_list() +end + +-- Hide top widget +----------------------------------------------------------------------------------------------------------------------- +function top:hide() + self.wibox.visible = false + self.update_timer:stop() + awful.keygrabber.stop(self.keygrabber) + redtip:remove_pack() +end + +-- Show top widget +----------------------------------------------------------------------------------------------------------------------- +function top:show(srt) + if not self.wibox then self:init() end + if self.wibox.visible then + top:hide() + else + if srt then self:set_sort(srt) end + self:update_list() + + if self.style.set_position then + self.style.set_position(self.wibox) + else + awful.placement.under_mouse(self.wibox) + end + redutil.placement.no_offscreen(self.wibox, self.style.screen_gap, screen[mouse.screen].workarea) + + self.wibox.visible = true + self.update_timer:start() + awful.keygrabber.run(self.keygrabber) + + redtip:set_pack("Top process", self.tip, self.style.keytip.column, self.style.keytip.geometry) + end +end + +-- Set user hotkeys +----------------------------------------------------------------------------------------------------------------------- +function top:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then self.keys.all = awful.util.table.join(self.keys.management, self.keys.action) end + end + + self.tip = awful.util.table.join(self.keys.all, self._fake_keys) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return top diff --git a/awesome/.config/awesome/redflat/gauge/audio/blue.lua b/awesome/.config/awesome/redflat/gauge/audio/blue.lua new file mode 100644 index 0000000..b87ba27 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/audio/blue.lua @@ -0,0 +1,80 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat volume indicator widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Indicator with audio icon +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local unpack = unpack or table.unpack + +local wibox = require("wibox") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") +local reddash = require("redflat.gauge.graph.dash") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local audio = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 100, + icon = redutil.base.placeholder(), + gauge = reddash.new, + dash = {}, + dmargin = { 10, 0, 0, 0 }, + color = { icon = "#a0a0a0", mute = "#404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.audio.blue") or {}) +end + +-- Create a new audio widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function audio.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- Construct widget + -------------------------------------------------------------------------------- + local icon = svgbox(style.icon) + + local layout = wibox.layout.fixed.horizontal() + layout:add(icon) + + local dash + if style.gauge then + dash = style.gauge(style.dash) + layout:add(wibox.container.margin(dash, unpack(style.dmargin))) + end + + local widg = wibox.container.constraint(layout, "exact", style.width) + + -- User functions + ------------------------------------------------------------ + function widg:set_value(x) if dash then dash:set_value(x) end end + + function widg:set_mute(mute) + icon:set_color(mute and style.color.mute or style.color.icon) + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call audio module as function +----------------------------------------------------------------------------------------------------------------------- +function audio.mt:__call(...) + return audio.new(...) +end + +return setmetatable(audio, audio.mt) diff --git a/awesome/.config/awesome/redflat/gauge/audio/init.lua b/awesome/.config/awesome/redflat/gauge/audio/init.lua new file mode 100644 index 0000000..a7f844c --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/audio/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.gauge.audio" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/gauge/audio/red.lua b/awesome/.config/awesome/redflat/gauge/audio/red.lua new file mode 100644 index 0000000..bf4eb64 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/audio/red.lua @@ -0,0 +1,93 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat volume indicator widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Indicator with audio icon +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local string = string +local math = math + +local wibox = require("wibox") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local audio = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icon = { volume = redutil.base.placeholder(), mute = redutil.base.placeholder() }, + step = 0.05, + color = { main = "#b1222b", icon = "#a0a0a0", mute = "#404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.audio.red") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function pattern_string(height, value, c1, c2) + return string.format("linear:0,%s:0,0:0,%s:%s,%s:%s,%s:1,%s", height, c1, value, c1, value, c2, c2) +end + +-- Create a new audio widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function audio.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- Icon widgets + ------------------------------------------------------------ + local icon = {} + icon.ready = svgbox(style.icon.volume) + icon.ready:set_color(style.color.icon) + icon.mute = svgbox(style.icon.mute) + icon.mute:set_color(style.color.mute) + + -- Create widget + -------------------------------------------------------------------------------- + local widg = wibox.container.background(icon.ready) + widg._data = { level = 0 } + + -- User functions + ------------------------------------------------------------ + function widg:set_value(x) + if x > 1 then x = 1 end + + if self.widget._image then + local level = math.floor(x / style.step) * style.step + + if level ~= self._data.level then + self._data.level = level + local h = self.widget._image.height + icon.ready:set_color(pattern_string(h, level, style.color.main, style.color.icon)) + end + end + end + + function widg:set_mute(mute) + widg:set_widget(mute and icon.mute or icon.ready) + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call audio module as function +----------------------------------------------------------------------------------------------------------------------- +function audio.mt:__call(...) + return audio.new(...) +end + +return setmetatable(audio, audio.mt) diff --git a/awesome/.config/awesome/redflat/gauge/graph/bar.lua b/awesome/.config/awesome/redflat/gauge/graph/bar.lua new file mode 100644 index 0000000..f71fba8 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/graph/bar.lua @@ -0,0 +1,80 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat progressbar widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Horizontal progresspar +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local progressbar = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + color = { main = "#b1222b", gray = "#404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.graph.bar") or {}) +end + +-- Create a new progressbar widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function progressbar.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + widg._data = { value = 0 } + + -- User functions + ------------------------------------------------------------ + function widg:set_value(x) + local value = x < 1 and x or 1 + if self._data.value ~= value then + self._data.value = value + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + return width, height + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + cr:set_source(color(style.color.gray)) + cr:rectangle(0, 0, width, height) + cr:fill() + cr:set_source(color(style.color.main)) + cr:rectangle(0, 0, self._data.value * width, height) + cr:fill() + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call progressbar module as function +----------------------------------------------------------------------------------------------------------------------- +function progressbar.mt:__call(...) + return progressbar.new(...) +end + +return setmetatable(progressbar, progressbar.mt) diff --git a/awesome/.config/awesome/redflat/gauge/graph/dash.lua b/awesome/.config/awesome/redflat/gauge/graph/dash.lua new file mode 100644 index 0000000..c0bcb00 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/graph/dash.lua @@ -0,0 +1,88 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat dashcontrol widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Horizontal progresspar with stairs form +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local dashcontrol = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + plain = false, + bar = { width = 4, num = 10 }, + color = { main = "#b1222b", gray = "#404040" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.graph.dash") or {}) +end + +-- Create a new dashcontrol widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function dashcontrol.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + widg._data = { value = 0, cnum = 0 } + + -- User functions + ------------------------------------------------------------ + function widg:set_value(x) + self._data.value = x < 1 and x or 1 + local num = math.ceil(widg._data.value * style.bar.num) + + if num ~= self._data.cnum then + self._data.cnum = num + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + return width, height + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + local wstep = (width - style.bar.width) / (style.bar.num - 1) + local hstep = height / style.bar.num + --self._data.cnum = math.ceil(widg._data.value * style.bar.num) + + for i = 1, style.bar.num do + cr:set_source(color(i > self._data.cnum and style.color.gray or style.color.main)) + cr:rectangle((i - 1) * wstep, height, style.bar.width, style.plain and -height or - i * hstep) + cr:fill() + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call dashcontrol module as function +----------------------------------------------------------------------------------------------------------------------- +function dashcontrol.mt:__call(...) + return dashcontrol.new(...) +end + +return setmetatable(dashcontrol, dashcontrol.mt) diff --git a/awesome/.config/awesome/redflat/gauge/graph/dots.lua b/awesome/.config/awesome/redflat/gauge/graph/dots.lua new file mode 100644 index 0000000..ac19017 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/graph/dots.lua @@ -0,0 +1,109 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat dotcount widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Simple graphical counter +-- Displaying current value by dots number +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local counter = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + column_num = { 2, 5 }, -- {min, max} + row_num = 3, + dot_size = 5, + dot_gap_h = 5, + color = { main = "#b1222b", gray = "#575757" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.graph.dots") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +--local function round(x) +-- return math.floor(x + 0.5) +--end + +-- Create a new counter widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function counter.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + widg._data = { + count_num = 0, + column_num = style.column_num[1] + } + + -- User functions + ------------------------------------------------------------ + function widg:set_num(num) + if num ~= self._data.count_num then + self._data.count_num = num + self._data.column_num = math.min( + math.max(style.column_num[1], math.ceil(num / style.row_num)), style.column_num[2] + ) + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, _, height) + local width = (style.dot_size + style.dot_gap_h) * self._data.column_num - style.dot_gap_h + return width, height + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) +-- local maxnum = style.row_num * data.column_num + local gap_v = (height - style.row_num * style.dot_size) / (style.row_num - 1) + + cr:translate(0, height) + for i = 1, style.row_num do + for j = 1, self._data.column_num do + local cc = (j + (i - 1) * self._data.column_num) <= self._data.count_num + and style.color.main or style.color.gray + cr:set_source(color(cc)) + + cr:rectangle(0, 0, style.dot_size, - style.dot_size) + cr:fill() + + cr:translate(style.dot_size + style.dot_gap_h, 0) + end + cr:translate(- (style.dot_gap_h + width), - (style.dot_size + gap_v)) + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call dotcount module as function +----------------------------------------------------------------------------------------------------------------------- +function counter.mt:__call(...) + return counter.new(...) +end + +return setmetatable(counter, counter.mt) diff --git a/awesome/.config/awesome/redflat/gauge/graph/init.lua b/awesome/.config/awesome/redflat/gauge/graph/init.lua new file mode 100644 index 0000000..40d6aee --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/graph/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.gauge.graph" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/gauge/icon/double.lua b/awesome/.config/awesome/redflat/gauge/icon/double.lua new file mode 100644 index 0000000..487b0b3 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/icon/double.lua @@ -0,0 +1,96 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat indicator widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Double mage indicator +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local string = string +local math = math + +local wibox = require("wibox") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local dubgicon = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icon1 = redutil.base.placeholder(), + icon2 = redutil.base.placeholder(), + igap = 8, + step = 0.05, + is_vertical = false, + color = { main = "#b1222b", icon = "#a0a0a0" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.icon.double") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function pattern_string_v(height, value, c1, c2) + return string.format("linear:0,%s:0,0:0,%s:%s,%s:%s,%s:1,%s", height, c1, value, c1, value, c2, c2) +end + +local function pattern_string_h(width, value, c1, c2) + return string.format("linear:0,0:%s,0:0,%s:%s,%s:%s,%s:1,%s", width, c1, value, c1, value, c2, c2) +end + +-- Create a new dubgicon widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function dubgicon.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + local pattern = style.is_vertical and pattern_string_v or pattern_string_h + + -- Create widget + -------------------------------------------------------------------------------- + local fixed = wibox.layout.fixed.horizontal() + local layout = wibox.container.constraint(fixed, "exact", style.width) + layout._icon1 = svgbox(style.icon1) + layout._icon2 = svgbox(style.icon2) + layout._data = { level = { 0, 0 }} + fixed:add(wibox.container.margin(layout._icon1, 0, style.igap, 0, 0)) + fixed:add(layout._icon2) + + -- User functions + ------------------------------------------------------------ + function layout:set_value(value) + local level = { + math.floor((value[1] < 1 and value[1] or 1) / style.step) * style.step, + math.floor((value[2] < 1 and value[2] or 1) / style.step) * style.step + } + + for i, widg in ipairs({ self._icon1, self._icon2 }) do + if widg._image and level[i] ~= layout._data.level[i] then + layout._data.level[i] = level[i] + + local d = style.is_vertical and widg._image.height or widg._image.width + widg:set_color(pattern(d, level[i], style.color.main, style.color.icon)) + end + end + end + + -------------------------------------------------------------------------------- + return layout +end + +-- Config metatable to call dubgicon module as function +----------------------------------------------------------------------------------------------------------------------- +function dubgicon.mt:__call(...) + return dubgicon.new(...) +end + +return setmetatable(dubgicon, dubgicon.mt) diff --git a/awesome/.config/awesome/redflat/gauge/icon/init.lua b/awesome/.config/awesome/redflat/gauge/icon/init.lua new file mode 100644 index 0000000..fa57e49 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/icon/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.gauge.icon" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/gauge/icon/single.lua b/awesome/.config/awesome/redflat/gauge/icon/single.lua new file mode 100644 index 0000000..1cbede4 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/icon/single.lua @@ -0,0 +1,95 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat indicator widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Image indicator +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local string = string + +local beautiful = require("beautiful") +local wibox = require("wibox") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local gicon = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icon = redutil.base.placeholder(), + step = 0.05, + is_vertical = false, + color = { main = "#b1222b", icon = "#a0a0a0", urgent = "#32882d" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.icon.single") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function pattern_string_v(height, value, c1, c2) + return string.format("linear:0,%s:0,0:0,%s:%s,%s:%s,%s:1,%s", height, c1, value, c1, value, c2, c2) +end + +local function pattern_string_h(width, value, c1, c2) + return string.format("linear:0,0:%s,0:0,%s:%s,%s:%s,%s:1,%s", width, c1, value, c1, value, c2, c2) +end + +-- Create a new gicon widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function gicon.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + local pattern = style.is_vertical and pattern_string_v or pattern_string_h + + -- Create widget + -------------------------------------------------------------------------------- + local widg = wibox.container.background(svgbox(style.icon)) + widg._data = { + color = style.color.main, + level = 0, + } + + -- User functions + ------------------------------------------------------------ + function widg:set_value(x) + if x > 1 then x = 1 end + + if self.widget._image then + local level = math.floor(x / style.step) * style.step + + if level ~= self._data.level then + self._data.level = level + local d = style.is_vertical and self.widget._image.height or self._image.width + self.widget:set_color(pattern(d, level, self._data.color, style.color.icon)) + end + end + end + + function widg:set_alert(alert) + -- not sure about redraw after alert set + self._data.color = alert and style.color.urgent or style.color.main + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call gicon module as function +----------------------------------------------------------------------------------------------------------------------- +function gicon.mt:__call(...) + return gicon.new(...) +end + +return setmetatable(gicon, gicon.mt) diff --git a/awesome/.config/awesome/redflat/gauge/init.lua b/awesome/.config/awesome/redflat/gauge/init.lua new file mode 100644 index 0000000..b07217e --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.gauge" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/gauge/monitor/circle.lua b/awesome/.config/awesome/redflat/gauge/monitor/circle.lua new file mode 100644 index 0000000..dd1cdbe --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/monitor/circle.lua @@ -0,0 +1,109 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat monitor widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget with circle indicator +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local cirmon = { mt = {} } +local TPI = math.pi * 2 + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = nil, + line_width = 4, + radius = 14, + iradius = 6, + step = 0.02, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.monitor.circle") or {}) +end + +-- Create a new monitor widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function cirmon.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + local cs = -TPI / 4 + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + widg._data = { color = style.color.icon, level = 0, alert = false } + + if style.width then widg:set_forced_width(style.width) end + + -- User functions + ------------------------------------------------------------ + function widg:set_value(x) + local value = x < 1 and x or 1 + local level = math.floor(value / style.step) * style.step + + if level ~= self._data.level then + self._data.level = level + self:emit_signal("widget::redraw_needed") + end + end + + function widg:set_alert(alert) + if alert ~= self._data.alert then + self._data.alert = alert + self._data.color = alert and style.color.main or style.color.icon + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + local size = math.min(width, height) + return size, size + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + + -- center circle + cr:set_source(color(self._data.color)) + cr:arc(width / 2, height / 2, style.iradius, 0, TPI) + cr:fill() + + -- progress circle + cr:set_line_width(style.line_width) + local cd = { TPI, TPI * self._data.level } + for i = 1, 2 do + cr:set_source(color(i > 1 and style.color.main or style.color.gray)) + cr:arc(width / 2, height / 2, style.radius, cs, cs + cd[i]) + cr:stroke() + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call monitor module as function +----------------------------------------------------------------------------------------------------------------------- +function cirmon.mt:__call(...) + return cirmon.new(...) +end + +return setmetatable(cirmon, cirmon.mt) diff --git a/awesome/.config/awesome/redflat/gauge/monitor/dash.lua b/awesome/.config/awesome/redflat/gauge/monitor/dash.lua new file mode 100644 index 0000000..7c2f3d7 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/monitor/dash.lua @@ -0,0 +1,98 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat monitor widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget with dash indicator +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local dashmon = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 40, + line = { num = 5, height = 4 }, + color = { main = "#b1222b", urgent = "#00725b", gray = "#575757" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.monitor.dash") or {}) +end + +-- Create a new monitor widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function dashmon.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + widg._data = { color = style.color.main, level = 0, alert = false } + + if style.width then widg:set_forced_width(style.width) end + + -- User functions + ------------------------------------------------------------ + function widg:set_value(x) + local value = x < 1 and x or 1 + local level = math.ceil(style.line.num * value) + + if level ~= self._data.level then + self._data.level = level + self:emit_signal("widget::redraw_needed") + end + end + + function widg:set_alert(alert) + if alert ~= self._data.alert then + self._data.alert = alert + self._data.color = alert and style.color.urgent or style.color.main + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + return width, height + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + + local gap = (height - style.line.height * style.line.num) / (style.line.num - 1) + local dy = style.line.height + gap + + for i = 1, style.line.num do + cr:set_source(color(i <= self._data.level and self._data.color or style.color.gray)) + cr:rectangle(0, height - (i - 1) * dy, width, - style.line.height) + cr:fill() + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call monitor module as function +----------------------------------------------------------------------------------------------------------------------- +function dashmon.mt:__call(...) + return dashmon.new(...) +end + +return setmetatable(dashmon, dashmon.mt) diff --git a/awesome/.config/awesome/redflat/gauge/monitor/double.lua b/awesome/.config/awesome/redflat/gauge/monitor/double.lua new file mode 100644 index 0000000..243a3c9 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/monitor/double.lua @@ -0,0 +1,130 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat doublemonitor widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget with two progressbar and icon +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local unpack = unpack or table.unpack + +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local doublemonitor = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + line = { width = 4, v_gap = 6, gap = 4, num = 5 }, + icon = redutil.base.placeholder(), + dmargin = { 10, 0, 0, 0 }, + width = 100, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0", urgent = "#32882d" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.monitor.double") or {}) +end + +-- Create progressbar widget +----------------------------------------------------------------------------------------------------------------------- +local function pbar(style) + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + widg._data = { level = { 0, 0 }} + + -- User functions + ------------------------------------------------------------ + function widg:set_value(value) + local level = { + math.ceil((value[1] < 1 and value[1] or 1) * style.line.num), + math.ceil((value[2] < 1 and value[2] or 1) * style.line.num), + } + + if level[1] ~= self._data.level[1] or level[2] ~= self._data.level[2] then + self._data.level[1] = level[1] + self._data.level[2] = level[2] + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + return width, height + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + local wd = (width + style.line.gap) / style.line.num - style.line.gap + local dy = (height - (2 * style.line.width + style.line.v_gap)) / 2 + + for i = 1, 2 do + for k = 1, style.line.num do + cr:set_source(color(k <= self._data.level[i] and style.color.main or style.color.gray)) + cr:rectangle( + (k - 1) * (wd + style.line.gap), dy + (i - 1) * (style.line.width + style.line.v_gap), + wd, style.line.width + ) + cr:fill() + end + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Cunstruct a new doublemonitor widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function doublemonitor.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- Construct layout + -------------------------------------------------------------------------------- + local fixed = wibox.layout.fixed.horizontal() + fixed:set_forced_width(style.width) + local widg = pbar(style) + local icon = svgbox(style.icon) + + icon:set_color(style.color.icon) + + fixed:add(icon) + fixed:add(wibox.container.margin(widg, unpack(style.dmargin))) + + -- User functions + -------------------------------------------------------------------------------- + function fixed:set_value(value) + widg:set_value(value) + end + + function fixed:set_alert(alert) + icon:set_color(alert and style.color.urgent or style.color.icon) + end + + -------------------------------------------------------------------------------- + return fixed +end + +-- Config metatable to call doublemonitor module as function +----------------------------------------------------------------------------------------------------------------------- +function doublemonitor.mt:__call(...) + return doublemonitor.new(...) +end + +return setmetatable(doublemonitor, doublemonitor.mt) diff --git a/awesome/.config/awesome/redflat/gauge/monitor/init.lua b/awesome/.config/awesome/redflat/gauge/monitor/init.lua new file mode 100644 index 0000000..80aacea --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/monitor/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.gauge.monitor" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/gauge/monitor/plain.lua b/awesome/.config/awesome/redflat/gauge/monitor/plain.lua new file mode 100644 index 0000000..82b0e45 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/monitor/plain.lua @@ -0,0 +1,113 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat monitor widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget with label and progressbar +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local monitor = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + line = { height = 4, y = 30 }, + font = { font = "Sans", size = 16, face = 0, slant = 0 }, + text_shift = 22, + label = "MON", + width = 100, + step = 0.05, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.monitor.plain") or {}) +end + +-- Create a new monitor widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function monitor.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + widg._data = { color = style.color.icon, level = 0, alert = false, label = style.label } + + if style.width then widg:set_forced_width(style.width) end + + -- User functions + ------------------------------------------------------------ + function widg:set_value(x) + local value = x < 1 and x or 1 + local level = math.floor(value / style.step) * style.step + + if level ~= self._data.level then + self._data.level = level + self:emit_signal("widget::redraw_needed") + end + end + + function widg:set_label(label) + if label ~= self._data.label then + self._data.label = label + self:emit_signal("widget::redraw_needed") + end + end + + function widg:set_alert(alert) + if alert ~= self._data.alert then + self._data.alert = alert + self._data.color = alert and style.color.main or style.color.icon + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + return width, height + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width) + + -- label + cr:set_source(color(self._data.color)) + redutil.cairo.set_font(cr, style.font) + redutil.cairo.textcentre.horizontal(cr, { width/2, style.text_shift }, self._data.label) + + -- progressbar + local wd = { width, width * self._data.level } + for i = 1, 2 do + cr:set_source(color(i > 1 and style.color.main or style.color.gray)) + cr:rectangle(0, style.line.y, wd[i], style.line.height) + cr:fill() + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call monitor module as function +----------------------------------------------------------------------------------------------------------------------- +function monitor.mt:__call(...) + return monitor.new(...) +end + +return setmetatable(monitor, monitor.mt) diff --git a/awesome/.config/awesome/redflat/gauge/separator.lua b/awesome/.config/awesome/redflat/gauge/separator.lua new file mode 100644 index 0000000..20d6776 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/separator.lua @@ -0,0 +1,87 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat separatoe widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Simple graphical separator to decorate panel +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local separator = {} + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + marginv = { 0, 0, 0, 0 }, + marginh = { 0, 0, 0, 0 }, + color = { shadow1 = "#141414", shadow2 = "#313131" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.separator") or {}) +end + +-- Create a new separator widget +-- Total size two pixels bigger than sum of margins for general direction +----------------------------------------------------------------------------------------------------------------------- +local function separator_base(horizontal, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + if not style.margin then + style.margin = horizontal and style.marginh or style.marginv + end + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + if horizontal then + return width, 2 + style.margin[3] + style.margin[4] + else + return 2 + style.margin[1] + style.margin[2], height + end + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + local w = width - style.margin[1] - style.margin[2] + local h = height - style.margin[3] - style.margin[4] + + cr:translate(style.margin[1], style.margin[3]) + cr:set_source(color(style.color.shadow1)) + if horizontal then cr:rectangle(0, 0, w, 1) else cr:rectangle(0, 0, 1, h) end + cr:fill() + + cr:set_source(color(style.color.shadow2)) + if horizontal then cr:rectangle(0, 1, w, 1) else cr:rectangle(1, 0, 1, h) end + cr:fill() + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Horizontal and vertial variants +----------------------------------------------------------------------------------------------------------------------- +function separator.vertical(style) + return separator_base(false, style) +end + +function separator.horizontal(style) + return separator_base(true, style) +end + +----------------------------------------------------------------------------------------------------------------------- +return separator diff --git a/awesome/.config/awesome/redflat/gauge/svgbox.lua b/awesome/.config/awesome/redflat/gauge/svgbox.lua new file mode 100644 index 0000000..eef63ee --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/svgbox.lua @@ -0,0 +1,218 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat svg icon widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Imagebox widget modification +-- Use Gtk PixBuf API to resize svg image +-- Color setup added +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ wibox.widget.imagebox v3.5.2 +------ (c) 2010 Uli Schlachter +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local string = string +local type = type +local pcall = pcall +local print = print +local math = math + +-- local Gdk = require("lgi").Gdk +-- local pixbuf = require("lgi").GdkPixbuf +-- local cairo = require("lgi").cairo +local base = require("wibox.widget.base") +local surface = require("gears.surface") +local color = require("gears.color") + +local pixbuf +local function load_pixbuf() + local _ = require("lgi").Gdk + pixbuf = require("lgi").GdkPixbuf +end +local is_pixbuf_loaded = pcall(load_pixbuf) + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local svgbox = { mt = {} } + +-- weak table is useless here +-- TODO: implement mechanics to clear cache +local cache = setmetatable({}, { __mode = 'k' }) + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Check if given argument is SVG file +local function is_svg(args) + return type(args) == "string" and string.match(args, "%.svg") +end + +-- Check if need scale image +local function need_scale(widg, width, height) + return (widg._image.width ~= width or widg._image.height ~= height) and widg.resize_allowed +end + +-- Cache functions +local function get_cache(file, width, height) + return cache[file .. "-" .. width .. "x" .. height] +end + +local function set_cache(file, width, height, surf) + cache[file .. "-" .. width .. "x" .. height] = surf +end + +-- Get cairo pattern +local function get_current_pattern(cr) + cr:push_group() + cr:paint() + return cr:pop_group() +end + +-- Create Gdk PixBuf from SVG file with given sizes +local function pixbuf_from_svg(file, width, height) + local cached = get_cache(file, width, height) + + if cached then + return cached + else + -- naughty.notify({ text = file }) + local buf = pixbuf.Pixbuf.new_from_file_at_scale(file, width, height, true) + set_cache(file, width, height, buf) + return buf + end +end + +-- Returns a new svgbox +----------------------------------------------------------------------------------------------------------------------- +function svgbox.new(image, resize_allowed, newcolor) + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = base.make_widget() + + -- User functions + ------------------------------------------------------------ + function widg:set_image(image_name) + local loaded_image + + if type(image_name) == "string" then + local success, result = pcall(surface.load, image_name) + if not success then + print("Error while reading '" .. image_name .. "': " .. result) + return false + end + self.image_name = image_name + loaded_image = result + else + loaded_image = surface.load(image_name) + end + + if loaded_image and (loaded_image.height <= 0 or loaded_image.width <= 0) then return false end + + self._image = loaded_image + self.is_svg = is_svg(image_name) + + self:emit_signal("widget::redraw_needed") + return true + end + + function widg:set_color(new_color) + if self.color ~= new_color then + self.color = new_color + self:emit_signal("widget::redraw_needed") + end + end + + function widg:set_resize(allowed) + self.resize_allowed = allowed + self:emit_signal("widget::redraw_needed") + end + + function widg:set_vector_resize(allowed) + self.vector_resize_allowed = allowed + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + local fw, fh = self:get_forced_width(), self:get_forced_height() + if fw or fh then + return fw or width, fh or height + else + if not self._image then return 0, 0 end + + local w, h = self._image.width, self._image.height + + if self.resize_allowed or w > width or h > height then + local aspect = math.min(width / w, height / h) + return w * aspect, h * aspect + end + + return w, h + end + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + if width == 0 or height == 0 or not self._image then return end + + local w, h = self._image.width, self._image.height + local aspect = math.min(width / w, height / h) + + cr:save() + -- let's scale the image so that it fits into (width, height) + if need_scale(self, width, height) then + if self.is_svg and self.vector_resize_allowed and is_pixbuf_loaded then + -- for vector image + local pixbuf_ = pixbuf_from_svg(self.image_name, math.floor(w * aspect), math.floor(h * aspect)) + cr:set_source_pixbuf(pixbuf_, 0, 0) + else + -- for raster image + cr:scale(aspect, aspect) + cr:set_source_surface(self._image, 0, 0) + cr:scale(1/aspect, 1/aspect) -- fix this !!! + end + else + cr:set_source_surface(self._image, 0, 0) + end + + -- set icon color if need + if self.color then + local pattern = get_current_pattern(cr) + cr:scale(aspect, aspect) -- fix this !!! + cr:set_source(color(self.color)) + cr:scale(1/aspect, 1/aspect) -- fix this !!! + cr:mask(pattern, 0, 0) + else + cr:paint() + end + + cr:restore() + end + + -------------------------------------------------------------------------------- + if resize_allowed ~= nil then + widg.resize_allowed = resize_allowed + else + widg.resize_allowed = true + end + + widg.color = newcolor + widg.vector_resize_allowed = true + + if image then widg:set_image(image) end + + return widg +end + +-- Config metatable to call svgbox module as function +----------------------------------------------------------------------------------------------------------------------- +function svgbox.mt:__call(...) + return svgbox.new(...) +end + +return setmetatable(svgbox, svgbox.mt) diff --git a/awesome/.config/awesome/redflat/gauge/tag/blue.lua b/awesome/.config/awesome/redflat/gauge/tag/blue.lua new file mode 100644 index 0000000..a82faa8 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/tag/blue.lua @@ -0,0 +1,125 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat tag widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom widget to display tag info +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math + +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local bluetag = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 80, + font = { font = "Sans", size = 16, face = 0, slant = 0 }, + text_shift = 32, + point = { height = 4, gap = 8, dx = 6, width = 40 }, + show_min = false, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0", urgent = "#32882d" } + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.tag.blue") or {}) +end + + +-- Create a new tag widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function bluetag.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- updating values + local data = { + state = { text = "TEXT" }, + width = style.width or nil + } + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + -- User functions + ------------------------------------------------------------ + function widg:set_state(state) + data.state = state + self:emit_signal("widget::redraw_needed") + end + + function widg:set_width(width) + data.width = width + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + if data.width then + return math.min(width, data.width), height + else + return width, height + end + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width) + local n = #data.state.list + + -- text + cr:set_source(color( + data.state.active and style.color.main + or (n == 0 or data.state.minimized) and style.color.gray + or style.color.icon + )) + redutil.cairo.set_font(cr, style.font) + redutil.cairo.textcentre.horizontal(cr, { width / 2, style.text_shift }, data.state.text) + + -- occupied mark + local x = (width - style.point.width) / 2 + + if n > 0 then + local l = (style.point.width - (n - 1) * style.point.dx) / n + + for i = 1, n do + local cl = data.state.list[i].focus and style.color.main or + data.state.list[i].urgent and style.color.urgent or + data.state.list[i].minimized and style.show_min and style.color.gray or + style.color.icon + cr:set_source(color(cl)) + cr:rectangle(x + (i - 1) * (style.point.dx + l), style.point.gap, l, style.point.height) + cr:fill() + end + else + cr:set_source(color(style.color.gray)) + cr:rectangle((width - style.point.width) / 2, style.point.gap, style.point.width, style.point.height) + cr:fill() + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call bluetag module as function +----------------------------------------------------------------------------------------------------------------------- +function bluetag.mt:__call(...) + return bluetag.new(...) +end + +return setmetatable(bluetag, bluetag.mt) diff --git a/awesome/.config/awesome/redflat/gauge/tag/green.lua b/awesome/.config/awesome/redflat/gauge/tag/green.lua new file mode 100644 index 0000000..3bbf29e --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/tag/green.lua @@ -0,0 +1,89 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat tag widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom widget to display tag info +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local unpack = unpack or table.unpack + +local awful = require("awful") +local wibox = require("wibox") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local greentag = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 80, + margin = { 2, 2, 2, 2 }, + icon = { unknown = redutil.base.placeholder() }, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0", urgent = "#32882d" }, + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.tag.green") or {}) +end + + +-- Create a new tag widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function greentag.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- updating values + local data = { + state = {}, + width = style.width or nil + } + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.layout.align.horizontal() + widg._svgbox = svgbox() + widg:set_middle(wibox.container.margin(widg._svgbox, unpack(style.margin))) + widg:set_forced_width(data.width) + widg:set_expand("outside") + + -- User functions + ------------------------------------------------------------ + function widg:set_state(state) + data.state = state + local icon = style.icon[awful.layout.getname(state.layout)] or style.icon.unknown + self._svgbox:set_image(icon) + self._svgbox:set_color( + data.state.active and style.color.main + or data.state.urgent and style.color.urgent + or data.state.occupied and style.color.icon + or style.color.gray + ) + end + + function widg:set_width(width) + data.width = width + self.set_forced_width(width) + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call greentag module as function +----------------------------------------------------------------------------------------------------------------------- +function greentag.mt:__call(...) + return greentag.new(...) +end + +return setmetatable(greentag, greentag.mt) diff --git a/awesome/.config/awesome/redflat/gauge/tag/init.lua b/awesome/.config/awesome/redflat/gauge/tag/init.lua new file mode 100644 index 0000000..7148144 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/tag/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.gauge.tag" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/gauge/tag/orange.lua b/awesome/.config/awesome/redflat/gauge/tag/orange.lua new file mode 100644 index 0000000..0e405e5 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/tag/orange.lua @@ -0,0 +1,141 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat tag widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom widget to display tag info +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math + +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local orangetag = { mt = {} } +local TPI = math.pi * 2 + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 50, + line_width = 4, + radius = 14, + iradius = 6, + cgap = TPI / 20, + show_min = true, + min_sections = 1, + text = false, + font = { font = "Sans", size = 16, face = 0, slant = 0 }, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0", urgent = "#32882d" } + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.tag.orange") or {}) +end + +-- Create a new tag widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function orangetag.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- updating values + local data = { + state = { text = "TEXT" }, + width = style.width or nil + } + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + -- User functions + ------------------------------------------------------------ + function widg:set_state(state) + data.state = state + self:emit_signal("widget::redraw_needed") + end + + function widg:set_width(width) + data.width = width + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + if data.width then + return math.min(width, data.width), height + else + return width, height + end + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + + local sections = math.max(#data.state.list, style.min_sections) + local step = (TPI - sections * style.cgap) / sections + local cl + + -- active mark + cl = data.state.active and style.color.main or (data.state.occupied and style.color.icon or style.color.gray) + cr:set_source(color(cl)) + + if style.text then + -- text + redutil.cairo.set_font(cr, style.font) + local ext = cr:text_extents(tostring(#data.state.list)) + cr:move_to((width - ext.width - ext.x_bearing) / 2, (height + ext.height + ext.x_bearing) / 2) + cr:show_text(data.state.text) + cr:stroke() + else + -- round + cr:arc(width / 2, height / 2, style.iradius, 0, TPI) + cr:fill() + end + + -- occupied mark + cr:set_line_width(style.line_width) + for i = 1, sections do + local cs = -TPI / 4 + (i - 1) * (step + style.cgap) + style.cgap / 2 + + if data.state.list[i] then + cl = data.state.list[i].focus and style.color.main or + data.state.list[i].urgent and style.color.urgent or + data.state.list[i].minimized and style.show_min and style.color.gray or style.color.icon + else + cl = style.color.gray + end + + cr:set_source(color(cl)) + if sections == 1 then + cr:arc(width / 2, height / 2, style.radius, 0, TPI) + else + cr:arc(width / 2, height / 2, style.radius, cs, cs + step) + end + cr:stroke() + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call orangetag module as function +----------------------------------------------------------------------------------------------------------------------- +function orangetag.mt:__call(...) + return orangetag.new(...) +end + +return setmetatable(orangetag, orangetag.mt) diff --git a/awesome/.config/awesome/redflat/gauge/tag/red.lua b/awesome/.config/awesome/redflat/gauge/tag/red.lua new file mode 100644 index 0000000..cf80607 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/tag/red.lua @@ -0,0 +1,191 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat tag widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom widget to display tag info +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math + +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local redtag = { mt = {} } + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +local function fill_geometry(width, height, geometry) + local zero_geometry = { x = 0, y = 0, width = width, height = height } + return redutil.table.merge(zero_geometry, geometry) +end + +-- Cairo drawing functions +-------------------------------------------------------------------------------- +local cairo_draw = {} + +-- Tag active mark (line) +------------------------------------------------------------ +function cairo_draw.active(cr, width, height, geometry) + geometry = fill_geometry(width, height, geometry) + + cr:rectangle(geometry.x, geometry.y, geometry.width, geometry.height) + cr:fill() +end + +-- Tag focus mark (rhombus) +------------------------------------------------------------ +function cairo_draw.focus(cr, width, height, geometry) + geometry = fill_geometry(width, height, geometry) + + cr:move_to(geometry.x + geometry.width / 2, geometry.y) + cr:rel_line_to(geometry.width / 2, geometry.height / 2) + cr:rel_line_to(- geometry.width / 2, geometry.height / 2) + cr:rel_line_to(- geometry.width / 2, - geometry.height / 2) + cr:close_path() + cr:fill() +end + +-- Tag occupied mark (label) +------------------------------------------------------------ +function cairo_draw.occupied(cr, width, height, geometry) + geometry = fill_geometry(width, height, geometry) + + cr:move_to(geometry.x, geometry.y) + cr:rel_line_to(0, geometry.height) + cr:rel_line_to(geometry.width / 2, - geometry.width / 2) + cr:rel_line_to(geometry.width / 2, geometry.width / 2) + cr:rel_line_to(0, - geometry.height) + cr:close_path() + cr:fill() +end + + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 80, + font = { font = "Sans", size = 16, face = 0, slant = 0 }, + text_shift = 22, + counter = { size = 12, margin = 2, coord = { 40, 35 } }, + show_counter = true, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0", urgent = "#32882d", + wibox = "#202020" } + } + + -- functions for state marks + style.marks = cairo_draw + + -- geometry for state marks + style.geometry = { + active = { height = 5, y = 45 }, + focus = { x = 5, y = 10, width = 10, height = 15 }, + occupied = { x = 65, y = 10, width = 10, height = 15 } + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.tag.red") or {}) +end + +-- Create a new tag widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function redtag.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- updating values + local data = { + state = { text = "TEXT" }, + width = style.width or nil + } + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + -- User functions + ------------------------------------------------------------ + function widg:set_state(state) + data.state = state + self:emit_signal("widget::redraw_needed") + end + + function widg:set_width(width) + data.width = width + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + if data.width then + return math.min(width, data.width), height + else + return width, height + end + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + + -- text + cr:set_source(color(style.color.icon)) + redutil.cairo.set_font(cr, style.font) + redutil.cairo.textcentre.horizontal(cr, { width/2, style.text_shift }, data.state.text) + + -- active mark + cr:set_source(color(data.state.active and style.color.main or style.color.gray)) + style.marks.active(cr, width, height, style.geometry.active) + + -- occupied mark + if data.state.occupied then + cr:set_source(color(data.state.urgent and style.color.urgent or style.color.main)) + style.marks.occupied(cr, width, height, style.geometry.occupied) + end + + -- focus mark + if data.state.focus then + cr:set_source(color(style.color.main)) + style.marks.focus(cr, width, height, style.geometry.focus) + end + + -- counter + if style.show_counter and #data.state.list > 0 then + cr:set_font_size(style.counter.size) + local ext = cr:text_extents(tostring(#data.state.list)) + cr:set_source(color(style.color.wibox)) + cr:rectangle( + style.counter.coord[1] - ext.width / 2 - style.counter.margin, + style.counter.coord[2] - ext.height / 2 - style.counter.margin, + ext.width + 2 * style.counter.margin, + ext.height + 2 * style.counter.margin + ) + cr:fill() + + cr:set_source(color(style.color.icon)) + redutil.cairo.textcentre.full(cr, style.counter.coord, tostring(#data.state.list)) + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call redtag module as function +----------------------------------------------------------------------------------------------------------------------- +function redtag.mt:__call(...) + return redtag.new(...) +end + +return setmetatable(redtag, redtag.mt) diff --git a/awesome/.config/awesome/redflat/gauge/tag/ruby.lua b/awesome/.config/awesome/redflat/gauge/tag/ruby.lua new file mode 100644 index 0000000..acd5e16 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/tag/ruby.lua @@ -0,0 +1,114 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat tag widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom widget to display tag info +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math + +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local rubytag = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 50, + base = { pad = 5, height = 12, thickness = 2 }, + mark = { pad = 10, height = 4 }, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0", urgent = "#32882d" } + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.tag.ruby") or {}) +end + +-- Create a new tag widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function rubytag.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- updating values + local data = { + width = style.width or nil + } + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + -- User functions + ------------------------------------------------------------ + function widg:set_state(state) + data.state = state + self:emit_signal("widget::redraw_needed") + end + + function widg:set_width(width) + data.width = width + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + if data.width then + return math.min(width, data.width), height + else + return width, height + end + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + + -- state + local cl = data.state.active and style.color.main or style.color.gray + cr:set_source(color(cl)) + + cr:rectangle( + style.base.pad, math.floor((height - style.base.height) / 2), + width - 2 * style.base.pad, style.base.height + ) + cr:set_line_width(style.base.thickness) + cr:stroke() + + -- focus + cl = data.state.focus and style.color.main + or data.state.urgent and style.color.urgent + or (data.state.occupied and style.color.icon or style.color.gray) + cr:set_source(color(cl)) + + cr:rectangle( + style.mark.pad, math.floor((height - style.mark.height) / 2), + width - 2 * style.mark.pad, style.mark.height + ) + + cr:fill() + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call rubytag module as function +----------------------------------------------------------------------------------------------------------------------- +function rubytag.mt:__call(...) + return rubytag.new(...) +end + +return setmetatable(rubytag, rubytag.mt) diff --git a/awesome/.config/awesome/redflat/gauge/task/green.lua b/awesome/.config/awesome/redflat/gauge/task/green.lua new file mode 100644 index 0000000..f79c638 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/task/green.lua @@ -0,0 +1,116 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat task widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget includes colored icon +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local wibox = require("wibox") +local beautiful = require("beautiful") +local unpack = unpack or table.unpack + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local greentask = { mt = {} } + + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 40, + margin = { 0, 0, 0, 0 }, + df_icon = redutil.base.placeholder(), + counter = { font = "Sans 10", mask = "%d" }, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0", urgent = "#32882d", wibox = "#202020" }, + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.task.green") or {}) +end + + +-- Create a new greentask widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function greentask.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- updating values + local data = { + state = {}, + width = style.width or nil + } + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.layout.stack() + + widg._svgbox = svgbox() + widg._textbox = wibox.widget{ + align = 'center', + valign = 'bottom', + font = style.counter.font, + widget = wibox.widget.textbox + } + + widg._icon_layout = wibox.widget({ + nil, wibox.container.margin(widg._svgbox, unpack(style.margin)), + layout = wibox.layout.align.horizontal, + expand = "outside", + }) + widg._text_layout = wibox.widget({ + nil, nil, widg._textbox, + -- nil, nil, wibox.container.background(widg._textbox, style.color.wibox), + layout = wibox.layout.align.vertical, + }) + + widg:add(widg._icon_layout) + widg:add(widg._text_layout) + widg:set_forced_width(data.width) + + -- User functions + ------------------------------------------------------------ + function widg:set_state(state) + data.state = redutil.table.merge(data.state, state) + + -- icon + local icon = state.icon or style.df_icon + self._svgbox:set_image(icon) + self._svgbox:set_color( + data.state.focus and style.color.main + or data.state.urgent and style.color.urgent + or data.state.minimized and style.color.gray + or style.color.icon + ) + + -- counter + self._text_layout:set_visible(state.num > 1) + self._textbox:set_markup( + string.format('' .. style.counter.mask .. '', style.color.wibox, state.num) + ) + end + + function widg:set_width(width) + data.width = width + self.set_forced_width(width) + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call greentask module as function +----------------------------------------------------------------------------------------------------------------------- +function greentask.mt:__call(...) + return greentask.new(...) +end + +return setmetatable(greentask, greentask.mt) diff --git a/awesome/.config/awesome/redflat/gauge/task/init.lua b/awesome/.config/awesome/redflat/gauge/task/init.lua new file mode 100644 index 0000000..a33b632 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/task/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.gauge.task" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/gauge/task/red.lua b/awesome/.config/awesome/redflat/gauge/task/red.lua new file mode 100644 index 0000000..2e44fbc --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/task/red.lua @@ -0,0 +1,120 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat task widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Widget includes label and decorative line +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local redtask = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 40, + line = { height = 4, y = 30 }, + font = { font = "Sans", size = 16, face = 0, slant = 0 }, + text_shift = 22, + counter = { size = 12, margin = 2 }, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0", + urgent = "#32882d", wibox = "#202020" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.task.red") or {}) +end + +-- Create a new redtask widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function redtask.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- updating values + local data = { + state = { text = "TXT" } + } + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + -- User functions + ------------------------------------------------------------ + function widg:set_state(state) + data.state = redutil.table.merge(data.state, state) + self:emit_signal("widget::redraw_needed") + end + + function widg:set_width(width) + data.width = width + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + if data.width then + return math.min(width, data.width), height + else + return width, height + end + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width) + + -- label + cr:set_source(color(data.state.minimized and style.color.gray or style.color.icon)) + redutil.cairo.set_font(cr, style.font) + redutil.cairo.textcentre.horizontal(cr, { width / 2, style.text_shift }, data.state.text) + + -- line + local line_color = data.state.focus and style.color.main + or data.state.urgent and style.color.urgent + or style.color.gray + cr:set_source(color(line_color)) + cr:rectangle(0, style.line.y, width, style.line.height) + cr:fill() + + -- counter + if data.state.num > 1 then + cr:set_font_size(style.counter.size) + local ext = cr:text_extents(tostring(data.state.num)) + cr:set_source(color(style.color.wibox)) + cr:rectangle( + (width - ext.width) / 2 - style.counter.margin, style.line.y, + ext.width + 2 * style.counter.margin, style.counter.size + ) + cr:fill() + + cr:set_source(color(style.color.icon)) + local coord = { width / 2, style.line.y + style.counter.size / 2 } + redutil.cairo.textcentre.horizontal(cr, coord, tostring(data.state.num)) + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call redtask module as function +----------------------------------------------------------------------------------------------------------------------- +function redtask.mt:__call(...) + return redtask.new(...) +end + +return setmetatable(redtask, redtask.mt) diff --git a/awesome/.config/awesome/redflat/gauge/task/ruby.lua b/awesome/.config/awesome/redflat/gauge/task/ruby.lua new file mode 100644 index 0000000..6727649 --- /dev/null +++ b/awesome/.config/awesome/redflat/gauge/task/ruby.lua @@ -0,0 +1,137 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat tag widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom widget to display tag info +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local math = math + +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require("gears.color") + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local rubytask = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 80, + font = { font = "Sans", size = 16, face = 0, slant = 0 }, + text_shift = 26, + point = { size = 4, space = 3, gap = 3 }, + underline = { height = 20, thickness = 4, gap = 36, dh = 4 }, + color = { main = "#b1222b", gray = "#575757", icon = "#a0a0a0", urgent = "#32882d" } + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "gauge.task.ruby") or {}) +end + + +-- Create a new tag widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function rubytask.new(style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + -- updating values + local data = { + state = { text = "TEXT" }, + width = style.width or nil + } + + -- Create custom widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + -- User functions + ------------------------------------------------------------ + function widg:set_state(state) + data.state = state + self:emit_signal("widget::redraw_needed") + end + + function widg:set_width(width) + data.width = width + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + if data.width then + return math.min(width, data.width), height + else + return width, height + end + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width) + local n = #data.state.list + + -- text + cr:set_source(color( + data.state.active and style.color.main + or data.state.minimized and style.color.gray + or style.color.icon + )) + redutil.cairo.set_font(cr, style.font) + redutil.cairo.textcentre.horizontal(cr, { width / 2, style.text_shift }, data.state.text) + + -- underline + cr:set_source(color( + data.state.focus and style.color.main + or data.state.minimized and style.color.gray + or style.color.icon + )) + + cr:move_to(0, style.underline.gap) + cr:rel_line_to(width, 0) + cr:rel_line_to(0, -style.underline.height) + cr:rel_line_to(-style.underline.thickness, style.underline.dh) + cr:rel_line_to(0, style.underline.height - style.underline.dh - style.underline.thickness) + cr:rel_line_to(2 * style.underline.thickness - width, 0) + cr:rel_line_to(0, style.underline.thickness + style.underline.dh - style.underline.height) + cr:rel_line_to(-style.underline.thickness, - style.underline.dh) + cr:close_path(-style.underline.thickness, 0) + cr:fill() + + -- clients counter + local x = math.floor((width - style.point.size * n - style.point.space * (n - 1)) / 2) + local l = style.point.size + style.point.space + + for i = 1, n do + cr:set_source(color( + data.state.list[i].focus and style.color.main or + data.state.list[i].urgent and style.color.urgent or + data.state.list[i].minimized and style.color.gray or + style.color.icon + )) + cr:rectangle(x + (i - 1) * l, style.point.gap, style.point.size, style.point.size) + cr:fill() + end + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call rubytask module as function +----------------------------------------------------------------------------------------------------------------------- +function rubytask.mt:__call(...) + return rubytask.new(...) +end + +return setmetatable(rubytask, rubytask.mt) diff --git a/awesome/.config/awesome/redflat/init.lua b/awesome/.config/awesome/redflat/init.lua new file mode 100644 index 0000000..77cc904 --- /dev/null +++ b/awesome/.config/awesome/redflat/init.lua @@ -0,0 +1,12 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable + +return setmetatable( + { _NAME = "redflat" }, + { __index = function(table, key) + local module = rawget(table, key) + return module or require(table._NAME .. '.' .. key) + end } +) diff --git a/awesome/.config/awesome/redflat/layout/common.lua b/awesome/.config/awesome/redflat/layout/common.lua new file mode 100644 index 0000000..b447869 --- /dev/null +++ b/awesome/.config/awesome/redflat/layout/common.lua @@ -0,0 +1,371 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat layout shared functions -- +----------------------------------------------------------------------------------------------------------------------- +-- Hotkeys for layout manipulation +-- Handlers adapted for work with redflat navigator widget +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local awful = require("awful") +local navigator = require("redflat.service.navigator") + +local ipairs = ipairs + +local alayout = awful.layout +local redutil = require("redflat.util") +local redtip = require("redflat.float.hotkeys") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local common = { handler = {}, last = {}, tips = {}, keys = {}, mouse = {} } + +common.wfactstep = 0.05 + +-- default keys +common.keys.base = { + { + { "Mod4" }, "c", function() common.action.kill() end, + { description = "Kill application", group = "Action" } + }, + { + {}, "Escape", function() common.action.exit() end, + { description = "Exit navigation mode", group = "Action" } + }, + { + { "Mod4" }, "Escape", function() common.action.exit() end, + {} -- hidden key + }, + { + { "Mod4" }, "Super_L", function() common.action.exit() end, + { description = "Exit navigation mode", group = "Action" } + }, + { + { "Mod4" }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, +} + +common.keys.swap = { + { + { "Mod4" }, "Up", function() awful.client.swap.bydirection("up") end, + { description = "Move application up", group = "Movement" } + }, + { + { "Mod4" }, "Down", function() awful.client.swap.bydirection("down") end, + { description = "Move application down", group = "Movement" } + }, + { + { "Mod4" }, "Left", function() awful.client.swap.bydirection("left") end, + { description = "Move application left", group = "Movement" } + }, + { + { "Mod4" }, "Right", function() awful.client.swap.bydirection("right") end, + { description = "Move application right", group = "Movement" } + }, +} + +common.keys.tile = { + { + { "Mod4" }, "l", function () awful.tag.incmwfact( common.wfactstep) end, + { description = "Increase master width factor", group = "Layout" } + }, + { + { "Mod4" }, "h", function () awful.tag.incmwfact(-common.wfactstep) end, + { description = "Decrease master width factor", group = "Layout" } + }, + { + { "Mod4", "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end, + { description = "Increase the number of master clients", group = "Layout" } + }, + { + { "Mod4", "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end, + { description = "Decrease the number of master clients", group = "Layout" } + }, + { + { "Mod4", "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end, + { description = "Increase the number of columns", group = "Layout" } + }, + { + { "Mod4", "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end, + { description = "Decrease the number of columns", group = "Layout" } + }, +} + +common.keys.corner = { + { + { "Mod4" }, "l", function () awful.tag.incmwfact( common.wfactstep) end, + { description = "Increase master width factor", group = "Layout" } + }, + { + { "Mod4" }, "h", function () awful.tag.incmwfact(-common.wfactstep) end, + { description = "Decrease master width factor", group = "Layout" } + }, + { + { "Mod4", "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end, + { description = "Increase the number of master clients", group = "Layout" } + }, + { + { "Mod4", "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end, + { description = "Decrease the number of master clients", group = "Layout" } + }, +} + +common.keys.magnifier = { + { + { "Mod4" }, "l", function () awful.tag.incmwfact( common.wfactstep) end, + { description = "Increase master width factor", group = "Layout" } + }, + { + { "Mod4" }, "h", function () awful.tag.incmwfact(-common.wfactstep) end, + { description = "Decrease master width factor", group = "Layout" } + }, + { + { "Mod4" }, "g", function () awful.client.setmaster(client.focus) end, + { description = "Set focused client as master", group = "Movement" } + }, +} + +-- TODO: set real keyset from navigator theme +common.keys._fake = { + { + { "Mod4" }, "N1 N2", nil, + { + description = "Swap clients by key", group = "Movement", + keyset = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" } + } + }, + { + { "Mod4" }, "N1 N1", nil, + { + description = "Focus client by key", group = "Action", + keyset = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" } + } + }, +} + +-- Common handler actions +----------------------------------------------------------------------------------------------------------------------- +common.action = {} + +function common.action.exit() + navigator:close() + common.last = {} +end + +function common.action.kill() + client.focus:kill() + navigator:restart() + common.last.key = nil +end + +-- Keys setup +----------------------------------------------------------------------------------------------------------------------- + +-- Hotkey tips update functions +-------------------------------------------------------------------------------- +common.updates = {} + +local function build_base_tip() + return awful.util.table.join(common.keys.swap, common.keys.base, common.keys._fake) +end + +local function build_tile_tip() + return awful.util.table.join(common.keys.swap, common.keys.tile, common.keys.base, common.keys._fake) +end + +local function build_corner_tip() + return awful.util.table.join(common.keys.swap, common.keys.corner, common.keys.base, common.keys._fake) +end + +local function build_magnifier_tip() + return awful.util.table.join(common.keys.magnifier, common.keys.base, common.keys._fake) +end + +local function set_corner_tip() + common.tips[alayout.suit.corner.nw] = build_corner_tip() + common.tips[alayout.suit.corner.ne] = build_corner_tip() + common.tips[alayout.suit.corner.sw] = build_corner_tip() + common.tips[alayout.suit.corner.se] = build_corner_tip() +end + +local function set_tile_tip() + common.tips[alayout.suit.tile] = build_tile_tip() + common.tips[alayout.suit.tile.right] = build_tile_tip() + common.tips[alayout.suit.tile.left] = build_tile_tip() + common.tips[alayout.suit.tile.top] = build_tile_tip() + common.tips[alayout.suit.tile.bottom] = build_tile_tip() +end + +common.updates.swap = function() + common.tips[alayout.suit.fair] = build_base_tip() + common.tips[alayout.suit.spiral] = build_base_tip() + common.tips[alayout.suit.spiral.dwindle] = build_base_tip() + set_tile_tip() + set_corner_tip() +end + +common.updates.base = function() + common.tips[alayout.suit.fair] = build_base_tip() + common.tips[alayout.suit.spiral] = build_base_tip() + common.tips[alayout.suit.spiral.dwindle] = build_base_tip() + common.tips[alayout.suit.magnifier] = build_magnifier_tip() + set_tile_tip() + set_corner_tip() +end + +common.updates.magnifier = function() + common.tips[alayout.suit.magnifier] = build_magnifier_tip() +end + +common.updates.tile = function() + set_tile_tip() +end + +common.updates.corner = function() + set_corner_tip() +end + +-- Keys setup function +-------------------------------------------------------------------------------- +function common:set_keys(keys, layout) + if keys then common.keys[layout] = keys end -- update keys + if self.updates[layout] then self.updates[layout]() end -- update tips +end + +-- Shared keyboard handlers +----------------------------------------------------------------------------------------------------------------------- +common.grabbers = {} + +-- Base grabbers +-------------------------------------------------------------------------------- +common.grabbers.base = function(mod, key) + for _, k in ipairs(common.keys.base) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return true end + end + + -- if numkey pressed + local index = awful.util.table.hasitem(navigator.style.num, key) + + -- swap or focus client + if index then + if navigator.data[index] and awful.util.table.hasitem(navigator.cls, navigator.data[index].client) then + if common.last.key then + if common.last.key == index then + client.focus = navigator.data[index].client + client.focus:raise() + else + redutil.client.swap(navigator.data[common.last.key].client, navigator.data[index].client) + end + common.last.key = nil + else + common.last.key = index + end + + return true + end + end +end + +common.grabbers.swap = function(mod, key) + for _, k in ipairs(common.keys.swap) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return true end + end +end + +common.grabbers.tile = function(mod, key) + for _, k in ipairs(common.keys.tile) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return true end + end +end + +common.grabbers.corner = function(mod, key) + for _, k in ipairs(common.keys.corner) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return true end + end +end + +common.grabbers.magnifier = function(mod, key) + for _, k in ipairs(common.keys.magnifier) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return true end + end +end + +-- Grabbers for awful layouts +-------------------------------------------------------------------------------- +local function fair_handler(mod, key, event) + if event == "press" then return end + if common.grabbers.swap(mod, key, event) then return end + if common.grabbers.base(mod, key, event) then return end +end + +local function magnifier_handler(mod, key, event) + if event == "press" then return end + if common.grabbers.magnifier(mod, key, event) then return end + if common.grabbers.base(mod, key, event) then return end +end + +local function tile_handler(mod, key, event) + if event == "press" then return end + if common.grabbers.tile(mod, key, event) then return end + if common.grabbers.swap(mod, key, event) then return end + if common.grabbers.base(mod, key, event) then return end +end + +local function corner_handler(mod, key, event) + if event == "press" then return end + if common.grabbers.corner(mod, key, event) then return end + if common.grabbers.swap(mod, key, event) then return end + if common.grabbers.base(mod, key, event) then return end +end + +-- Handlers table +----------------------------------------------------------------------------------------------------------------------- +common.handler[alayout.suit.fair] = fair_handler +common.handler[alayout.suit.spiral] = fair_handler +common.handler[alayout.suit.magnifier] = magnifier_handler +common.handler[alayout.suit.tile] = tile_handler +common.handler[alayout.suit.tile.right] = tile_handler +common.handler[alayout.suit.tile.left] = tile_handler +common.handler[alayout.suit.tile.top] = tile_handler +common.handler[alayout.suit.tile.bottom] = tile_handler +common.handler[alayout.suit.corner.nw] = corner_handler +common.handler[alayout.suit.corner.ne] = corner_handler +common.handler[alayout.suit.corner.se] = corner_handler +common.handler[alayout.suit.corner.sw] = corner_handler + +common.handler[alayout.suit.spiral.dwindle] = fair_handler + +-- tip dirty setup +common:set_keys(nil, "base") + + +-- Slightly changed awful mouse move handler +----------------------------------------------------------------------------------------------------------------------- +function common.mouse.move(c, context, hints) + -- Quit if it isn't a mouse.move on a tiled layout, that's handled elsewhere (WHERE?) + if c.floating then return end + if context ~= "mouse.move" then return end + + -- move to screen with mouse + if mouse.screen ~= c.screen then c.screen = mouse.screen end + + -- check if cutstom layout hadler availible + local l = c.screen.selected_tag and c.screen.selected_tag.layout or nil + if l == awful.layout.suit.floating then return end + + if l and l.move_handler then + l.move_handler(c, context, hints) + return + end + + -- general handler for tile layouts + local c_u_m = mouse.current_client + if c_u_m and not c_u_m.floating then + if c_u_m ~= c then c:swap(c_u_m) end + end +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return common diff --git a/awesome/.config/awesome/redflat/layout/grid.lua b/awesome/.config/awesome/redflat/layout/grid.lua new file mode 100644 index 0000000..60fb226 --- /dev/null +++ b/awesome/.config/awesome/redflat/layout/grid.lua @@ -0,0 +1,480 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat grid layout -- +----------------------------------------------------------------------------------------------------------------------- +-- Floating layout with discrete geometry +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local beautiful = require("beautiful") + +local ipairs = ipairs +local pairs = pairs +local math = math +local unpack = unpack or table.unpack + +local awful = require("awful") +local common = require("redflat.layout.common") +local redutil = require("redflat.util") + +local hasitem = awful.util.table.hasitem + + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local grid = { data = {} } +grid.name = "grid" + +-- default keys +grid.keys = {} +grid.keys.move = { + { + { "Mod4" }, "Up", function() grid.move_to("up") end, + { description = "Move window up", group = "Movement" } + }, + { + { "Mod4" }, "Down", function() grid.move_to("down") end, + { description = "Move window down", group = "Movement" } + }, + { + { "Mod4" }, "Left", function() grid.move_to("left") end, + { description = "Move window left", group = "Movement" } + }, + { + { "Mod4" }, "Right", function() grid.move_to("right") end, + { description = "Move window right", group = "Movement" } + }, + { + { "Mod4", "Control" }, "Up", function() grid.move_to("up", true) end, + { description = "Move window up by bound", group = "Movement" } + }, + { + { "Mod4", "Control" }, "Down", function() grid.move_to("down", true) end, + { description = "Move window down by bound", group = "Movement" } + }, + { + { "Mod4", "Control" }, "Left", function() grid.move_to("left", true) end, + { description = "Move window left by bound", group = "Movement" } + }, + { + { "Mod4", "Control" }, "Right", function() grid.move_to("right", true) end, + { description = "Move window right by bound", group = "Movement" } + }, +} + +grid.keys.resize = { + { + { "Mod4" }, "k", function() grid.resize_to("up") end, + { description = "Inrease window size to the up", group = "Resize" } + }, + { + { "Mod4" }, "j", function() grid.resize_to("down") end, + { description = "Inrease window size to the down", group = "Resize" } + }, + { + { "Mod4" }, "h", function() grid.resize_to("left") end, + { description = "Inrease window size to the left", group = "Resize" } + }, + { + { "Mod4" }, "l", function() grid.resize_to("right") end, + { description = "Inrease window size to the right", group = "Resize" } + }, + { + { "Mod4", "Shift" }, "k", function() grid.resize_to("up", nil, true) end, + { description = "Decrease window size from the up", group = "Resize" } + }, + { + { "Mod4", "Shift" }, "j", function() grid.resize_to("down", nil, true) end, + { description = "Decrease window size from the down", group = "Resize" } + }, + { + { "Mod4", "Shift" }, "h", function() grid.resize_to("left", nil, true) end, + { description = "Decrease window size from the left", group = "Resize" } + }, + { + { "Mod4", "Shift" }, "l", function() grid.resize_to("right", nil, true) end, + { description = "Decrease window size from the right", group = "Resize" } + }, + { + { "Mod4", "Control" }, "k", function() grid.resize_to("up", true) end, + { description = "Increase window size to the up by bound", group = "Resize" } + }, + { + { "Mod4", "Control" }, "j", function() grid.resize_to("down", true) end, + { description = "Increase window size to the down by bound", group = "Resize" } + }, + { + { "Mod4", "Control" }, "h", function() grid.resize_to("left", true) end, + { description = "Increase window size to the left by bound", group = "Resize" } + }, + { + { "Mod4", "Control" }, "l", function() grid.resize_to("right", true) end, + { description = "Increase window size to the right by bound", group = "Resize" } + }, + { + { "Mod4", "Control", "Shift" }, "k", function() grid.resize_to("up", true, true) end, + { description = "Decrease window size from the up by bound ", group = "Resize" } + }, + { + { "Mod4", "Control", "Shift" }, "j", function() grid.resize_to("down", true, true) end, + { description = "Decrease window size from the down by bound ", group = "Resize" } + }, + { + { "Mod4", "Control", "Shift" }, "h", function() grid.resize_to("left", true, true) end, + { description = "Decrease window size from the left by bound ", group = "Resize" } + }, + { + { "Mod4", "Control", "Shift" }, "l", function() grid.resize_to("right", true, true) end, + { description = "Decrease window size from the right by bound ", group = "Resize" } + }, +} + +grid.keys.all = awful.util.table.join(grid.keys.move, grid.keys.resize) + + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function compare(a ,b) return a < b end + +-- Find all rails for given client +------------------------------------------------------------ +local function get_rail(c) + local wa = screen[c.screen].workarea + local cls = awful.client.visible(c.screen) + + local rail = { x = { wa.x, wa.x + wa.width }, y = { wa.y, wa.y + wa.height } } + table.remove(cls, hasitem(cls, c)) + + for _, v in ipairs(cls) do + local lg = redutil.client.fullgeometry(v) + local xr = lg.x + lg.width + local yb = lg.y + lg.height + + if not hasitem(rail.x, lg.x) then table.insert(rail.x, lg.x) end + if not hasitem(rail.x, xr) then table.insert(rail.x, xr) end + if not hasitem(rail.y, lg.y) then table.insert(rail.y, lg.y) end + if not hasitem(rail.y, yb) then table.insert(rail.y, yb) end + end + + table.sort(rail.x, compare) + table.sort(rail.y, compare) + + return rail +end + +local function update_rail(c) grid.data.rail = get_rail(c) end + +-- Calculate cell geometry +------------------------------------------------------------ +local function make_cell(wa, cellnum) + local cell = { + x = wa.width / cellnum.x, + y = wa.height / cellnum.y + } + + -- adapt cell table to work with geometry prop + cell.width = cell.x + cell.height = cell.y + + return cell +end + +-- Grid rounding +------------------------------------------------------------ +local function round(a, n) + return n * math.floor((a + n / 2) / n) +end + +-- Fit client into grid +------------------------------------------------------------ +local function fit_cell(g, cell) + local ng = {} + + for k, v in pairs(g) do + ng[k] = math.ceil(round(v, cell[k])) + end + + return ng +end + +-- Check geometry difference +------------------------------------------------------------ +local function is_diff(g1, g2, cell) + for k, v in pairs(g1) do + if math.abs(g2[k] - v) >= cell[k] then return true end + end + + return false +end + +-- Move client +----------------------------------------------------------------------------------------------------------------------- +function grid.move_to(dir, is_rail, k) + local ng = {} + local data = grid.data + local c = client.focus + + if not c then return end + if data.last ~= c then + data.last = c + update_rail(c) + end + + local g = redutil.client.fullgeometry(c) + k = k or 1 + + if dir == "left" then + if is_rail then + for i = #data.rail.x, 1, - 1 do + if data.rail.x[i] < g.x then + ng.x = data.rail.x[i] + break + end + end + else + ng.x = g.x - data.cell.x * k + end + elseif dir == "right" then + if is_rail then + for i = 1, #data.rail.x do + if data.rail.x[i] > g.x + g.width + 1 then + ng.x = data.rail.x[i] - g.width + break + end + end + else + ng.x = g.x + data.cell.x * k + end + elseif dir == "up" then + if is_rail then + for i = #data.rail.y, 1, - 1 do + if data.rail.y[i] < g.y then + ng.y = data.rail.y[i] + break + end + end + else + ng.y = g.y - data.cell.y * k + end + elseif dir == "down" then + if is_rail then + for i = 1, #data.rail.y do + if data.rail.y[i] > g.y + g.height + 1 then + ng.y = data.rail.y[i] - g.height + break + end + end + else + ng.y = g.y + data.cell.y * k + end + end + + redutil.client.fullgeometry(c, ng) +end + +-- Resize client +----------------------------------------------------------------------------------------------------------------------- +grid.resize_to = function(dir, is_rail, is_reverse) + local ng = {} + local c = client.focus + local data = grid.data + + if not c then return end + if data.last ~= c then + data.last = c + update_rail(c) + end + + local g = redutil.client.fullgeometry(c) + local sign = is_reverse and -1 or 1 + + if dir == "up" then + if is_rail then + -- select loop direction (from min to max or from max to min) + local f, l, s = unpack(is_reverse and { 1, #data.rail.y, 1 } or { #data.rail.y, 1, - 1 }) + for i = f, l, s do + if is_reverse and data.rail.y[i] > g.y or not is_reverse and data.rail.y[i] < g.y then + ng = { y = data.rail.y[i], height = g.height + g.y - data.rail.y[i] } + break + end + end + else + ng = { y = g.y - sign * data.cell.y, height = g.height + sign * data.cell.y } + end + elseif dir == "down" then + if is_rail then + local f, l, s = unpack(is_reverse and { #data.rail.y, 1, - 1 } or { 1, #data.rail.y, 1 }) + for i = f, l, s do + if is_reverse and data.rail.y[i] < (g.y + g.height - 1) + or not is_reverse and data.rail.y[i] > (g.y + g.height + 1) then + ng = { height = data.rail.y[i] - g.y } + break + end + end + else + ng = { height = g.height + sign * data.cell.y } + end + elseif dir == "left" then + if is_rail then + local f, l, s = unpack(is_reverse and { 1, #data.rail.x, 1 } or { #data.rail.x, 1, - 1 }) + for i = f, l, s do + if is_reverse and data.rail.x[i] > g.x or not is_reverse and data.rail.x[i] < g.x then + ng = { x = data.rail.x[i], width = g.width + g.x - data.rail.x[i] } + break + end + end + else + ng = { x = g.x - sign * data.cell.x, width = g.width + sign * data.cell.x } + end + elseif dir == "right" then + if is_rail then + local f, l, s = unpack(is_reverse and { #data.rail.x, 1, - 1 } or { 1, #data.rail.x, 1 }) + for i = f, l, s do + if is_reverse and data.rail.x[i] < (g.x + g.width) + or not is_reverse and data.rail.x[i] > (g.x + g.width + 1) then + ng = { width = data.rail.x[i] - g.x } + break + end + end + else + ng = { width = g.width + sign * data.cell.x } + end + end + + redutil.client.fullgeometry(c, ng) +end + +-- Keygrabber +----------------------------------------------------------------------------------------------------------------------- +grid.maingrabber = function(mod, key) + for _, k in ipairs(grid.keys.all) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return true end + end +end + +grid.key_handler = function (mod, key, event) + if event == "press" then return end + if grid.maingrabber(mod, key, event) then return end + if common.grabbers.base(mod, key, event) then return end +end + + +-- Tile function +----------------------------------------------------------------------------------------------------------------------- +function grid.arrange(p) + + -- theme vars + local cellnum = beautiful.cellnum or { x = 100, y = 60 } + + -- aliases + local wa = p.workarea + local cls = p.clients + + -- calculate cell + -- fix useless gap correction? + grid.data.cell = make_cell({ width = wa.width + 2 * p.useless_gap, height = wa.height + 2 * p.useless_gap }, cellnum) + + -- nothing to tile here + if #cls == 0 then return end + + -- tile + for _, c in ipairs(cls) do + local g = redutil.client.fullgeometry(c) + + g = fit_cell(g, grid.data.cell) + redutil.client.fullgeometry(c, g) + end +end + + +-- Mouse moving function +----------------------------------------------------------------------------------------------------------------------- +function grid.move_handler(c, _, hints) + local g = redutil.client.fullgeometry(c) + local hg = { x = hints.x, y = hints.y, width = g.width, height = g.height } + if is_diff(hg, g, grid.data.cell) then + redutil.client.fullgeometry(c, fit_cell(hg, grid.data.cell)) + end +end + + +-- Mouse resizing function +----------------------------------------------------------------------------------------------------------------------- +function grid.mouse_resize_handler(c, corner) + local g = redutil.client.fullgeometry(c) + local cg = g + + -- set_mouse_on_corner(g, corner) + + mousegrabber.run( + function (_mouse) + for _, v in ipairs(_mouse.buttons) do + if v then + local ng + if corner == "bottom_right" then + ng = { + width = _mouse.x - g.x, + height = _mouse.y - g.y + } + elseif corner == "bottom_left" then + ng = { + x = _mouse.x, + width = (g.x + g.width) - _mouse.x, + height = _mouse.y - g.y + } + elseif corner == "top_left" then + ng = { + x = _mouse.x, + y = _mouse.y, + width = (g.x + g.width) - _mouse.x, + height = (g.y + g.height) - _mouse.y + } + else + ng = { + y = _mouse.y, + width = _mouse.x - g.x, + height = (g.y + g.height) - _mouse.y + } + end + + if ng.width <= 0 then ng.width = nil end + if ng.height <= 0 then ng.height = nil end + -- if c.maximized_horizontal then ng.width = g.width ng.x = g.x end + -- if c.maximized_vertical then ng.height = g.height ng.y = g.y end + + if is_diff(ng, cg, grid.data.cell) then + cg = redutil.client.fullgeometry(c, fit_cell(ng, grid.data.cell)) + end + + return true + end + end + return false + end, + corner .. "_corner" + ) +end + +-- Redflat navigator support functions +----------------------------------------------------------------------------------------------------------------------- +function grid:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then grid.keys.all = awful.util.table.join(grid.keys.move, grid.keys.resize) end + end + + self.tip = awful.util.table.join(self.keys.all, common.keys.base) +end + +function grid.startup() + if not grid.tip then grid:set_keys() end +end + +function grid.cleanup() + grid.data.last = nil +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return grid diff --git a/awesome/.config/awesome/redflat/layout/init.lua b/awesome/.config/awesome/redflat/layout/init.lua new file mode 100644 index 0000000..e7d7975 --- /dev/null +++ b/awesome/.config/awesome/redflat/layout/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.layout" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/layout/map.lua b/awesome/.config/awesome/redflat/layout/map.lua new file mode 100644 index 0000000..e430c81 --- /dev/null +++ b/awesome/.config/awesome/redflat/layout/map.lua @@ -0,0 +1,688 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat map layout -- +----------------------------------------------------------------------------------------------------------------------- +-- Tiling with user defined geometry +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local ipairs = ipairs +local pairs = pairs +local math = math +local unpack = unpack or table.unpack + +local awful = require("awful") +local timer = require("gears.timer") + +local redflat = require("redflat") +local redutil = require("redflat.util") +local common = require("redflat.layout.common") +local rednotify = require("redflat.float.notify") + +local hasitem = awful.util.table.hasitem + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local map = { data = setmetatable({}, { __mode = "k" }), scheme = setmetatable({}, { __mode = "k" }), keys = {} } +map.name = "usermap" +map.notification = true +map.notification_style = {} + +local hitimer +map.hilight_timeout = 0.2 + + +-- default keys +map.keys.layout = { + { + { "Mod4" }, "s", function() map.swap_group() end, + { description = "Change placement direction for group", group = "Layout" } + }, + { + { "Mod4" }, "v", function() map.new_group(true) end, + { description = "Create new vertical group", group = "Layout" } + }, + { + { "Mod4" }, "b", function() map.new_group(false) end, + { description = "Create new horizontal group", group = "Layout" } + }, + { + { "Mod4", "Control" }, "v", function() map.insert_group(true) end, + { description = "Insert new vertical group before active", group = "Layout" } + }, + { + { "Mod4", "Control" }, "b", function() map.insert_group(false) end, + { description = "Insert new horizontal group before active", group = "Layout" } + }, + { + { "Mod4" }, "d", function() map.delete_group() end, + { description = "Destroy group", group = "Layout" } + }, + { + { "Mod4", "Control" }, "d", function() map.clean_groups() end, + { description = "Destroy all empty groups", group = "Layout" } + }, + { + { "Mod4" }, "a", function() map.set_active() end, + { description = "Set active group", group = "Layout" } + }, + { + { "Mod4" }, "f", function() map.move_to_active() end, + { description = "Move focused client to active group", group = "Layout" } + }, + { + { "Mod4", "Control" }, "a", function() map.hilight_active() end, + { description = "Hilight active group", group = "Layout" } + }, + { + { "Mod4" }, ".", function() map.switch_active(1) end, + { description = "Activate next group", group = "Layout" } + }, + { + { "Mod4" }, ",", function() map.switch_active(-1) end, + { description = "Activate previous group", group = "Layout" } + }, + { + { "Mod4" }, "]", function() map.move_group(1) end, + { description = "Move active group to the top", group = "Layout" } + }, + { + { "Mod4" }, "[", function() map.move_group(-1) end, + { description = "Move active group to the bottom", group = "Layout" } + }, + { + { "Mod4" }, "r", function() map.reset_tree() end, + { description = "Reset layout structure", group = "Layout" } + }, +} + +map.keys.resize = { + { + { "Mod4" }, "h", function() map.incfactor(nil, 0.1, false) end, + { description = "Increase window horizontal size factor", group = "Resize" } + }, + { + { "Mod4" }, "l", function() map.incfactor(nil, -0.1, false) end, + { description = "Decrease window horizontal size factor", group = "Resize" } + }, + { + { "Mod4" }, "k", function() map.incfactor(nil, 0.1, true) end, + { description = "Increase window vertical size factor", group = "Resize" } + }, + { + { "Mod4" }, "j", function() map.incfactor(nil, -0.1, true) end, + { description = "Decrease window vertical size factor", group = "Resize" } + }, + { + { "Mod4", "Control" }, "h", function() map.incfactor(nil, 0.1, false, true) end, + { description = "Increase group horizontal size factor", group = "Resize" } + }, + { + { "Mod4", "Control" }, "l", function() map.incfactor(nil, -0.1, false, true) end, + { description = "Decrease group horizontal size factor", group = "Resize" } + }, + { + { "Mod4", "Control" }, "k", function() map.incfactor(nil, 0.1, true, true) end, + { description = "Increase group vertical size factor", group = "Resize" } + }, + { + { "Mod4", "Control" }, "j", function() map.incfactor(nil, -0.1, true, true) end, + { description = "Decrease group vertical size factor", group = "Resize" } + }, +} + + +map.keys.all = awful.util.table.join(map.keys.layout, map.keys.resize) + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Layout action notifications +-------------------------------------------------------------------------------- +local function notify(txt) + if map.notification then rednotify:show(redutil.table.merge({ text = txt }, map.notification_style)) end +end + +-- Calculate geometry for single client or group +-------------------------------------------------------------------------------- +local function cut_geometry(wa, is_vertical, size) + if is_vertical then + local g = { x = wa.x, y = wa.y, width = wa.width, height = size } + wa.y = wa.y + size + return g + else + local g = { x = wa.x, y = wa.y, width = size, height = wa.height } + wa.x = wa.x + size + return g + end +end + +-- Build container for single client or group +-------------------------------------------------------------------------------- +function map.construct_itempack(cls, wa, is_vertical, parent) + local pack = { items = {}, wa = wa, cls = { unpack(cls) }, is_vertical = is_vertical, parent = parent } + + -- Create pack of items with base properties + ------------------------------------------------------------ + for i, c in ipairs(cls) do + pack.items[i] = { client = c, child = nil, factor = 1 } + end + + -- Update pack clients + ------------------------------------------------------------ + function pack:set_cls(clist) + local current = { unpack(clist) } + + -- update existing items, remove overage if need + for i, item in ipairs(self.items) do + if not item.child then + if #current > 0 then + self.items[i].client = current[1] + table.remove(current, 1) + else + self.items[i] = nil + end + end + end + + -- create additional items if need + for _, c in ipairs(current) do + self.items[#self.items + 1] = { client = c, child = nil, factor = 1 } + end + end + + -- Get current pack clients + ------------------------------------------------------------ + function pack:get_cls() + local clist = {} + for _, item in ipairs(self.items) do if not item.child then clist[#clist + 1] = item.client end end + return clist + end + + -- Update pack geometry + ------------------------------------------------------------ + function pack:set_wa(workarea) + self.wa = workarea + end + + -- Get number of items reserved for single client only + ------------------------------------------------------------ + function pack:get_places() + local n = 0 + for _, item in ipairs(self.items) do if not item.child then n = n + 1 end end + return n + end + + -- Get child index + ------------------------------------------------------------ + function pack:get_child_id(pack_) + for i, item in ipairs(self.items) do + if item.child == pack_ then return i end + end + end + + -- Check if container with inheritors keep any real client + ------------------------------------------------------------ + function pack:is_filled() + local filled = false + for _, item in ipairs(self.items) do + if not item.child then + return true + else + filled = filled or item.child:is_filled() + end + end + return filled + end + + -- Increase window size factor for item with index + ------------------------------------------------------------ + function pack:incfacror(index, df, vertical) + if vertical == self.is_vertical then + self.items[index].factor = math.max(self.items[index].factor + df, 0.1) + elseif self.parent then + local pi = self.parent:get_child_id(self) + self.parent:incfacror(pi, df, vertical) + end + end + + -- Recalculate geometry for every item in container + ------------------------------------------------------------ + function pack:rebuild() + -- vars + local geometries = {} + local weight = 0 + local area = awful.util.table.clone(self.wa) + local direction = self.is_vertical and "height" or "width" + + -- check factor norming + for _, item in ipairs(self.items) do + if not item.child or item.child:is_filled() then weight = weight + item.factor end + end + if weight == 0 then return geometries end + + -- geomentry calculation + for i, item in ipairs(self.items) do + if not item.child or item.child:is_filled() then + local size = self.wa[direction] / weight * item.factor + local g = cut_geometry(area, self.is_vertical, size, i) + if item.child then + item.child:set_wa(g) + else + geometries[item.client] = g + end + end + end + + return geometries + end + + return pack +end + +-- Build layout tree +-------------------------------------------------------------------------------- +local function construct_tree(wa, t) + + -- Initial structure on creation + ------------------------------------------------------------ + local tree = map.scheme[t] and map.scheme[t].construct(wa) or map.base_construct(wa) + + -- Find pack contaner for client + ------------------------------------------------------------ + function tree:get_pack(c) + for _, pack in ipairs(self.set) do + for i, item in ipairs(pack.items) do + if not item.child and c == item.client then return pack, i end + end + end + end + + -- Create new contaner in place of client + ------------------------------------------------------------ + function tree:create_group(c, is_vertical) + local parent, index = self:get_pack(c) + local new_pack = map.construct_itempack({}, {}, is_vertical, parent) + + self.set[#self.set + 1] = new_pack + parent.items[index] = { child = new_pack, factor = 1 } + self.active = #self.set + + awful.client.setslave(c) + notify("New " .. (is_vertical and "vertical" or "horizontal") .. " group") + end + + -- Insert new contaner in before active + ------------------------------------------------------------ + function tree:insert_group(is_vertical) + local pack = self.set[self.active] + local new_pack = map.construct_itempack({}, pack.wa, is_vertical, pack.parent) + + if pack.parent then + for _, item in ipairs(pack.parent.items) do + if item.child == pack then item.child = new_pack; break end + end + end + new_pack.items[1] = { child = pack, factor = 1, client = nil } + + table.insert(self.set, self.active, new_pack) + pack.parent = new_pack + notify("New " .. (is_vertical and "vertical" or "horizontal") .. " group") + end + + -- Destroy the given container + ------------------------------------------------------------ + function tree:delete_group(pack) + pack = pack or self.set[self.active] + local index = hasitem(self.set, pack) + local has_child = pack:get_places() < #pack.items + + -- some containers can't be destroyed + -- root container + if #self.set == 1 then + notify("Cant't destroy last group") + return + end + + -- container with many inheritors + if has_child and #pack.items > 1 then + notify("Cant't destroy group with inheritors") + return + end + + -- disconnect container from parent + if pack.parent then + for i, item in ipairs(pack.parent.items) do + if item.child == pack then + if has_child then + -- container in container case + -- inheritor can be transmit to parent without changing geometry + item.child = pack.items[1].child + else + -- container without inheritors can be safaly destroyed + table.remove(pack.parent.items, i) + end + break + end + end + end + + -- destroy container + table.remove(self.set, index) + if not self.set[self.active] then self.active = #self.set end + notify("Group " .. tostring(index) .. " destroyed") + end + + -- Destroy all empty containers + ------------------------------------------------------------ + function tree:cleanup() + for i = #self.set, 1, -1 do + if #self.set[i].items == 0 then + tree:delete_group(self.set[i]) + elseif #self.set[i].items == 1 and self.set[i].items[1].child then + self.set[i].items[1].child.wa = self.set[i].wa + tree:delete_group(self.set[i]) + end + end + end + + -- Recalculate geometry for whole layout + ------------------------------------------------------------ + function tree:rebuild(clist) + local current = { unpack(clist) } + local geometries = {} + + -- distributing clients among existing contaners + for _, pack in ipairs(self.set) do + local n = pack:get_places() + local chunk = { unpack(current, 1, n) } + current = { unpack(current, n + 1) } + pack:set_cls(chunk) + end + + -- distributing clients among existing contaners + if #current > 0 then + for _, c in ipairs(current) do + if self.autoaim then self.active = self:aim() end + local refill = awful.util.table.join(self.set[self.active]:get_cls(), { c }) + self.set[self.active]:set_cls(refill) + end + -- local refill = awful.util.table.join(self.set[self.active]:get_cls(), current) + -- self.set[self.active]:set_cls(refill) + end + + -- recalculate geomery for every container in tree + for _, pack in ipairs(self.set) do + geometries = awful.util.table.join(geometries, pack:rebuild()) + end + + return geometries + end + + return tree +end + +-- Layout manipulation functions +----------------------------------------------------------------------------------------------------------------------- + +-- Change container placement direction +-------------------------------------------------------------------------------- +function map.swap_group() + local c = client.focus + if not c then return end + + local t = c.screen.selected_tag + local pack = map.data[t]:get_pack(c) + pack.is_vertical = not pack.is_vertical + t:emit_signal("property::layout") +end + + +-- Create new container for client +-------------------------------------------------------------------------------- +function map.new_group(is_vertical) + local c = client.focus + if not c then return end + + local t = c.screen.selected_tag + map.data[t].autoaim = false + map.data[t]:create_group(c, is_vertical) + + if hitimer then return end + + hitimer = timer({ timeout = map.hilight_timeout }) + hitimer:connect_signal("timeout", + function() + redflat.service.navigator.hilight.show(map.data[t].set[map.data[t].active].wa) + hitimer:stop() + hitimer = nil + end + ) + hitimer:start() -- autostart option doesn't work? +end + +-- Destroy active container +-------------------------------------------------------------------------------- +function map.delete_group() + local t = mouse.screen.selected_tag + map.data[t].autoaim = false + map.data[t]:delete_group() + t:emit_signal("property::layout") +end + +-- Check if client exist in layout tree +-------------------------------------------------------------------------------- +function map.check_client(c) + if c.sticky then return true end + for _, t in ipairs(c:tags()) do + for k, _ in pairs(map.data) do if k == t then return true end end + end +end + +-- Remove client from layout tree and change tree structure +-------------------------------------------------------------------------------- +function map.clean_client(c) + for t, _ in pairs(map.data) do + local pack, index = map.data[t]:get_pack(c) + if pack then table.remove(pack.items, index) end + end +end + +-- Destroy all empty containers +-------------------------------------------------------------------------------- +function map.clean_groups() + local t = mouse.screen.selected_tag + map.data[t].autoaim = false + map.data[t]:cleanup() + t:emit_signal("property::layout") +end + +-- Set active container (new client will be allocated to this one) +-------------------------------------------------------------------------------- +function map.set_active(c) + c = c or client.focus + if not c then return end + + local t = c.screen.selected_tag + local pack = map.data[t]:get_pack(c) + if pack then + map.data[t].autoaim = false + map.data[t].active = hasitem(map.data[t].set, pack) + redflat.service.navigator.hilight.show(pack.wa) + notify("Active group index: " .. tostring(map.data[t].active)) + end +end + +-- Hilight active container (navigetor widget feature) +-------------------------------------------------------------------------------- +function map.hilight_active() + local t = mouse.screen.selected_tag + local pack = map.data[t].set[map.data[t].active] + redflat.service.navigator.hilight.show(pack.wa) +end + +-- Switch active container by index +-------------------------------------------------------------------------------- +function map.switch_active(n) + local t = mouse.screen.selected_tag + local na = map.data[t].active + n + if map.data[t].set[na] then + map.data[t].autoaim = false + map.data[t].active = na + --local pack = map.data[t].set[na] + notify("Active group index: " .. tostring(na)) + end + redflat.service.navigator.hilight.show(map.data[t].set[map.data[t].active].wa) +end + +-- Move client to active container +-------------------------------------------------------------------------------- +function map.move_to_active(c) + c = c or client.focus + if not c then return end + + local t = c.screen.selected_tag + local pack, index = map.data[t]:get_pack(c) + if pack then + table.remove(pack.items, index) + awful.client.setslave(c) + end +end + +-- Increase window size factor for client +-------------------------------------------------------------------------------- +function map.incfactor(c, df, is_vertical, on_group) + c = c or client.focus + if not c then return end + + local t = c.screen.selected_tag + local pack, index = map.data[t]:get_pack(c) + if not pack then return end -- fix this? + + if on_group and pack.parent then + index = pack.parent:get_child_id(pack) + pack = pack.parent + end + + if pack then + pack:incfacror(index, df, is_vertical) + t:emit_signal("property::layout") + end +end + +-- Move element inside his container +-------------------------------------------------------------------------------- +function map.move_group(dn) + local t = mouse.screen.selected_tag + local pack = map.data[t].set[map.data[t].active] + + if pack.parent then + map.data[t].autoaim = false + local i = pack.parent:get_child_id(pack) + if pack.parent.items[i + dn] then + pack.parent.items[i], pack.parent.items[i + dn] = pack.parent.items[i + dn], pack.parent.items[i] + t:emit_signal("property::layout") + end + end +end + +-- Insert new group before active +-------------------------------------------------------------------------------- +function map.insert_group(is_vertical) + local t = mouse.screen.selected_tag + map.data[t].autoaim = false + map.data[t]:insert_group(is_vertical) + t:emit_signal("property::layout") +end + +-- Reset layout structure +-------------------------------------------------------------------------------- +function map.reset_tree() + local t = mouse.screen.selected_tag + map.data[t] = nil + t:emit_signal("property::layout") +end + + +-- Base layout scheme +----------------------------------------------------------------------------------------------------------------------- +-- TODO: fix unused arg +function map.base_set_new_pack(cls, wa, _, parent, factor) + local pack = map.construct_itempack(cls, wa, true, parent) + table.insert(parent.items, { child = pack, factor = factor or 1 }) + return pack +end + +map.base_autoaim = true + +function map.base_aim(tree) + if #tree.set[2].items == 0 then return 2 end + local active = #tree.set[3].items > #tree.set[2].items and 2 or 3 + return active +end + +function map.base_construct(wa) + local tree = { set = {}, active = 1, autoaim = map.base_autoaim, aim = map.base_aim } + + tree.set[1] = map.construct_itempack({}, wa, false) + tree.set[2] = map.base_set_new_pack({}, wa, true, tree.set[1]) + tree.set[3] = map.base_set_new_pack({}, wa, true, tree.set[1]) + + return tree +end + +-- Tile function +----------------------------------------------------------------------------------------------------------------------- +function map.arrange(p) + local wa = awful.util.table.clone(p.workarea) + local cls = p.clients + local data = map.data + local t = p.tag or screen[p.screen].selected_tag + + -- nothing to tile here + if #cls == 0 then return end + + -- init layout tree + if not data[t] then data[t] = construct_tree(wa, t) end + + -- tile + p.geometries = data[t]:rebuild(cls) +end + + +-- Keygrabber +----------------------------------------------------------------------------------------------------------------------- +map.maingrabber = function(mod, key) + for _, k in ipairs(map.keys.all) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return true end + end +end + +map.key_handler = function (mod, key, event) + if event == "press" then return end + if map.maingrabber(mod, key) then return end + if common.grabbers.swap(mod, key, event) then return end + if common.grabbers.base(mod, key, event) then return end +end + + +-- Redflat navigator support functions +----------------------------------------------------------------------------------------------------------------------- +function map:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then self.keys.all = awful.util.table.join(self.keys.layout, map.keys.resize) end + end + + self.tip = awful.util.table.join(self.keys.all, common.keys.swap, common.keys.base, common.keys._fake) +end + +function map.startup() + if not map.tip then map:set_keys() end +end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return map diff --git a/awesome/.config/awesome/redflat/menu.lua b/awesome/.config/awesome/redflat/menu.lua new file mode 100644 index 0000000..b8e497b --- /dev/null +++ b/awesome/.config/awesome/redflat/menu.lua @@ -0,0 +1,676 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat menu -- +----------------------------------------------------------------------------------------------------------------------- +-- awful.menu modification +-- Custom widget support added +-- Auto hide option added +-- Right icon support added to default item constructor +-- Icon margin added to default item constructor +-- Auto hotkeys for menu items added + +-- Horizontal mode support removed +-- Add to index and delete item functions removed +-- menu:clients function removed +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.menu v3.5.2 +------ (c) 2008, 2011 Damien Leone, Julien Danjou, dodo +----------------------------------------------------------------------------------------------------------------------- + + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local wibox = require("wibox") +local awful = require("awful") +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local setmetatable = setmetatable +local string = string +local ipairs = ipairs +local pcall = pcall +local print = print +local table = table +local type = type +local unpack = unpack or table.unpack + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") +local redtip = require("redflat.float.hotkeys") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local menu = { mt = {}, action = {}, keys = {} } + +local _fake_context = { dpi = beautiful.xresources.get_dpi() } -- fix this + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_theme() + local style = { + border_width = 2, + screen_gap = 0, + submenu_icon = redutil.base.placeholder({ txt = "▶" }), + height = 20, + width = 200, + font = "Sans 12", + icon_margin = { 0, 0, 0, 0 }, -- left icon margin + ricon_margin = { 0, 0, 0, 0 }, -- right icon margin + nohide = false, + auto_expand = true, + auto_hotkey = false, + svg_scale = { false, false }, + hide_timeout = 0, + select_first = true, + keytip = { geometry = { width = 400 } }, + color = { border = "#575757", text = "#aaaaaa", highlight = "#eeeeee", + main = "#b1222b", wibox = "#202020", + submenu_icon = nil, right_icon = nil, left_icon = nil }, + shape = nil + } + return redutil.table.merge(style, beautiful.menu or {}) +end + + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Check if any menu item connected with given key +-- and run menu item command if found +-------------------------------------------------------------------------------- +local function check_access_key(_menu, key) + local num = awful.util.table.hasitem(_menu.keys, key) + if num then + _menu:item_enter(num) + _menu:exec(num) + end +end + +-- Get the elder parent of submenu +-------------------------------------------------------------------------------- +function menu:get_root() + return self.parent and menu.get_root(self.parent) or self +end + +-- Setup case insensitive underline markup to given character in string +-------------------------------------------------------------------------------- +local function make_u(text, key) + local pos = key and string.find(string.lower(text), key) or nil + + if pos then + local rkey = string.sub(text, pos, pos) + return string.gsub(text, rkey, "" .. rkey .. "", 1) + end + + return text +end + +-- Function to set menu or submenu in position +----------------------------------------------------------------------------------------------------------------------- +local function set_coords(_menu, screen_idx, m_coords) + local s_geometry = redutil.placement.add_gap(screen[screen_idx].workarea, _menu.theme.screen_gap) + + local screen_w = s_geometry.x + s_geometry.width + local screen_h = s_geometry.y + s_geometry.height + + local x, y + local b = _menu.wibox.border_width + local w = _menu.wibox.width + 2 * _menu.wibox.border_width + local h = _menu.wibox.height + 2 * _menu.wibox.border_width + + if _menu.parent then + local pw = _menu.parent.wibox.width + 2 * _menu.parent.theme.border_width + local piy = _menu.parent.wibox.y + _menu.position + _menu.parent.theme.border_width + + y = piy - b + x = _menu.parent.wibox.x + pw + + if y + h > screen_h then y = screen_h - h end + if x + w > screen_w then x = _menu.parent.wibox.x - w end + else + if m_coords == nil then + m_coords = mouse.coords() + m_coords.x = m_coords.x - 1 + m_coords.y = m_coords.y - 1 + end + + y = m_coords.y < s_geometry.y and s_geometry.y or m_coords.y + x = m_coords.x < s_geometry.x and s_geometry.x or m_coords.x + + if y + h > screen_h then y = screen_h - h end + if x + w > screen_w then x = screen_w - w end + end + + _menu.wibox.x = x + _menu.wibox.y = y +end + +-- Menu keygrabber +-- A new instance for every submenu should be used +----------------------------------------------------------------------------------------------------------------------- + +-- Menu functions +-------------------------------------------------------------------------------- +function menu.action.up(_menu, sel) + local sel_new = sel - 1 < 1 and #_menu.items or sel - 1 + _menu:item_enter(sel_new) +end + +function menu.action.down(_menu, sel) + local sel_new = sel + 1 > #_menu.items and 1 or sel + 1 + _menu:item_enter(sel_new) +end + +function menu.action.enter(_menu, sel) + if sel > 0 and _menu.items[sel].child then _menu.items[sel].child:show() end +end + +function menu.action.exec(_menu, sel) + if sel > 0 then _menu:exec(sel, { exec = true }) end +end + +function menu.action.back(_menu) + _menu:hide() +end + +function menu.action.close(_menu) + menu.get_root(_menu):hide() +end + +-- Menu keys +-------------------------------------------------------------------------------- +menu.keys.move = { + { + {}, "Down", menu.action.down, + { description = "Select next item", group = "Navigation" } + }, + { + {}, "Up", menu.action.up, + { description = "Select previous item", group = "Navigation" } + }, + { + {}, "Left", menu.action.back, + { description = "Go back", group = "Navigation" } + }, + { + {}, "Right", menu.action.enter, + { description = "Open submenu", group = "Navigation" } + }, +} + +menu.keys.action = { + { + {}, "Escape", menu.action.close, + { description = "Close menu", group = "Action" } + }, + { + {}, "Return", menu.action.exec, + { description = "Activate item", group = "Action" } + }, + { + { "Mod4" }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, +} + +menu.keys.all = awful.util.table.join(menu.keys.move, menu.keys.action) + +-- this one only displayed in hotkeys helper +menu._fake_keys = { + { + {}, "_letter", nil, + { description = "Activate item by key", group = "Action" } + }, +} + +-- Menu keygrabber +-------------------------------------------------------------------------------- +local grabber = function(_menu, mod, key, event) + if event ~= "press" then return end + local sel = _menu.sel or 0 + + for _, k in ipairs(menu.keys.all) do + if redutil.key.match_grabber(k, mod, key) then k[3](_menu, sel); return false end + end + + check_access_key(_menu, key) +end + +-- Execute menu item +----------------------------------------------------------------------------------------------------------------------- +function menu:exec(num) + local item = self.items[num] + + if not item then return end + + local cmd = item.cmd + + if type(cmd) == "table" then + item.child:show() + elseif type(cmd) == "string" then + if not item.theme.nohide then menu.get_root(self):hide() end + awful.spawn(cmd) + elseif type(cmd) == "function" then + if not item.theme.nohide then menu.get_root(self):hide() end + cmd() + end +end + +-- Menu item selection functions +----------------------------------------------------------------------------------------------------------------------- + +-- Select item +-------------------------------------------------------------------------------- +function menu:item_enter(num, opts) + opts = opts or {} + local item = self.items[num] + + if item and self.theme.auto_expand and opts.hover and item.child then + self.items[num].child:show() + end + + if num == nil or self.sel == num or not item then + return + elseif self.sel then + self:item_leave(self.sel) + end + + item._background:set_fg(item.theme.color.highlight) + item._background:set_bg(item.theme.color.main) + if item.icon and item.theme.color.left_icon then item.icon:set_color(item.theme.color.highlight) end + if item.right_icon and + (item.child and item.theme.color.submenu_icon or not item.child and item.theme.color.right_icon) then + item.right_icon:set_color(item.theme.color.highlight) + end + self.sel = num +end + +-- Unselect item +-------------------------------------------------------------------------------- +function menu:item_leave(num) + if not num then return end + + local item = self.items[num] + + if item then + item._background:set_fg(item.theme.color.text) + item._background:set_bg(item.theme.color.wibox) + if item.icon and item.theme.color.left_icon then item.icon:set_color(item.theme.color.left_icon) end + if item.right_icon then + if item.child and item.theme.color.submenu_icon then + -- if there's a child menu, this is a submenu icon + item.right_icon:set_color(item.theme.color.submenu_icon) + elseif item.theme.color.right_icon then + item.right_icon:set_color(item.theme.color.right_icon) + end + end + if item.child then item.child:hide() end + end +end + +-- Menu show/hide functions +----------------------------------------------------------------------------------------------------------------------- + +-- Show a menu popup. +-- @param args.coords Menu position defaulting to mouse.coords() +-------------------------------------------------------------------------------- +function menu:show(args) + args = args or {} + local screen_index = mouse.screen + set_coords(self, screen_index, args.coords) + if self.wibox.visible then return end + + -- show menu + awful.keygrabber.run(self._keygrabber) + self.wibox.visible = true + if self.theme.select_first or self.parent then self:item_enter(1) end + + -- check hidetimer + if self.hidetimer and self.hidetimer.started then self.hidetimer:stop() end + + -- hotkeys helper + -- TODO: optimize code to cache helper (do not rebuild on every show) + local tip + if self.theme.auto_hotkey then + local fk = awful.util.table.clone(menu._fake_keys) + fk[1][4].keyset = self.keys + tip = awful.util.table.join(menu.keys.all, fk) + else + tip = menu.keys.all + end + + redtip.cache["Menu"] = nil -- dirty trick to renew helper for every menu instance + redtip:set_pack("Menu", tip, self.theme.keytip.column, self.theme.keytip.geometry) +end + +-- Hide a menu popup. +-------------------------------------------------------------------------------- +function menu:hide() + if not self.wibox.visible then return end + + self:item_leave(self.sel) + + if self.sel and self.items[self.sel].child then self.items[self.sel].child:hide() end + + self.sel = nil + awful.keygrabber.stop(self._keygrabber) + + if self.hidetimer and self.hidetimer.started then self.hidetimer:stop() end + + self.wibox.visible = false + redtip:remove_pack() +end + +-- Toggle menu visibility +-------------------------------------------------------------------------------- +function menu:toggle(args) + if self.wibox.visible then + self:hide() + else + self:show(args) + end +end + +-- Set user hotkeys +-------------------------------------------------------------------------------- +function menu:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then self.keys.all = awful.util.table.join(self.keys.move, self.keys.action) end + end +end + +-- Clears all items from the menu +-------------------------------------------------------------------------------- +function menu:clear() + self.add_size = 0 + self.layout:reset() + self.items = {} + self.keys = {} + self.wibox.height = 1 +end + +-- Clears and then refills the menu with the given items +-------------------------------------------------------------------------------- +function menu:replace_items(items) + self:clear() + for _, item in ipairs(items) do + self:add(item) + end + self.wibox.height = self.add_size > 0 and self.add_size or 1 +end + +-- Add a new menu entry. +-- args.new (Default: redflat.menu.entry) The menu entry constructor. +-- args.theme (Optional) The menu entry theme. +-- args.* params needed for the menu entry constructor. +-- @param args The item params +----------------------------------------------------------------------------------------------------------------------- +function menu:add(args) + if not args then return end + + -- If widget instead of text label recieved + -- just add it to layer, don't try to create menu item + ------------------------------------------------------------ + if type(args[1]) ~= "string" and args.widget then + local element = {} + element.width, element.height = args.widget:fit(_fake_context, -1, -1) + self.add_size = self.add_size + element.height + self.layout:add(args.widget) + + if args.focus then + args.widget:connect_signal( + "mouse::enter", + function() + self:item_leave(self.sel) + self.sel = nil + end + ) + end + + return + end + + -- Set theme for currents item + ------------------------------------------------------------ + local theme = redutil.table.merge(self.theme, args.theme or {}) + args.theme = theme + + -- Generate menu item + ------------------------------------------------------------ + args.new = args.new or menu.entry + local success, item = pcall(args.new, self, args) + + if not success then + print("Error while creating menu entry: " .. item) + return + end + + if not item.widget then + print("Error while checking menu entry: no property widget found.") + return + end + + item.parent = self + item.theme = item.theme or theme + item._background = wibox.container.background(item.widget) + item._background:set_fg(item.theme.color.text) + item._background:set_bg(item.theme.color.wibox) + + -- Add item widget to menu layout + ------------------------------------------------------------ + table.insert(self.items, item) + self.layout:add(item._background) + + -- Create bindings + ------------------------------------------------------------ + local num = #self.items + + item._background:buttons(awful.util.table.join( + awful.button({}, 3, function () self:hide() end), + awful.button({}, 1, function () + self:item_enter(num) + self:exec(num) + end) + )) + + item.widget:connect_signal("mouse::enter", function() self:item_enter(num, { hover = true }) end) + + -- Create submenu if needed + ------------------------------------------------------------ + if type(args[2]) == "table" then + if not self.items[#self.items].child then + self.items[#self.items].child = menu.new(args[2], self) + self.items[#self.items].child.position = self.add_size + end + end + + ------------------------------------------------------------ + self.add_size = self.add_size + item.theme.height + + return item +end + +-- Default menu item constructor +-- @param parent The parent menu +-- @param args the item params +-- @return table with all the properties the user wants to change +----------------------------------------------------------------------------------------------------------------------- +function menu.entry(parent, args) + args = args or {} + args.text = args[1] or args.text or "" + args.cmd = args[2] or args.cmd + args.icon = args[3] or args.icon + args.right_icon = args[4] or args.right_icon + + -- Create the item label widget + ------------------------------------------------------------ + local label = wibox.widget.textbox() + label:set_font(args.theme.font) + + -- Set hotkey if needed + ------------------------------------------------------------ + local key + local text = awful.util.escape(args.text) + + if args.key and not awful.util.table.hasitem(parent.keys, args.key) then + key = args.key + elseif parent.theme.auto_hotkey then + for i = 1, #text do + local c = string.sub(string.lower(text), i, i) + + if not awful.util.table.hasitem(parent.keys, c) and string.match(c, "%l") then + key = c + break + end + end + end + + if key then parent.keys[#parent.keys + 1] = key end + + label:set_markup(make_u(text, key)) + + -- Set left icon if needed + ------------------------------------------------------------ + local iconbox + local margin = wibox.container.margin(label) + + if args.icon then + iconbox = svgbox(args.icon, nil, args.theme.color.left_icon) + iconbox:set_vector_resize(args.theme.svg_scale[1]) + else + margin:set_left(args.theme.icon_margin[1]) + end + + -- Set right icon if needed + ------------------------------------------------------------ + local right_iconbox + + if type(args.cmd) == "table" then + right_iconbox = svgbox(args.theme.submenu_icon, nil, args.theme.color.submenu_icon) + right_iconbox:set_vector_resize(args.theme.svg_scale[2]) + elseif args.right_icon then + right_iconbox = svgbox(args.right_icon, nil, args.theme.color.right_icon) + right_iconbox:set_vector_resize(args.theme.svg_scale[2]) + end + + -- Construct item layouts + ------------------------------------------------------------ + local left = wibox.layout.fixed.horizontal() + + if iconbox ~= nil then + left:add(wibox.container.margin(iconbox, unpack(args.theme.icon_margin))) + end + + left:add(margin) + + local layout = wibox.layout.align.horizontal() + layout:set_left(left) + + if right_iconbox ~= nil then + layout:set_right(wibox.container.margin(right_iconbox, unpack(args.theme.ricon_margin))) + end + + local layout_const = wibox.container.constraint(layout, "exact", args.theme.width, args.theme.height) + + ------------------------------------------------------------ + return { + label = label, + icon = iconbox, + widget = layout_const, + cmd = args.cmd, + right_icon = right_iconbox + } +end + +-- Create new menu +----------------------------------------------------------------------------------------------------------------------- +function menu.new(args, parent) + + args = args or {} + + -- Initialize menu object + ------------------------------------------------------------ + local _menu = { + item_enter = menu.item_enter, + item_leave = menu.item_leave, + get_root = menu.get_root, + delete = menu.delete, + toggle = menu.toggle, + hide = menu.hide, + show = menu.show, + exec = menu.exec, + add = menu.add, + clear = menu.clear, + replace_items = menu.replace_items, + items = {}, + keys = {}, + parent = parent, + layout = wibox.layout.fixed.vertical(), + add_size = 0, + theme = redutil.table.merge(parent and parent.theme or default_theme(), args.theme or {}) + } + + -- Create items + ------------------------------------------------------------ + for _, v in ipairs(args) do _menu:add(v) end + + if args.items then + for _, v in ipairs(args.items) do _menu:add(v) end + end + + _menu._keygrabber = function (...) + grabber(_menu, ...) + end + + -- create wibox + ------------------------------------------------------------ + _menu.wibox = wibox({ + type = "popup_menu", + ontop = true, + fg = _menu.theme.color.text, + bg = _menu.theme.color.wibox, + border_color = _menu.theme.color.border, + border_width = _menu.theme.border_width, + shape = _menu.theme.shape + }) + + _menu.wibox.visible = false + _menu.wibox:set_widget(_menu.layout) + + -- set size + _menu.wibox.width = _menu.theme.width + _menu.wibox.height = _menu.add_size > 0 and _menu.add_size or 1 + + -- Set menu autohide timer + ------------------------------------------------------------ + if _menu.theme.hide_timeout > 0 then + local root = _menu:get_root() + + -- timer only for root menu + -- all submenus will be hidden automatically + if root == _menu then + _menu.hidetimer = timer({ timeout = _menu.theme.hide_timeout }) + _menu.hidetimer:connect_signal("timeout", function() _menu:hide() end) + end + + -- enter/leave signals for all menu chain + _menu.wibox:connect_signal("mouse::enter", + function() + if root.hidetimer.started then root.hidetimer:stop() end + end) + _menu.wibox:connect_signal("mouse::leave", function() root.hidetimer:start() end) + end + + ------------------------------------------------------------ + return _menu +end + +-- Config metatable to call menu module as function +----------------------------------------------------------------------------------------------------------------------- +function menu.mt:__call(...) + return menu.new(...) +end + +return setmetatable(menu, menu.mt) diff --git a/awesome/.config/awesome/redflat/service/dfparser.lua b/awesome/.config/awesome/redflat/service/dfparser.lua new file mode 100644 index 0000000..3420fe0 --- /dev/null +++ b/awesome/.config/awesome/redflat/service/dfparser.lua @@ -0,0 +1,412 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat desctop file parser -- +----------------------------------------------------------------------------------------------------------------------- +-- Create application menu analyzing .desktop files in given directories +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.menubar v3.5.2 +------ (c) 2009, 2011-2012 Antonio Terceiro, Alexander Yakushev +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local io = io +local table = table +local ipairs = ipairs +local string = string +local awful = require("awful") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") +local gears = require("gears") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local dfparser = {} +local cache = {} + +dfparser.terminal = 'uxterm' + +local all_icon_folders = { "apps", "actions", "devices", "places", "categories", "status" } +local all_icon_sizes = { '128x128' , '96x96', '72x72', '64x64', '48x48', + '36x36', '32x32', '24x24', '22x22', '16x16', 'scalable' } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icons = { custom_only = false, scalable_only = false, df_icon = nil, theme = nil }, + desktop_file_dirs = { "/usr/share/applications/" }, + wm_name = nil, + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "service.dfparser") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Cache functions +-------------------------------------------------------------------------------- +local function check_cached(req) + for k, v in pairs(cache) do + local eq = #req == #k + for ck, cv in pairs(k) do eq = eq and cv == req[ck] end + if eq then return v end + end + return nil +end + +-- Check whether the icon format is supported +-------------------------------------------------------------------------------- +local function is_format(icon_file, icon_formats) + for _, f in ipairs(icon_formats) do + if icon_file:match('%.' .. f) then return true end + end + return false +end + +-- Find all possible locations of the icon +-------------------------------------------------------------------------------- +local function all_icon_path(style) + + local icon_theme_paths = {} + + -- add user icon theme + if style.theme then + table.insert(icon_theme_paths, style.theme .. '/') + -- TODO also look in parent icon themes, as in freedesktop.org specification + end + + -- add fallback theme + if not style.custom_only then table.insert(icon_theme_paths, '/usr/share/icons/hicolor/') end + + -- seach only svg icons if need + local current_icon_sizes = style.scalable_only and { 'scalable' } or all_icon_sizes + + -- form all avalible icon dirs + local icon_path = {} + + for _, icon_theme_directory in ipairs(icon_theme_paths) do + for _, size in ipairs(current_icon_sizes) do + for _, folder in ipairs(all_icon_folders) do + table.insert(icon_path, icon_theme_directory .. size .. "/" .. folder .. '/') + end + end + end + + -- lowest priority fallbacks + if not style.custom_only then + table.insert(icon_path, '/usr/share/pixmaps/') + table.insert(icon_path, '/usr/share/icons/') + end + + return icon_path +end + +-- Lookup an icon in different folders of the filesystem +-- @param icon_file Short or full name of the icon +-- @param style.default_icon Return if no icon was found +-- @param style.icon_theme Full path to custom icon theme +-- @param style.custom_only Seach only custom theme icons, ignore system +-- @param style.scalable_only Seach only svg type icons +-- @return full name of the icon +----------------------------------------------------------------------------------------------------------------------- +function dfparser.lookup_icon(icon_file, style) + + style = redutil.table.merge(default_style().icons, style or {}) + + local df_icon + if style.df_icon and gears.filesystem.file_readable(style.df_icon) then + df_icon = style.df_icon + end + + -- No icon name + if not icon_file or icon_file == "" then return df_icon end + + -- Handle full path icons + local icon_formats = style.scalable_only and { "svg" } or { "svg", "png", "gif" } + + if icon_file:sub(1, 1) == '/' then + if is_format(icon_file, icon_formats) then + return gears.filesystem.file_readable(icon_file) and icon_file or df_icon + else + icon_file = string.match(icon_file, "([%a%d%-]+)%.") + if not icon_file then return df_icon end + end + end + + -- Find all possible locations to search + local icon_path = all_icon_path(style) + + -- Icon searching + for _, directory in ipairs(icon_path) do + + -- check if icon format specified and supported + if is_format(icon_file, icon_formats) and awful.util.file_readable(directory .. icon_file) then + return directory .. icon_file + else + + -- check if icon format specified but not supported + if string.match(icon_file, "%.") + and not string.match(icon_file, "org%.gnome%.") -- ignore gnome naming style + and not is_format(icon_file, icon_formats) then + icon_file = string.match(icon_file, "[%a%d%-]+") + end + + -- icon is probably specified without path and format, + -- like 'firefox'. Try to add supported extensions to + -- it and see if such file exists. + for _, format in ipairs(icon_formats) do + local possible_file = directory .. icon_file .. "." .. format + if awful.util.file_readable(possible_file) then + return possible_file + end + end + end + end + + return df_icon +end + +-- Main parsing functions +----------------------------------------------------------------------------------------------------------------------- + +-- Parse a .desktop file +-- @param file The .desktop file +-- @param style Arguments for dfparser.lookup_icon +-- @return A table with file entries +-------------------------------------------------------------------------------- +local function parse(file, style) + + local program = { show = true, file = file } + local desktop_entry = false + + -- Parse the .desktop file. + -- We are interested in [Desktop Entry] group only. + for line in io.lines(file) do + if not desktop_entry and line == "[Desktop Entry]" then + desktop_entry = true + else + if line:sub(1, 1) == "[" and line:sub(-1) == "]" then + -- A declaration of new group - stop parsing + break + end + + -- Grab the values + for key, value in line:gmatch("(%w+)%s*=%s*(.+)") do + program[key] = value + end + end + end + + -- In case [Desktop Entry] was not found + if not desktop_entry then return nil end + + -- Don't show program if NoDisplay attribute is false + if program.NoDisplay and string.lower(program.NoDisplay) == "true" then + program.show = false + end + + -- Only show the program if there is no OnlyShowIn attribute + -- or if it's equal to given wm name + if program.OnlyShowIn ~= nil and style.wm_name and not program.OnlyShowIn:match(style.wm_name) then + program.show = false + end + + -- Look up for a icon. + if program.Icon then + program.icon_path = dfparser.lookup_icon(program.Icon, style.icons) + end + + -- Split categories into a table. Categories are written in one + -- line separated by semicolon. + if program.Categories then + program.categories = {} + + for category in program.Categories:gmatch('[^;]+') do + table.insert(program.categories, category) + end + end + + if program.Exec then + -- Substitute Exec special codes as specified in + -- http://standards.freedesktop.org/desktop-entry-spec/1.1/ar01s06.html + if program.Name == nil then + program.Name = '['.. file:match("([^/]+)%.desktop$") ..']' + end + + local cmdline = program.Exec:gsub('%%c', program.Name) + cmdline = cmdline:gsub('%%[fuFU]', '') + cmdline = cmdline:gsub('%%k', program.file) + + if program.icon_path then + cmdline = cmdline:gsub('%%i', '--icon ' .. program.icon_path) + else + cmdline = cmdline:gsub('%%i', '') + end + + if program.Terminal == "true" then + cmdline = dfparser.terminal .. ' -e ' .. cmdline + end + + program.cmdline = cmdline + end + + return program +end + +-- Parse a directory with .desktop files +-- @param dir The directory +-- @param style Arguments for dfparser.lookup_icon +-- @return A table with all .desktop entries +-------------------------------------------------------------------------------- +local function parse_dir(dir, style) + local req = awful.util.table.join({ path = dir }, style.icons) + local programs = {} + local cached = check_cached(req) + + if not cached then + local files = redutil.read.output('find '.. dir ..' -maxdepth 1 -name "*.desktop" 2>/dev/null') + + for file in string.gmatch(files, "[^\n]+") do + local program = parse(file, style) + if program then table.insert(programs, program) end + end + + cache[req] = programs + else + programs = cached + end + + return programs +end + +-- Create a new application menu +-- @param style.icons Arguments for dfparser.lookup_icon +-- @param style.desktop_file_dirs Table containing all .desktop file directories +-- @return Applications menu table +----------------------------------------------------------------------------------------------------------------------- +function dfparser.menu(style) + + style = redutil.table.merge(default_style(), style or {}) + + -- Categories list + -------------------------------------------------------------------------------- + local categories = { + { app_type = "AudioVideo", name = "Multimedia", icon_name = "applications-multimedia" }, + { app_type = "Development", name = "Development", icon_name = "applications-development" }, + { app_type = "Education", name = "Education", icon_name = "applications-science" }, + { app_type = "Game", name = "Games", icon_name = "applications-games" }, + { app_type = "Graphics", name = "Graphics", icon_name = "applications-graphics" }, + { app_type = "Office", name = "Office", icon_name = "applications-office" }, + { app_type = "Network", name = "Internet", icon_name = "applications-internet" }, + { app_type = "Settings", name = "Settings", icon_name = "applications-utilities" }, + { app_type = "System", name = "System Tools", icon_name = "applications-system" }, + { app_type = "Utility", name = "Accessories", icon_name = "applications-accessories" } + } + + -- Find icons for categories + -------------------------------------------------------------------------------- + for _, v in ipairs(categories) do + v.icon = dfparser.lookup_icon(v.icon_name, style) + end + + -- Find all visible menu items + -------------------------------------------------------------------------------- + local prog_list = {} + for _, path in ipairs(style.desktop_file_dirs) do + local programs = parse_dir(path, style) + + for _, prog in ipairs(programs) do + if prog.show and prog.Name and prog.cmdline then + table.insert(prog_list, prog) + end + end + end + + -- Sort menu items by category and create submenu + -------------------------------------------------------------------------------- + local appmenu = {} + for _, menu_category in ipairs(categories) do + local catmenu = {} + + for i = #prog_list, 1, -1 do + if prog_list[i].categories then + for _, item_category in ipairs(prog_list[i].categories) do + if item_category == menu_category.app_type then + table.insert(catmenu, { prog_list[i].Name, prog_list[i].cmdline, prog_list[i].icon_path }) + table.remove(prog_list, i) + end + end + end + end + if #catmenu > 0 then table.insert(appmenu, { menu_category.name, catmenu, menu_category.icon }) end + end + + -- Collect all items without category to "Other" submenu + -------------------------------------------------------------------------------- + if #prog_list > 0 then + local catmenu = {} + + for _, prog in ipairs(prog_list) do + table.insert(catmenu, { prog.Name, prog.cmdline, prog.icon_path }) + end + + table.insert(appmenu, { "Other", catmenu, dfparser.lookup_icon("applications-other") }) + end + + return appmenu +end + +-- Get list of icons linked with process name +-- @param style.icons Arguments for dfparser.lookup_icon +-- @param style.desktop_file_dirs Table containing all .desktop file directories +-- @return Icon list +----------------------------------------------------------------------------------------------------------------------- +function dfparser.icon_list(style) + + style = redutil.table.merge(default_style(), style or {}) + local list = {} + + for _, path in ipairs(style.desktop_file_dirs) do + local programs = parse_dir(path, style) + + for _, prog in ipairs(programs) do + if prog.Icon and prog.Exec then + local key = string.match(prog.Exec, "[%a%d%.%-/]+") + if string.find(key, "/") then key = string.match(key, "[%a%d%.%-]+$") end + list[key] = prog.icon_path + end + end + end + + return list +end + +-- Generate table with avaliable programs +-- without sorting by categories +-- @param style.icons Arguments for dfparser.lookup_icon +-- @param style.desktop_file_dirs Table containing all .desktop file directories +----------------------------------------------------------------------------------------------------------------------- +function dfparser.program_list(style) + + style = redutil.table.merge(default_style(), style or {}) + local prog_list = {} + + for _, path in ipairs(style.desktop_file_dirs) do + local programs = parse_dir(path, style) + + for _, prog in ipairs(programs) do + if prog.show and prog.Name and prog.cmdline then + table.insert(prog_list, prog) + end + end + end + + return prog_list +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return dfparser diff --git a/awesome/.config/awesome/redflat/service/init.lua b/awesome/.config/awesome/redflat/service/init.lua new file mode 100644 index 0000000..638e98b --- /dev/null +++ b/awesome/.config/awesome/redflat/service/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.service" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/service/navigator.lua b/awesome/.config/awesome/redflat/service/navigator.lua new file mode 100644 index 0000000..4284900 --- /dev/null +++ b/awesome/.config/awesome/redflat/service/navigator.lua @@ -0,0 +1,355 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat focus switch util -- +----------------------------------------------------------------------------------------------------------------------- +-- Visual clinet managment helper +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local math = math + +local awful = require("awful") +local wibox = require("wibox") +local color = require("gears.color") +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local redflat = require("redflat") +local redutil = require("redflat.util") +local redtip = require("redflat.float.hotkeys") +local rednotify = require("redflat.float.notify") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local navigator = { action = {}, data = {}, active = false } + +navigator.ignored = { "dock", "splash", "desktop" } + + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + border_width = 2, + marksize = { width = 200, height = 100, r = 20 }, + gradstep = 100, + linegap = 35, + timeout = 1, + notify = {}, + keytip = { base = { geometry = { width = 600 }, exit = true } }, + titlefont = { font = "Sans", size = 28, face = 1, slant = 0 }, + num = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "F1", "F3", "F4", "F5" }, + font = { font = "Sans", size = 22, face = 1, slant = 0 }, + color = { border = "#575757", wibox = "#00000000", bg1 = "#57575740", bg2 = "#57575720", + fbg1 = "#b1222b40", fbg2 = "#b1222b20", mark = "#575757", text = "#202020", + hbg1 = "#32882d40", hbg2 = "#32882d20" }, + shape = nil + } + return redutil.table.merge(style, redutil.table.check(beautiful, "service.navigator") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Check geometry intersection +-------------------------------------------------------------------------------- +local function is_intersect(a, b) + return (b.x < a.x + a.width and b.x + b.width > a.x and b.y < a.y + a.height and b.y + b.height > a.y) +end + +-- Window painting +-------------------------------------------------------------------------------- +function navigator.make_paint(c) + + -- Initialize vars + ------------------------------------------------------------ + local style = navigator.style + local widg = wibox.widget.base.make_widget() + + widg._data = { + client = c, + alert = false, + } + + -- User functions + ------------------------------------------------------------ + function widg:set_client(client_) + if widg._data.client ~= client_ then + widg._data.client = client_ + self:emit_signal("widget::redraw_needed") + end + end + + function widg:set_alert(value) + if widg._data.alert ~= value then + widg._data.alert = value + self:emit_signal("widget::redraw_needed") + end + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + return width, height + end + + -- Draw + ------------------------------------------------------------ + function widg:draw(_, cr, width, height) + + if not widg._data.client then return end + + -- background + local bg1, bg2 + local num = math.ceil((width + height) / style.gradstep) + + if widg._data.alert then + bg1, bg2 = style.color.hbg1, style.color.hbg2 + else + local is_focused = widg._data.client == client.focus + bg1 = is_focused and style.color.fbg1 or style.color.bg1 + bg2 = is_focused and style.color.fbg2 or style.color.bg2 + end + + for i = 1, num do + local cc = i % 2 == 1 and bg1 or bg2 + local l = i * style.gradstep + + cr:set_source(color(cc)) + cr:move_to(0, (i - 1) * style.gradstep) + cr:rel_line_to(0, style.gradstep) + cr:rel_line_to(l, - l) + cr:rel_line_to(- style.gradstep, 0) + cr:close_path() + cr:fill() + end + + -- rounded rectangle on center + local r = style.marksize.r + local w, h = style.marksize.width - 2 * r, style.marksize.height - 2 * r + + cr:set_source(color(style.color.mark)) + cr:move_to((width - w) / 2 - r, (height - h) / 2) + cr:rel_curve_to(0, -r, 0, -r, r, -r) + cr:rel_line_to(w, 0) + cr:rel_curve_to(r, 0, r, 0, r, r) + cr:rel_line_to(0, h) + cr:rel_curve_to(0, r, 0, r, -r, r) + cr:rel_line_to(-w, 0) + cr:rel_curve_to(-r, 0, -r, 0, -r, -r) + cr:close_path() + cr:fill() + + -- label + local index = navigator.style.num[awful.util.table.hasitem(navigator.cls, widg._data.client)] + local g = redutil.client.fullgeometry(widg._data.client) + + cr:set_source(color(style.color.text)) + redutil.cairo.set_font(cr, style.titlefont) + redutil.cairo.textcentre.full(cr, { width/2, height/2 - style.linegap / 2 }, index) + redutil.cairo.set_font(cr, style.font) + redutil.cairo.textcentre.full(cr, { width/2, height/2 + style.linegap / 2 }, g.width .. " x " .. g.height) + end + + ------------------------------------------------------------ + return widg +end + +-- Construct wibox +-------------------------------------------------------------------------------- +function navigator.make_decor(c) + local object = {} + local style = navigator.style + + -- Create wibox + ------------------------------------------------------------ + object.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + object.client = c + object.widget = navigator.make_paint(c) + object.wibox:set_widget(object.widget) + + -- User functions + ------------------------------------------------------------ + object.update = { + focus = function() object.widget:emit_signal("widget::redraw_needed") end, + close = function() navigator:restart() end, + geometry = function() redutil.client.fullgeometry(object.wibox, redutil.client.fullgeometry(object.client)) end + } + + function object:set_client(client_) + object.client = client_ + object.widget:set_client(client_) + redutil.client.fullgeometry(object.wibox, redutil.client.fullgeometry(object.client)) + + object.client:connect_signal("focus", object.update.focus) + object.client:connect_signal("unfocus", object.update.focus) + object.client:connect_signal("property::geometry", object.update.geometry) + object.client:connect_signal("unmanage", object.update.close) + end + + function object:clear(no_hide) + object.client:disconnect_signal("focus", object.update.focus) + object.client:disconnect_signal("unfocus", object.update.focus) + object.client:disconnect_signal("property::geometry", object.update.geometry) + object.client:disconnect_signal("unmanage", object.update.close) + object.widget:set_client() + if not no_hide then object.wibox.visible = false end + end + + ------------------------------------------------------------ + object:set_client(c) + return object +end + + +-- Main functions +----------------------------------------------------------------------------------------------------------------------- +function navigator:init() + + -- Style + ------------------------------------------------------------ + self.style = default_style() + + -- Hilight area + ------------------------------------------------------------ + self.hilight = {} + + -- timer + self.hilight.hidetimer = timer({ timeout = self.style.timeout }) + self.hilight.hidetimer:connect_signal("timeout", function() self.hilight.hide() end) + + -- show/hide + function self.hilight.show(g) + for i, c in ipairs(self.cls) do + self.data[i].widget:set_alert(is_intersect(g, c:geometry())) + end + self.hilight.hidetimer:again() + end + + function self.hilight.hide() + for i, _ in ipairs(self.cls) do self.data[i].widget:set_alert(false) end + end + + -- close the navigator on tag switch + tag.connect_signal('property::selected', + function() + if navigator.active then self:close() end + end + ) + + -- update navigator if new client spawns + client.connect_signal('manage', + function() + if navigator.active then self:restart() end + end + ) + + -- update navigator if a client gets minimized or restored + client.connect_signal('property::minimized', + function() + if navigator.active then self:restart() end + end + ) +end + +function navigator:run() + if not self.style then self:init() end + + -- check clients + local s = mouse.screen + self.cls = awful.client.tiled(s) + + if #self.cls == 0 or + not client.focus or + client.focus.fullscreen or + awful.util.table.hasitem(navigator.ignored, client.focus.type) + then + return + end + + -- check handler + local l = awful.layout.get(client.focus.screen) + local handler = l.key_handler or redflat.layout.common.handler[l] + if not handler then + rednotify:show(redutil.table.merge({ text = "Layout not supported" }, self.style.notify)) + return + end + + -- layout setup if needed + if l.startup then l.startup() end + local tip = l.tip or redflat.layout.common.tips[l] + + -- activate navition widgets + for i, c in ipairs(self.cls) do + if not self.data[i] then + self.data[i] = self.make_decor(c) + else + self.data[i]:set_client(c) + end + + self.data[i].wibox.visible = true + end + + -- run key handler + self.grabber_settled = handler + awful.keygrabber.run(self.grabber_settled) + + -- set keys tip + self.tip_settled = tip + if tip then + local tip_style = self.style.keytip[awful.layout.getname(l)] or self.style.keytip.base + redtip:set_pack( + "Layout " .. l.name, tip, tip_style.column, tip_style.geometry, + self.style.keytip.base.exit and function() redflat.layout.common.action.exit() end -- fix this? + ) + end + + navigator.active = true +end + +function navigator:close() + for i, _ in ipairs(self.cls) do + self.data[i]:clear() + end + + awful.keygrabber.stop(self.grabber_settled) + if self.tip_settled then redtip:remove_pack() end + + local l = client.focus and awful.layout.get(client.focus.screen) + if l and l.cleanup then l.cleanup() end + self.cls = {} + + navigator.active = false +end + +function navigator:restart() + -- update decoration + for i, _ in ipairs(self.cls) do self.data[i]:clear(true) end + local newcls = awful.client.tiled(mouse.screen) + for i = 1, math.max(#self.cls, #newcls) do + if newcls[i] then + if not self.data[i] then + self.data[i] = self.make_decor(newcls[i]) + else + self.data[i]:set_client(newcls[i]) + end + + self.data[i].wibox.visible = true + else + self.data[i].wibox.visible = false + end + end + + self.cls = newcls +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return navigator diff --git a/awesome/.config/awesome/redflat/startup.lua b/awesome/.config/awesome/redflat/startup.lua new file mode 100644 index 0000000..490c4c7 --- /dev/null +++ b/awesome/.config/awesome/redflat/startup.lua @@ -0,0 +1,44 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat startup check -- +----------------------------------------------------------------------------------------------------------------------- +-- Save exit reason to file +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local io = io + +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local startup = { locked = false } + +startup.path = "/tmp/awesome-exit-reason" +--startup.bin = "awesome-client" + +local REASON = { RESTART = "restart", EXIT = "exit" } + +-- Stamp functions +----------------------------------------------------------------------------------------------------------------------- + +-- save restart reason +function startup.stamp(reason_restart) + local file = io.open(startup.path, "w") + file:write(reason_restart) + file:close() +end + +function startup:activate() + -- check if it is first start + local reason = redutil.read.file(startup.path) + self.is_startup = (not reason or reason == REASON.EXIT) and not self.locked + + -- save reason on exit + awesome.connect_signal("exit", + function(is_restart) startup.stamp(is_restart and REASON.RESTART or REASON.EXIT) end + ) +end + +----------------------------------------------------------------------------------------------------------------------- +return startup diff --git a/awesome/.config/awesome/redflat/system.lua b/awesome/.config/awesome/redflat/system.lua new file mode 100644 index 0000000..6469c0b --- /dev/null +++ b/awesome/.config/awesome/redflat/system.lua @@ -0,0 +1,753 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat system -- +----------------------------------------------------------------------------------------------------------------------- +-- System monitoring functions collected here +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ vicious module +------ (c) 2010, 2011 Adrian C. +------ (c) 2009, Lucas de Vries +------ (c) 2011, Jörg T. +------ (c) 2011, Adrian C. +----------------------------------------------------------------------------------------------------------------------- + + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local tonumber = tonumber +local io = io +local os = os +local string = string +local math = math + +local timer = require("gears.timer") +local awful = require("awful") +local redutil = require("redflat.util") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local system = { thermal = {}, dformatted = {}, pformatted = {} } + +-- Async settlers generator +----------------------------------------------------------------------------------------------------------------------- +function system.simple_async(command, pattern) + return function(setup) + awful.spawn.easy_async_with_shell(command, + function(output) + local value = tonumber(string.match(output, pattern)) + setup(value and { value } or { 0 }) + end + ) + end +end + +-- Disk usage +----------------------------------------------------------------------------------------------------------------------- +function system.fs_info(args) + local fs_info = {} + args = args or "/" + + -- Get data from df + ------------------------------------------------------------ + local line = redutil.read.output("LC_ALL=C df -kP " .. args .. " | tail -1") + + -- Parse data + ------------------------------------------------------------ + fs_info.size = string.match(line, "^.-[%s]([%d]+)") + fs_info.mount = string.match(line, "%%[%s]([%p%w]+)") + fs_info.used, fs_info.avail, fs_info.use_p = string.match(line, "([%d]+)[%D]+([%d]+)[%D]+([%d]+)%%") + + -- Format output special for redflat desktop widget + ------------------------------------------------------------ + return { tonumber(fs_info.use_p) or 0, tonumber(fs_info.used) or 0} +end + +-- Qemu image check +----------------------------------------------------------------------------------------------------------------------- +local function q_format(size, k) + if not size or not k then return 0 end + return k == "K" and tonumber(size) or k == "M" and size * 1024 or k == "G" and size * 1024^2 or 0 +end + +function system.qemu_image_size(args) + local img_info = {} + + -- Get data from qemu-ima + ------------------------------------------------------------ + local line = redutil.read.output("LC_ALL=C qemu-img info " .. args) + + -- Parse data + ------------------------------------------------------------ + local size, k = string.match(line, "disk%ssize:%s([%.%d]+)%s(%w)") + img_info.size = q_format(size, k) + local vsize, vk = string.match(line, "virtual%ssize:%s([%.%d]+)%s(%w)") + img_info.virtual_size = q_format(vsize, vk) + img_info.use_p = img_info.virtual_size > 0 and math.floor(img_info.size / img_info.virtual_size * 100) or 0 + + -- Format output special for redflat desktop widget + ------------------------------------------------------------ + return { img_info.use_p, img_info.size, off = img_info.size == 0 } +end + +-- Traffic check with vnstat (async) +----------------------------------------------------------------------------------------------------------------------- +local function vnstat_format(value, unit) + if not value or not unit then return 0 end + local v = value:gsub(',', '.') + return unit == "B" and tonumber(v) + or unit == "KiB" and v * 1024 + or unit == "MiB" and v * 1024^2 + or unit == "GiB" and v * 1024^3 +end + +function system.vnstat_check(args) + local command = string.format("vnstat %s | tail -n 3 | head -n 1", args) + return function(setup) + awful.spawn.easy_async_with_shell(command, + function(output) + local x, u = string.match( + output, "%s+%d+,%d+%s%w+%s+%|%s+%d+,%d+%s%w+%s+%|%s+(%d+,%d+)%s(%w+)%s+%|%s+.+" + ) + local total = vnstat_format(x, u) + setup({ total }) + end + ) + end +end + +-- Get network speed +----------------------------------------------------------------------------------------------------------------------- +function system.net_speed(interface, storage) + local up, down = 0, 0 + + -- Get network info + -------------------------------------------------------------------------------- + for line in io.lines("/proc/net/dev") do + + -- Match wmaster0 as well as rt0 (multiple leading spaces) + local name = string.match(line, "^[%s]?[%s]?[%s]?[%s]?([%w]+):") + + -- Calculate speed for given interface + ------------------------------------------------------------ + if name == interface then + -- received bytes, first value after the name + local recv = tonumber(string.match(line, ":[%s]*([%d]+)")) + -- transmited bytes, 7 fields from end of the line + local send = tonumber(string.match(line, "([%d]+)%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d+%s+%d$")) + + local now = os.time() + + if not storage[interface] then + -- default values on the first run + storage[interface] = { recv = 0, send = 0 } + else + -- net stats are absolute, substract our last reading + local interval = now - storage[interface].time + if interval <= 0 then interval = 1 end + + down = (recv - storage[interface].recv) / interval + up = (send - storage[interface].send) / interval + end + + -- store totals + storage[interface].time = now + storage[interface].recv = recv + storage[interface].send = send + end + end + + -------------------------------------------------------------------------------- + return { up, down } +end + +-- Get disk speed +----------------------------------------------------------------------------------------------------------------------- +function system.disk_speed(disk, storage) + local up, down = 0, 0 + + -- Get i/o info + -------------------------------------------------------------------------------- + for line in io.lines("/proc/diskstats") do + + -- parse info + -- linux kernel documentation: Documentation/iostats.txt + local device, read, write = string.match(line, "([^%s]+) %d+ %d+ (%d+) %d+ %d+ %d+ (%d+)") + + -- Calculate i/o for given device + ------------------------------------------------------------ + if device == disk then + local now = os.time() + local stats = { read, write } + + if not storage[disk] then + -- default values on the first run + storage[disk] = { stats = stats } + else + -- check for overflows and counter resets (> 2^32) + if stats[1] < storage[disk].stats[1] or stats[2] < storage[disk].stats[2] then + storage[disk].stats[1], storage[disk].stats[2] = stats[1], stats[2] + end + + -- diskstats are absolute, substract our last reading + -- * divide by timediff because we don't know the timer value + local interval = now - storage[disk].time + if interval <= 0 then interval = 1 end + + up = (stats[1] - storage[disk].stats[1]) / interval + down = (stats[2] - storage[disk].stats[2]) / interval + end + + -- store totals + storage[disk].time = now + storage[disk].stats = stats + end + end + + -------------------------------------------------------------------------------- + return { up, down } +end + +-- Get MEM info +----------------------------------------------------------------------------------------------------------------------- +function system.memory_info() + local mem = { buf = {}, swp = {} } + + -- Get MEM info + ------------------------------------------------------------ + for line in io.lines("/proc/meminfo") do + for k, v in string.gmatch(line, "([%a]+):[%s]+([%d]+).+") do + if k == "MemTotal" then mem.total = math.floor(v/1024) + elseif k == "MemFree" then mem.buf.f = math.floor(v/1024) + elseif k == "Buffers" then mem.buf.b = math.floor(v/1024) + elseif k == "Cached" then mem.buf.c = math.floor(v/1024) + elseif k == "SwapTotal" then mem.swp.t = math.floor(v/1024) + elseif k == "SwapFree" then mem.swp.f = math.floor(v/1024) + end + end + end + + -- Calculate memory percentage + ------------------------------------------------------------ + mem.free = mem.buf.f + mem.buf.b + mem.buf.c + mem.inuse = mem.total - mem.free + mem.bcuse = mem.total - mem.buf.f + mem.usep = math.floor(mem.inuse / mem.total * 100) + + -- calculate swap percentage + mem.swp.inuse = mem.swp.t - mem.swp.f + mem.swp.usep = mem.swp.t > 0 and math.floor(mem.swp.inuse / mem.swp.t * 100) or 0 + + ------------------------------------------------------------ + return mem +end + +-- Get cpu usage info +----------------------------------------------------------------------------------------------------------------------- +--local storage = { cpu_total = {}, cpu_active = {} } -- storage structure + +function system.cpu_usage(storage) + local cpu_lines = {} + local cpu_usage = {} + local diff_time_total + + -- Get CPU stats + ------------------------------------------------------------ + for line in io.lines("/proc/stat") do + if string.sub(line, 1, 3) == "cpu" then + local digits_in_line = {} + + for i in string.gmatch(line, "[%s]+([^%s]+)") do + table.insert(digits_in_line, i) + end + + table.insert(cpu_lines, digits_in_line) + end + end + + -- Calculate usage + ------------------------------------------------------------ + for i, line in ipairs(cpu_lines) do + + -- calculate totals + local total_new = 0 + for _, value in ipairs(line) do total_new = total_new + value end + + local active_new = total_new - (line[4] + line[5]) + + -- calculate percentage + local diff_total = total_new - (storage.cpu_total[i] or 0) + local diff_active = active_new - (storage.cpu_active[i] or 0) + + if i == 1 then diff_time_total = diff_total end + if diff_total == 0 then diff_total = 1E-6 end + + cpu_usage[i] = math.floor((diff_active / diff_total) * 100) + + -- store totals + storage.cpu_total[i] = total_new + storage.cpu_active[i] = active_new + end + + -- Format output special for redflat widgets and other system functions + ------------------------------------------------------------ + local total_usage = cpu_usage[1] + local core_usage = awful.util.table.clone(cpu_usage) + table.remove(core_usage, 1) + + return { total = total_usage, core = core_usage, diff = diff_time_total } +end + +-- Get battery level and charging status +----------------------------------------------------------------------------------------------------------------------- +function system.battery(batname) + if not batname then return end + + -- Initialzie vars + -------------------------------------------------------------------------------- + local battery = {} + local time = "N/A" + + local battery_state = { + ["Full\n"] = "↯", + ["Unknown\n"] = "⌁", + ["Charged\n"] = "↯", + ["Charging\n"] = "+", + ["Discharging\n"] = "-" + } + + local files = { + "present", "status", "charge_now", + "charge_full", "energy_now", "energy_full", + "current_now", "power_now" + } + + -- Read info + -------------------------------------------------------------------------------- + for _, v in pairs(files) do + battery[v] = redutil.read.file("/sys/class/power_supply/" .. batname .. "/" .. v) + end + + -- Check if the battery is present + ------------------------------------------------------------ + if battery.present ~= "1\n" then + return { battery_state["Unknown\n"], 0, "N/A" } + end + + -- Get state information + ------------------------------------------------------------ + local state = battery_state[battery.status] or battery_state["Unknown\n"] + local remaining, capacity + + -- Get capacity information + if battery.charge_now then remaining, capacity = battery.charge_now, battery.charge_full + elseif battery.energy_now then remaining, capacity = battery.energy_now, battery.energy_full + else return {battery_state["Unknown\n"], 0, "N/A"} + end + + -- Calculate percentage (but work around broken BAT/ACPI implementations) + ------------------------------------------------------------ + local percent = math.min(math.floor(remaining / capacity * 100), 100) + + -- Get charge information + ------------------------------------------------------------ + local rate + + if battery.current_now then rate = tonumber(battery.current_now) + elseif battery.power_now then rate = tonumber(battery.power_now) + else return {state, percent, "N/A"} + end + + -- Calculate remaining (charging or discharging) time + ------------------------------------------------------------ + if rate ~= nil and rate ~= 0 then + local timeleft + + if state == "+" then timeleft = (tonumber(capacity) - tonumber(remaining)) / tonumber(rate) + elseif state == "-" then timeleft = tonumber(remaining) / tonumber(rate) + else return {state, percent, time} + end + + -- calculate time + local hoursleft = math.floor(timeleft) + local minutesleft = math.floor((timeleft - hoursleft) * 60 ) + + time = string.format("%02d:%02d", hoursleft, minutesleft) + end + + -------------------------------------------------------------------------------- + return { state, percent, time } +end + +-- Temperature measure +----------------------------------------------------------------------------------------------------------------------- + +-- Using lm-sensors +------------------------------------------------------------ +system.lmsensors = { storage = {}, patterns = {}, delay = 1, time = 0 } + +function system.lmsensors:update(output) + for name, pat in pairs(self.patterns) do + local value = string.match(output, pat.match) + if value and pat.posthook then value = pat.posthook(value) end + value = tonumber(value) + self.storage[name] = value and { value } or { 0 } + end + self.time = os.time() +end + +function system.lmsensors:start(timeout) + if self.timer then return end + + self.timer = timer({ timeout = timeout }) + self.timer:connect_signal("timeout", function() + awful.spawn.easy_async("sensors", function(output) system.lmsensors:update(output) end) + end) + + self.timer:start() + self.timer:emit_signal("timeout") +end + +function system.lmsensors:soft_start(timeout, shift) + if self.timer then return end + + timer({ + timeout = timeout - (shift or 1), + autostart = true, + single_shot = true, + callback = function() self:start(timeout) end + }) +end + +function system.lmsensors.get(name) + if os.time() - system.lmsensors.time > system.lmsensors.delay then + local output = redutil.read.output("sensors") + system.lmsensors:update(output) + end + return system.lmsensors.storage[name] or { 0 } +end + +-- Legacy +------------------------------------------------------------ +--function system.thermal.sensors(args) +-- local args = args or "'Physical id 0'" +-- local output = redutil.read.output("sensors | grep " .. args) +-- +-- local temp = string.match(output, "%+(%d+%.%d)°[CF]") +-- +-- return temp and { math.floor(tonumber(temp)) } or { 0 } +--end +-- +--local sensors_store +-- +--function system.thermal.sensors_core(args) +-- args = args or {} +-- local index = args.index or 0 +-- +-- if args.main then sensors_store = redutil.read.output("sensors | grep Core") end +-- local line = string.match(sensors_store, "Core " .. index .."(.-)\r?\n") +-- +-- if not line then return { 0 } end +-- +-- local temp = string.match(line, "%+(%d+%.%d)°[CF]") +-- return temp and { math.floor(tonumber(temp)) } or { 0 } +--end + +-- Using hddtemp +------------------------------------------------------------ +function system.thermal.hddtemp(args) + args = args or {} + local port = args.port or "7634" + local disk = args.disk or "/dev/sda" + + local output = redutil.read.output("echo | curl --connect-timeout 1 -fsm 3 telnet://127.0.0.1:" .. port) + + for mnt, _, temp, _ in output:gmatch("|(.-)|(.-)|(.-)|(.-)|") do + if mnt == disk then + return temp and { tonumber(temp) } + end + end + + return { 0 } +end + +-- Using nvidia-settings on sysmem with optimus (bumblebee) +-- Async +------------------------------------------------------------ +function system.thermal.nvoptimus(setup) + local nvidia_on = string.find(redutil.read.output("cat /proc/acpi/bbswitch"), "ON") + if not nvidia_on then + setup({ 0, off = true }) + else + awful.spawn.easy_async_with_shell("optirun -b none nvidia-settings -c :8 -q gpucoretemp -t | tail -1", + function(output) + local value = tonumber(string.match(output, "[^\n]+")) + setup({ value or 0, off = false }) + end + ) + end +end + +-- Direct call of nvidia-smi +------------------------------------------------------------ +function system.thermal.nvsmi() + local temp = string.match( + redutil.read.output("nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader"), "%d%d" + ) + -- checks that local temp is not null then returns the convert string to number or if fails returns null + return temp and { tonumber(temp) } or { 0 } +end + +-- Using nvidia-smi on sysmem with optimus (nvidia-prime) +------------------------------------------------------------ +function system.thermal.nvprime() + local temp = 0 + local nvidia_on = string.find(redutil.read.output("prime-select query"), "nvidia") + + if nvidia_on ~= nil then + -- reuse function nvsmi + temp = system.thermal.nvsmi()[1] + end + + return { temp, off = nvidia_on == nil } +end + +-- Get info from transmission-remote client +-- This function adapted special for async reading +----------------------------------------------------------------------------------------------------------------------- +system.transmission = {} + +-- Check if transmission client running +-------------------------------------------------------------------------------- +function system.transmission.is_running(args) + local t_client = args or "transmission-gtk" + return redutil.read.output("pidof -x " .. t_client) ~= "" +end + +-- Function for torrents sorting (downloading and paused first) +-------------------------------------------------------------------------------- +function system.transmission.sort_torrent(a, b) + return a.status == "Downloading" and b.status ~= "Downloading" + or a.status == "Stopped" and b.status ~= "Stopped" and b.status ~= "Downloading" +end + +-- Function to parse 'transmission-remote -l' output +-------------------------------------------------------------------------------- +function system.transmission.parse(output, show_active_only) + + -- Initialize vars + ------------------------------------------------------------ + local torrent = { + seed = { num = 0, speed = 0 }, + dnld = { num = 0, speed = 0 }, + list = {}, + } + + -- Find state and progress for every torrent + -- and total upload and downoad speed + ------------------------------------------------------------ + --local status_pos = string.find(output, "Status") + + -- assuming "Up & Down" and "Downloading" is the same thing + output = string.gsub(output, "Up & Down", "Downloading") + + -- parse every line + for line in string.gmatch(output, "[^\r\n]+") do + + if string.sub(line, 1, 3) == "Sum" then + -- get total speed + local seed, dnld = string.match(line, "Sum:%s+[%d%.]+%s+%a+%s+([%d%.]+)%s+([%d%.]+)") + seed, dnld = tonumber(seed), tonumber(dnld) + if seed and dnld then + torrent.seed.speed, torrent.dnld.speed = seed, dnld + end + else + -- get torrent info + local prog, status, name = string.match( + line, + "%s+%d+%s+(%d+)%%%s+[%d%.]+%s%a+%s+.+%s+[%d%.]+%s+[%d%.]+%s+[%d%.]+%s+(%a+)%s+(.+)" + ) + + if prog and status then + -- if active only is selected then filter + if not show_active_only or (status == "Downloading" or status == "Seeding") then + table.insert(torrent.list, { prog = prog, status = status, name = name }) + end + + if status == "Seeding" then + torrent.seed.num = torrent.seed.num + 1 + elseif status == "Downloading" then + torrent.dnld.num = torrent.dnld.num + 1 + end + end + end + end + + -- Sort torrents + ------------------------------------------------------------ + -- do not need to sort active as transmission-remote automatically sorts + if not show_active_only then + table.sort(torrent.list, system.transmission.sort_torrent) + end + + -- Format output special for redflat desktop widget + ------------------------------------------------------------ + local sorted_prog = {} + for _, t in ipairs(torrent.list) do + table.insert(sorted_prog, { value = t.prog, text = string.format("%d%% %s", t.prog, t.name) }) + end + + return { + bars = sorted_prog, + lines = { { torrent.seed.speed, torrent.seed.num }, { torrent.dnld.speed, torrent.dnld.num } }, + alert = false + } +end + +-- Async transmission meter function +-------------------------------------------------------------------------------- +function system.transmission.info(setup, args) + local command = args.command or "transmission-remote localhost -l" + + awful.spawn.easy_async(command, function(output) + -- rather than check if an instance of transmission is running locally, check if there is actually any output + -- zero torrents or no program equates to same result + if string.len(output) > 0 then + local state = system.transmission.parse(output, args.show_active_only) + + if args.speed_only then + state.lines[1][2] = state.lines[1][1] + state.lines[2][2] = state.lines[2][1] + end + setup(state) + else + setup({ bars = {}, lines = { { 0, 0 }, { 0, 0 } }, alert = true }) + end + end) +end + +-- Get processes list and cpu and memory usage for every process +-- !!! Fixes is needed !!! +----------------------------------------------------------------------------------------------------------------------- +local proc_storage = {} + +function system.proc_info(cpu_storage) + local process = {} + local mem_page_size = 4 + + -- get processes list with ps utility + -- !!! TODO: get processes list from fs directly !!! + local output = redutil.read.output("ps -eo pid | tail -n +2") + + -- get total cpu time diff from previous call + local cpu_diff = system.cpu_usage(cpu_storage).diff + + -- handle every line in ps output + for line in string.gmatch(output, "[^\n]+") do + local pid = tonumber(line) + + -- try to get info from /proc + local stat = redutil.read.file("/proc/" .. pid .. "/stat") + + -- if process with given pid exist in /proc + if stat then + + -- get process name + local name = string.match(stat, ".+%((.+)%).+") + local proc_stat = { name } + + -- remove process name from stat data to simplify following parsing + stat = stat:gsub("%s%(.+%)", "", 1) + + -- the rest of 'stat' data can be splitted by whitespaces + -- first chunk is pid so just skip it + for m in string.gmatch(stat, "[%s]+([^%s]+)") do + table.insert(proc_stat, m) + end + + -- get memory usage (RSS) + -- !!! RSS is a very crude approximation for memory usage !!! + -- !!! TODO: find a more accurate method for real memory usage calculation !!! + local mem = proc_stat[23] * mem_page_size + + -- calculate cpu usage for process + local proc_time = proc_stat[13] + proc_stat[14] + local pcpu = (proc_time - (proc_storage[pid] or 0)) / cpu_diff + + -- save current cpu time for future + proc_storage[pid] = proc_time + + -- save results + table.insert(process, { pid = pid, name = name, mem = mem, pcpu = pcpu }) + end + end + + return process +end + +-- Output format functions +----------------------------------------------------------------------------------------------------------------------- + +-- CPU and memory usage formatted special for desktop widget +-------------------------------------------------------------------------------- +function system.dformatted.cpumem(storage) + local mem = system.memory_info() + local cores = {} + for i, v in ipairs(system.cpu_usage(storage).core) do + table.insert(cores, { value = v, text = string.format("CORE%d %s%%", i - 1, v) }) + end + + return { + bars = cores, + lines = { { mem.usep, mem.inuse }, { mem.swp.usep, mem.swp.inuse } } + } +end + +-- CPU usage formatted special for panel widget +-------------------------------------------------------------------------------- +function system.pformatted.cpu(crit) + crit = crit or 75 + local storage = { cpu_total = {}, cpu_active = {} } + + return function() + local usage = system.cpu_usage(storage).total + return { + value = usage / 100, + text = usage .. "%", + alert = usage > crit + } + end +end + +-- Memory usage formatted special for panel widget +-------------------------------------------------------------------------------- +function system.pformatted.mem(crit) + crit = crit or 75 + + return function() + local usage = system.memory_info().usep + return { + value = usage / 100, + text = usage .. "%", + alert = usage > crit + } + end +end + +-- Battery state formatted special for panel widget +-------------------------------------------------------------------------------- +function system.pformatted.bat(crit) + crit = crit or 15 + + return function(arg) + local state = system.battery(arg) + return { + value = state[2] / 100, + text = state[1] .. " " .. state[2] .. "% " .. state[3], + alert = state[2] < crit + } + end +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return system diff --git a/awesome/.config/awesome/redflat/titlebar.lua b/awesome/.config/awesome/redflat/titlebar.lua new file mode 100644 index 0000000..4964fca --- /dev/null +++ b/awesome/.config/awesome/redflat/titlebar.lua @@ -0,0 +1,442 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat titlebar -- +----------------------------------------------------------------------------------------------------------------------- +-- model titlebar with two view: light and full +-- Only simple indicators avaliable, no buttons +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.titlebar v3.5.2 +------ (c) 2012 Uli Schlachter +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local error = error +local table = table +local unpack = unpack or table.unpack + +local awful = require("awful") +local drawable = require("wibox.drawable") +local color = require("gears.color") +local wibox = require("wibox") + +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local titlebar = { mt = {}, widget = {}, _index = 1, _num = 1 } +titlebar.list = setmetatable({}, { __mode = 'k' }) + + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local default_style = { + size = 8, + position = "top", + font = "Sans 12 bold", + border_margin = { 0, 0, 0, 4 }, + color = { main = "#b1222b", wibox = "#202020", gray = "#575757", + text = "#aaaaaa", icon = "#a0a0a0", urgent = "#32882d" } +} + +local default_mark_style = { + size = 20, + angle = 0, + color = default_style.color +} + +local default_button_style = { + list = { unknown = redutil.base.placeholder({ txt = "X" }) }, + color = default_style.color +} + +local positions = { "left", "right", "top", "bottom" } + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Get titlebar function +------------------------------------------------------------ +local function get_titlebar_function(c, position) + if position == "left" then return c.titlebar_left + elseif position == "right" then return c.titlebar_right + elseif position == "top" then return c.titlebar_top + elseif position == "bottom" then return c.titlebar_bottom + else + error("Invalid titlebar position '" .. position .. "'") + end +end + +-- Get titlebar model +------------------------------------------------------------ +function titlebar.get_model(c, position) + position = position or "top" + return titlebar.list[c] and titlebar.list[c][position] or nil +end + +-- Get titlebar client list +------------------------------------------------------------ +function titlebar.get_clients() + local cl = {} + for c, _ in pairs(titlebar.list) do table.insert(cl, c) end + return cl +end + + +-- Build client titlebar +----------------------------------------------------------------------------------------------------------------------- +function titlebar.new(c, style) + if not titlebar.list[c] then titlebar.list[c] = {} end + style = redutil.table.merge(default_style, style or {}) + + -- Make sure that there is never more than one titlebar for any given client + local ret + if not titlebar.list[c][style.position] then + local tfunction = get_titlebar_function(c, style.position) + local d = tfunction(c, style.size) + + local context = { client = c, position = style.position } + local base = wibox.container.margin(nil, unpack(style.border_margin)) + + ret = drawable(d, context, "redbar") + ret:_inform_visible(true) + ret:set_bg(style.color.wibox) + + -- add info to model + local model = { + layouts = {}, + current = nil, + style = style, + size = style.size, + drawable = ret, + hidden = false, + cutted = false, + tfunction = tfunction, + base = base, + } + + -- set titlebar base layout + ret:set_widget(base) + + -- save titlebar info + titlebar.list[c][style.position] = model + c:connect_signal("unmanage", function() ret:_inform_visible(false) end) + else + ret = titlebar.list[c][style.position].drawable + end + + return ret +end + +-- Titlebar functions +----------------------------------------------------------------------------------------------------------------------- + +-- Show client titlebar +------------------------------------------------------------ +function titlebar.show(c, position) + local model = titlebar.get_model(c, position) + if model and model.hidden then + model.hidden = false + model.tfunction(c, not model.cutted and model.size or 0) + end +end + +-- Hide client titlebar +------------------------------------------------------------ +function titlebar.hide(c, position) + local model = titlebar.get_model(c, position) + if model and not model.hidden then + model.tfunction(c, 0) + model.hidden = true + end +end + +-- Toggle client titlebar +------------------------------------------------------------ +function titlebar.toggle(c, position) + local all_positions = position and { position } or positions + for _, pos in ipairs(all_positions) do + local model = titlebar.get_model(c, pos) + if model then + model.tfunction(c, model.hidden and not model.cutted and model.size or 0) + model.hidden = not model.hidden + end + end +end + +-- Add titlebar view model +------------------------------------------------------------ +function titlebar.add_layout(c, position, layout, size) + local model = titlebar.get_model(c, position) + if not model then return end + + size = size or model.style.size + local l = { layout = layout, size = size } + table.insert(model.layouts, l) + if #model.layouts > titlebar._num then titlebar._num = #model.layouts end + + if not model.current then + model.base:set_widget(layout) + model.current = 1 + if model.size ~= size then + model.tfunction(c, size) + model.size = size + end + end +end + +-- Switch titlebar view model +------------------------------------------------------------ +function titlebar.switch(c, position, index) + local model = titlebar.get_model(c, position) + if not model or #model.layouts == 1 then return end + + if index then + if not model.layouts[index] then return end + model.current = index + else + model.current = (model.current < #model.layouts) and (model.current + 1) or 1 + end + local layout = model.layouts[model.current] + + model.base:set_widget(layout.layout) + if not model.cutted and not model.hidden and model.size ~= layout.size then + model.tfunction(c, layout.size) + end + model.size = layout.size +end + + +-- Titlebar mass actions +----------------------------------------------------------------------------------------------------------------------- + +-- Temporary hide client titlebar +------------------------------------------------------------ +function titlebar.cut_all(cl, position) + cl = cl or titlebar.get_clients() + --local cutted = {} + local all_positions = position and { position } or positions + + for _, pos in ipairs(all_positions) do + for _, c in ipairs(cl) do + local model = titlebar.get_model(c, pos) + if model and not model.cutted then + model.cutted = true + --table.insert(cutted, c) + if not model.hidden then model.tfunction(c, 0) end + end + end + end + --return cutted +end + +-- Restore client titlebar if it was cutted +------------------------------------------------------------ +function titlebar.restore_all(cl, position) + cl = cl or titlebar.get_clients() + local all_positions = position and { position } or positions + for _, pos in ipairs(all_positions) do + for _, c in ipairs(cl) do + local model = titlebar.get_model(c, pos) + if model and model.cutted then + model.cutted = false + if not model.hidden then model.tfunction(c, model.size) end + end + end + end +end + +-- Mass actions +------------------------------------------------------------ +function titlebar.toggle_all(cl, position) + cl = cl or titlebar.get_clients() + for _, c in pairs(cl) do titlebar.toggle(c, position) end +end + +--function titlebar.switch_all(cl, position) +-- cl = cl or titlebar.get_clients() +-- for _, c in pairs(cl) do titlebar.switch(c, position) end +--end + +function titlebar.show_all(cl, position) + cl = cl or titlebar.get_clients() + for _, c in pairs(cl) do titlebar.show(c, position) end +end + +function titlebar.hide_all(cl, position) + cl = cl or titlebar.get_clients() + for _, c in pairs(cl) do titlebar.hide(c, position) end +end + +-- Global layout switch +------------------------------------------------------------ +function titlebar.global_switch(index) + titlebar._index = index or titlebar._index + 1 + if titlebar._index > titlebar._num then titlebar._index = 1 end + + for _, c in pairs(titlebar.get_clients()) do + for _, position in ipairs(positions) do + titlebar.switch(c, position, titlebar._index) + end + end +end + + +-- Titlebar indicators +----------------------------------------------------------------------------------------------------------------------- +titlebar.mark = {} +titlebar.button = {} + +-- Client mark blank +------------------------------------------------------------ +function titlebar.mark.base(_, style) + + -- build widget + local widg = wibox.widget.base.make_widget() + widg._data = { color = style.color.gray } + widg._style = redutil.table.merge(default_mark_style, style or {}) + + -- widget setup + function widg:fit(_, _, width, height) + return width, height + end + + function widg:draw(_, cr, width, height) + local d = math.tan(self._style.angle) * height + + cr:set_source(color(self._data.color)) + cr:move_to(0, height) + cr:rel_line_to(d, - height) + cr:rel_line_to(width - d, 0) + cr:rel_line_to(-d, height) + cr:close_path() + + cr:fill() + end + + -- user function + function widg:set_active(active) + self._data.color = active and style.color.main or style.color.gray + self:emit_signal("widget::redraw_needed") + end + + -- widget width setup + widg:set_forced_width(style.size) + + return widg +end + +-- Client property indicator +------------------------------------------------------------ +function titlebar.mark.property(c, prop, style) + local w = titlebar.mark.base(c, style) + w:set_active(c[prop]) + c:connect_signal("property::" .. prop, function() w:set_active(c[prop]) end) + return w +end + +-- Client focus indicator +------------------------------------------------------------ +function titlebar.mark.focus(c, style) + local w = titlebar.mark.base(c, style) + c:connect_signal("focus", function() w:set_active(true) end) + c:connect_signal("unfocus", function() w:set_active(false) end) + return w +end + +-- Client button blank +------------------------------------------------------------ +function titlebar.button.base(icon, style, is_inactive) + style = redutil.table.merge(default_button_style, style or {}) + + -- widget + local widg = svgbox(style.list[icon] or style.list.unknown) + widg._current_color = style.color.icon + widg.is_under_mouse = false + + -- state + function widg:set_active(active) + widg._current_color = active and style.color.main or style.color.icon + widg:set_color(widg.is_under_mouse and style.color.urgent or widg._current_color) + --self:emit_signal("widget::redraw_needed") + end + + local function update(is_under_mouse) + widg.is_under_mouse = is_under_mouse + widg:set_color(widg.is_under_mouse and style.color.urgent or widg._current_color) + end + + if not is_inactive then + widg:connect_signal("mouse::enter", function() update(true) end) + widg:connect_signal("mouse::leave", function() update(false) end) + end + + widg:set_active(false) + return widg +end + +-- Client focus button +------------------------------------------------------------ +function titlebar.button.focus(c, style) + local w = titlebar.button.base("focus", style, true) + c:connect_signal("focus", function() w:set_active(true) end) + c:connect_signal("unfocus", function() w:set_active(false) end) + return w +end + +-- Client property button +------------------------------------------------------------ +function titlebar.button.property(c, prop, style) + local w = titlebar.button.base(prop, style) + w:set_active(c[prop]) + w:buttons(awful.util.table.join(awful.button({ }, 1, function() c[prop] = not c[prop] end))) + c:connect_signal("property::" .. prop, function() w:set_active(c[prop]) end) + return w +end + +-- Client close button +------------------------------------------------------------ +function titlebar.button.close(c, style) + local w = titlebar.button.base("close", style) + w:buttons(awful.util.table.join(awful.button({ }, 1, function() c:kill() end))) + return w +end + +-- Client name indicator +------------------------------------------------------------ +function titlebar.label(c, style, is_highlighted) + style = redutil.table.merge(default_style, style or {}) + local w = wibox.widget.textbox() + w:set_font(style.font) + w:set_align("center") + w._current_color = style.color.text + + local function update() + local txt = awful.util.escape(c.name or "Unknown") + w:set_markup(string.format('%s', w._current_color, txt)) + end + c:connect_signal("property::name", update) + + if is_highlighted then + c:connect_signal("focus", function() w._current_color = style.color.main; update() end) + c:connect_signal("unfocus", function() w._current_color = style.color.text; update()end) + end + + update() + return w +end + + +-- Remove from list on close +----------------------------------------------------------------------------------------------------------------------- +client.connect_signal("unmanage", function(c) titlebar.list[c] = nil end) + + +-- Config metatable to call titlebar module as function +----------------------------------------------------------------------------------------------------------------------- +function titlebar.mt:__call(...) + return titlebar.new(...) +end + +return setmetatable(titlebar, titlebar.mt) diff --git a/awesome/.config/awesome/redflat/util/base.lua b/awesome/.config/awesome/redflat/util/base.lua new file mode 100644 index 0000000..b666759 --- /dev/null +++ b/awesome/.config/awesome/redflat/util/base.lua @@ -0,0 +1,66 @@ +-- RedFlat util submodule + +local cairo = require("lgi").cairo +local gears = require("gears") +local wibox = require("wibox") +local surface = require("gears.surface") + +local base = {} + +-- Functions +----------------------------------------------------------------------------------------------------------------------- + +-- Advanced buttons setup +-- Copypasted from awful.widget.common +-- (c) 2008-2009 Julien Danjou +-------------------------------------------------------------------------------- +function base.buttons(buttons, object) + if buttons then + local btns = {} + + for _, b in ipairs(buttons) do + -- Create a proxy button object: it will receive the real + -- press and release events, and will propagate them the the + -- button object the user provided, but with the object as + -- argument. + local btn = button { modifiers = b.modifiers, button = b.button } + btn:connect_signal("press", function () b:emit_signal("press", object) end) + btn:connect_signal("release", function () b:emit_signal("release", object) end) + btns[#btns + 1] = btn + end + + return btns + end +end + +-- Create cairo surface from text (useful for themed icons replacement) +-------------------------------------------------------------------------------- +function base.placeholder(args) + args = args or {} + local tb = wibox.widget({ + markup = args.txt or "?", + align = "center", + valign = "center", + widget = wibox.widget.textbox + }) + + return surface.widget_to_surface(tb, args.width or 24, args.height or 24) +end + +-- Create rectangle cairo surface image +-------------------------------------------------------------------------------- +function base.image(width, height, geometry, color) + local image = cairo.ImageSurface.create(cairo.Format.ARGB32, width, height) + local cr = cairo.Context(image) + cr:set_source(gears.color(color or "#000000")) + cr:rectangle(geometry.x, geometry.y, geometry.width, geometry.height) + cr:fill() + + return image +end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return base + diff --git a/awesome/.config/awesome/redflat/util/cairo.lua b/awesome/.config/awesome/redflat/util/cairo.lua new file mode 100644 index 0000000..fd65afb --- /dev/null +++ b/awesome/.config/awesome/redflat/util/cairo.lua @@ -0,0 +1,35 @@ +-- RedFlat util submodule + + +local cairo = { textcentre = {} } + +-- Functions +----------------------------------------------------------------------------------------------------------------------- + +-- Draw text aligned by center +------------------------------------------------------------ +function cairo.textcentre.full(cr, coord, text) + local ext = cr:text_extents(text) + cr:move_to(coord[1] - (ext.width/2 + ext.x_bearing), coord[2] - (ext.height/2 + ext.y_bearing)) + cr:show_text(text) +end + +-- Draw text aligned by center horizontal only +------------------------------------------------------------ +function cairo.textcentre.horizontal(cr, coord, text) + local ext = cr:text_extents(text) + cr:move_to(coord[1] - (ext.width/2 + ext.x_bearing), coord[2]) + cr:show_text(text) +end + +-- Set font +------------------------------------------------------------ +function cairo.set_font(cr, font) + cr:set_font_size(font.size) + cr:select_font_face(font.font, font.slant, font.face) +end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return cairo diff --git a/awesome/.config/awesome/redflat/util/client.lua b/awesome/.config/awesome/redflat/util/client.lua new file mode 100644 index 0000000..3d71de6 --- /dev/null +++ b/awesome/.config/awesome/redflat/util/client.lua @@ -0,0 +1,54 @@ +-- RedFlat util submodule + +local awful = require("awful") +local client = { floatset = {} } + +-- Functions +----------------------------------------------------------------------------------------------------------------------- +local function size_correction(c, geometry, is_restore) + local sign = is_restore and - 1 or 1 + local bg = sign * 2 * c.border_width + + if geometry.width then geometry.width = geometry.width - bg end + if geometry.height then geometry.height = geometry.height - bg end +end + +-- Client geometry correction by border width +-------------------------------------------------------------------------------- +function client.fullgeometry(c, g) + local ng + + if g then + if g.width and g.width <= 1 then return end + if g.height and g.height <= 1 then return end + + size_correction(c, g, false) + ng = c:geometry(g) + else + ng = c:geometry() + end + + size_correction(c, ng, true) + + return ng +end + +-- Smart swap include floating layout +-------------------------------------------------------------------------------- +function client.swap(c1, c2) + local lay = awful.layout.get(c1.screen) + if awful.util.table.hasitem(client.floatset, lay) then + local g1, g2 = client.fullgeometry(c1), client.fullgeometry(c2) + + client.fullgeometry(c1, g2) + client.fullgeometry(c2, g1) + end + + c1:swap(c2) +end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return client + diff --git a/awesome/.config/awesome/redflat/util/desktop.lua b/awesome/.config/awesome/redflat/util/desktop.lua new file mode 100644 index 0000000..bcdae0c --- /dev/null +++ b/awesome/.config/awesome/redflat/util/desktop.lua @@ -0,0 +1,126 @@ +-- RedFlat util submodule + +local wibox = require("wibox") +local awful = require("awful") + +local desktop = { build = {} } + +-- Functions +----------------------------------------------------------------------------------------------------------------------- +local function sum(t, n) + n = n or #t + local s = 0 + for i = 1, n do s = s + t[i] end + return s +end + +local function wposition(grid, n, workarea, dir) + local total = sum(grid[dir]) + local full_gap = sum(grid.edge[dir]) + local gap = #grid[dir] > 1 and (workarea[dir] - total - full_gap) / (#grid[dir] - 1) or 0 + + local current = sum(grid[dir], n - 1) + local pos = grid.edge[dir][1] + (n - 1) * gap + current + + return pos +end + +-- Calculate size and position for desktop widget +------------------------------------------------------------ +function desktop.wgeometry(grid, place, workarea) + return { + x = wposition(grid, place[1], workarea, "width"), + y = wposition(grid, place[2], workarea, "height"), + width = grid.width[place[1]], + height = grid.height[place[2]] + } +end + +-- Edge constructor +------------------------------------------------------------ +function desktop.edge(direction, zone) + local edge = { area = {} } + + edge.wibox = wibox({ + bg = "#00000000", -- transparent without compositing manager + opacity = 0, -- transparent with compositing manager + ontop = true, + visible = true + }) + + edge.layout = wibox.layout.fixed[direction]() + edge.wibox:set_widget(edge.layout) + + if zone then + for i, z in ipairs(zone) do + edge.area[i] = wibox.container.margin(nil, 0, 0, z) + edge.layout:add(edge.area[i]) + end + end + + return edge +end + +-- Desktop widgets pack constructor +------------------------------------------------------------ +function desktop.build.static(objects, buttons) + for _, object in ipairs(objects) do + object.wibox = wibox({ type = "desktop", visible = true, bg = object.body.style.color.wibox }) + object.wibox:geometry(object.geometry) + object.wibox:set_widget(object.body.area) + + if buttons then object.body.area:buttons(buttons) end + end +end + +function desktop.build.dynamic(objects, s, bgimage, buttons) + s = s or mouse.screen + local bg = awful.util.file_readable(bgimage or "") and bgimage or nil + local last = { visible = true } + + -- desktop bg wibox + local dwibox = wibox({ type = "desktop", visible = true, bg = "#00000000", bgimage = bg }) + dwibox:geometry(s.workarea) + dwibox:setup({ + buttons = buttons, + layout = wibox.layout.align.horizontal + }) + + -- individual wiboxes (perfomance wisely) + for _, object in ipairs(objects) do + local clr = object.body.style and object.body.style.color and object.body.style.color.wibox or nil + + object.wibox = wibox({ type = "desktop", visible = true, bg = clr }) + object.wibox:geometry(object.geometry) + object.wibox:set_widget(object.body.area) + + if buttons then object.body.area:buttons(buttons) end + end + + -- show widgets only for empty desktop + local function update_desktop() + local clients = s:get_clients() + local visible = #clients == 0 + if visible ~= last.visible then + last.visible = visible + dwibox.visible = visible + for _, object in ipairs(objects) do object.wibox.visible = visible end + end + end + + -- better way to check visible clients? + local client_signals = { + "property::sticky", "property::minimized", "property::screen", "property::hidden", + "tagged", "untagged", "list" + } + + local tag_signals = { "property::selected", "property::activated" } + + for _, sg in ipairs(client_signals) do client.connect_signal(sg, update_desktop) end + for _, sg in ipairs(tag_signals) do tag.connect_signal(sg, update_desktop) end +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return desktop + diff --git a/awesome/.config/awesome/redflat/util/init.lua b/awesome/.config/awesome/redflat/util/init.lua new file mode 100644 index 0000000..671371a --- /dev/null +++ b/awesome/.config/awesome/redflat/util/init.lua @@ -0,0 +1,14 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = function(table_, key) + local module = rawget(table_, key) + return module or require(table_._NAME .. '.' .. key) +end + +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.util", wrequire = wrequire } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/util/key.lua b/awesome/.config/awesome/redflat/util/key.lua new file mode 100644 index 0000000..fcc195e --- /dev/null +++ b/awesome/.config/awesome/redflat/util/key.lua @@ -0,0 +1,67 @@ +-- RedFlat util submodule + +local unpack = unpack or table.unpack + +local table = table +local awful = require("awful") + +local key = {} + +key.ignored_mod = { "Unknown", "Mod2" } + +-- Functions +----------------------------------------------------------------------------------------------------------------------- + +-- Build awful keys from reflat raw keys table +------------------------------------------------------------ +function key.build(t) + local temp = {} + + for _, v in ipairs(t) do + table.insert(temp, awful.key(unpack(v))) + end + + return awful.util.table.join(unpack(temp)) +end + +-- Check if redflat raw key matched with awful prompt key +------------------------------------------------------------ +function key.match_prompt(rawkey, mod, _key) + for m, _ in pairs(mod) do + if awful.util.table.hasitem(key.ignored_mod, m) then + mod[m] = nil + break + end + end + + local modcheck = true + local count = 0 + + for k, _ in pairs(mod) do + modcheck = modcheck and awful.util.table.hasitem(rawkey[1], k) + count = count + 1 + end + + return #rawkey[1] == count and modcheck and _key:lower() == rawkey[2]:lower() +end + +-- Check if redflat raw key matched with awful prompt key +------------------------------------------------------------ +function key.match_grabber(rawkey, mod, _key) + for i, m in ipairs(mod) do + if awful.util.table.hasitem(key.ignored_mod, m) then + table.remove(mod, i) + break + end + end + + local modcheck = #mod == #rawkey[1] + for _, v in ipairs(mod) do modcheck = modcheck and awful.util.table.hasitem(rawkey[1], v) end + return modcheck and _key:lower() == rawkey[2]:lower() +end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return key + diff --git a/awesome/.config/awesome/redflat/util/placement.lua b/awesome/.config/awesome/redflat/util/placement.lua new file mode 100644 index 0000000..dd4e89f --- /dev/null +++ b/awesome/.config/awesome/redflat/util/placement.lua @@ -0,0 +1,64 @@ +-- RedFlat util submodule + +local awful = require("awful") + +local placement = {} +local direction = { x = "width", y = "height" } + +-- Functions +----------------------------------------------------------------------------------------------------------------------- +function placement.add_gap(geometry, gap) + return { + x = geometry.x + gap, + y = geometry.y + gap, + width = geometry.width - 2 * gap, + height = geometry.height - 2 * gap + } +end + +function placement.no_offscreen(object, gap, area) + local geometry = object:geometry() + local border = object.border_width + + local screen_idx = object.screen or awful.screen.getbycoord(geometry.x, geometry.y) + area = area or screen[screen_idx].workarea + if gap then area = placement.add_gap(area, gap) end + + for coord, dim in pairs(direction) do + if geometry[coord] + geometry[dim] + 2 * border > area[coord] + area[dim] then + geometry[coord] = area[coord] + area[dim] - geometry[dim] - 2*border + elseif geometry[coord] < area[coord] then + geometry[coord] = area[coord] + end + end + + object:geometry(geometry) +end + +local function centered_base(is_h, is_v) + return function(object, gap, area) + local geometry = object:geometry() + local new_geometry = {} + + local screen_idx = object.screen or awful.screen.getbycoord(geometry.x, geometry.y) + area = area or screen[screen_idx].geometry + if gap then area = placement.add_gap(area, gap) end + + if is_h then new_geometry.x = area.x + (area.width - geometry.width) / 2 - object.border_width end + if is_v then new_geometry.y = area.y + (area.height - geometry.height) / 2 - object.border_width end + + return object:geometry(new_geometry) + end +end + +placement.centered = setmetatable({}, { + __call = function(_, ...) return centered_base(true, true)(...) end +}) +placement.centered.horizontal = centered_base(true, false) +placement.centered.vertical = centered_base(false, true) + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return placement + diff --git a/awesome/.config/awesome/redflat/util/read.lua b/awesome/.config/awesome/redflat/util/read.lua new file mode 100644 index 0000000..b696885 --- /dev/null +++ b/awesome/.config/awesome/redflat/util/read.lua @@ -0,0 +1,32 @@ +-- RedFlat util submodule + +local io = io +local assert = assert + +local read = {} + +-- Functions +----------------------------------------------------------------------------------------------------------------------- +function read.file(path) + local file = io.open(path) + + if file then + local output = file:read("*a") + file:close() + return output + else + return nil + end +end + +function read.output(cmd) + local file = assert(io.popen(cmd, 'r')) + local output = file:read('*all') + file:close() + + return output +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return read diff --git a/awesome/.config/awesome/redflat/util/table.lua b/awesome/.config/awesome/redflat/util/table.lua new file mode 100644 index 0000000..68fe121 --- /dev/null +++ b/awesome/.config/awesome/redflat/util/table.lua @@ -0,0 +1,45 @@ +-- RedFlat util submodule + +local awful = require("awful") + +local table_ = {} + +-- Functions +----------------------------------------------------------------------------------------------------------------------- + +-- Merge two table to new one +------------------------------------------------------------ +function table_.merge(t1, t2) + local ret = awful.util.table.clone(t1) + + for k, v in pairs(t2) do + if type(v) == "table" and ret[k] and type(ret[k]) == "table" then + ret[k] = table_.merge(ret[k], v) + else + ret[k] = v + end + end + + return ret +end + +-- Check if deep key exists +------------------------------------------------------------ +function table_.check(t, s) + local v = t + + for key in string.gmatch(s, "([^%.]+)(%.?)") do + if v[key] then + v = v[key] + else + return nil + end + end + + return v +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return table_ + diff --git a/awesome/.config/awesome/redflat/util/text.lua b/awesome/.config/awesome/redflat/util/text.lua new file mode 100644 index 0000000..3e13e13 --- /dev/null +++ b/awesome/.config/awesome/redflat/util/text.lua @@ -0,0 +1,41 @@ +-- RedFlat util submodule + +local math = math +local string = string + +local text = {} + +-- Functions +----------------------------------------------------------------------------------------------------------------------- + +-- Format string to number with minimum length +------------------------------------------------------------ +function text.oformat(v, w) + local p = math.ceil(math.log10(v)) + local prec = v <= 10 and w - 1 or p > w and 0 or w - p + return string.format('%.' .. prec .. 'f', v) +end + +-- Format output for destop widgets +------------------------------------------------------------ +function text.dformat(value, unit, w, spacer) + w = w or 3 + spacer = spacer or " " + local res = value + local add = "" + + for _, v in pairs(unit) do + if value > v[2] then + res = math.abs(value/v[2]) + add = v[1] + end + end + + return text.oformat(res, w) .. spacer .. add +end + + +-- End +----------------------------------------------------------------------------------------------------------------------- +return text + diff --git a/awesome/.config/awesome/redflat/widget/battery.lua b/awesome/.config/awesome/redflat/widget/battery.lua new file mode 100644 index 0000000..0330b54 --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/battery.lua @@ -0,0 +1,99 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat battery widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Battery charge monitoring widget +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local rednotify = require("redflat.float.notify") +local tooltip = require("redflat.float.tooltip") +local monitor = require("redflat.gauge.monitor.plain") +local redutil = require("redflat.util") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local battery = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + timeout = 60, + width = nil, + widget = monitor.new, + notify = {}, + levels = { 0.05, 0.1, 0.15 } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.battery") or {}) +end + +-- Support fucntions +----------------------------------------------------------------------------------------------------------------------- +local get_level = function(value, line) + for _, v in ipairs(line) do + if value < v then return v end + end +end + +-- Create a system monitoring widget with additional notification +----------------------------------------------------------------------------------------------------------------------- +function battery.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + style = redutil.table.merge(default_style(), style or {}) + + -- Create monitor widget + -------------------------------------------------------------------------------- + local widg = style.widget(style.monitor) + widg._last = { value = 1, level = 1 } + + -- Set tooltip + -------------------------------------------------------------------------------- + widg._tp = tooltip({ objects = { widg } }, style.tooltip) + + -- Set update timer + -------------------------------------------------------------------------------- + widg._update = function() + local state = args.func(args.arg) + + widg:set_value(state.value) + widg:set_alert(state.alert) + widg._tp:set_text(state.text) + + if state.value <= widg._last.value then + local level = get_level(state.value, style.levels) + if level and level ~= widg._last.level then + widg._last.level = level + local warning = string.format("Battery charge < %.0f%%", level * 100) + rednotify:show(redutil.table.merge({ text = warning }, style.notify)) + end + else + widg._last.level = nil + end + + widg._last.value = state.value + end + + widg._timer = timer({ timeout = style.timeout }) + widg._timer:connect_signal("timeout", function() widg._update() end) + widg._timer:start() + widg._timer:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call module as function +----------------------------------------------------------------------------------------------------------------------- +function battery.mt:__call(...) + return battery.new(...) +end + +return setmetatable(battery, battery.mt) diff --git a/awesome/.config/awesome/redflat/widget/binclock.lua b/awesome/.config/awesome/redflat/widget/binclock.lua new file mode 100644 index 0000000..f976635 --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/binclock.lua @@ -0,0 +1,125 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat binary clock widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Why not? +----------------------------------------------------------------------------------------------------------------------- + +local setmetatable = setmetatable +local os = os + +local wibox = require("wibox") +local beautiful = require("beautiful") +local gears = require("gears") +local color = require("gears.color") + +local tooltip = require("redflat.float.tooltip") +local redutil = require("redflat.util") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local binclock = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + width = 60, + tooltip = {}, + dot = { size = 5 }, + color = { main = "#b1222b", gray = "#575757" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.binclock") or {}) +end + + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function binary_time(num) + local binary = {} + for i = 6, 1, -1 do + local rest = num % 2 + binary[i] = rest + num = math.floor((num - rest) / 2) + end + return binary +end + + +-- Create widget. +----------------------------------------------------------------------------------------------------------------------- +function binclock.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + local timeout = args.timeout or 60 + style = redutil.table.merge(default_style(), style or {}) + + -- Create widget + -------------------------------------------------------------------------------- + local widg = wibox.widget.base.make_widget() + + widg._data = { + time = { {}, {}, {} }, + width = style.width or nil + } + + -- User functions + ------------------------------------------------------------ + function widg:update() + local date = os.date('*t') + self._data.time = { binary_time(date.hour), binary_time(date.min), binary_time(date.sec) } + + self:emit_signal("widget::redraw_needed") + end + + -- Fit + ------------------------------------------------------------ + function widg:fit(_, width, height) + if self._data.width then + return math.min(width, self._data.width), height + else + return width, height + end + end + + function widg:draw(_, cr, width, height) + local dx = (width - style.dot.size) / 5 + local dy = (height - style.dot.size) / 2 + + for i = 1, 3 do + for j = 1, 6 do + cr:set_source(color(self._data.time[i][j] == 1 and style.color.main or style.color.gray )) + cr:rectangle((j -1) * dx, (i -1) * dy, style.dot.size, style.dot.size) + cr:fill() + end + end + end + + -- Set tooltip if need + -------------------------------------------------------------------------------- + local tp + if args.dateformat then tp = tooltip({ objects = { widg } }, style.tooltip) end + + -- Set update timer + -------------------------------------------------------------------------------- + local timer = gears.timer({ timeout = timeout }) + timer:connect_signal("timeout", + function() + widg:update() + if args.dateformat then tp:set_text(os.date(args.dateformat)) end + end) + timer:start() + timer:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call textclock module as function +----------------------------------------------------------------------------------------------------------------------- +function binclock.mt:__call(...) + return binclock.new(...) +end + +return setmetatable(binclock, binclock.mt) diff --git a/awesome/.config/awesome/redflat/widget/init.lua b/awesome/.config/awesome/redflat/widget/init.lua new file mode 100644 index 0000000..470ae6e --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/init.lua @@ -0,0 +1,10 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat library -- +----------------------------------------------------------------------------------------------------------------------- + +local wrequire = require("redflat.util").wrequire +local setmetatable = setmetatable + +local lib = { _NAME = "redflat.widget" } + +return setmetatable(lib, { __index = wrequire }) diff --git a/awesome/.config/awesome/redflat/widget/keyboard.lua b/awesome/.config/awesome/redflat/widget/keyboard.lua new file mode 100644 index 0000000..d9a08cb --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/keyboard.lua @@ -0,0 +1,135 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat keyboard layout indicator widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Indicate and switch keybord layout +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local table = table +local awful = require("awful") +local beautiful = require("beautiful") + +local tooltip = require("redflat.float.tooltip") +local redmenu = require("redflat.menu") +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local keybd = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icon = redutil.base.placeholder(), + micon = { blank = redutil.base.placeholder({ txt = " " }), + check = redutil.base.placeholder({ txt = "+" }) }, + menu = { color = { right_icon = "#a0a0a0" } }, + layout_color = { "#a0a0a0", "#b1222b" }, + fallback_color = "#32882d", + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.keyboard") or {}) +end + +-- Initialize layout menu +----------------------------------------------------------------------------------------------------------------------- +function keybd:init(layouts, style) + + -- initialize vars + style = redutil.table.merge(default_style(), style or {}) + self.layouts = layouts or {} + self.style = style + self.objects = {} + + -- tooltip + self.tp = tooltip({ objects = {} }, style.tooltip) + + -- construct list of layouts + local menu_items = {} + for i = 1, #layouts do + local command = function() awesome.xkb_set_layout_group(i - 1) end + table.insert(menu_items, { layouts[i], command, nil, style.micon.blank }) + end + + -- initialize menu + self.menu = redmenu({ hide_timeout = 1, theme = style.menu, items = menu_items }) + if self.menu.items[1].right_icon then + self.menu.items[1].right_icon:set_image(style.micon.check) + end + + -- update layout data + self.update = function() + local layout = awesome.xkb_get_layout_group() + 1 + for _, w in ipairs(self.objects) do + w:set_color(style.layout_color[layout] or style.fallback_color) + end + + -- update tooltip + keybd.tp:set_text(self.layouts[layout] or "Unknown") + + -- update menu + for i = 1, #self.layouts do + local mark = layout == i and style.micon.check or style.micon.blank + keybd.menu.items[i].right_icon:set_image(mark) + end + end + + awesome.connect_signal("xkb::group_changed", self.update) +end + +-- Show layout menu +----------------------------------------------------------------------------------------------------------------------- +function keybd:toggle_menu() + if not self.menu then return end + + if self.menu.wibox.visible then + self.menu:hide() + else + awful.placement.under_mouse(self.menu.wibox) + awful.placement.no_offscreen(self.menu.wibox) + self.menu:show({ coords = { x = self.menu.wibox.x, y = self.menu.wibox.y } }) + end +end + +-- Toggle layout +----------------------------------------------------------------------------------------------------------------------- +function keybd:toggle(reverse) + if not self.layouts then return end + + local layout = awesome.xkb_get_layout_group() + if reverse then + layout = layout > 0 and (layout - 1) or (#self.layouts - 1) + else + layout = layout < (#self.layouts - 1) and (layout + 1) or 0 + end + + awesome.xkb_set_layout_group(layout) +end + +-- Create a new keyboard indicator widget +----------------------------------------------------------------------------------------------------------------------- +function keybd.new(style) + + style = style or {} + if not keybd.menu then keybd:init({}) end + + local widg = svgbox(style.icon or keybd.style.icon) + widg:set_color(keybd.style.layout_color[1]) + table.insert(keybd.objects, widg) + keybd.tp:add_to_object(widg) + + keybd.update() + return widg +end + +-- Config metatable to call keybd module as function +----------------------------------------------------------------------------------------------------------------------- +function keybd.mt:__call(...) + return keybd.new(...) +end + +return setmetatable(keybd, keybd.mt) diff --git a/awesome/.config/awesome/redflat/widget/layoutbox.lua b/awesome/.config/awesome/redflat/widget/layoutbox.lua new file mode 100644 index 0000000..b9a388d --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/layoutbox.lua @@ -0,0 +1,168 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat layoutbox widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Paintbox widget used to display layout +-- Layouts menu added +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.widget.layoutbox v3.5.2 +------ (c) 2009 Julien Danjou +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local ipairs = ipairs +local table = table +local awful = require("awful") +local layout = require("awful.layout") +local beautiful = require("beautiful") + +local redmenu = require("redflat.menu") +local tooltip = require("redflat.float.tooltip") +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") + + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local layoutbox = { mt = {} } + +local last_tag + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icon = { unknown = redutil.base.placeholder() }, + micon = { blank = redutil.base.placeholder({ txt = " " }), + check = redutil.base.placeholder({ txt = "+" }) }, + name_alias = {}, + menu = { color = { right_icon = "#a0a0a0", left_icon = "#a0a0a0" } }, + color = { icon = "#a0a0a0" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.layoutbox") or {}) +end + +-- Initialize layoutbox +----------------------------------------------------------------------------------------------------------------------- +function layoutbox:init(layouts, style) + + style = style or default_style() + + -- Set tooltip + ------------------------------------------------------------ + layoutbox.tp = tooltip({}) + + -- Construct layout list + ------------------------------------------------------------ + local items = {} + for _, l in ipairs(layouts) do + local layout_name = layout.getname(l) + local icon = style.icon[layout_name] or style.icon.unknown + local text = style.name_alias[layout_name] or layout_name + table.insert(items, { text, function() layout.set (l, last_tag) end, icon, style.micon.blank }) + end + + -- Update tooltip function + ------------------------------------------------------------ + function self:update_tooltip(layout_name) + self.tp:set_text(style.name_alias[layout_name] or layout_name) + end + + -- Update menu function + ------------------------------------------------------------ + function self:update_menu(t) + local cl = awful.tag.getproperty(t, "layout") + for i, l in ipairs(layouts) do + local mark = cl == l and style.micon.check or style.micon.blank + if self.menu.items[i].right_icon then + self.menu.items[i].right_icon:set_image(mark) + end + end + end + + -- Initialize menu + ------------------------------------------------------------ + self.menu = redmenu({ theme = style.menu, items = items }) +end + +-- Show layout menu +----------------------------------------------------------------------------------------------------------------------- +function layoutbox:toggle_menu(t) + if self.menu.wibox.visible and t == last_tag then + self.menu:hide() + else + if self.menu.wibox.visible then self.menu.wibox.visible = false end + awful.placement.under_mouse(self.menu.wibox) + awful.placement.no_offscreen(self.menu.wibox) + + last_tag = t + self.menu:show({coords = {x = self.menu.wibox.x, y = self.menu.wibox.y}}) + self:update_menu(last_tag) + end +end + +-- Create a layoutbox widge +-- @param screen The screen number that the layout will be represented for +-- @param layouts List of layouts +----------------------------------------------------------------------------------------------------------------------- +function layoutbox.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + local layouts = args.layouts or awful.layout.layouts + local s = args.screen or 1 + style = redutil.table.merge(default_style(), style or {}) + local w = svgbox() + w:set_color(style.color.icon) + + if not layoutbox.menu then layoutbox:init(layouts, style) end + + -- Set tooltip + -------------------------------------------------------------------------------- + layoutbox.tp:add_to_object(w) + + -- Update function + -------------------------------------------------------------------------------- + local function update() + local layout_name = layout.getname(layout.get(s)) + w:set_image(style.icon[layout_name] or style.icon.unknown) + layoutbox:update_tooltip(layout_name) + + if layoutbox.menu.wibox.visible then + layoutbox:update_menu(last_tag) + end + end + + -- Set signals + -------------------------------------------------------------------------------- + tag.connect_signal("property::selected", update) + tag.connect_signal("property::layout", update) + w:connect_signal("mouse::enter", + function() + local layout_name = layout.getname(layout.get(s)) + layoutbox:update_tooltip(layout_name) + end + ) + w:connect_signal("mouse::leave", + function() + if layoutbox.menu.hidetimer and layoutbox.menu.wibox.visible then + layoutbox.menu.hidetimer:start() + end + end + ) + + -------------------------------------------------------------------------------- + update() + return w +end + +-- Config metatable to call layoutbox module as function +----------------------------------------------------------------------------------------------------------------------- +function layoutbox.mt:__call(...) + return layoutbox.new(...) +end + +return setmetatable(layoutbox, layoutbox.mt) diff --git a/awesome/.config/awesome/redflat/widget/mail.lua b/awesome/.config/awesome/redflat/widget/mail.lua new file mode 100644 index 0000000..f9c6dc5 --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/mail.lua @@ -0,0 +1,196 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat mail widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Check if new mail available using python scripts or curl shell command +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local table = table +local tonumber = tonumber + +local awful = require("awful") +local beautiful = require("beautiful") +local timer = require("gears.timer") +local naughty = require("naughty") + +local rednotify = require("redflat.float.notify") +local tooltip = require("redflat.float.tooltip") +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") +local startup = require("redflat.startup") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +local mail = { objects = {}, mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + icon = redutil.base.placeholder(), + notify = {}, + need_notify = true, + firstrun = false, + color = { main = "#b1222b", icon = "#a0a0a0" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.mail") or {}) +end + +-- Mail check functions +----------------------------------------------------------------------------------------------------------------------- +mail.checkers = {} + +mail.checkers["script"] = { type = "spawn" } +mail.checkers["script"].action = function(args) + return args.script +end + +mail.checkers["curl_imap"] = { type = "spawn" } +mail.checkers["curl_imap"].action = function(args) + local port = args.port or 993 + local request = "-X 'STATUS INBOX (UNSEEN)'" + local head_command = "curl --connect-timeout 5 -fsm 5" + + local curl_req = string.format("%s --url imaps://%s:%s/INBOX -u %s:%s %s -k", + head_command, args.server, port, args.mail, args.password, request) + + return curl_req +end + +mail.checkers["imap"] = { type = "plain" } +mail.checkers["imap"].action = function(args) + -- require imap4 library + -- need to luarock install imap4 library + local imap4 = require "imap4" + + -- grab args or set default values + -- gmail requires 'Less secure app access' + local port = args.port or 993 + local url = args.server or "outlook.office365.com" + local mailbox = args.mailbox or "Inbox" + + -- setup connection + local status, connection = pcall(imap4, url, port, {protocol = 'tlsv1_2'}) + + if status ~= false and connection:isCapable('IMAP4rev1') then + connection:login(args.username, args.password) + + -- get information + local stat = connection:status(mailbox, {'UNSEEN'}) + + -- close connection + connection:logout() + + -- return unseen email count + return stat.UNSEEN + else + return "0" + end +end + +-- Initialize mails structure +----------------------------------------------------------------------------------------------------------------------- +function mail:init(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + local count = 0 + local checks = 0 + local force_notify = false + local update_timeout = args.update_timeout or 3600 + local maillist = args.maillist or {} + style = redutil.table.merge(default_style(), style or {}) + + self.style = style + + -- Set tooltip + -------------------------------------------------------------------------------- + self.tp = tooltip(nil, style.tooltip) + self.tp:set_text("?") + + -- Update info function + -------------------------------------------------------------------------------- + local function mail_count(output) + local c = tonumber(string.match(output, "%d+")) + checks = checks + 1 + + if c then + count = count + c + if style.need_notify and (count > 0 or force_notify and checks == #maillist) then + rednotify:show(redutil.table.merge({ text = count .. " new messages" }, style.notify)) + end + end + + self.tp:set_text(count .. " new messages") + + local color = count > 0 and style.color.main or style.color.icon + for _, widg in ipairs(mail.objects) do widg:set_color(color) end + end + + self.check_updates = function(is_force) + count = 0 + checks = 0 + force_notify = is_force + + for _, cmail in ipairs(maillist) do + if mail.checkers[cmail.checker].type == "plain" then + mail_count(mail.checkers[cmail.checker].action(cmail)) + elseif mail.checkers[cmail.checker].type == "spawn" then + awful.spawn.easy_async(mail.checkers[cmail.checker].action(cmail), mail_count) + end + end + end + + -- Set update timer + -------------------------------------------------------------------------------- + self.timer = timer({ timeout = update_timeout }) + self.timer:connect_signal("timeout", function() self.check_updates() end) + self.timer:start() + + if style.firstrun and startup.is_startup then self.timer:emit_signal("timeout") end +end + + +-- Create a new mail widget +----------------------------------------------------------------------------------------------------------------------- +function mail.new(style) + + if not mail.style then + naughty.notify({ title = "Warning!", text = "Mail widget doesn't configured" }) + mail:init({}) + end + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(mail.style, style or {}) + + -- Create widget + -------------------------------------------------------------------------------- + local widg = svgbox(style.icon) + widg:set_color(style.color.icon) + table.insert(mail.objects, widg) + + -- Set tooltip + -------------------------------------------------------------------------------- + mail.tp:add_to_object(widg) + + -------------------------------------------------------------------------------- + return widg +end + +-- Update mail info for every widget +----------------------------------------------------------------------------------------------------------------------- +function mail:update(is_force) + self.check_updates(is_force) +end + +-- Config metatable to call mail module as function +----------------------------------------------------------------------------------------------------------------------- +function mail.mt:__call(...) + return mail.new(...) +end + +return setmetatable(mail, mail.mt) diff --git a/awesome/.config/awesome/redflat/widget/minitray.lua b/awesome/.config/awesome/redflat/widget/minitray.lua new file mode 100644 index 0000000..def6e8c --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/minitray.lua @@ -0,0 +1,175 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat minitray -- +----------------------------------------------------------------------------------------------------------------------- +-- Tray located on separate wibox +-- minitray:toggle() used to show/hide wibox +-- Widget with graphical counter to show how many apps placed in the system tray +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ minitray +------ http://awesome.naquadah.org/wiki/Minitray +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local table = table + +local wibox = require("wibox") +local awful = require("awful") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") +local dotcount = require("redflat.gauge.graph.dots") +local tooltip = require("redflat.float.tooltip") + +-- Initialize tables and wibox +----------------------------------------------------------------------------------------------------------------------- +local minitray = { widgets = {}, mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + dotcount = {}, + geometry = { height = 40 }, + set_position = nil, + screen_gap = 0, + border_width = 2, + color = { wibox = "#202020", border = "#575757" }, + shape = nil + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.minitray") or {}) +end + +-- Initialize minitray floating window +----------------------------------------------------------------------------------------------------------------------- +function minitray:init(style) + + -- Create wibox for tray + -------------------------------------------------------------------------------- + local wargs = { + ontop = true, + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + } + + self.wibox = wibox(wargs) + self.wibox:geometry(style.geometry) + + self.geometry = style.geometry + self.screen_gap = style.screen_gap + self.set_position = style.set_position + + -- Create tooltip + -------------------------------------------------------------------------------- + self.tp = tooltip({}, style.tooltip) + + -- Set tray + -------------------------------------------------------------------------------- + local l = wibox.layout.align.horizontal() + self.tray = wibox.widget.systray() + l:set_middle(self.tray) + self.wibox:set_widget(l) + + -- update geometry if tray icons change + self.tray:connect_signal('widget::redraw_needed', function() + self:update_geometry() + end) +end + +-- Show/hide functions for wibox +----------------------------------------------------------------------------------------------------------------------- + +-- Update Geometry +-------------------------------------------------------------------------------- +function minitray:update_geometry() + + -- Set wibox size and position + ------------------------------------------------------------ + local items = awesome.systray() + if items == 0 then items = 1 end + + self.wibox:geometry({ width = self.geometry.width or self.geometry.height * items }) + + if self.set_position then + self.set_position(self.wibox) + else + awful.placement.under_mouse(self.wibox) + end + + redutil.placement.no_offscreen(self.wibox, self.screen_gap, mouse.screen.workarea) +end + +-- Show +-------------------------------------------------------------------------------- +function minitray:show() + self:update_geometry() + self.wibox.visible = true +end + +-- Hide +-------------------------------------------------------------------------------- +function minitray:hide() + self.wibox.visible = false +end + +-- Toggle +-------------------------------------------------------------------------------- +function minitray:toggle() + if self.wibox.visible then + self:hide() + else + self:show() + end +end + +-- Create a new tray widget +-- @param args.timeout Update interval +-- @param style Settings for dotcount widget +----------------------------------------------------------------------------------------------------------------------- +function minitray.new(_, style) + + -- Initialize vars + -------------------------------------------------------------------------------- +-- args = args or {} -- usesless now, leave it be for backward compatibility and future cases + style = redutil.table.merge(default_style(), style or {}) + + -- Initialize minitray window + -------------------------------------------------------------------------------- + if not minitray.wibox then + minitray:init(style) + end + + -- Create tray widget + -------------------------------------------------------------------------------- + local widg = dotcount(style.dotcount) + table.insert(minitray.widgets, widg) + + -- Set tooltip + -------------------------------------------------------------------------------- + minitray.tp:add_to_object(widg) + + -- Set update timer + -------------------------------------------------------------------------------- + function widg:update() + local appcount = awesome.systray() + self:set_num(appcount) + minitray.tp:set_text(appcount .. " apps") + end + + minitray.tray:connect_signal('widget::redraw_needed', function() widg:update() end) + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call minitray module as function +----------------------------------------------------------------------------------------------------------------------- +function minitray.mt:__call(...) + return minitray.new(...) +end + +return setmetatable(minitray, minitray.mt) diff --git a/awesome/.config/awesome/redflat/widget/net.lua b/awesome/.config/awesome/redflat/widget/net.lua new file mode 100644 index 0000000..2de7b83 --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/net.lua @@ -0,0 +1,101 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat network widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Network speed monitoring widget +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local redutil = require("redflat.util") +local monitor = require("redflat.gauge.icon.double") +local tooltip = require("redflat.float.tooltip") +local system = require("redflat.system") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local net = { mt = {} } + +local default_args = { + speed = { up = 10*1024, down = 10*1024 }, + autoscale = true, + interface = "eth0" +} + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + widget = monitor.new, + timeout = 5, + digits = 2 + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.net") or {}) +end + +-- Create a new network widget +-- @param args.timeout Update interval +-- @param args.interface Network interface +-- @param args.autoscale Scale bars, true by default +-- @param args.speed.up Max upload speed in bytes +-- @param args.speed.down Max download speed in bytes +-- @param style Settings for doublebar widget +----------------------------------------------------------------------------------------------------------------------- +function net.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + local storage = {} + local unit = {{ "B", 1 }, { "KB", 1024 }, { "MB", 1024^2 }, { "GB", 1024^3 }} + args = redutil.table.merge(default_args, args or {}) + style = redutil.table.merge(default_style(), style or {}) + + -- Create monitor widget + -------------------------------------------------------------------------------- + local widg = style.widget(style.monitor) + + -- Set tooltip + -------------------------------------------------------------------------------- + local tp = tooltip({ objects = { widg } }, style.tooltip) + + -- Set update timer + -------------------------------------------------------------------------------- + local t = timer({ timeout = style.timeout }) + t:connect_signal("timeout", + function() + local state = system.net_speed(args.interface, storage) + widg:set_value({1,1}) + + if args.autoscale then + if state[1] > args.speed.up then args.speed.up = state[1] end + if state[2] > args.speed.down then args.speed.down = state[2] end + end + + if args.alert then + widg:set_alert(state[1] > args.alert.up or state[2] > args.alert.down) + end + + widg:set_value({ state[2]/args.speed.down, state[1]/args.speed.up }) + tp:set_text( + "↓" .. redutil.text.dformat(state[2], unit, style.digits, " ") + .. " ↑" .. redutil.text.dformat(state[1], unit, style.digits, " ") + ) + end + ) + t:start() + t:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call net module as function +----------------------------------------------------------------------------------------------------------------------- +function net.mt:__call(...) + return net.new(...) +end + +return setmetatable(net, net.mt) diff --git a/awesome/.config/awesome/redflat/widget/pulse.lua b/awesome/.config/awesome/redflat/widget/pulse.lua new file mode 100644 index 0000000..39279a1 --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/pulse.lua @@ -0,0 +1,215 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat pulseaudio volume control widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Indicate and change volume level using pacmd +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ Pulseaudio volume control +------ https://github.com/orofarne/pulseaudio-awesome/blob/master/pulseaudio.lua +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local math = math +local table = table +local tonumber = tonumber +local string = string +local setmetatable = setmetatable +local awful = require("awful") +local beautiful = require("beautiful") +local gears = require("gears") +local naughty = require("naughty") + +local tooltip = require("redflat.float.tooltip") +local audio = require("redflat.gauge.audio.blue") +local rednotify = require("redflat.float.notify") +local redutil = require("redflat.util") + + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local pulse = { widgets = {}, mt = {} } +pulse.startup_time = 4 + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + notify = {}, + widget = audio.new, + audio = {} + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.pulse") or {}) +end + +local change_volume_default_args = { + down = false, + step = math.floor(65536 / 100 * 5 + 0.5), + show_notify = false +} + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function get_default_sink(args) + args = args or {} + local type_ = args.type or "sink" + + local cmd = string.format("pacmd dump | grep 'set-default-%s'", type_) + local output = redutil.read.output(cmd) + local def_sink = string.match(output, "set%-default%-%w+%s(.+)\r?\n") + + return def_sink +end + +-- Change volume level +----------------------------------------------------------------------------------------------------------------------- +function pulse:change_volume(args) + + -- initialize vars + args = redutil.table.merge(change_volume_default_args, args or {}) + local diff = args.down and -args.step or args.step + + -- get current volume + local v = redutil.read.output(string.format("pacmd dump | grep 'set-%s-volume %s'", self._type, self._sink)) + local parsed = string.match(v, "0x%x+") + + -- catch possible problems with pacmd output + if not parsed then + naughty.notify({ title = "Warning!", text = "PA widget can't parse pacmd output" }) + return + end + + local volume = tonumber(parsed) + + -- calculate new volume + local new_volume = volume + diff + + if new_volume > 65536 then + new_volume = 65536 + elseif new_volume < 0 then + new_volume = 0 + end + + -- show notify if need + if args.show_notify then + local vol = new_volume / 65536 + rednotify:show( + redutil.table.merge({ value = vol, text = string.format('%.0f', vol*100) .. "%" }, self._style.notify) + ) + end + + -- set new volume + awful.spawn(string.format("pacmd set-%s-volume %s %s", self._type, self._sink, new_volume)) + + -- update volume indicators + self:update_volume() +end + +-- Set mute +----------------------------------------------------------------------------------------------------------------------- +function pulse:mute(args) + args = args or {} + if not self._type or not self._sink then return end + + local mute = redutil.read.output(string.format("pacmd dump | grep 'set-%s-mute %s'", self._type, self._sink)) + + if string.find(mute, "no", -4) then + awful.spawn(string.format("pacmd set-%s-mute %s yes", self._type, self._sink)) + else + awful.spawn(string.format("pacmd set-%s-mute %s no", self._type, self._sink)) + end + + self:update_volume() +end + +-- Update volume level info +----------------------------------------------------------------------------------------------------------------------- +function pulse:update_volume(args) + args = args or {} + if not self._type or not self._sink then return end + + -- initialize vars + local volmax = 65536 + local volume = 0 + + -- get current volume and mute state + local v = redutil.read.output(string.format("pacmd dump | grep 'set-%s-volume %s'", self._type, self._sink)) + local m = redutil.read.output(string.format("pacmd dump | grep 'set-%s-mute %s'", self._type, self._sink)) + + if v then + local pv = string.match(v, "0x%x+") + if pv then volume = math.floor(tonumber(pv) * 100 / volmax + 0.5) end + end + + local mute = not (m and string.find(m, "no", -4)) + + -- update widgets value + self:set_value(volume / 100) + self:set_mute(mute) + self._tooltip:set_text(volume .. "%") +end + +-- Create a new pulse widget +-- @param timeout Update interval +----------------------------------------------------------------------------------------------------------------------- +function pulse.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(default_style(), style or {}) + + args = args or {} + local timeout = args.timeout or 5 + local autoupdate = args.autoupdate or false + + -- create widget + -------------------------------------------------------------------------------- + local widg = style.widget(style.audio) + gears.table.crush(widg, pulse, true) -- dangerous since widget have own methods, but let it be by now + + widg._type = args.type or "sink" + widg._sink = args.sink + widg._style = style + + table.insert(pulse.widgets, widg) + + -- Set tooltip + -------------------------------------------------------------------------------- + widg._tooltip = tooltip({ objects = { widg } }, style.tooltip) + + -- Set update timer + -------------------------------------------------------------------------------- + if autoupdate then + local t = gears.timer({ timeout = timeout }) + t:connect_signal("timeout", function() widg:update_volume() end) + t:start() + end + + -- Set startup timer + -- This is workaround if module activated bofore pulseaudio servise start + -------------------------------------------------------------------------------- + if not widg._sink then + local st = gears.timer({ timeout = 1 }) + local counter = 0 + st:connect_signal("timeout", function() + counter = counter + 1 + widg._sink = get_default_sink({ type = widg._type }) + if widg._sink then widg:update_volume() end + if counter > pulse.startup_time or widg._sink then st:stop() end + end) + st:start() + else + widg:update_volume() + end + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call pulse module as function +----------------------------------------------------------------------------------------------------------------------- +function pulse.mt:__call(...) + return pulse.new(...) +end + +return setmetatable(pulse, pulse.mt) \ No newline at end of file diff --git a/awesome/.config/awesome/redflat/widget/sysmon.lua b/awesome/.config/awesome/redflat/widget/sysmon.lua new file mode 100644 index 0000000..fc6d3c5 --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/sysmon.lua @@ -0,0 +1,73 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat sysmon widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Monitoring widget +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local monitor = require("redflat.gauge.monitor.plain") +local tooltip = require("redflat.float.tooltip") +local redutil = require("redflat.util") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local sysmon = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + timeout = 5, + width = nil, + widget = monitor.new + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.sysmon") or {}) +end + +-- Create a new cpu monitor widget +----------------------------------------------------------------------------------------------------------------------- +function sysmon.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + style = redutil.table.merge(default_style(), style or {}) + + -- Create monitor widget + -------------------------------------------------------------------------------- + local widg = style.widget(style.monitor) + + -- Set tooltip + -------------------------------------------------------------------------------- + widg._tp = tooltip({ objects = { widg } }, style.tooltip) + + -- Set update timer + -------------------------------------------------------------------------------- + widg._update = function() + local state = args.func(args.arg) + widg:set_value(state.value) + widg:set_alert(state.alert) + widg._tp:set_text(state.text) + end + + widg._timer = timer({ timeout = style.timeout }) + widg._timer:connect_signal("timeout", function() widg._update() end) + widg._timer:start() + widg._timer:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call module as function +----------------------------------------------------------------------------------------------------------------------- +function sysmon.mt:__call(...) + return sysmon.new(...) +end + +return setmetatable(sysmon, sysmon.mt) diff --git a/awesome/.config/awesome/redflat/widget/taglist.lua b/awesome/.config/awesome/redflat/widget/taglist.lua new file mode 100644 index 0000000..fb034d7 --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/taglist.lua @@ -0,0 +1,210 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat taglist widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom widget used to display tag info +-- Separators added +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.widget.taglist v3.5.2 +------ (c) 2008-2009 Julien Danjou +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local pairs = pairs +local ipairs = ipairs +local table = table +local string = string +local awful = require("awful") +local wibox = require("wibox") +local beautiful = require("beautiful") +local timer = require("gears.timer") + +local redutil = require("redflat.util") +local basetag = require("redflat.gauge.tag") +local tooltip = require("redflat.float.tooltip") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local taglist = { filter = {}, mt = {} , queue = setmetatable({}, { __mode = 'k' }) } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + tag = {}, + widget = basetag.blue.new, + show_tip = false, + timeout = 0.05, + separator = nil + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.taglist") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Get info about tag +-------------------------------------------------------------------------------- +local function get_state(t) + local state = { focus = false, urgent = false, list = {} } + local client_list = t:clients() + local client_count = 0 + + for _, c in pairs(client_list) do + state.focus = state.focus or client.focus == c + state.urgent = state.urgent or c.urgent + if not c.skip_taskbar then + client_count = client_count + 1 + table.insert(state.list, { focus = client.focus == c, urgent = c.urgent, minimized = c.minimized }) + end + end + + state.active = t.selected + state.occupied = client_count > 0 and not (client_count == 1 and state.focus) + state.text = string.upper(t.name) + state.layout = awful.tag.getproperty(t, "layout") + + return state +end + +-- Generate tooltip string +-------------------------------------------------------------------------------- +local function make_tip(t) + return string.format("%s (%d apps)", t.name, #(t:clients())) +end + +-- Find all tag to be shown +-------------------------------------------------------------------------------- +local function filtrate_tags(screen, filter) + local tags = {} + for _, t in ipairs(screen.tags) do + if not awful.tag.getproperty(t, "hide") and filter(t) then + table.insert(tags, t) + end + end + return tags +end + +-- Layout composition +-------------------------------------------------------------------------------- +local function base_pack(layout, widg, i, tags, style) + layout:add(widg) + if style.separator and i < #tags then + layout:add(style.separator) + end +end + + +-- Create a new taglist widget +----------------------------------------------------------------------------------------------------------------------- +function taglist.new(args, style) + + if not taglist.queue then taglist:init() end + + -- Initialize vars + -------------------------------------------------------------------------------- + local cs = args.screen + local layout = args.layout or wibox.layout.fixed.horizontal() + local data = setmetatable({}, { __mode = 'k' }) + local filter = args.filter or taglist.filter.all + local hint = args.hint or make_tip + local pack = args.pack or base_pack + + style = redutil.table.merge(default_style(), style or {}) + + -- Set tooltip + -------------------------------------------------------------------------------- + if not taglist.tp then taglist.tp = tooltip() end + + -- Update function + -------------------------------------------------------------------------------- + local update = function(s) + if s ~= cs then return end + local tags = filtrate_tags(s, filter) + + -- Construct taglist + ------------------------------------------------------------ + layout:reset() + for i, t in ipairs(tags) do + local cache = data[t] + local widg + + -- use existing widgets or create new one + if cache then + widg = cache + else + widg = style.widget(style.tag) + if args.buttons then widg:buttons(redutil.base.buttons(args.buttons, t)) end + data[t] = widg + + -- set optional tooltip (what about removing?) + if style.show_tip then + taglist.tp:add_to_object(widg) + widg:connect_signal("mouse::enter", function() taglist.tp:set_text(widg.tip) end) + end + end + + -- set tag state info to widget + local state = get_state(t) + widg:set_state(state) + widg.tip = hint(t) + + -- add widget and separator to base layout + pack(layout, widg, i, tags, style) + end + ------------------------------------------------------------ + + if taglist.queue[s] and taglist.queue[s].started then taglist.queue[s]:stop() end + end + + -- Create timer to prevent multiply call + -------------------------------------------------------------------------------- + taglist.queue[cs] = timer({ timeout = style.timeout }) + taglist.queue[cs]:connect_signal("timeout", function() update(cs) end) + + local uc = function (c) if taglist.queue[c.screen] then taglist.queue[c.screen]:again() end end + local ut = function (t) if taglist.queue[t.screen] then taglist.queue[t.screen]:again() end end + + -- Signals setup + -------------------------------------------------------------------------------- + local tag_signals = { + "property::selected", "property::icon", "property::hide", + "property::activated", "property::name", "property::screen", + "property::index", "property::layout" + } + local client_signals = { + "focus", "unfocus", "property::urgent", + "tagged", "untagged", "unmanage" + } + + for _, sg in ipairs(tag_signals) do awful.tag.attached_connect_signal(nil, sg, ut) end + for _, sg in ipairs(client_signals) do client.connect_signal(sg, uc) end + + client.connect_signal("property::screen", function() update(cs) end) -- dirty + + -------------------------------------------------------------------------------- + update(cs) -- create taglist widget + return layout -- return taglist widget +end + +-- Filtering functions +-- @param t The awful.tag +-- @param args unused list of extra arguments +----------------------------------------------------------------------------------------------------------------------- +function taglist.filter.noempty(t) -- to include all nonempty tags on the screen. + return #t:clients() > 0 or t.selected +end + +function taglist.filter.all() -- to include all tags on the screen. + return true +end + +-- Config metatable to call taglist module as function +----------------------------------------------------------------------------------------------------------------------- +function taglist.mt:__call(...) + return taglist.new(...) +end + +return setmetatable(taglist, taglist.mt) diff --git a/awesome/.config/awesome/redflat/widget/tasklist.lua b/awesome/.config/awesome/redflat/widget/tasklist.lua new file mode 100644 index 0000000..b434901 --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/tasklist.lua @@ -0,0 +1,895 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat tasklist widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Custom widget used to show apps, see redtask.lua for more info +-- No icons; labels can be customized in beautiful theme file +-- Same class clients grouped into one object +-- Pop-up tooltip with task names +-- Pop-up menu with window state info +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.widget.tasklist v3.5.2 +------ (c) 2008-2009 Julien Danjou +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local pairs = pairs +local ipairs = ipairs +local table = table +local string = string +local math = math +local unpack = unpack or table.unpack + +local beautiful = require("beautiful") +local tag = require("awful.tag") +local awful = require("awful") +local wibox = require("wibox") +local timer = require("gears.timer") + +local basetask = require("redflat.gauge.tag.blue") +local redutil = require("redflat.util") +local separator = require("redflat.gauge.separator") +local redmenu = require("redflat.menu") +local svgbox = require("redflat.gauge.svgbox") +local dfparser = require("redflat.service.dfparser") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local redtasklist = { filter = {}, winmenu = {}, tasktip = {}, action = {}, mt = {}, } + +local last = { + client = nil, + group = nil, + client_list = nil, + screen = mouse.screen, + tag_screen = mouse.screen, + screen_clients = {} +} + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + appnames = {}, + iconnames = {}, + widget = basetask.new, + width = 40, + char_digit = 3, + need_group = true, + parser = {}, + icons = {}, + timeout = 0.05, + custom_icon = false, + task = {}, + task_margin = { 5, 5, 0, 0 } + } + style.winmenu = { + icon = { unknown = redutil.base.placeholder() }, + micon = { blank = redutil.base.placeholder({ txt = " " }), + check = redutil.base.placeholder({ txt = "+" }) }, + layout_icon = { unknown = redutil.base.placeholder() }, + titleline = { font = "Sans 16 bold", height = 35 }, + stateline = { height = 35 }, + state_iconsize = { width = 20, height = 20 }, + separator = { marginh = { 3, 3, 5, 5 } }, + tagmenu = { icon_margin = { 2, 2, 2, 2 } }, + hide_action = { min = true, + move = true, + max = false, + add = false, + floating = false, + sticky = false, + ontop = false, + below = false, + maximized = false }, + color = { main = "#b1222b", icon = "#a0a0a0", gray = "#404040" } + } + style.tasktip = { + border_width = 2, + margin = { 10, 10, 5, 5 }, + timeout = 0.5, + sl_highlight = false, -- single line highlight + color = { border = "#575757", text = "#aaaaaa", main = "#b1222b", highlight = "#eeeeee", + wibox = "#202020", gray = "#575757", urgent = "#32882d" }, + shape = nil + + } + style.winmenu.menu = { + ricon_margin = { 2, 2, 2, 2 }, + hide_timeout = 1, + -- color = { submenu_icon = "#a0a0a0", right_icon = "#a0a0a0", left_icon = "#a0a0a0" } + nohide = true + } + + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.tasklist") or {}) +end + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- + +-- Get info about client group +-------------------------------------------------------------------------------- +local function get_state(c_group, style) + + style = style or {} + local names = style.appnames or {} + local chars = style.char_digit + + local state = { focus = false, urgent = false, minimized = true, list = {} } + + for _, c in pairs(c_group) do + state.focus = state.focus or client.focus == c + state.urgent = state.urgent or c.urgent + state.minimized = state.minimized and c.minimized + + table.insert(state.list, { focus = client.focus == c, urgent = c.urgent, minimized = c.minimized }) + end + + local class = c_group[1].class or "Undefined" + state.text = names[class] or string.upper(string.sub(class, 1, chars)) + state.num = #c_group + state.icon = style.custom_icon and style.icons[style.iconnames[class] or string.lower(class)] + + return state +end + +-- Function to build item list for submenu +-------------------------------------------------------------------------------- +local function tagmenu_items(action, style) + local items = {} + for _, t in ipairs(last.screen.tags) do + if not awful.tag.getproperty(t, "hide") then + table.insert( + items, + { t.name, function() action(t) end, style.micon.blank, style.micon.blank } + ) + end + end + return items +end + +-- Function to rebuild the submenu entries according to current screen's tags +-------------------------------------------------------------------------------- +local function tagmenu_rebuild(menu, submenu_index, style) + for _, index in ipairs(submenu_index) do + local new_items + if index == 1 then + new_items = tagmenu_items(redtasklist.winmenu.movemenu_action, style) + else + new_items = tagmenu_items(redtasklist.winmenu.addmenu_action, style) + end + menu.items[index].child:replace_items(new_items) + end +end + +-- Function to update tag submenu icons +-------------------------------------------------------------------------------- +local function tagmenu_update(c, menu, submenu_index, style) + -- if the screen has changed (and thus the tags) since the last time the + -- tagmenu was built, rebuild it first + if last.tag_screen ~= mouse.screen then + tagmenu_rebuild(menu, submenu_index, style) + last.tag_screen = mouse.screen + end + for k, t in ipairs(last.screen.tags) do + if not awful.tag.getproperty(t, "hide") then + + -- set layout icon for every tag + local l = awful.layout.getname(awful.tag.getproperty(t, "layout")) + + local check_icon = style.micon.blank + if c then + local client_tags = c:tags() + check_icon = awful.util.table.hasitem(client_tags, t) and style.micon.check or check_icon + end + + for _, index in ipairs(submenu_index) do + local submenu = menu.items[index].child + if submenu.items[k].icon then + submenu.items[k].icon:set_image(style.layout_icon[l] or style.layout_icon.unknown) + end + + -- set "checked" icon if tag active for given client + -- otherwise set empty icon + if c then + if submenu.items[k].right_icon then + submenu.items[k].right_icon:set_image(check_icon) + end + end + + -- update position of any visible submenu + if submenu.wibox.visible then submenu:show() end + end + end + end +end + +-- Function to construct menu line with state icons +-------------------------------------------------------------------------------- +local function state_line_construct(state_icons, setup_layout, style) + local stateboxes = {} + + for i, v in ipairs(state_icons) do + -- create widget + stateboxes[i] = svgbox(v.icon) + stateboxes[i]:set_forced_width(style.state_iconsize.width) + stateboxes[i]:set_forced_height(style.state_iconsize.height) + + -- set widget in line + local l = wibox.layout.align.horizontal() + l:set_expand("outside") + l:set_second(stateboxes[i]) + setup_layout:add(l) + + -- set mouse action + stateboxes[i]:buttons(awful.util.table.join(awful.button({}, 1, + function() + v.action() + stateboxes[i]:set_color(v.indicator(last.client) and style.color.main or style.color.gray) + end + ))) + end + + return stateboxes +end + +-- Calculate menu position +-- !!! Bad code is here !!! +-- !!! TODO: make variant when panel place on top of screen !!! +-------------------------------------------------------------------------------- +local function coords_calc(menu, tip_wibox, gap) + local coords = {} + + if gap then + coords.x = tip_wibox.x + (tip_wibox.width - menu.wibox.width) / 2 + coords.y = tip_wibox.y - menu.wibox.height - 2 * menu.wibox.border_width + tip_wibox.border_width + gap + else + coords = mouse.coords() + coords.x = coords.x - menu.wibox.width / 2 - menu.wibox.border_width + end + + return coords +end + +-- Create tasklist object +-------------------------------------------------------------------------------- +local function new_task(c_group, style) + local task = {} + task.widg = style.widget(style.task) + task.group = c_group + task.l = wibox.container.margin(task.widg, unpack(style.task_margin)) + + task.widg:connect_signal("mouse::enter", function() redtasklist.tasktip:show(task.group) end) + task.widg:connect_signal("mouse::leave", + function() + redtasklist.tasktip.hidetimer:start() + if not redtasklist.winmenu.menu.hidetimer.started then redtasklist.winmenu.menu.hidetimer:start() end + end + ) + return task +end + +-- Find all clients to be shown +-------------------------------------------------------------------------------- +local function visible_clients(filter, screen) + local clients = {} + + for _, c in ipairs(client.get()) do + local hidden = c.skip_taskbar or c.hidden or c.type == "splash" or c.type == "dock" or c.type == "desktop" + + if not hidden and filter(c, screen) then + table.insert(clients, c) + end + end + + return clients +end + +-- Split tasks into groups by class +-------------------------------------------------------------------------------- +local function group_task(clients, need_group) + local client_groups = {} + local classes = {} + + for _, c in ipairs(clients) do + if need_group then + local index = awful.util.table.hasitem(classes, c.class or "Undefined") + if index then + table.insert(client_groups[index], c) + else + table.insert(classes, c.class or "Undefined") + table.insert(client_groups, { c }) + end + else + table.insert(client_groups, { c }) + end + end + + return client_groups +end + +-- Form ordered client list special for switch function +-------------------------------------------------------------------------------- +local function sort_list(client_groups) + local list = {} + + for _, g in ipairs(client_groups) do + for _, c in ipairs(g) do + if not c.minimized then table.insert(list, c) end + end + end + + return list +end + +-- Create tasktip line +-------------------------------------------------------------------------------- +local function tasktip_line(style) + local line = {} + + -- text + line.tb = wibox.widget.textbox() + + -- horizontal align wlayout + local horizontal = wibox.layout.fixed.horizontal() + horizontal:add(wibox.container.margin(line.tb, unpack(style.margin))) + + -- background for client state mark + line.field = wibox.container.background(horizontal) + + -- tasktip line metods + function line:set_text(text) + line.tb:set_markup(text) + + if style.max_width then + line.tb:set_ellipsize("middle") + local _, line_h = line.tb:get_preferred_size() + line.tb:set_forced_height(line_h) + line.tb:set_forced_width(style.max_width) + end + + line.field:set_fg(style.color.text) + line.field:set_bg(style.color.wibox) + end + + function line:mark_focused() + line.field:set_bg(style.color.main) + line.field:set_fg(style.color.highlight) + end + + function line:mark_urgent() + line.field:set_bg(style.color.urgent) + line.field:set_fg(style.color.highlight) + end + + function line:mark_minimized() + line.field:set_fg(style.color.gray) + end + + return line +end + +-- Switch task +-------------------------------------------------------------------------------- +local function switch_focus(list, is_reverse) + local diff = is_reverse and - 1 or 1 + + if #list == 0 then return end + + local index = (awful.util.table.hasitem(list, client.focus) or 1) + diff + + if index < 1 then index = #list + elseif index > #list then index = 1 + end + + -- set focus to new task + client.focus = list[index] + list[index]:raise() +end + +local function client_group_sort_by_class(a, b) + return (a[1].class or "Undefined") < (b[1].class or "Undefined") +end + +-- Build or update tasklist. +-------------------------------------------------------------------------------- +local function tasklist_construct(client_groups, layout, data, buttons, style) + + layout:reset() + local task_full_width = style.width + style.task_margin[1] + style.task_margin[2] + layout:set_max_widget_size(task_full_width) + layout:set_forced_width(task_full_width * #client_groups) + + -- construct tasklist + for i, c_group in ipairs(client_groups) do + local task + + -- use existing widgets or create new + if data[i] then + task = data[i] + task.group = c_group + else + task = new_task(c_group, style) + data[i] = task + end + + -- set info and buttons to widget + local state = get_state(c_group, style) + task.widg:set_state(state) + task.widg:buttons(redutil.base.buttons(buttons, { group = c_group })) + + -- construct + layout:add(task.l) + end +end + +-- Construct or update tasktip +-------------------------------------------------------------------------------- +local function construct_tasktip(c_group, layout, data, buttons, style) + layout:reset() + local tb_w, tb_h + local tip_width = 1 + + for i, c in ipairs(c_group) do + local line + + -- use existing widgets or create new + if data[i] then + line = data[i] + else + line = tasktip_line(style) + data[i] = line + end + + line:set_text(awful.util.escape(c.name) or "Untitled") + tb_w, tb_h = line.tb:get_preferred_size() + if line.tb.forced_width then + tb_w = math.min(line.tb.forced_width, tb_w) + end + + -- set state highlight only for grouped tasks + if #c_group > 1 or style.sl_highlight then + local state = get_state({ c }) + + if state.focus then line:mark_focused() end + if state.minimized then line:mark_minimized() end + if state.urgent then line:mark_urgent() end + end + + -- set buttons + local gap = (i - 1) * (tb_h + style.margin[3] + style.margin[4]) + if buttons then line.field:buttons(redutil.base.buttons(buttons, { group = { c }, gap = gap })) end + + -- add line widget to tasktip layout + tip_width = math.max(tip_width, tb_w) + layout:add(line.field) + end + + -- return tasktip size + return { + width = tip_width + style.margin[1] + style.margin[2], + height = #c_group * (tb_h + style.margin[3] + style.margin[4]) + } +end + + +-- Initialize window menu widget +----------------------------------------------------------------------------------------------------------------------- +function redtasklist.winmenu:init(style) + + -- Window managment functions + -------------------------------------------------------------------------------- + self.hide_check = function(action) + if style.hide_action[action] then self.menu:hide() end + end + + local close = function() last.client:kill(); self.menu:hide() end + local minimize = function() last.client.minimized = not last.client.minimized; self.hide_check("min") end + -- local maximize = function() last.client.maximized = not last.client.maximized; self.hide_check("max")end + + -- Create array of state icons + -- associate every icon with action and state indicator + -------------------------------------------------------------------------------- + local function icon_table_ganerator(property) + return { + icon = style.icon[property] or style.icon.unknown, + action = function() last.client[property] = not last.client[property]; self.hide_check(property) end, + indicator = function(c) return c[property] end + } + end + + local state_icons = { + icon_table_ganerator("floating"), + icon_table_ganerator("sticky"), + icon_table_ganerator("ontop"), + icon_table_ganerator("below"), + icon_table_ganerator("maximized"), + } + + -- Construct menu + -------------------------------------------------------------------------------- + + -- Client class line (menu title) construction + ------------------------------------------------------------ + local classbox = wibox.widget.textbox() + classbox:set_font(style.titleline.font) + classbox:set_align ("center") + + local classline = wibox.container.constraint(classbox, "exact", nil, style.titleline.height) + + -- Window state line construction + ------------------------------------------------------------ + + -- layouts + local stateline_horizontal = wibox.layout.flex.horizontal() + local stateline_vertical = wibox.layout.align.vertical() + stateline_vertical:set_second(stateline_horizontal) + stateline_vertical:set_expand("outside") + local stateline = wibox.container.constraint(stateline_vertical, "exact", nil, style.stateline.height) + + -- set all state icons in line + local stateboxes = state_line_construct(state_icons, stateline_horizontal, style) + + -- update function for state icons + local function stateboxes_update(c, icons, boxes) + for i, v in ipairs(icons) do + boxes[i]:set_color(v.indicator(c) and style.color.main or style.color.gray) + end + end + + -- Separators config + ------------------------------------------------------------ + local menusep = { widget = separator.horizontal(style.separator) } + + -- Construct tag submenus ("move" and "add") + ------------------------------------------------------------ + + -- menu item actions + self.movemenu_action = function(t) + last.client:move_to_tag(t); awful.layout.arrange(t.screen); self.hide_check("move") + end + + self.addmenu_action = function(t) + last.client:toggle_tag(t); awful.layout.arrange(t.screen); self.hide_check("add") + end + + -- menu items + local movemenu_items = tagmenu_items(self.movemenu_action, style) + local addmenu_items = tagmenu_items(self.addmenu_action, style) + + -- Create menu + ------------------------------------------------------------ + self.menu = redmenu({ + theme = style.menu, + items = { + { widget = classline }, + menusep, + { "Move to tag", { items = movemenu_items, theme = style.tagmenu } }, + { "Add to tag", { items = addmenu_items, theme = style.tagmenu } }, + + { "Minimize", minimize, nil, style.icon.minimize or style.icon.unknown }, + { "Close", close, nil, style.icon.close or style.icon.unknown }, + menusep, + { widget = stateline, focus = true } + } + }) + + -- Widget update functions + -------------------------------------------------------------------------------- + function self:update(c) + if self.menu.wibox.visible then + classbox:set_text(c.class or "Undefined") + stateboxes_update(c, state_icons, stateboxes) + tagmenu_update(c, self.menu, { 1, 2 }, style) + end + end + + -- Signals setup + -- Signals which affect window menu only + -- and does not connected to tasklist + -------------------------------------------------------------------------------- + local client_signals = { + "property::ontop", "property::floating", "property::below", "property::maximized", + } + for _, sg in ipairs(client_signals) do + client.connect_signal(sg, function() self:update(last.client) end) + end +end + +-- Show window menu widget +----------------------------------------------------------------------------------------------------------------------- +function redtasklist.winmenu:show(c_group, gap) + + -- do nothing if group of task received + -- show state only for single task + if #c_group > 1 then return end + + local c = c_group[1] + + -- toggle menu + if self.menu.wibox.visible and c == last.client and mouse.screen == last.screen then + self.menu:hide() + else + last.client = c + last.screen = mouse.screen + self.menu:show({ coords = coords_calc(self.menu, redtasklist.tasktip.wibox, gap) }) + + if self.menu.hidetimer.started then self.menu.hidetimer:stop() end + self:update(c) + end +end + + +-- Initialize a tasktip +----------------------------------------------------------------------------------------------------------------------- +function redtasklist.tasktip:init(buttons, style) + + local tippat = {} + + -- Create wibox + -------------------------------------------------------------------------------- + self.wibox = wibox({ + type = "tooltip", + bg = style.color.wibox, + border_width = style.border_width, + border_color = style.color.border, + shape = style.shape + }) + + self.wibox.ontop = true + + self.layout = wibox.layout.fixed.vertical() + self.wibox:set_widget(self.layout) + + -- Update function + -------------------------------------------------------------------------------- + function self:update(c_group) + + if not self.wibox.visible then return end + + local wg = construct_tasktip(c_group, self.layout, tippat, buttons, style) + self.wibox:geometry(wg) + end + + -- Set tasktip autohide timer + -------------------------------------------------------------------------------- + self.hidetimer = timer({ timeout = style.timeout }) + self.hidetimer:connect_signal("timeout", + function() + self.wibox.visible = false + if self.hidetimer.started then self.hidetimer:stop() end + end + ) + self.hidetimer:emit_signal("timeout") + + -- Signals setup + -------------------------------------------------------------------------------- + self.wibox:connect_signal("mouse::enter", + function() + if self.hidetimer.started then self.hidetimer:stop() end + end + ) + + self.wibox:connect_signal("mouse::leave", + function() + self.hidetimer:start() + if not redtasklist.winmenu.menu.hidetimer.started then redtasklist.winmenu.menu.hidetimer:start() end + end + ) +end + +-- Show tasktip +----------------------------------------------------------------------------------------------------------------------- +function redtasklist.tasktip:show(c_group) + + if self.hidetimer.started then self.hidetimer:stop() end + + if not self.wibox.visible or last.group ~= c_group then + self.wibox.visible = true + last.group = c_group + self:update(c_group) + awful.placement.under_mouse(self.wibox) + awful.placement.no_offscreen(self.wibox) + end +end + +-- Create a new tasklist widget +----------------------------------------------------------------------------------------------------------------------- +function redtasklist.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + local cs = args.screen + local filter = args.filter or redtasklist.filter.currenttags + + style = redutil.table.merge(default_style(), style or {}) + if style.custom_icon then style.icons = dfparser.icon_list(style.parser) end + if style.task.width then style.width = style.task.width end + + redtasklist.winmenu:init(style.winmenu) + redtasklist.tasktip:init(args.buttons, style.tasktip) + + local tasklist = wibox.layout.flex.horizontal() + local data = {} + + -- Update tasklist + -------------------------------------------------------------------------------- + + -- Tasklist update function + ------------------------------------------------------------ + local function tasklist_update() + local clients = visible_clients(filter, cs) + local client_groups = group_task(clients, style.need_group) + + table.sort(client_groups, client_group_sort_by_class) + last.screen_clients[cs] = sort_list(client_groups) + + tasklist_construct(client_groups, tasklist, data, args.buttons, style) + end + + -- Full update including pop-up widgets + ------------------------------------------------------------ + local function update() + tasklist_update() + redtasklist.tasktip:update(last.group) + redtasklist.winmenu:update(last.client) + end + + -- Create timer to prevent multiply call + -------------------------------------------------------------------------------- + tasklist.queue = timer({ timeout = style.timeout }) + tasklist.queue:connect_signal("timeout", function() update(cs); tasklist.queue:stop() end) + + -- Signals setup + -------------------------------------------------------------------------------- + local client_signals = { + "property::urgent", "property::sticky", "property::minimized", + "property::name", " property::icon", "property::skip_taskbar", + "property::screen", "property::hidden", + "tagged", "untagged", "list", "focus", "unfocus" + } + + local tag_signals = { "property::selected", "property::activated" } + + -- for _, sg in ipairs(client_signals) do client.connect_signal(sg, update) end + -- for _, sg in ipairs(tag_signals) do tag.attached_connect_signal(cs, sg, update) end + for _, sg in ipairs(client_signals) do client.connect_signal(sg, function() tasklist.queue:again() end) end + for _, sg in ipairs(tag_signals) do tag.attached_connect_signal(cs, sg, function() tasklist.queue:again() end) end + + -- force hide pop-up widgets if any client was closed + -- because last vars may be no actual anymore + client.connect_signal("unmanage", + function() + tasklist_update() + redtasklist.tasktip.wibox.visible = false + redtasklist.winmenu.menu:hide() + last.client = nil + last.group = nil + end + ) + + -- Construct + -------------------------------------------------------------------------------- + update() + + return tasklist +end + +-- Mouse action functions +----------------------------------------------------------------------------------------------------------------------- + +-- focus/minimize +function redtasklist.action.select(args) + args = args or {} + local state = get_state(args.group) + + if state.focus then + for _, c in ipairs(args.group) do c.minimized = true end + else + if state.minimized then + for _, c in ipairs(args.group) do c.minimized = false end + end + + client.focus = args.group[1] + args.group[1]:raise() + end +end + +-- close all in group +function redtasklist.action.close(args) + args = args or {} + for _, c in ipairs(args.group) do c:kill() end +end + +-- show/close winmenu +function redtasklist.action.menu(args) + args = args or {} + redtasklist.winmenu:show(args.group, args.gap) +end + +-- switch to next task +function redtasklist.action.switch_next() + switch_focus(last.screen_clients[mouse.screen]) +end + +-- switch to previous task +function redtasklist.action.switch_prev() + switch_focus(last.screen_clients[mouse.screen], true) +end + + +-- Filtering functions +-- @param c The client +-- @param screen The screen we are drawing on +----------------------------------------------------------------------------------------------------------------------- + +-- To include all clients +-------------------------------------------------------------------------------- +function redtasklist.filter.allscreen() + return true +end + +-- To include the clients from all tags on the screen +-------------------------------------------------------------------------------- +function redtasklist.filter.alltags(c, screen) + return c.screen == screen +end + +-- To include only the clients from currently selected tags +-------------------------------------------------------------------------------- +function redtasklist.filter.currenttags(c, screen) + if c.screen ~= screen then return false end + if c.sticky then return true end + + local tags = screen.tags + + for _, t in ipairs(tags) do + if t.selected then + local ctags = c:tags() + + for _, v in ipairs(ctags) do + if v == t then return true end + end + end + end + + return false +end + +-- To include only the minimized clients from currently selected tags +-------------------------------------------------------------------------------- +function redtasklist.filter.minimizedcurrenttags(c, screen) + if c.screen ~= screen then return false end + if not c.minimized then return false end + if c.sticky then return true end + + local tags = screen.tags + + for _, t in ipairs(tags) do + if t.selected then + local ctags = c:tags() + + for _, v in ipairs(ctags) do + if v == t then return true end + end + end + end + + return false +end + +-- To include only the currently focused client +-------------------------------------------------------------------------------- +function redtasklist.filter.focused(c, screen) + return c.screen == screen and client.focus == c +end + +-- Config metatable to call redtasklist module as function +----------------------------------------------------------------------------------------------------------------------- +function redtasklist.mt:__call(...) + return redtasklist.new(...) +end + +return setmetatable(redtasklist, redtasklist.mt) diff --git a/awesome/.config/awesome/redflat/widget/textclock.lua b/awesome/.config/awesome/redflat/widget/textclock.lua new file mode 100644 index 0000000..69cf34b --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/textclock.lua @@ -0,0 +1,80 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat clock widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Text clock widget with date in tooltip (optional) +----------------------------------------------------------------------------------------------------------------------- +-- Some code was taken from +------ awful.widget.textclock v3.5.2 +------ (c) 2009 Julien Danjou +----------------------------------------------------------------------------------------------------------------------- + +local setmetatable = setmetatable +local os = os +local textbox = require("wibox.widget.textbox") +local beautiful = require("beautiful") +local gears = require("gears") + +local tooltip = require("redflat.float.tooltip") +local redutil = require("redflat.util") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local textclock = { mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + font = "Sans 12", + tooltip = {}, + color = { text = "#aaaaaa" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.textclock") or {}) +end + +-- Create a textclock widget. It draws the time it is in a textbox. +-- @param format The time format. Default is " %a %b %d, %H:%M ". +-- @param timeout How often update the time. Default is 60. +-- @return A textbox widget +----------------------------------------------------------------------------------------------------------------------- +function textclock.new(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + local timeformat = args.timeformat or " %a %b %d, %H:%M " + local timeout = args.timeout or 60 + style = redutil.table.merge(default_style(), style or {}) + + -- Create widget + -------------------------------------------------------------------------------- + local widg = textbox() + widg:set_font(style.font) + + -- Set tooltip if need + -------------------------------------------------------------------------------- + local tp + if args.dateformat then tp = tooltip({ objects = { widg } }, style.tooltip) end + + -- Set update timer + -------------------------------------------------------------------------------- + local timer = gears.timer({ timeout = timeout }) + timer:connect_signal("timeout", + function() + widg:set_markup('' .. os.date(timeformat) .. "") + if args.dateformat then tp:set_text(os.date(args.dateformat)) end + end) + timer:start() + timer:emit_signal("timeout") + + -------------------------------------------------------------------------------- + return widg +end + +-- Config metatable to call textclock module as function +----------------------------------------------------------------------------------------------------------------------- +function textclock.mt:__call(...) + return textclock.new(...) +end + +return setmetatable(textclock, textclock.mt) diff --git a/awesome/.config/awesome/redflat/widget/updates.lua b/awesome/.config/awesome/redflat/widget/updates.lua new file mode 100644 index 0000000..779a2e0 --- /dev/null +++ b/awesome/.config/awesome/redflat/widget/updates.lua @@ -0,0 +1,413 @@ +----------------------------------------------------------------------------------------------------------------------- +-- RedFlat updates widget -- +----------------------------------------------------------------------------------------------------------------------- +-- Show if system updates available using apt-get +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +----------------------------------------------------------------------------------------------------------------------- +local setmetatable = setmetatable +local table = table +local string = string +local os = os +local unpack = unpack or table.unpack + +local beautiful = require("beautiful") +local wibox = require("wibox") +local awful = require("awful") +local timer = require("gears.timer") + +local rednotify = require("redflat.float.notify") +local tooltip = require("redflat.float.tooltip") +local redutil = require("redflat.util") +local svgbox = require("redflat.gauge.svgbox") +local separator = require("redflat.gauge.separator") +local redtip = require("redflat.float.hotkeys") +local startup = require("redflat.startup") + +-- Initialize tables for module +----------------------------------------------------------------------------------------------------------------------- +-- TODO: weak table for all multi panel widget +local updates = { objects = {}, mt = {} } + +-- Generate default theme vars +----------------------------------------------------------------------------------------------------------------------- +local function default_style() + local style = { + wibox = { + geometry = { width = 400, height = 200 }, + border_width = 2, + title_font = "Sans 14 bold", + tip_font = "Sans 10", + set_position = nil, + separator = {}, + shape = nil, + icon = { + package = redutil.base.placeholder(), + close = redutil.base.placeholder({ txt = "X" }), + daily = redutil.base.placeholder(), + weekly = redutil.base.placeholder(), + normal = redutil.base.placeholder(), + silent = redutil.base.placeholder(), + }, + height = { title = 40, state = 50, tip = 20 }, + margin = { close = { 0, 0, 0, 0 }, state = { 0, 0, 0, 0 }, title = { 0, 0, 0, 0 }, image = { 0, 0, 0, 0 } } + }, + icon = redutil.base.placeholder(), + keytip = { geometry = { width = 400 } }, + notify = {}, + firstrun = false, + need_notify = true, + tooltip = { + base = {}, + state = { + timeout = 3, + set_position = function(w) awful.placement.under_mouse(w) w.y = w.y - 30 end, + } + }, + color = { main = "#b1222b", icon = "#a0a0a0", wibox = "#202020", border = "#575757", gray = "#404040", + urgent = "#32882d" } + } + return redutil.table.merge(style, redutil.table.check(beautiful, "widget.updates") or {}) +end + + +local STATE = setmetatable( + { keywords = { "NORMAL", "DAILY", "WEEKLY", "SILENT" } }, + { __index = function(table_, key) + return awful.util.table.hasitem(table_.keywords, key) or rawget(table_, key) + end } +) + +local tips = {} +tips[STATE.NORMAL] = "regular notifications" +tips[STATE.DAILY] = "postponed for a day" +tips[STATE.WEEKLY] = "postponed for a week" +tips[STATE.SILENT] = "notifications disabled" + +-- key bindings +updates.keys = {} +updates.keys.control = { + { + {}, "1", function() updates.set_mode(STATE.NORMAL) end, + { description = "Regular notifications", group = "Notifications" } + }, + { + {}, "2", function() updates.set_mode(STATE.DAILY) end, + { description = "Postponed for a day", group = "Notifications" } + }, + { + {}, "3", function() updates.set_mode(STATE.WEEKLY) end, + { description = "Postponed for a week", group = "Notifications" } + }, + { + {}, "4", function() updates.set_mode(STATE.SILENT) end, + { description = "Notifications disabled", group = "Notifications" } + }, +} +updates.keys.action = { + { + {}, "u", function() updates:update(true) end, + { description = "Check updates", group = "Action" } + }, + { + {}, "Escape", function() updates:hide() end, + { description = "Close updates widget", group = "Action" } + }, + { + { "Mod4" }, "F1", function() redtip:show() end, + { description = "Show hotkeys helper", group = "Action" } + }, +} + +updates.keys.all = awful.util.table.join(updates.keys.control, updates.keys.action) + + +-- Initialize notify widbox +----------------------------------------------------------------------------------------------------------------------- +function updates:init(args, style) + + -- Initialize vars + -------------------------------------------------------------------------------- + args = args or {} + local update_timeout = args.update_timeout or 3600 + local command = args.command or "echo 0" + local force_notify = false + style = redutil.table.merge(default_style(), style or {}) + + + self.style = style + self.is_updates = false + self.config = awful.util.getdir("cache") .. "/updates" + + -- Create floating wibox for updates widget + -------------------------------------------------------------------------------- + self.wibox = wibox({ + ontop = true, + bg = style.color.wibox, + shape = style.shape, + border_width = style.wibox.border_width, + border_color = style.color.border + }) + + self.wibox:geometry(style.wibox.geometry) + + -- Floating widget structure + -------------------------------------------------------------------------------- + + -- main image + self.packbox = svgbox(style.wibox.icon.package, nil, style.color.icon) + + -- titlebar + self.titlebox = wibox.widget.textbox("0 UPDATES") + self.titlebox:set_font(style.wibox.title_font) + self.titlebox:set_align("center") + + -- tip line + --self.tipbox = wibox.widget.textbox() + --self.tipbox:set_font(style.wibox.tip_font) + --self.tipbox:set_align("center") + --self.tipbox:set_forced_height(style.wibox.height.tip) + + -- close button + local closebox = svgbox(style.wibox.icon.close, nil, style.color.icon) + closebox:buttons(awful.util.table.join(awful.button({}, 1, function() self:hide() end))) + closebox:connect_signal("mouse::enter", function() closebox:set_color(style.color.main) end) + closebox:connect_signal("mouse::leave", function() closebox:set_color(style.color.icon) end) + + -- Control buttons + ------------------------------------------------------------ + local statebox = {} + local statearea = wibox.layout.flex.horizontal() + statearea:set_forced_height(style.wibox.height.state) + + -- color update fucntions + local function update_state() + for k, box in pairs(statebox) do + box:set_color(STATE[k] == self.state and style.color.main or style.color.gray) + end + --self.tipbox:set_markup(string.format('%s', style.color.gray, tips[self.state])) + end + + local function check_alert() + local time = os.time() + return self.is_updates and + ( self.state == STATE.NORMAL + or self.state == STATE.DAILY and (time - self.time > 24 * 3600) + or self.state == STATE.WEEKLY and (time - self.time > 7 * 24 * 3600)) + end + + local function update_widget_colors() + local is_alert = check_alert() + local color = is_alert and style.color.main or style.color.icon + for _, w in ipairs(updates.objects) do w:set_color(color) end + end + + -- create control buttons + function self.set_mode(state) + if self.state ~= state then + self.state = state + self.time = (state == STATE.DAILY or state == STATE.WEEKLY) and os.time() or 0 + update_state() + update_widget_colors() + end + end + + for state, k in pairs(STATE.keywords) do + statebox[k] = svgbox(style.wibox.icon[k:lower()], nil, style.color.gray) + local tp = tooltip({ objects = { statebox[k] } }, style.tooltip.state) + tp:set_text(tips[state]) + + statebox[k]:buttons(awful.util.table.join( + awful.button({}, 1, function() self.set_mode(state) end) + )) + + local area = wibox.layout.align.horizontal() + area:set_middle(statebox[k]) + area:set_expand("outside") + + statearea:add(area) + end + + -- Setup wibox layouts + ------------------------------------------------------------ + local titlebar = wibox.widget({ + nil, + self.titlebox, + wibox.container.margin(closebox, unpack(style.wibox.margin.close)), + forced_height = style.wibox.height.title, + layout = wibox.layout.align.horizontal + }) + + self.wibox:setup({ + { + nil, + wibox.container.margin(titlebar, unpack(style.wibox.margin.title)), + separator.horizontal(style.wibox.separator), + layout = wibox.layout.align.vertical + }, + { + nil, + { + nil, wibox.container.margin(self.packbox, unpack(style.wibox.margin.image)), nil, + expand = "outside", + layout = wibox.layout.align.horizontal + }, + --self.tipbox, + nil, + layout = wibox.layout.align.vertical + }, + wibox.container.margin(statearea, unpack(style.wibox.margin.state)), + layout = wibox.layout.align.vertical + }) + + -- Widget keygrabber + -------------------------------------------------------------------------------- + self.keygrabber = function(mod, key, event) + if event ~= "press" then return end + for _, k in ipairs(self.keys.all) do + if redutil.key.match_grabber(k, mod, key) then k[3](); return end + end + end + + -- Start up setup + ------------------------------------------------------------ + self:load_state() + self:set_keys() + update_state() + + -- Set tooltip + -------------------------------------------------------------------------------- + self.tp = tooltip(nil, style.tooltip.base) + self.tp:set_text("?") + + -- Update info function + -------------------------------------------------------------------------------- + local function update_count(output) + local c = string.match(output, "(%d+)") + + self.is_updates = tonumber(c) > 0 + local is_alert = check_alert() + + if style.need_notify and (is_alert or force_notify) then + rednotify:show(redutil.table.merge({ text = c .. " updates available" }, style.notify)) + end + self.titlebox:set_text(c .. " UPDATES") + self.packbox:set_color(tonumber(c) > 0 and style.color.main or style.color.icon) + + if self.tp then self.tp:set_text(c .. " updates") end + update_widget_colors() + end + + -- Set update timer + -------------------------------------------------------------------------------- + self.check_updates = function(is_force) + force_notify = is_force + awful.spawn.easy_async_with_shell(command, update_count) + end + + updates.timer = timer({ timeout = update_timeout }) + updates.timer:connect_signal("timeout", function() self.check_updates() end) + updates.timer:start() + + if style.firstrun and startup.is_startup then updates.timer:emit_signal("timeout") end + + -- Connect additional signals + ------------------------------------------------------------ + awesome.connect_signal("exit", function() self:save_state() end) +end + +-- Create a new updates widget +-- @param style Table containing colors and geometry parameters for all elemets +----------------------------------------------------------------------------------------------------------------------- +function updates.new(style) + + if not updates.wibox then updates:init({}) end + + -- Initialize vars + -------------------------------------------------------------------------------- + style = redutil.table.merge(updates.style, style or {}) + + local widg = svgbox(style.icon) + widg:set_color(style.color.icon) + table.insert(updates.objects, widg) + + updates.tp:add_to_object(widg) + + -------------------------------------------------------------------------------- + return widg +end + +-- Show/hide updates wibox +----------------------------------------------------------------------------------------------------------------------- +function updates:show() + if self.style.wibox.set_position then + self.style.wibox.set_position(self.wibox) + else + redutil.placement.centered(self.wibox, nil, mouse.screen.workarea) + end + redutil.placement.no_offscreen(self.wibox, self.style.screen_gap, screen[mouse.screen].workarea) + + self.wibox.visible = true + awful.keygrabber.run(self.keygrabber) + redtip:set_pack("System updates", self.tip, self.style.keytip.column, self.style.keytip.geometry) +end + +function updates:hide() + self.wibox.visible = false + awful.keygrabber.stop(self.keygrabber) + redtip:remove_pack() +end + +function updates:toggle() + if self.wibox.visible then + self:hide() + else + self:show() + end +end + +-- Save/restore state between sessions +----------------------------------------------------------------------------------------------------------------------- +function updates:load_state() + local info = redutil.read.file(self.config) + if info then + local state, time = string.match(info, "(%d)=(%d+)") + self.state, self.time = tonumber(state), tonumber(time) + else + self.state = STATE.NORMAL + self.time = 0 + end +end + +function updates:save_state() + local file = io.open(self.config, "w") + file:write(string.format("%d=%d", self.state, self.time)) + file:close() +end + +-- Set user hotkeys +----------------------------------------------------------------------------------------------------------------------- +function updates:set_keys(keys, layout) + layout = layout or "all" + if keys then + self.keys[layout] = keys + if layout ~= "all" then self.keys.all = awful.util.table.join(self.keys.control, self.keys.action) end + end + + self.tip = self.keys.all +end + +-- Update updates info for every widget +----------------------------------------------------------------------------------------------------------------------- +function updates:update(is_force) + self.check_updates(is_force) +end + +-- Config metatable to call updates module as function +----------------------------------------------------------------------------------------------------------------------- +function updates.mt:__call(...) + return updates.new(...) +end + +return setmetatable(updates, updates.mt) diff --git a/awesome/.config/awesome/rules-config.lua b/awesome/.config/awesome/rules-config.lua new file mode 100644 index 0000000..59d7360 --- /dev/null +++ b/awesome/.config/awesome/rules-config.lua @@ -0,0 +1,114 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Rules config -- +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +local awful =require("awful") +local beautiful = require("beautiful") +local redtitle = require("redflat.titlebar") + +-- Initialize tables and vars for the module +----------------------------------------------------------------------------------------------------------------------- +local rules = {} + +rules.base_properties = { + border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = awful.client.focus.filter, + raise = true, + size_hints_honor = false, + screen = awful.screen.preferred, +} + +rules.floating_any = { + class = { + "Clipflap", "Run.py", "Arandr", + "Gpick", + "Kruler", + "MessageWin", -- kalarm. + "Sxiv", + "Wpa_gui", + "pinentry", + "veromix", + "xtightvncviewer", + "keepassxc", + }, + name={ "Calculatrice","Event Tester",}, + role = { "AlarmWindow", "pop-up", }, + type = { "dialog" } +} + +rules.titlebar_exceptions = { + class = { "Cavalcade", "Clipflap", "Steam", "Qemu-system-x86_64" } +} + +rules.maximized = { + class = { "Emacs24" } +} + +-- Build rule table +----------------------------------------------------------------------------------------------------------------------- +function rules:init(args) + + args = args or {} + self.base_properties.keys = args.hotkeys.keys.client + self.base_properties.buttons = args.hotkeys.mouse.client + self.env = args.env or {} + + + -- Build rules + -------------------------------------------------------------------------------- + self.rules = { + { + rule = {}, + properties = args.base_properties or self.base_properties + }, + { + rule_any = args.floating_any or self.floating_any, + properties = { floating = true, ontop=true } + }, + { + rule_any = self.maximized, + callback = function(c) + c.maximized = true + redtitle.cut_all({ c }) + c.height = c.screen.workarea.height - 2 * c.border_width + end + }, + { + rule_any = { type = { "normal", "dialog" }}, + except_any = self.titlebar_exceptions, + properties = { titlebars_enabled = true } + }, + { + rule_any = { type = { "normal" }}, + properties = { placement = awful.placement.no_overlap + awful.placement.no_offscreen } + }, + + -- Tags placement + { + rule = { instance = "Xephyr" }, + properties = { tag = self.env.theme == "ruby" and "Test" or "Free", fullscreen = true } + }, + + -- Jetbrains splash screen fix + { + rule_any = { class = { "jetbrains-%w+", "java-lang-Thread" } }, + callback = function(jetbrains) + if jetbrains.skip_taskbar then jetbrains.floating = true end + end + }, + -- Set Firefox to always map on the tag named "2" on screen 1. + -- { rule = { class = "Firefox" }, + -- properties = { screen = 1, tag = "2" } }, + } + + + -- Set rules + -------------------------------------------------------------------------------- + awful.rules.rules = rules.rules +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return rules \ No newline at end of file diff --git a/awesome/.config/awesome/signals-config.lua b/awesome/.config/awesome/signals-config.lua new file mode 100644 index 0000000..56c609e --- /dev/null +++ b/awesome/.config/awesome/signals-config.lua @@ -0,0 +1,103 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Signals config -- +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +local awful = require("awful") +local beautiful = require("beautiful") + +local redutil = require("redflat.util") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local signals = {} + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function do_sloppy_focus(c) + if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier and awful.client.focus.filter(c) then + client.focus = c + end +end + +local function fixed_maximized_geometry(c, context) + if c.maximized and context ~= "fullscreen" then + c:geometry({ + x = c.screen.workarea.x, + y = c.screen.workarea.y, + height = c.screen.workarea.height - 2 * c.border_width, + width = c.screen.workarea.width - 2 * c.border_width + }) + end +end + +-- Build table +----------------------------------------------------------------------------------------------------------------------- +function signals:init(args) + + args = args or {} + local env = args.env + + -- actions on every application start + client.connect_signal( + "manage", + function(c) + -- put client at the end of list + if env.set_slave then awful.client.setslave(c) end + + -- startup placement + if awesome.startup + and not c.size_hints.user_position + and not c.size_hints.program_position + then + awful.placement.no_offscreen(c) + end + + -- put new floating windows to the center of screen + if env.set_center and c.floating and not (c.maximized or c.fullscreen) then + redutil.placement.centered(c, nil, mouse.screen.workarea) + end + end + ) + + -- add missing borders to windows that get unmaximized + client.connect_signal( + "property::maximized", + function(c) + if not c.maximized then + c.border_width = beautiful.border_width + end + end + ) + + -- don't allow maximized windows move/resize themselves + client.connect_signal( + "request::geometry", fixed_maximized_geometry + ) + + -- enable sloppy focus, so that focus follows mouse + if env.sloppy_focus then + client.connect_signal("mouse::enter", do_sloppy_focus) + end + + -- hilight border of focused window + -- can be disabled since focus indicated by titlebars in current config + if env.color_border_focus then + client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end) + client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) + end + + -- wallpaper update on screen geometry change + screen.connect_signal("property::geometry", env.wallpaper) + + -- Awesome v4.0 introduce screen handling without restart. + -- All redflat panel widgets was designed in old fashioned way and doesn't support this fature properly. + -- Since I'm using single monitor setup I have no will to rework panel widgets by now, + -- so restart signal added here is simple and dirty workaround. + -- You can disable it on your own risk. + screen.connect_signal("list", awesome.restart) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return signals diff --git a/awesome/.config/awesome/themes/colorless/common/awesome.svg b/awesome/.config/awesome/themes/colorless/common/awesome.svg new file mode 100644 index 0000000..bb623bd --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/common/awesome.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/common/blank.svg b/awesome/.config/awesome/themes/colorless/common/blank.svg new file mode 100644 index 0000000..33e5d39 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/common/blank.svg @@ -0,0 +1 @@ + diff --git a/awesome/.config/awesome/themes/colorless/common/check.svg b/awesome/.config/awesome/themes/colorless/common/check.svg new file mode 100644 index 0000000..934b0dc --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/common/check.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/common/submenu.svg b/awesome/.config/awesome/themes/colorless/common/submenu.svg new file mode 100644 index 0000000..6b2f849 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/common/submenu.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/common/system.svg b/awesome/.config/awesome/themes/colorless/common/system.svg new file mode 100644 index 0000000..769aa74 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/common/system.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/common/unknown.svg b/awesome/.config/awesome/themes/colorless/common/unknown.svg new file mode 100644 index 0000000..cdb0adf --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/common/unknown.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/common/warning.svg b/awesome/.config/awesome/themes/colorless/common/warning.svg new file mode 100644 index 0000000..5d25727 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/common/warning.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/cornerne.svg b/awesome/.config/awesome/themes/colorless/layouts/cornerne.svg new file mode 100644 index 0000000..d09d526 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/cornerne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/cornernw.svg b/awesome/.config/awesome/themes/colorless/layouts/cornernw.svg new file mode 100644 index 0000000..a2b9152 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/cornernw.svg @@ -0,0 +1,4 @@ + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/cornerse.svg b/awesome/.config/awesome/themes/colorless/layouts/cornerse.svg new file mode 100644 index 0000000..8c985a3 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/cornerse.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/cornersw.svg b/awesome/.config/awesome/themes/colorless/layouts/cornersw.svg new file mode 100644 index 0000000..2d299c7 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/cornersw.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/fair.svg b/awesome/.config/awesome/themes/colorless/layouts/fair.svg new file mode 100644 index 0000000..dc79076 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/fair.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/floating.svg b/awesome/.config/awesome/themes/colorless/layouts/floating.svg new file mode 100644 index 0000000..d6b0d65 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/floating.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/fullscreen.svg b/awesome/.config/awesome/themes/colorless/layouts/fullscreen.svg new file mode 100644 index 0000000..573a267 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/fullscreen.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/grid.svg b/awesome/.config/awesome/themes/colorless/layouts/grid.svg new file mode 100644 index 0000000..e5593f6 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/grid.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/magnifier.svg b/awesome/.config/awesome/themes/colorless/layouts/magnifier.svg new file mode 100644 index 0000000..6160621 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/magnifier.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/map.svg b/awesome/.config/awesome/themes/colorless/layouts/map.svg new file mode 100644 index 0000000..651ce9c --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/map.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/max.svg b/awesome/.config/awesome/themes/colorless/layouts/max.svg new file mode 100644 index 0000000..8ff9b21 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/max.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/spiral.svg b/awesome/.config/awesome/themes/colorless/layouts/spiral.svg new file mode 100644 index 0000000..d9c1c07 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/spiral.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/tile.svg b/awesome/.config/awesome/themes/colorless/layouts/tile.svg new file mode 100644 index 0000000..2cc7262 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/tile.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/tilebottom.svg b/awesome/.config/awesome/themes/colorless/layouts/tilebottom.svg new file mode 100644 index 0000000..c31b69d --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/tilebottom.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/tileleft.svg b/awesome/.config/awesome/themes/colorless/layouts/tileleft.svg new file mode 100644 index 0000000..054c63f --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/tileleft.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/layouts/tiletop.svg b/awesome/.config/awesome/themes/colorless/layouts/tiletop.svg new file mode 100644 index 0000000..0520432 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/layouts/tiletop.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/player/cover.svg b/awesome/.config/awesome/themes/colorless/player/cover.svg new file mode 100644 index 0000000..b98bcac --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/player/cover.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/player/next.svg b/awesome/.config/awesome/themes/colorless/player/next.svg new file mode 100644 index 0000000..9a8df9c --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/player/next.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/player/pause.svg b/awesome/.config/awesome/themes/colorless/player/pause.svg new file mode 100644 index 0000000..fe62800 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/player/pause.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/player/play.svg b/awesome/.config/awesome/themes/colorless/player/play.svg new file mode 100644 index 0000000..7677394 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/player/play.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/player/previous.svg b/awesome/.config/awesome/themes/colorless/player/previous.svg new file mode 100644 index 0000000..7e4e2e6 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/player/previous.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/theme.lua b/awesome/.config/awesome/themes/colorless/theme.lua new file mode 100644 index 0000000..43392c4 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/theme.lua @@ -0,0 +1,1454 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Colorless theme -- +----------------------------------------------------------------------------------------------------------------------- +local awful = require("awful") + +local theme = {} +--local wa = mouse.screen.workarea + +-- Color scheme +----------------------------------------------------------------------------------------------------------------------- +theme.color = { + -- main colors + main = "#02606D", + gray = "#575757", + bg = "#161616", + bg_second = "#181818", + wibox = "#202020", + icon = "#a0a0a0", + text = "#aaaaaa", + urgent = "#B25500", + highlight = "#e0e0e0", + border = "#404040", + + -- secondary colors + shadow1 = "#141414", + shadow2 = "#313131", + shadow3 = "#1c1c1c", + shadow4 = "#767676", + + button = "#575757", + pressed = "#404040", + + desktop_gray = "#404040", + desktop_icon = "#606060", +} + +-- Common +----------------------------------------------------------------------------------------------------------------------- +theme.path = awful.util.get_configuration_dir() .. "themes/colorless" +theme.base = awful.util.get_configuration_dir() .. "themes/colorless" +theme.homedir = os.getenv("HOME") + +-- Main config +------------------------------------------------------------ + +theme.panel_height = 36 -- panel height +theme.border_width = 4 -- window border width +theme.useless_gap = 4 -- useless gap + +theme.cellnum = { x = 96, y = 58 } -- grid layout property + +theme.wallpaper = theme.path .. "/wallpaper/primary.png" -- wallpaper file + +-- Fonts +------------------------------------------------------------ +theme.fonts = { + main = "sans 12", -- main font + menu = "sans 12", -- main menu font + tooltip = "sans 12", -- tooltip font + notify = "sans bold 14", -- redflat notify popup font + clock = "sans bold 12", -- textclock widget font + qlaunch = "sans bold 14", -- quick launch key label font + title = "sans bold 12", -- widget titles font + tiny = "sans bold 10", -- smallest font for widgets + keychain = "sans bold 14", -- key sequence tip font + titlebar = "sans bold 12", -- client titlebar font + hotkeys = { + main = "sans 12", -- hotkeys helper main font + key = "mono 12", -- hotkeys helper key font (use monospace for align) + title = "sans bold 14", -- hotkeys helper group title font + }, + player = { + main = "sans bold 12", -- player widget main font + time = "sans bold 14", -- player widget current time font + }, +} + +theme.cairo_fonts = { + tag = { font = "Sans", size = 16, face = 1 }, -- tag widget font + appswitcher = { font = "Sans", size = 22, face = 1 }, -- appswitcher widget font + navigator = { + title = { font = "Sans", size = 28, face = 1, slant = 0 }, -- window navigation title font + main = { font = "Sans", size = 22, face = 1, slant = 0 } -- window navigation main font + }, + + desktop = { + textbox = { font = "Sans", size = 24, face = 1 }, + }, +} + +-- Shared icons +-------------------------------------------------------------------------------- +theme.icon = { + check = theme.path .. "/common/check.svg", + blank = theme.path .. "/common/blank.svg", + submenu = theme.path .. "/common/submenu.svg", + warning = theme.path .. "/common/warning.svg", + awesome = theme.path .. "/common/awesome.svg", + system = theme.path .. "/common/system.svg", + unknown = theme.path .. "/common/unknown.svg", +} + + +-- Main theme settings +-- Make it updatabele since it may depends on common +----------------------------------------------------------------------------------------------------------------------- +function theme:init() + + -- Service utils config + ---------------------------------------------------------------------------------- + self.service = {} + + -- Window control mode appearance + -------------------------------------------------------------------------------- + self.service.navigator = { + border_width = 0, -- window placeholder border width + gradstep = 60, -- window placeholder background stripes width + marksize = { -- window information plate size + width = 160, -- width + height = 80, -- height + r = 20 -- corner roundness + }, + linegap = 32, -- gap between two lines on window information plate + timeout = 1, -- highlight duration + notify = {}, -- redflat notify style (see theme.float.notify) + titlefont = self.cairo_fonts.navigator.title, -- first line font on window information plate + font = self.cairo_fonts.navigator.main, -- second line font on window information plate + + -- array of hot key marks for window placeholders + num = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "F1", "F3", "F4", "F5" }, + + -- colors + color = { + border = self.color.main, -- window placeholder border color + mark = self.color.gray, -- window information plate background color + text = self.color.wibox, -- window information plate text color + fbg1 = self.color.main .. "40", -- first background color for focused window placeholder + fbg2 = self.color.main .. "20", -- second background color for focused window placeholder + hbg1 = self.color.urgent .. "40", -- first background color for highlighted window placeholder + hbg2 = self.color.urgent .. "20", -- second background color for highlighted window placeholder + bg1 = self.color.gray .. "40", -- first background color for window placeholder + bg2 = self.color.gray .. "20" -- second background color for window placeholder + } + } + + -- layout hotkeys helper settings + self.service.navigator.keytip = {} + + -- this one used as fallback when style for certain layout missed + self.service.navigator.keytip["base"] = { geometry = { width = 600 }, exit = true } + + -- styles for certain layouts + self.service.navigator.keytip["fairv"] = { geometry = { width = 600}, exit = true } + self.service.navigator.keytip["fairh"] = self.service.navigator.keytip["fairv"] + self.service.navigator.keytip["spiral"] = self.service.navigator.keytip["fairv"] + self.service.navigator.keytip["dwindle"] = self.service.navigator.keytip["fairv"] + + self.service.navigator.keytip["tile"] = { geometry = { width = 600 }, exit = true } + self.service.navigator.keytip["tileleft"] = self.service.navigator.keytip["tile"] + self.service.navigator.keytip["tiletop"] = self.service.navigator.keytip["tile"] + self.service.navigator.keytip["tilebottom"] = self.service.navigator.keytip["tile"] + + self.service.navigator.keytip["cornernw"] = { geometry = { width = 600 }, exit = true } + self.service.navigator.keytip["cornerne"] = self.service.navigator.keytip["cornernw"] + self.service.navigator.keytip["cornerse"] = self.service.navigator.keytip["cornernw"] + self.service.navigator.keytip["cornersw"] = self.service.navigator.keytip["cornernw"] + + self.service.navigator.keytip["magnifier"] = { geometry = { width = 600}, exit = true } + + self.service.navigator.keytip["grid"] = { geometry = { width = 1400 }, column = 2, exit = true } + self.service.navigator.keytip["usermap"] = { geometry = { width = 1400 }, column = 2, exit = true } + + -- Desktop file parser + -------------------------------------------------------------------------------- + self.service.dfparser = { + -- list of path to check desktop files + desktop_file_dirs = { + '/usr/share/applications/', + '/usr/local/share/applications/', + '~/.local/share/applications', + }, + -- icon theme settings + icons = { + theme = nil, -- user icon theme path + --theme = "/usr/share/icons/ACYLS", -- for example + df_icon = self.icon.system, -- default (fallback) icon + custom_only = false, -- use icons from user theme (no system fallback like 'hicolor' allowed) only + scalable_only = false -- use vector(svg) icons (no raster icons allowed) only + }, + wm_name = nil -- window manager name + } + + + -- Menu config + -------------------------------------------------------------------------------- + self.menu = { + border_width = 4, -- menu border width + screen_gap = self.useless_gap + self.border_width, -- minimal space from screen edge on placement + height = 32, -- menu item height + width = 250, -- menu item width + icon_margin = { 8, 8, 8, 8 }, -- space around left icon in menu item + ricon_margin = { 9, 9, 9, 9 }, -- space around right icon in menu item + nohide = false, -- do not hide menu after item activation + auto_expand = true, -- show submenu on item selection (without item activation) + auto_hotkey = false, -- automatically set hotkeys for all menu items + select_first = true, -- auto select first item when menu shown + hide_timeout = 1, -- auto hide timeout (auto hide disables if this set to 0) + font = self.fonts.menu, -- menu font + submenu_icon = self.icon.submenu, -- icon for submenu items + keytip = { geometry = { width = 400 } }, -- hotkeys helper settings + shape = nil, -- wibox shape + svg_scale = { false, false }, -- use vector scaling for left, right icons in menu item + } + + self.menu.color = { + border = self.color.wibox, -- menu border color + text = self.color.text, -- menu text color + highlight = self.color.highlight, -- menu text and icons color for selected item + main = self.color.main, -- menu selection color + wibox = self.color.wibox, -- menu background color + submenu_icon = self.color.icon, -- submenu icon color + right_icon = nil, -- right icon color in menu item + left_icon = nil, -- left icon color in menu item + } + + + -- Gauge (various elements that used as component for other widgets) style + -------------------------------------------------------------------------------- + self.gauge = { tag = {}, task = {}, icon = {}, audio = {}, monitor = {}, graph = {} } + + + -- Plain progressbar element + ------------------------------------------------------------ + self.gauge.graph.bar = { + color = self.color -- colors (main used) + } + + -- Plain monitor (label and progressbar below) + -------------------------------------------------------------- + self.gauge.monitor.plain = { + width = 50, -- widget width + font = self.cairo_fonts.tag, -- widget font + text_shift = 19, -- shift from upper border of widget to lower border of text + label = "MON", -- widget text + step = 0.05, -- progressbar painting step + line = { height = 4, y = 27 }, -- progressbar style + color = self.color -- colors (main used) + } + + -- Simple monitor with sigle vertical dashed progressbar + ------------------------------------------------------------ + self.gauge.monitor.dash = { + width = 10, -- widget width + color = self.color, -- colors (main used) + + -- progressbar line style + line = { + num = 5, -- number of chunks in progressbar + height = 3 -- height of progressbar chunk + }, + } + + -- Icon indicator (decoration in some panel widgets) + ------------------------------------------------------------ + self.gauge.icon.single = { + icon = self.icon.system, -- default icon + is_vertical = false, -- use vertical gradient (horizontal if false) + step = 0.02, -- icon painting step + color = self.color -- colors (main used) + } + + -- Double icon indicator + -------------------------------------------------------------- + self.gauge.icon.double = { + icon1 = self.icon.system, -- first icon + icon2 = self.icon.system, -- second icon + is_vertical = true, -- use vertical gradient (horizontal if false) + igap = 4, -- gap between icons + step = 0.02, -- icon painting step + color = self.color -- colors (main used) + } + + -- Double value monitor (double progressbar with icon) + -------------------------------------------------------------- + self.gauge.monitor.double = { + icon = self.icon.system, -- default icon + width = 90, -- widget width + dmargin = { 10, 0, 0, 0 }, -- margins around progressbar area + color = self.color, -- colors (main used) + + -- progressbar style + line = { + width = 4, -- progressbar height + v_gap = 6, -- space between progressbar + gap = 4, -- gap between progressbar dashes + num = 5 -- number of progressbar dashes + }, + } + + -- Separator (decoration used on panel, menu and some other widgets) + ------------------------------------------------------------ + self.gauge.separator = { + marginv = { 2, 2, 4, 4 }, -- margins for vertical separator + marginh = { 6, 6, 3, 3 }, -- margins for horizontal separator + color = self.color -- color (secondary used) + } + + -- Step like dash bar (user for volume widgets) + ------------------------------------------------------------ + self.gauge.graph.dash = { + bar = { + width = 4, -- dash element width + num = 10 -- number of dash elements + }, + color = self.color -- color (main used) + } + + -- Volume indicator + ------------------------------------------------------------ + self.gauge.audio.blue = { + width = 75, -- widget width + dmargin = { 10, 0, 2, 2 }, -- margins around dash area + icon = self.icon.system, -- volume icon + + -- colors + color = { icon = self.color.icon, mute = self.color.urgent }, + + -- dash style + dash = { bar = { num = 5, width = 4 } }, + } + + self.gauge.audio.red = { + icon = { volume = self.icon.system, mute = self.icon.warning }, -- icons + step = 0.05, -- icon painting step + color = { main = self.color.main, icon = self.color.icon, mute = self.color.gray } -- custom colors + } + + -- Dotcount (used in minitray widget) + ------------------------------------------------------------ + self.gauge.graph.dots = { + column_num = { 3, 5 }, -- amount of dot columns (min/max) + row_num = 3, -- amount of dot rows + dot_size = 5, -- dots size + dot_gap_h = 4, -- horizontal gap between dot (with columns number it'll define widget width) + color = self.color -- colors (main used) + } + + -- Circle shaped monitor + -------------------------------------------------------------- + self.gauge.monitor.circle = { + width = 32, -- widget width + line_width = 4, -- width of circle + iradius = 5, -- radius for center point + radius = 11, -- circle radius + step = 0.05, -- circle painting step + color = self.color -- colors (main used) + } + + -- Tag (base element of taglist) + ------------------------------------------------------------ + self.gauge.tag.orange = { + width = 38, -- widget width + line_width = self.gauge.monitor.circle.line_width, -- width of arcs + iradius = self.gauge.monitor.circle.iradius, -- radius for center point + radius = self.gauge.monitor.circle.radius, -- arcs radius + cgap = 0.314, -- gap between arcs in radians + min_sections = 1, -- minimal amount of arcs + show_min = false, -- indicate minimized apps by color + text = false, -- replace middle circle by text + font = self.cairo_fonts.tag, -- font for text + color = self.color -- colors (main used) + } + + self.gauge.tag.ruby = { + width = 40, -- widget width + color = self.color, -- colors (main used) + + -- tag state mark + base = { + pad = 6, -- left/right padding + height = 9, -- mark height + thickness = 2 -- mark lines thickness + }, + + -- client focus mark + mark = { + pad = 10, -- left/right padding + height = 3 -- mark height + }, + } + + self.gauge.tag.blue = { + width = 103, -- widget width + show_min = false, -- indicate minimized apps by color + text_shift = 20, -- shift from upper border of widget to lower border of text + color = self.color, -- colors (main used) + font = self.cairo_fonts.tag, -- font + + -- apps indicator + point = { + width = 80, -- apps indicator total width + height = 3, -- apps indicator total height + gap = 27, -- shift from upper border of widget to apps indicator + dx = 5 -- gap between apps indicator parts + }, + } + + self.gauge.tag.red = { + width = 80, -- widget width + text_shift = 19, -- shift from upper border of widget to lower border of text + font = self.cairo_fonts.tag, -- font + show_counter = true, -- visible/hidden apps counter + color = self.color, -- colors (main used) + + -- apps counter + counter = { + size = 12, -- counter font size + margin = 2, -- margin around counter + coord = { 40, 28 } -- counter position + }, + + -- functions for state marks + marks = nil, + + -- geometry for state marks + geometry = { + active = { height = 4, y = 27 }, -- active tag mark + focus = { x = 5, y = 7, width = 10, height = 12 }, -- focused tag mark + occupied = { x = 68, y = 7, width = 8, height = 12 } -- occupied tag mark + } + } + + self.gauge.tag.green = { + width = 44, -- widget width + margin = { 0, 0, 8, 8 }, -- margin around tag icon + icon = nil, -- layouts icon list (will be defined below) + color = self.color -- colors (main used) + } + + -- Task (base element of tasklist) + ------------------------------------------------------------ + + -- the same structure as blue tag + self.gauge.task.blue = { + width = 70, + show_min = true, + text_shift = 20, + color = self.color, + font = self.cairo_fonts.tag, + point = { width = 70, height = 3, gap = 27, dx = 5 }, + } + + self.gauge.task.ruby = { + width = 76, + text_shift = 26, + color = self.color, + font = self.cairo_fonts.tag, + + point = { size = 5, space = 5, gap = 4 }, + underline = { height = 10, thickness = 3, gap = 34, dh = 0 }, + } + + self.gauge.task.red = { + width = 40, -- widget width + text_shift = 19, -- shift from upper border of widget to lower border of text + font = self.cairo_fonts.tag, -- font + line = { height = 4, y = 27 }, -- application state indicator + color = self.color, -- colors (main used) + + -- applications counter + counter = { + size = 12, -- counter font size + margin = 2 -- margin around counter + }, + } + + self.gauge.task.green = { + width = 40, -- widget width + df_icon = self.icon.system, -- fallback icon + margin = { 0, 0, 2, 2 }, -- margin around icon + color = self.color -- colors (main used) + } + + -- Panel widgets + -------------------------------------------------------------------------------- + self.widget = {} + + -- individual margins for panel widgets + ------------------------------------------------------------ + self.widget.wrapper = { + mainmenu = { 12, 10, 6, 6 }, + layoutbox = { 10, 10, 6, 6 }, + textclock = { 12, 12, 0, 0 }, + taglist = { 4, 4, 0, 0 }, + tray = { 10, 12, 7, 7 }, + -- tasklist = { 0, 70, 0, 0 }, -- centering tasklist widget + } + + -- Textclock + ------------------------------------------------------------ + self.widget.textclock = { + font = self.fonts.clock, -- font + tooltip = {}, -- redflat tooltip style (see theme.float.tooltip) + color = { text = self.color.icon } -- colors + } + + -- Binary clock + ------------------------------------------------------------ + self.widget.binclock = { + width = 52, -- widget width + tooltip = {}, -- redflat tooltip style (see theme.float.tooltip) + dot = { size = 5 }, -- mark size + color = self.color, -- colors (main used) + } + + -- Battery indicator + ------------------------------------------------------------ + self.widget.battery = { + timeout = 30, -- update timeout + notify = {}, -- redflat notify style (see theme.float.notify) + + -- notification levels + levels = { 0.05, 0.1, 0.15, 0.20, 0.25 } + } + + -- Minitray + ------------------------------------------------------------ + self.widget.minitray = { + dotcount = {}, -- redflat dotcount style (see theme.gauge.graph.dots) + border_width = 0, -- floating widget border width + geometry = { height = 40 }, -- floating widget size + screen_gap = 2 * self.useless_gap, -- minimal space from screen edge on floating widget placement + shape = nil, -- wibox shape + color = { wibox = self.color.wibox, border = self.color.wibox }, + + -- function to define floating widget position when shown + set_position = function(wibox) + local geometry = { x = mouse.screen.workarea.x + mouse.screen.workarea.width, + y = mouse.screen.workarea.y + mouse.screen.workarea.height } + wibox:geometry(geometry) + end, + } + + -- Pulseaudio volume control + ------------------------------------------------------------ + self.widget.pulse = { + notify = {}, -- redflat notify style (see theme.float.notify) + widget = nil, -- audio gauge (usually setted by rc file) + audio = {} -- style for gauge + } + + -- Keyboard layout indicator + ------------------------------------------------------------ + self.widget.keyboard = { + icon = self.icon.system, -- widget icon + micon = self.icon, -- some common menu icons + + -- list of colors associated with keyboard layouts + layout_color = { self.color.icon, self.color.main }, + + -- redflat menu style (see theme.menu) + menu = { width = 180, color = { right_icon = self.color.icon }, nohide = true } + } + + -- Mail indicator + ------------------------------------------------------------ + self.widget.mail = { + icon = self.icon.system, -- widget icon + notify = {}, -- redflat notify style (see theme.float.notify) + need_notify = true, -- show notification on new mail + firstrun = true, -- check mail on wm start/restart + color = self.color, -- colors (main used) + } + + -- System updates indicator + ------------------------------------------------------------ + self.widget.updates = { + icon = self.icon.system, -- widget icon + notify = {}, -- redflat notify style (see theme.float.notify) + need_notify = true, -- show notification on updates + firstrun = true, -- check updates on wm start/restart + color = self.color, -- colors (main used) + + -- redflat key tip settings + keytip = { geometry = { width = 400 } }, + + -- tooltips style + tooltip = { base = {}, state = { timeout = 1 } }, + + -- wibox style settings + wibox = { + geometry = { width = 250, height = 160 }, -- widget size + border_width = 0, -- widget border width + title_font = self.fonts.title, -- widget title font + tip_font = self.fonts.tiny, -- widget state tip font + separator = {}, -- redflat separator style (see theme.gauge.separator) + shape = nil, -- wibox shape + set_position = nil, -- set_position + + -- wibox icons + icon = { + package = self.icon.system, -- main wibox image + close = self.base .. "/titlebar/close.svg", -- close button + normal = self.icon.system, -- regular notification + daily = self.icon.system, -- defer notification for day + weekly = self.icon.system, -- defer notification for 7 day + silent = self.icon.system, -- disable notification + }, + + -- widget areas height + height = { + title = 28, -- titlebar + state = 34, -- control icon area + }, + + -- widget element margins + margin = { + close = { 0, 0, 6, 6 }, -- close button + title = { 16 + 2*6, 16, 4, 0 }, -- titlebar area + state = { 4, 4, 4, 12 }, -- control icon area + image = { 0, 0, 2, 4 }, -- main wibox image area + }, + } + } + + -- Layoutbox + ------------------------------------------------------------ + self.widget.layoutbox = { + micon = self.icon, -- some common menu icons (used: 'blank', 'check') + color = self.color -- colors (main used) + } + + -- layout icons + self.widget.layoutbox.icon = { + floating = self.base .. "/layouts/floating.svg", + max = self.base .. "/layouts/max.svg", + fullscreen = self.base .. "/layouts/fullscreen.svg", + tilebottom = self.base .. "/layouts/tilebottom.svg", + tileleft = self.base .. "/layouts/tileleft.svg", + tile = self.base .. "/layouts/tile.svg", + tiletop = self.base .. "/layouts/tiletop.svg", + fairv = self.base .. "/layouts/fair.svg", + fairh = self.base .. "/layouts/fair.svg", + grid = self.base .. "/layouts/grid.svg", + usermap = self.base .. "/layouts/map.svg", + magnifier = self.base .. "/layouts/magnifier.svg", + spiral = self.base .. "/layouts/spiral.svg", + cornerne = self.base .. "/layouts/cornerne.svg", + cornernw = self.base .. "/layouts/cornernw.svg", + cornerse = self.base .. "/layouts/cornerse.svg", + cornersw = self.base .. "/layouts/cornersw.svg", + unknown = self.icon.unknown, -- this one used as fallback + } + + -- redflat menu style (see theme.menu) + self.widget.layoutbox.menu = { + icon_margin = { 8, 12, 8, 8 }, + width = 260, + auto_hotkey = true, + nohide = false, + color = { right_icon = self.color.icon, left_icon = self.color.icon } + } + + -- human readable aliases for layout names (displayed in menu and tooltip) + self.widget.layoutbox.name_alias = { + floating = "Floating", + fullscreen = "Fullscreen", + max = "Maximized", + grid = "Grid", + usermap = "User Map", + tile = "Right Tile", + fairv = "Fair Tile", + tileleft = "Left Tile", + tiletop = "Top Tile", + tilebottom = "Bottom Tile", + magnifier = "Magnifier", + spiral = "Spiral", + cornerne = "Corner NE", + cornernw = "Corner NW", + cornerse = "Corner SE", + cornersw = "Corner SW", + } + + -- green tag icons + self.gauge.tag.green.icon = self.widget.layoutbox.icon + + -- Tasklist + -------------------------------------------------------------- + + -- main settings + self.widget.tasklist = { + custom_icon = false, -- use custom applications icons (not every gauge task widget support icons) + iconnames = {}, -- icon name aliases for custom applications icons + widget = nil, -- task gauge widget (usually setted by rc file) + width = 40, -- width of task element in tasklist + char_digit = 4, -- number of characters in task element text + need_group = true, -- group application instances into one task element + parser = {}, -- redlat desktop file parser settings (see theme.service.dfparser) + task_margin = { 5, 5, 0, 0 }, -- margins around task element + task = self.gauge.task.blue -- style for task gauge widget + } + + -- menu settings + self.widget.tasklist.winmenu = { + micon = self.icon, -- some common menu icons + titleline = { + font = self.fonts.title, -- menu title height + height = 25 -- menu title font + }, + stateline = { height = 30 }, -- height of menu item with state icons + state_iconsize = { width = 18, height = 18 }, -- size for state icons + layout_icon = self.widget.layoutbox.icon, -- list of layout icons + separator = { marginh = { 3, 3, 5, 5 } }, -- redflat separator style (see theme.gauge.separator) + color = self.color, -- colors (main used) + + -- main menu style (see theme.menu) + menu = { width = 200, color = { right_icon = self.color.icon }, ricon_margin = { 9, 9, 9, 9 } }, + + -- tag action submenu style (see theme.menu) + tagmenu = { width = 160, color = { right_icon = self.color.icon, left_icon = self.color.icon }, + icon_margin = { 9, 9, 9, 9 } }, + + -- set which action will hide menu after activate + hide_action = { min = true, move = true, max = false, add = false, floating = false, sticky = false, + ontop = false, below = false, maximized = false }, + } + + -- menu icons + self.widget.tasklist.winmenu.icon = { + floating = self.base .. "/titlebar/floating.svg", + sticky = self.base .. "/titlebar/pin.svg", + ontop = self.base .. "/titlebar/ontop.svg", + below = self.base .. "/titlebar/below.svg", + close = self.base .. "/titlebar/close.svg", + minimize = self.base .. "/titlebar/minimize.svg", + maximized = self.base .. "/titlebar/maximized.svg", + + unknown = self.icon.unknown, -- this one used as fallback + } + + -- multiline task element tip + self.widget.tasklist.tasktip = { + border_width = 2, -- tip border width + margin = { 10, 10, 5, 5 }, -- margins around text in tip lines + timeout = 0.5, -- hide timeout + shape = nil, -- wibox shape + sl_highlight = false, -- highlight application state when it's single line tip + color = self.color, -- colors (main used) + } + + -- task text aliases + self.widget.tasklist.appnames = {} + self.widget.tasklist.appnames["Firefox" ] = "FIFOX" + self.widget.tasklist.appnames["Gnome-terminal" ] = "GTERM" + + + -- Floating widgets + -------------------------------------------------------------------------------- + self.float = { decoration = {} } + + -- Brightness control + ------------------------------------------------------------ + self.float.brightness = { + notify = {}, -- redflat notify style (see theme.float.notify) + } + + -- Client menu + ------------------------------------------------------------ + self.float.clientmenu = { + actionline = { height = 28 }, -- height of menu item with action icons + action_iconsize = { width = 18, height = 18 }, -- size for action icons + stateline = { height = 30 }, -- height of menu item with state icons + + -- redflat separator style(see theme.gauge.separator) + separator = { marginh = { 3, 3, 5, 5 }, marginv = { 3, 3, 3, 3 } }, + + -- same elements as for task list menu + icon = self.widget.tasklist.winmenu.icon, + micon = self.widget.tasklist.winmenu.micon, + layout_icon = self.widget.layoutbox.icon, + menu = self.widget.tasklist.winmenu.menu, + state_iconsize = self.widget.tasklist.winmenu.state_iconsize, + tagmenu = self.widget.tasklist.winmenu.tagmenu, + hide_action = self.widget.tasklist.winmenu.hide_action, + color = self.color, + } + + -- Audio player + ------------------------------------------------------------ + self.float.player = { + geometry = { width = 490, height = 130 }, -- widget size + screen_gap = 2 * self.useless_gap, -- minimal space from screen edge on floating widget placement + border_margin = { 15, 15, 15, 15 }, -- margins around widget content + elements_margin = { 15, 0, 0, 0 }, -- margins around main player elements (exclude cover art) + controls_margin = { 0, 0, 14, 6 }, -- margins around control player elements + volume_margin = { 0, 0, 0, 3 }, -- margins around volume element + buttons_margin = { 0, 0, 3, 3 }, -- margins around buttons area + pause_margin = { 12, 12, 0, 0 }, -- margins around pause button + line_height = 26, -- text lines height + bar_width = 6, -- progressbar width + volume_width = 50, -- volume element width + titlefont = self.fonts.player.main, -- track font + artistfont = self.fonts.player.main, -- artist/album font + timefont = self.fonts.player.time, -- track progress time font + border_width = 0, -- widget border width + timeout = 1, -- widget update timeout + set_position = nil, -- set_position + shape = nil, -- wibox shape + color = self.color, -- color (main used) + + -- volume dash style (see theme.gauge.graph.dash) + dashcontrol = { color = self.color, bar = { num = 7 } }, + + -- progressbar style (see theme.gauge.graph.bar) + progressbar = { color = self.color }, + } + + -- widget icons + self.float.player.icon = { + cover = self.base .. "/player/cover.svg", + next_tr = self.base .. "/player/next.svg", + prev_tr = self.base .. "/player/previous.svg", + play = self.base .. "/player/play.svg", + pause = self.base .. "/player/pause.svg" + } + + -- Top processes + ------------------------------------------------------------ + self.float.top = { + geometry = { width = 460, height = 400 }, -- widget size + screen_gap = 2 * self.useless_gap, -- minimal space from screen edge on floating widget placement + border_margin = { 20, 20, 10, 0 }, -- margins around widget content + button_margin = { 140, 140, 18, 18 }, -- margins around kill button + title_height = 40, -- widget title height + border_width = 0, -- widget border width + bottom_height = 70, -- kill button area height + list_side_gap = 8, -- left/rigth borger margin for processes list + title_font = self.fonts.title, -- widget title font + timeout = 2, -- widget update timeout + shape = nil, -- wibox shape + color = self.color, -- color (main used) + + -- list columns width + labels_width = { num = 30, cpu = 70, mem = 120 }, + + -- redflat key tip settings + keytip = { geometry = { width = 400 } }, + + -- placement function + set_position = nil, + } + + -- Application runner + ------------------------------------------------------------ + self.float.apprunner = { + itemnum = 6, -- number of visible items + geometry = { width = 620, height = 480 }, -- widget size + border_margin = { 24, 24, 24, 24 }, -- margin around widget content + icon_margin = { 8, 16, 0, 0 }, -- margins around widget icon + title_height = 48, -- height of title (promt and icon) area + prompt_height = 35, -- prompt line height + title_icon = self.icon.system, -- widget icon + border_width = 0, -- widget border width + parser = {}, -- desktop file parser settings (see theme.service.dfparser) + field = nil, -- redflat text field style(see theme.float.decoration.field) + shape = nil, -- wibox shape + color = self.color, -- colors (main used) + + name_font = self.fonts.title, -- application title font + comment_font = self.fonts.main, -- application comment font + list_text_vgap = 4, -- space between application title and comment + list_icon_margin = { 6, 12, 6, 6 }, -- margins around applications icons + dimage = self.icon.unknown, -- fallback icon for applications + + keytip = { geometry = { width = 400 } }, -- redflat key tip settings + } + + -- Application swit`cher + ------------------------------------------------------------ + self.float.appswitcher = { + wibox_height = 240, -- widget height + label_height = 28, -- height of the area with application mark(key) + title_height = 40, -- height of widget title line (application name and tag name) + icon_size = 96, -- size of the application icon in preview area + preview_gap = 20, -- gap between preview areas + shape = nil, -- wibox shape + + -- desktop file parser settings (see theme.service.dfparser) + parser = { + desktop_file_dirs = awful.util.table.join( + self.service.dfparser.desktop_file_dirs, + { '~/.local/share/applications-fake' } + ) + }, + + border_margin = { 10, 10, 0, 10 }, -- margins around widget content + preview_margin = { 15, 15, 15, 15 }, -- margins around application preview + preview_format = 16 / 10, -- preview acpect ratio + title_font = self.fonts.title, -- font of widget title line + border_width = 0, -- widget border width + update_timeout = 1 / 12, -- application preview update timeout + min_icon_number = 4, -- this one will define the minimal widget width + -- (widget will not shrink if number of apps items less then this) + color = self.color, -- colors (main used) + font = self.cairo_fonts.appswitcher, -- font of application mark(key) + + -- redflat key tip settings + keytip = { geometry = { width = 400 }, exit = true }, + } + + -- additional color + self.float.appswitcher.color.preview_bg = self.color.main .. "12" + + -- application marks(keys) list + self.float.appswitcher.hotkeys = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", + "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12" } + + -- Quick launcher + ------------------------------------------------------------ + self.float.qlaunch = { + geometry = { width = 1400, height = 170 }, -- widget size + + border_width = 0, -- widget border width + border_margin = { 5, 5, 12, 15 }, -- margins around widget content + notify = {}, -- redflat notify style (see theme.float.notify) + shape = nil, -- wibox shape + recoloring = false, -- apply redflat recoloring feature on application icons + label_font = self.fonts.qlaunch, -- font of application mark(key) + color = self.color, -- colors (main used) + df_icon = self.icon.system, -- fallback application icon + no_icon = self.icon.unknown, -- icon for unused application slot + + -- desktop file parser settings (see theme.service.dfparser) + parser = { + desktop_file_dirs = awful.util.table.join( + self.service.dfparser.desktop_file_dirs, + { '~/.local/share/applications-fake' } + ) + }, + + appline = { + iwidth = 140, -- application item width + im = { 5, 5, 0, 0 }, -- margins around application item area + igap = { 0, 0, 5, 15 }, -- margins around application icon itself (will affect icon size) + lheight = 26 -- height of application mark(key) area + }, + state = { + gap = 5, -- space between application state marks + radius = 5, -- application state mark radius + size = 10, -- application state mark size + height = 14 -- height of application state marks area + }, + + -- redflat key tip settings + keytip = { geometry = { width = 600 } }, + + -- file to store widget data + -- this widget is rare one which need to keep settings between sessions + configfile = os.getenv("HOME") .. "/.cache/awesome/applist", + } + + -- Hotkeys helper + ------------------------------------------------------------ + self.float.hotkeys = { + geometry = { width = 1400 }, -- widget size + border_margin = { 20, 20, 8, 10 }, -- margins around widget content + border_width = 0, -- widget border width + delim = " ", -- text separator between key and description + tspace = 5, -- space between lines in widget title + is_align = true, -- align keys description (monospace font required) + separator = { marginh = { 0, 0, 3, 6 } }, -- redflat separator style (see theme.gauge.separator) + font = self.fonts.hotkeys.main, -- keys description font + keyfont = self.fonts.hotkeys.key, -- keys font + titlefont = self.fonts.hotkeys.title, -- widget title font + shape = nil, -- wibox shape + color = self.color, -- colors (main used) + + -- manual setup for expected text line heights + -- used for auto adjust widget height + heights = { + key = 20, -- hotkey tip line height + title = 22 -- group title height + }, + } + + -- Titlebar helper + ------------------------------------------------------------ + self.float.bartip = { + geometry = { width = 260, height = 40 }, -- widget size + border_margin = { 10, 10, 10, 10 }, -- margins around widget content + border_width = 0, -- widget border widthj + font = self.fonts.title, -- widget font + set_position = nil, -- placement function + shape = nil, -- wibox shape + names = { "Mini", "Plain", "Full" }, -- titlebar layout names + color = self.color, -- colors (main used) + + -- margin around widget elements + margin = { icon = { title = { 10, 10, 8, 8 }, state = { 10, 10, 8, 8 } } }, + + -- widget icons + icon = { + title = self.base .. "/titlebar/title.svg", + active = self.base .. "/titlebar/active.svg", + hidden = self.base .. "/titlebar/hidden.svg", + disabled = self.base .. "/titlebar/disabled.svg", + absent = self.base .. "/titlebar/absent.svg", + unknown = self.icon.unknown, + }, + + -- redflat key tip settings + keytip = { geometry = { width = 540 } }, + } + + -- Floating window control helper + ------------------------------------------------------------ + self.float.control = { + geometry = { width = 260, height = 48 }, -- widget size + border_margin = { 10, 10, 10, 10 }, -- margins around widget content + border_width = 0, -- widget border widthj + font = self.fonts.title, -- widget font + steps = { 1, 10, 25, 50, 200 }, -- move/resize step + default_step = 3, -- select default step by index + onscreen = true, -- no off screen for window placement + set_position = nil, -- widget placement function + shape = nil, -- wibox shape + color = self.color, -- colors (main used) + + -- margin around widget elements + margin = { icon = { onscreen = { 10, 10, 8, 8 }, mode = { 10, 10, 8, 8 } } }, + + -- widget icons + icon = { + onscreen = self.icon.system, + resize = {}, + }, + + -- redflat key tip settings + keytip = { geometry = { width = 540 } }, + } + + -- Key sequence tip + ------------------------------------------------------------ + self.float.keychain = { + geometry = { width = 250, height = 56 }, -- default widget size + font = self.fonts.keychain, -- widget font + border_width = 2, -- widget border width + shape = nil, -- wibox shape + color = self.color, -- colors (main used) + + -- redflat key tip settings + keytip = { geometry = { width = 600 }, column = 1 }, + } + + -- Tooltip + ------------------------------------------------------------ + self.float.tooltip = { + timeout = 0, -- show delay + shape = nil, -- wibox shapea + font = self.fonts.tooltip, -- widget font + border_width = 2, -- widget border width + set_position = nil, -- function to setup tooltip position when shown + color = self.color, -- colors (main used) + + -- padding around widget content + padding = { vertical = 3, horizontal = 6 }, + } + + -- Floating prompt + ------------------------------------------------------------ + self.float.prompt = { + geometry = { width = 620, height = 120 }, -- widget size + border_width = 0, -- widget border width + margin = { 20, 20, 40, 40 }, -- margins around widget content + field = nil, -- redflat text field style (see theme.float.decoration.field) + shape = nil, -- wibox shape + naughty = {}, -- awesome notification style + color = self.color, -- colors (main used) + } + + -- Notify (redflat notification widget) + ------------------------------------------------------------ + self.float.notify = { + geometry = { width = 484, height = 106 }, -- widget size + screen_gap = 2 * self.useless_gap, -- screen edges gap on placement + border_margin = { 20, 20, 20, 20 }, -- margins around widget content + elements_margin = { 20, 0, 10, 10 }, -- margins around main elements (text and bar) + font = self.fonts.notify, -- widget font + icon = self.icon.warning, -- default widget icon + border_width = 0, -- widget border width + timeout = 5, -- hide timeout + shape = nil, -- wibox shape + color = self.color, -- colors (main used) + + -- progressbar is optional element used for some notifications + bar_width = 8, -- progressbar width + progressbar = {}, -- redflat progressbar style (see theme.gauge.graph.bar) + + -- placement function + set_position = function(wibox) + wibox:geometry({ x = mouse.screen.workarea.x + mouse.screen.workarea.width, y = mouse.screen.workarea.y }) + end, + } + + -- Decoration (various elements that used as component for other widgets) style + -------------------------------------------------------------------------------- + self.float.decoration.button = { + color = self.color -- colors (secondary used) + } + + self.float.decoration.field = { + color = self.color -- colors (secondary used) + } + + + -- Titlebar + -------------------------------------------------------------------------------- + self.titlebar = {} + + self.titlebar.base = { + position = "top", -- titlebar position + font = self.fonts.titlebar, -- titlebar font + border_margin = { 0, 0, 0, 4 }, -- margins around titlebar active area + color = self.color, -- colors (main used) + } + + -- application state marks settings + self.titlebar.mark = { + color = self.color, -- colors (main used) + } + + -- application control icon settings + self.titlebar.icon = { + color = self.color, -- colors (main used) + + -- icons list + list = { + focus = self.base .. "/titlebar/focus.svg", + floating = self.base .. "/titlebar/floating.svg", + ontop = self.base .. "/titlebar/ontop.svg", + below = self.base .. "/titlebar/below.svg", + sticky = self.base .. "/titlebar/pin.svg", + maximized = self.base .. "/titlebar/maximized.svg", + minimized = self.base .. "/titlebar/minimize.svg", + close = self.base .. "/titlebar/close.svg", + menu = self.base .. "/titlebar/menu.svg", + + unknown = self.icon.unknown, -- this one used as fallback + } + } + + -- Desktop config + -------------------------------------------------------------------------------- + self.desktop = { common = { bar = {}, pack = {} }, speedmeter = {} } + + self.desktop.line_height = 18 -- text and progressbar height for desktop wodgets + + -- desktop widget colors + self.desktop.color = { + main = self.color.main, + gray = self.color.desktop_gray, + icon = self.color.desktop_icon, + urgent = self.color.urgent, + wibox = self.color.bg .. "00" + } + + -- Common (various elem, 0.20, 0.25ents that used as component for desktop widgets) + -------------------------------------------------------------------------------- + + -- Textbox + ------------------------------------------------------------ + self.desktop.common.textbox = { + width = nil, -- widget width + height = nil, -- widget height + draw = "by_left", -- align method ("by_left", "by_right", "by_edges", "by_width") + color = self.desktop.color.gray, -- text color + + -- font style + font = self.cairo_fonts.desktop.textbox, + } + + -- Dashed progressbar + ------------------------------------------------------------ + self.desktop.common.bar.plain = { + width = nil, -- widget width + height = nil, -- widget height + autoscale = false, -- normalize progressbar value + maxm = 1, -- the maximum allowed value + + -- color (desktop used) + color = self.desktop.color, + + -- progressbar settings + chunk = { + width = 6, -- bar width + gap = 6 -- space between bars + } + } + + -- Time chart + ------------------------------------------------------------ + self.desktop.common.chart = { + width = nil, -- widget width + height = nil, -- widget height + autoscale = true, -- normalize chart values + maxm = 1, -- the maximum allowed value + zero_height = 4, -- height for zero value point in chart + color = self.desktop.color.gray, -- chart bars color + + -- chart bars settings + bar = { + width = 5, -- bar width + gap = 5 -- space between bars + } + } + + + -- Custom shaped vertical progressbar + ------------------------------------------------------------ + self.desktop.common.bar.shaped = { + width = nil, -- widget width + height = nil, -- widget height + autoscale = true, -- normalize chart values + maxm = 1, -- the maximum allowed value + shape = "corner", -- progressbar chunk shape + show = { tooltip = false }, -- show tooltip + color = self.desktop.color, -- color (desktop used) + + -- element style + chunk = { + num = 10, -- number of elements + line = 5, -- element line width + height = 10 -- element height + }, + + -- tooltip style + tooltip = {}, + } + + -- Lines (group of progressbars with label in front and text value after it) + ------------------------------------------------------------ + self.desktop.common.pack.lines = { + label = { width = 80, draw = "by_width" }, -- label style (see theme.desktop.common.textbox) + text = { width = 92, draw = "by_edges" }, -- value style (see theme.desktop.common.textbox) + progressbar = {}, -- progressbar style (see theme.desktop.common.bar.plain) + line = { height = self.desktop.line_height }, -- text/progressbar height + tooltip = {}, -- redflat tooltip style (see theme.float.tooltip) + color = self.desktop.color, -- color (desktop used) + + -- show/hide line elements + show = { text = true, label = true, tooltip = false }, + + -- space between label/text and progressbar + gap = { text = 22, label = 16 }, + } + + -- Widgets + -------------------------------------------------------------------------------- + + --Custom aligned text block + ------------------------------------------------------------ + self.desktop.textset = { + font = "Sans 12", -- font + spacing = 0, -- space between lines + color = self.desktop.color -- color (desktop used) + } + + -- Speed widget (double progressbar with time chart for each of it) + ------------------------------------------------------------ + self.desktop.speedmeter.normal = { + barvalue_height = 32, -- height of the area with progressbar and text + digits = 2, -- minimal number of digits for progressbar value + fullchart_height = 80, -- height of the each area with progressbar, text and chart + image_gap = 16, -- space between direction icon and progressbar/chart + color = self.desktop.color, -- color (desktop used) + + -- direction icons + images = { + self.icon.system, -- up + self.icon.system -- down + }, + + -- !!! WARNING some missed style settings for elemets below will be overwritten by widget + -- do not try to use full style settings from 'theme.desktop.commom' here + + -- time chart style (see theme.desktop.common.chart) + chart = { bar = { width = 6, gap = 3 }, height = 40, zero_height = 4 }, + + -- progressbar label and value (see theme.desktop.common.textbox) + label = { height = self.desktop.line_height }, + + -- progressbar style (see theme.desktop.common.bar.plain) + progressbar = { chunk = { width = 16, gap = 6 }, height = 6 }, + } + + self.desktop.speedmeter.compact = { + margins = { label = {}, chart = {} }, -- extra margins for some elements + height = { chart = 50 }, -- height of the each area with progressbar, text and chart + digits = 2, -- minimal number of digits for progressbar value + color = self.desktop.color, -- color (desktop used) + + -- direction icons + icon = { + up = self.icon.system, -- up + down = self.icon.system, -- down + margin = { 4, 4, 2, 2 }, -- margins around icon + }, + + -- !!! WARNING some style settings for elemets below will be overwritten by widget + chart = { zero_height = 0 }, -- time chart style (see theme.desktop.common.chart) + label = {}, -- progressbar value (see theme.desktop.common.textbox) + progressbar = {}, -- double progressbar style (see theme.desktop.common.bar.plain) + } + + -- Widget with multiple horizontal and vertical progress bars + ------------------------------------------------------------ + self.desktop.multimeter = { + digits = 3, -- minimal number of digits for horizontal progressbar values + color = self.desktop.color, -- color (desktop used) + labels = {}, -- list of optional labels for horizontal bars + + -- area height + height = { + upright = 80, -- vertical progressbars height + lines = 58, -- horizontal progressbar area height + }, + + -- widget icon + icon = { + image = self.icon.system, -- widget icon + margin = { 0, 16, 0, 0 }, -- margins around icon + full = false -- draw icon in full height of widget + }, + -- !!! WARNING some missed style settings for elemets below will be overwritten by widget + + -- vertical progressbars style (see theme.desktop.common.bar.shaped) + upbar = { width = 34, chunk = { height = 17, num = 10, line = 4 } }, + + -- horizontal progressbars style (see theme.desktop.common.pack.lines) + lines = {}, + } + + -- Widget with multiple progress bars + ------------------------------------------------------------ + self.desktop.multiline = { + digits = 3, -- minimal number of digits for progressbar value + margin = { 0, 0, 0, 0 }, -- margin around progressbar list + color = self.desktop.color, -- color (desktop used) + + -- widget icon settings + icon = { image = nil, margin = { 0, 0, 0, 0 } }, + + -- !!! WARNING some missed style settings for elemets below will be overwritten by widget + + -- progressbars style (see theme.desktop.common.pack.lines) + lines = { progressbar = {}, tooltip = {} }, + } + + -- Widget with several text groups in single line + -- every group has label and value and icon in the middle + ------------------------------------------------------------ + self.desktop.singleline = { + lbox = { draw = "by_width", width = 50 }, -- label style (see theme.desktop.common.textbox) + rbox = { draw = "by_edges", width = 60 }, -- value style (see theme.desktop.common.textbox) + digits = 2, -- minimal number of digits for value + icon = self.icon.system, -- group icon + iwidth = 142, -- width for every text group + color = self.desktop.color -- color (desktop used) + } + + -- Calendar widget with lined up marks + ------------------------------------------------------------ + self.desktop.calendar = { + show_pointer = true, -- show date under mouse + color = self.desktop.color, -- color (desktop used) + -- TODO: check for better font + -- today label style + label = { + gap = 8, -- space between label and pointer + sep = "-", -- day/month separator + font = { font = "Play", size = 16, face = 1, slant = 0 }, -- font + }, + + -- days marks style + mark = { + height = 12, -- mark height + width = 25, -- mark width + dx = 6, -- pointer arrow width + line = 2, -- stroke line width for next month marks + }, + } + + -- Individual styles for certain widgets + -------------------------------------------------------------------------------- + self.individual = { desktop = {} } + + -- Default awesome theme vars + -------------------------------------------------------------------------------- + + -- colors + self.bg_normal = self.color.wibox + self.bg_focus = self.color.main + self.bg_urgent = self.color.urgent + self.bg_minimize = self.color.gray + + self.fg_normal = self.color.text + self.fg_focus = self.color.highlight + self.fg_urgent = self.color.highlight + self.fg_minimize = self.color.highlight + + self.border_normal = self.color.wibox + self.border_focus = self.color.wibox + self.border_marked = self.color.main + + -- font + self.font = self.fonts.main + + -- standart awesome notification widget + self.naughty = {} + + self.naughty.base = { + timeout = 10, + margin = 12, + icon_size = 80, + font = self.fonts.main, + bg = self.color.wibox, + fg = self.color.text, + + border_width = 4, + border_color = self.color.wibox + } + + self.naughty.normal = { + height = self.float.notify.geometry.height, + width = self.float.notify.geometry.width, + } + + self.naughty.low = { + timeout = 5, + height = self.float.notify.geometry.height, + width = self.float.notify.geometry.width, + } + + self.naughty.critical = { + timeout = 0, + border_color = self.color.main + } +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +theme:init() + +return theme diff --git a/awesome/.config/awesome/themes/colorless/titlebar/absent.svg b/awesome/.config/awesome/themes/colorless/titlebar/absent.svg new file mode 100644 index 0000000..8775f60 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/absent.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/active.svg b/awesome/.config/awesome/themes/colorless/titlebar/active.svg new file mode 100644 index 0000000..94e2201 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/active.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/below.svg b/awesome/.config/awesome/themes/colorless/titlebar/below.svg new file mode 100644 index 0000000..8ca14c0 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/below.svg @@ -0,0 +1,4 @@ + + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/close.svg b/awesome/.config/awesome/themes/colorless/titlebar/close.svg new file mode 100644 index 0000000..d3c16d2 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/close.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/disabled.svg b/awesome/.config/awesome/themes/colorless/titlebar/disabled.svg new file mode 100644 index 0000000..b749cf0 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/floating.svg b/awesome/.config/awesome/themes/colorless/titlebar/floating.svg new file mode 100644 index 0000000..d6b0d65 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/floating.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/focus.svg b/awesome/.config/awesome/themes/colorless/titlebar/focus.svg new file mode 100644 index 0000000..9831a7c --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/focus.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/hidden.svg b/awesome/.config/awesome/themes/colorless/titlebar/hidden.svg new file mode 100644 index 0000000..cfafd70 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/hidden.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/maximized.svg b/awesome/.config/awesome/themes/colorless/titlebar/maximized.svg new file mode 100644 index 0000000..8ff5e34 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/maximized.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/menu.svg b/awesome/.config/awesome/themes/colorless/titlebar/menu.svg new file mode 100644 index 0000000..6a712a0 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/menu.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/minimize.svg b/awesome/.config/awesome/themes/colorless/titlebar/minimize.svg new file mode 100644 index 0000000..b749cf0 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/minimize.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/ontop.svg b/awesome/.config/awesome/themes/colorless/titlebar/ontop.svg new file mode 100644 index 0000000..d39e016 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/ontop.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/pin.svg b/awesome/.config/awesome/themes/colorless/titlebar/pin.svg new file mode 100644 index 0000000..da5b938 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/pin.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/titlebar/title.svg b/awesome/.config/awesome/themes/colorless/titlebar/title.svg new file mode 100644 index 0000000..707c683 --- /dev/null +++ b/awesome/.config/awesome/themes/colorless/titlebar/title.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/default/icons/audio.svg b/awesome/.config/awesome/themes/default/icons/audio.svg new file mode 100644 index 0000000..ab3fd84 --- /dev/null +++ b/awesome/.config/awesome/themes/default/icons/audio.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/default/layouts/cornerne.svg b/awesome/.config/awesome/themes/default/layouts/cornerne.svg new file mode 100644 index 0000000..d09d526 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/cornerne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/cornernw.svg b/awesome/.config/awesome/themes/default/layouts/cornernw.svg new file mode 100644 index 0000000..a2b9152 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/cornernw.svg @@ -0,0 +1,4 @@ + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/cornerse.svg b/awesome/.config/awesome/themes/default/layouts/cornerse.svg new file mode 100644 index 0000000..8c985a3 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/cornerse.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/cornersw.svg b/awesome/.config/awesome/themes/default/layouts/cornersw.svg new file mode 100644 index 0000000..2d299c7 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/cornersw.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/fair.svg b/awesome/.config/awesome/themes/default/layouts/fair.svg new file mode 100644 index 0000000..dc79076 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/fair.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/floating.svg b/awesome/.config/awesome/themes/default/layouts/floating.svg new file mode 100644 index 0000000..d6b0d65 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/floating.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/default/layouts/fullscreen.svg b/awesome/.config/awesome/themes/default/layouts/fullscreen.svg new file mode 100644 index 0000000..573a267 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/fullscreen.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/grid.svg b/awesome/.config/awesome/themes/default/layouts/grid.svg new file mode 100644 index 0000000..e5593f6 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/grid.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/magnifier.svg b/awesome/.config/awesome/themes/default/layouts/magnifier.svg new file mode 100644 index 0000000..6160621 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/magnifier.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/map.svg b/awesome/.config/awesome/themes/default/layouts/map.svg new file mode 100644 index 0000000..651ce9c --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/map.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/default/layouts/max.svg b/awesome/.config/awesome/themes/default/layouts/max.svg new file mode 100644 index 0000000..8ff9b21 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/max.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/spiral.svg b/awesome/.config/awesome/themes/default/layouts/spiral.svg new file mode 100644 index 0000000..d9c1c07 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/spiral.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/tile.svg b/awesome/.config/awesome/themes/default/layouts/tile.svg new file mode 100644 index 0000000..2cc7262 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/tile.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/tilebottom.svg b/awesome/.config/awesome/themes/default/layouts/tilebottom.svg new file mode 100644 index 0000000..c31b69d --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/tilebottom.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/tileleft.svg b/awesome/.config/awesome/themes/default/layouts/tileleft.svg new file mode 100644 index 0000000..054c63f --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/tileleft.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/awesome/.config/awesome/themes/default/layouts/tiletop.svg b/awesome/.config/awesome/themes/default/layouts/tiletop.svg new file mode 100644 index 0000000..0520432 --- /dev/null +++ b/awesome/.config/awesome/themes/default/layouts/tiletop.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/awesome/.config/awesome/titlebar-config.lua b/awesome/.config/awesome/titlebar-config.lua new file mode 100644 index 0000000..c39d878 --- /dev/null +++ b/awesome/.config/awesome/titlebar-config.lua @@ -0,0 +1,150 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Titlebar config -- +----------------------------------------------------------------------------------------------------------------------- + +-- Grab environment +local awful = require("awful") +local wibox = require("wibox") +local beautiful = require("beautiful") + +-- local redflat = require("redflat") +local redtitle = require("redflat.titlebar") +local redutil = require("redflat.util") +local clientmenu = require("redflat.float.clientmenu") + +-- Initialize tables and vars for module +----------------------------------------------------------------------------------------------------------------------- +local titlebar = {} + +-- Support functions +----------------------------------------------------------------------------------------------------------------------- +local function title_buttons(c) + return awful.util.table.join( + awful.button( + { }, 1, + function() + client.focus = c; c:raise() + awful.mouse.client.move(c) + end + ), + awful.button( + { }, 3, + function() + client.focus = c; c:raise() + clientmenu:show(c) + end + ) + ) +end + +local function on_maximize(c) + -- hide/show title bar + local is_max = c.maximized_vertical or c.maximized + local action = is_max and "cut_all" or "restore_all" + redtitle[action]({ c }) + + -- dirty size correction + local model = redtitle.get_model(c) + if model and not model.hidden then + c.height = c:geometry().height + (is_max and model.size or -model.size) + if is_max then c.y = c.screen.workarea.y end + end +end + +-- Connect titlebar building signal +----------------------------------------------------------------------------------------------------------------------- +function titlebar:init() + + local style = {} + + -- titlebar schemes + style.base = redutil.table.merge(redutil.table.check(beautiful, "titlebar.base") or {}, { size = 8 }) + style.iconic = redutil.table.merge(style.base, { size = 24 }) + + -- titlebar elements styles + style.mark_mini = redutil.table.merge( + redutil.table.check(beautiful, "titlebar.mark") or {}, + { size = 30, gap = 10, angle = 0 } + ) + style.icon = redutil.table.merge( + redutil.table.check(beautiful, "titlebar.icon") or {}, + { gap = 10 } + ) + + -- titlebar setup for clients + client.connect_signal( + "request::titlebars", + function(c) + -- build titlebar and mouse buttons for it + local buttons = title_buttons(c) + redtitle(c, style.base) + + -- build mini titlebar model + local base = wibox.widget({ + nil, + { + right = style.mark_mini.gap, + redtitle.mark.focus(c, style.mark_mini), + layout = wibox.container.margin, + }, + { + redtitle.mark.property(c, "floating", style.mark_mini), + redtitle.mark.property(c, "sticky", style.mark_mini), + redtitle.mark.property(c, "ontop", style.mark_mini), + spacing = style.mark_mini.gap, + layout = wibox.layout.fixed.horizontal() + }, + buttons = buttons, + layout = wibox.layout.align.horizontal, + }) + + -- build titlebar model with control buttons + local title = redtitle.label(c, style.iconic, true) + title:buttons(buttons) + + local iconic = wibox.widget({ + { + { + redtitle.button.focus(c, style.icon), + redtitle.button.property(c, "ontop", style.icon), + redtitle.button.property(c, "below", style.icon), + spacing = style.icon.gap, + layout = wibox.layout.fixed.horizontal() + }, + top = 1, bottom = 1, left = 4, right = style.icon.gap + 2 * 18, + widget = wibox.container.margin + }, + title, + { + { + redtitle.button.property(c, "floating", style.icon), + redtitle.button.property(c, "sticky", style.icon), + redtitle.button.property(c, "minimized", style.icon), + redtitle.button.property(c, "maximized", style.icon), + redtitle.button.close(c, style.icon), + spacing = style.icon.gap, + layout = wibox.layout.fixed.horizontal() + }, + top = 1, bottom = 1, right = 4, + widget = wibox.container.margin + }, + layout = wibox.layout.align.horizontal, + }) + + -- Set both models to titlebar + redtitle.add_layout(c, nil, base, style.base.size) + redtitle.add_layout(c, nil, iconic, style.iconic.size) + redtitle.switch(c, nil, redtitle._index) + + -- hide titlebar when window maximized + if c.maximized_vertical or c.maximized then on_maximize(c) end + + c:connect_signal("property::maximized_vertical", on_maximize) + c:connect_signal("property::maximized", on_maximize) + end + ) +end + +-- End +----------------------------------------------------------------------------------------------------------------------- +return titlebar From 8800c9f3e3298c0d515b734d8fb9d2e1805362f5 Mon Sep 17 00:00:00 2001 From: vincent Date: Sun, 20 Oct 2019 17:51:59 +0200 Subject: [PATCH 4/5] finalyse awesome adaptation --- awesome/.config/awesome/alias-config.lua | 32 ++ awesome/.config/awesome/env-config.lua | 2 +- awesome/.config/awesome/key.old | 230 ++++++++ awesome/.config/awesome/keys-config.lua | 135 ++--- awesome/.config/awesome/layout-config.lua | 2 +- awesome/.config/awesome/rc.lua | 532 ++++++------------ .../.config/awesome/redflat/float/player.lua | 1 - awesome/.config/awesome/redflat/system.lua | 11 +- .../awesome/redflat/widget/battery.lua | 1 - .../awesome/redflat/widget/minitray.lua | 2 +- awesome/.config/awesome/revelation/LICENSE | 165 ------ awesome/.config/awesome/revelation/README.md | 169 ------ awesome/.config/awesome/revelation/init.lua | 508 ----------------- .../.config/awesome/revelation/screenshot.png | Bin 1051437 -> 0 bytes .../.config/awesome/themes/colored/theme.lua | 228 ++++++++ .../awesome/themes/colored/widget/audio.svg | 8 + .../awesome/themes/colored/widget/battery.svg | 3 + .../themes/colored/widget/brightness.svg | 3 + .../awesome/themes/colored/widget/down.svg | 8 + .../themes/colored/widget/headphones.svg | 3 + .../themes/colored/widget/keyboard.svg | 3 + .../awesome/themes/colored/widget/mail.svg | 8 + .../awesome/themes/colored/widget/monitor.svg | 3 + .../awesome/themes/colored/widget/mute.svg | 6 + .../themes/colored/widget/onscreen.svg | 3 + .../awesome/themes/colored/widget/package.svg | 3 + .../themes/colored/widget/resize/full.svg | 3 + .../colored/widget/resize/horizontal.svg | 3 + .../themes/colored/widget/resize/vertical.svg | 3 + .../awesome/themes/colored/widget/search.svg | 3 + .../awesome/themes/colored/widget/up.svg | 8 + .../themes/colored/widget/updates/daily.svg | 3 + .../themes/colored/widget/updates/normal.svg | 3 + .../themes/colored/widget/updates/silent.svg | 3 + .../themes/colored/widget/updates/weekly.svg | 3 + .../themes/colored/widget/wireless.svg | 3 + .../awesome/themes/colorless/theme.lua | 4 +- .../themes/default/layouts/cornerne.png | Bin 451 -> 0 bytes .../themes/default/layouts/cornerne.svg | 6 - .../themes/default/layouts/cornernew.png | Bin 409 -> 0 bytes .../themes/default/layouts/cornernw.png | Bin 439 -> 0 bytes .../themes/default/layouts/cornernw.svg | 4 - .../themes/default/layouts/cornernww.png | Bin 381 -> 0 bytes .../themes/default/layouts/cornerse.png | Bin 424 -> 0 bytes .../themes/default/layouts/cornerse.svg | 6 - .../themes/default/layouts/cornersew.png | Bin 411 -> 0 bytes .../themes/default/layouts/cornersw.png | Bin 424 -> 0 bytes .../themes/default/layouts/cornersw.svg | 6 - .../themes/default/layouts/cornersww.png | Bin 423 -> 0 bytes .../themes/default/layouts/dwindle.png | Bin 425 -> 0 bytes .../themes/default/layouts/dwindlew.png | Bin 444 -> 0 bytes .../awesome/themes/default/layouts/fair.svg | 8 - .../awesome/themes/default/layouts/fairh.png | Bin 312 -> 0 bytes .../awesome/themes/default/layouts/fairhw.png | Bin 314 -> 0 bytes .../awesome/themes/default/layouts/fairv.png | Bin 323 -> 0 bytes .../awesome/themes/default/layouts/fairvw.png | Bin 323 -> 0 bytes .../themes/default/layouts/floating.png | Bin 361 -> 0 bytes .../themes/default/layouts/floating.svg | 3 - .../themes/default/layouts/floatingw.png | Bin 365 -> 0 bytes .../themes/default/layouts/fullscreen.png | Bin 866 -> 0 bytes .../themes/default/layouts/fullscreen.svg | 6 - .../themes/default/layouts/fullscreenw.png | Bin 865 -> 0 bytes .../awesome/themes/default/layouts/grid.svg | 10 - .../themes/default/layouts/magnifier.png | Bin 496 -> 0 bytes .../themes/default/layouts/magnifier.svg | 9 - .../themes/default/layouts/magnifierw.png | Bin 496 -> 0 bytes .../awesome/themes/default/layouts/map.svg | 3 - .../awesome/themes/default/layouts/max.png | Bin 574 -> 0 bytes .../awesome/themes/default/layouts/max.svg | 8 - .../awesome/themes/default/layouts/maxw.png | Bin 581 -> 0 bytes .../awesome/themes/default/layouts/spiral.png | Bin 427 -> 0 bytes .../awesome/themes/default/layouts/spiral.svg | 10 - .../themes/default/layouts/spiralw.png | Bin 442 -> 0 bytes .../awesome/themes/default/layouts/tile.png | Bin 353 -> 0 bytes .../awesome/themes/default/layouts/tile.svg | 7 - .../themes/default/layouts/tilebottom.png | Bin 340 -> 0 bytes .../themes/default/layouts/tilebottom.svg | 7 - .../themes/default/layouts/tilebottomw.png | Bin 350 -> 0 bytes .../themes/default/layouts/tileleft.png | Bin 363 -> 0 bytes .../themes/default/layouts/tileleft.svg | 7 - .../themes/default/layouts/tileleftw.png | Bin 367 -> 0 bytes .../themes/default/layouts/tiletop.png | Bin 326 -> 0 bytes .../themes/default/layouts/tiletop.svg | 7 - .../themes/default/layouts/tiletopw.png | Bin 342 -> 0 bytes .../awesome/themes/default/layouts/tilew.png | Bin 357 -> 0 bytes .../.config/awesome/themes/default/theme.lua | 141 +---- .../themes/default/titlebar/close_focus.png | Bin 1374 -> 0 bytes .../themes/default/titlebar/close_normal.png | Bin 1419 -> 0 bytes .../titlebar/floating_focus_active.png | Bin 491 -> 0 bytes .../titlebar/floating_focus_inactive.png | Bin 350 -> 0 bytes .../titlebar/floating_normal_active.png | Bin 492 -> 0 bytes .../titlebar/floating_normal_inactive.png | Bin 350 -> 0 bytes .../titlebar/maximized_focus_active.png | Bin 696 -> 0 bytes .../titlebar/maximized_focus_inactive.png | Bin 719 -> 0 bytes .../titlebar/maximized_normal_active.png | Bin 693 -> 0 bytes .../titlebar/maximized_normal_inactive.png | Bin 695 -> 0 bytes .../default/titlebar/minimize_focus.png | Bin 277 -> 0 bytes .../default/titlebar/minimize_normal.png | Bin 272 -> 0 bytes .../default/titlebar/ontop_focus_active.png | Bin 609 -> 0 bytes .../default/titlebar/ontop_focus_inactive.png | Bin 756 -> 0 bytes .../default/titlebar/ontop_normal_active.png | Bin 619 -> 0 bytes .../titlebar/ontop_normal_inactive.png | Bin 769 -> 0 bytes .../default/titlebar/sticky_focus_active.png | Bin 717 -> 0 bytes .../titlebar/sticky_focus_inactive.png | Bin 937 -> 0 bytes .../default/titlebar/sticky_normal_active.png | Bin 726 -> 0 bytes .../titlebar/sticky_normal_inactive.png | Bin 981 -> 0 bytes awesome/.config/awesome/titlebar-config.lua | 3 +- 107 files changed, 838 insertions(+), 1521 deletions(-) create mode 100644 awesome/.config/awesome/alias-config.lua create mode 100644 awesome/.config/awesome/key.old delete mode 100644 awesome/.config/awesome/revelation/LICENSE delete mode 100644 awesome/.config/awesome/revelation/README.md delete mode 100644 awesome/.config/awesome/revelation/init.lua delete mode 100644 awesome/.config/awesome/revelation/screenshot.png create mode 100644 awesome/.config/awesome/themes/colored/theme.lua create mode 100644 awesome/.config/awesome/themes/colored/widget/audio.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/battery.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/brightness.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/down.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/headphones.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/keyboard.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/mail.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/monitor.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/mute.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/onscreen.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/package.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/resize/full.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/resize/horizontal.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/resize/vertical.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/search.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/up.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/updates/daily.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/updates/normal.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/updates/silent.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/updates/weekly.svg create mode 100644 awesome/.config/awesome/themes/colored/widget/wireless.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornerne.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornerne.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornernew.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornernw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornernw.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornernww.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornerse.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornerse.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornersew.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornersw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornersw.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/cornersww.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/dwindle.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/dwindlew.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/fair.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/fairh.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/fairhw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/fairv.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/fairvw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/floating.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/floating.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/floatingw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/fullscreen.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/fullscreen.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/fullscreenw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/grid.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/magnifier.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/magnifier.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/magnifierw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/map.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/max.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/max.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/maxw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/spiral.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/spiral.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/spiralw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/tile.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/tile.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/tilebottom.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/tilebottom.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/tilebottomw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/tileleft.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/tileleft.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/tileleftw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/tiletop.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/tiletop.svg delete mode 100644 awesome/.config/awesome/themes/default/layouts/tiletopw.png delete mode 100644 awesome/.config/awesome/themes/default/layouts/tilew.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/close_focus.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/close_normal.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/floating_focus_active.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/floating_focus_inactive.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/floating_normal_active.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/floating_normal_inactive.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/maximized_focus_active.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/maximized_focus_inactive.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/maximized_normal_active.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/maximized_normal_inactive.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/minimize_focus.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/minimize_normal.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/ontop_focus_active.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/ontop_focus_inactive.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/ontop_normal_active.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/ontop_normal_inactive.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/sticky_focus_active.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/sticky_focus_inactive.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/sticky_normal_active.png delete mode 100644 awesome/.config/awesome/themes/default/titlebar/sticky_normal_inactive.png diff --git a/awesome/.config/awesome/alias-config.lua b/awesome/.config/awesome/alias-config.lua new file mode 100644 index 0000000..4f9e8ce --- /dev/null +++ b/awesome/.config/awesome/alias-config.lua @@ -0,0 +1,32 @@ +----------------------------------------------------------------------------------------------------------------------- +-- Application aliases for tasklist widget -- +----------------------------------------------------------------------------------------------------------------------- + +local appnames = {} + +appnames["Exaile" ] = "EXAILE" +appnames["Pragha" ] = "PRAG" +appnames["Smplayer" ] = "SMPL" +appnames["Firefox" ] = "FIFOX" +appnames["Gnome-terminal" ] = "GTERM" +appnames["Gnome-system-monitor"] = "SYSMN" +appnames["Gthumb" ] = "THUMB" +appnames["Gimp-2.8" ] = "GIMP" +appnames["Gimp-2.10" ] = "GIMP" +appnames["Goldendict" ] = "GDIC" +appnames["Easytag" ] = "ETAG" +appnames["Mcomix" ] = "COMIX" +appnames["Claws-mail" ] = "CMAIL" +appnames["Evolution" ] = "EVOM" +appnames["URxvt" ] = "RXVT" +appnames["VirtualBox" ] = "VBOX" +appnames["Keepassx" ] = "KPASS" +appnames["keepassxc" ] = "KPASS" +appnames["Evince" ] = "EVINCE" +appnames["Thunderbird" ] = "TBIRD" +appnames["jetbrains-pycharm-ce"] = "PYCRM" +appnames["jetbrains-clion" ] = "CLION" +appnames["Qemu-system-x86_64" ] = "QEMU" + +return appnames + diff --git a/awesome/.config/awesome/env-config.lua b/awesome/.config/awesome/env-config.lua index acc792e..8903d66 100644 --- a/awesome/.config/awesome/env-config.lua +++ b/awesome/.config/awesome/env-config.lua @@ -31,7 +31,7 @@ function env:init(args) self.mod = args.mod or "Mod4" self.fm = args.fm or "nemo" self.mail = args.mail or "thunderbird" - self.player = args.player or self.terminal .. "-e ncmpcpp" + self.player = args.player or "mpd" self.updates = args.updates or "bash -c 'pacman -Qu | grep -v ignored | wc -l'" self.home = os.getenv("HOME") self.themedir = awful.util.get_configuration_dir() .. "themes/default" diff --git a/awesome/.config/awesome/key.old b/awesome/.config/awesome/key.old new file mode 100644 index 0000000..83879d0 --- /dev/null +++ b/awesome/.config/awesome/key.old @@ -0,0 +1,230 @@ +-- {{{ Key bindings +globalkeys = gears.table.join( + awful.key({ env.mod }, "b", function () + mouse.screen.mywibox.visible = not mouse.screen.mywibox.visible + end,{description="togle wibox",group="awesome"}), + awful.key({ env.mod, }, "s", hotkeys_popup.show_help, + {description="show help", group="awesome"}), + awful.key({ env.mod, }, "e", revelation, + {description="revelation shortcut",group="awesome"}), + awful.key({ env.mod, }, "Left", awful.tag.viewprev, + {description = "view previous", group = "tag"}), + awful.key({ env.mod, }, "Right", awful.tag.viewnext, + {description = "view next", group = "tag"}), + awful.key({ env.mod, }, "Escape", awful.tag.history.restore, + {description = "go back", group = "tag"}), + awful.key({ "Shift" }, "Alt_L", function() mykeyboardlayout.next_layout(); end), + awful.key({ env.mod, }, "j", + function () + awful.client.focus.byidx( 1) + end, + {description = "focus next by index", group = "client"} + ), + awful.key({ env.mod, }, "k", + function () + awful.client.focus.byidx(-1) + end, + {description = "focus previous by index", group = "client"} + ), + awful.key({env.mod,"Shift"},"o" , function() xrandr.xrandr() end, + {description = "xrandr shortcut", group = "awesome"}), + awful.key({ env.mod, }, "w", function () mainmenu.mainmenu:show() end, + {description = "show main menu", group = "awesome"}), + + -- Layout manipulation + awful.key({ env.mod, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, + {description = "swap with next client by index", group = "client"}), + awful.key({ env.mod, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, + {description = "swap with previous client by index", group = "client"}), + awful.key({ env.mod, "Control" }, "j", function () awful.screen.focus_relative( 1) end, + {description = "focus the next screen", group = "screen"}), + awful.key({ env.mod, "Control" }, "k", function () awful.screen.focus_relative(-1) end, + {description = "focus the previous screen", group = "screen"}), + awful.key({ env.mod, }, "u", awful.client.urgent.jumpto, + {description = "jump to urgent client", group = "client"}), + awful.key({ env.mod, }, "Tab", + function () + awful.client.focus.history.previous() + if client.focus then + client.focus:raise() + end + end, + {description = "go back", group = "client"}), + + -- Standard program + -- Dropdown application + awful.key({ env.mod, }, "Return", function () awful.spawn(terminal) end, + {description = "open a terminal", group = "launcher"}), + awful.key({ env.mod, "Control" }, "r", awesome.restart, + {description = "reload awesome", group = "awesome"}), + awful.key({ env.mod, "Shift" }, "q", awesome.quit, + {description = "quit awesome", group = "awesome"}), + + awful.key({ env.mod, }, "l", function () awful.tag.incmwfact( 0.05) end, + {description = "increase master width factor", group = "layout"}), + awful.key({ env.mod, }, "h", function () awful.tag.incmwfact(-0.05) end, + {description = "decrease master width factor", group = "layout"}), + awful.key({ env.mod, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end, + {description = "increase the number of master clients", group = "layout"}), + awful.key({ env.mod, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end, + {description = "decrease the number of master clients", group = "layout"}), + awful.key({ env.mod, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end, + {description = "increase the number of columns", group = "layout"}), + awful.key({ env.mod, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end, + {description = "decrease the number of columns", group = "layout"}), + awful.key({ env.mod, }, "space", function () awful.layout.inc( 1) end, + {description = "select next", group = "layout"}), + awful.key({ env.mod, "Shift" }, "space", function () awful.layout.inc(-1) end, + {description = "select previous", group = "layout"}), + + awful.key({ env.mod, "Control" }, "n", + function () + local c = awful.client.restore() + -- Focus restored client + if c then + client.focus = c + c:raise() + end + end, + {description = "restore minimized", group = "client"}), + + -- Prompt + awful.key({ env.mod }, "r", function () awful.screen.focused().mypromptbox:run() end, + {description = "run prompt", group = "launcher"}), + + awful.key({ env.mod }, "x", + function () + awful.prompt.run { + prompt = "Run Lua code: ", + textbox = awful.screen.focused().mypromptbox.widget, + exe_callback = awful.util.eval, + history_path = awful.util.get_cache_dir() .. "/history_eval" + } + end, + {description = "lua execute prompt", group = "awesome"}), + -- Menubar + awful.key({ env.mod }, "p", function() menubar.show() end, + {description = "show the menubar", group = "launcher"}), + awful.key({ },"XF86AudioRaiseVolume", function() awful.spawn("pamixer -i 5") end), + awful.key({ }, "XF86AudioLowerVolume", function () awful.spawn("pamixer -d 5") end), + --multimedia keys + awful.key({ }, "XF86MonBrightnessUp", function () awful.spawn("light -A 10") end), + awful.key({ }, "XF86MonBrightnessDown", function () awful.spawn("light -U 10") end), + awful.key({ }, "XF86AudioMute", function () awful.spawn("pamixer -t") end), + awful.key({ }, "XF86AudioPlay", function () awful.spawn("mpc toggle") end), + awful.key({ }, "XF86AudioStop", function () awful.spawn("mpc stop") end), + awful.key({ }, "XF86AudioNext", function () awful.spawn("mpc next") end), + awful.key({ }, "XF86AudioPrev", function () awful.spawn("mpc prev") end), + --application hotkeys (logitech keyboard g710+) + awful.key({ }, "XF86LaunchA", function () awful.spawn(terminal) end, + {description = "open a terminal", group = "launcher"}), + awful.key({ }, "XF86Launch9", function () awful.spawn("keepassxc") end, + {description = "open keepass", group = "launcher"}), + + awful.key({ }, "XF86Launch8", function () awful.spawn("firefox") end, + {description = "open a Firefox", group = "launcher"}), + + awful.key({ }, "XF86Launch7", function () awful.spawn("code") end, + {description = "open VScode", group = "launcher"}) +) + +clientkeys = gears.table.join( + awful.key({ env.mod, }, "f", + function (c) + c.fullscreen = not c.fullscreen + c:raise() + end, + {description = "toggle fullscreen", group = "client"}), + awful.key({ env.mod, "Shift" }, "c", function (c) c:kill() end, + {description = "close", group = "client"}), + awful.key({ env.mod, "Control" }, "space", awful.client.floating.toggle , + {description = "toggle floating", group = "client"}), + awful.key({ env.mod, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end, + {description = "move to master", group = "client"}), + awful.key({ env.mod, }, "o", function (c) c:move_to_screen() end, + {description = "move to screen", group = "client"}), + awful.key({ env.mod, }, "t", function (c) c.ontop = not c.ontop end, + {description = "toggle keep on top", group = "client"}), + awful.key({ env.mod, }, "n", + function (c) + -- The client currently has the input focus, so it cannot be + -- minimized, since minimized clients can't have the focus. + c.minimized = true + end , + {description = "minimize", group = "client"}), + awful.key({ env.mod, }, "m", + function (c) + c.maximized = not c.maximized + c:raise() + end , + {description = "(un)maximize", group = "client"}), + awful.key({ env.mod, "Control" }, "m", + function (c) + c.maximized_vertical = not c.maximized_vertical + c:raise() + end , + {description = "(un)maximize vertically", group = "client"}), + awful.key({ env.mod, "Shift" }, "m", + function (c) + c.maximized_horizontal = not c.maximized_horizontal + c:raise() + end , + {description = "(un)maximize horizontally", group = "client"}) +) + +-- Bind all key numbers to tags. +-- Be careful: we use keycodes to make it work on any keyboard layout. +-- This should map on the top row of your keyboard, usually 1 to 9. +for i = 1, 9 do + globalkeys = gears.table.join(globalkeys, + -- View tag only. + awful.key({ env.mod }, "#" .. i + 9, + function () + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + tag:view_only() + end + end, + {description = "view tag #"..i, group = "tag"}), + -- Toggle tag display. + awful.key({ env.mod, "Control" }, "#" .. i + 9, + function () + local screen = awful.screen.focused() + local tag = screen.tags[i] + if tag then + awful.tag.viewtoggle(tag) + end + end, + {description = "toggle tag #" .. i, group = "tag"}), + -- Move client to tag. + awful.key({ env.mod, "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:move_to_tag(tag) + end + end + end, + {description = "move focused client to tag #"..i, group = "tag"}), + -- Toggle tag on focused client. + awful.key({ env.mod, "Control", "Shift" }, "#" .. i + 9, + function () + if client.focus then + local tag = client.focus.screen.tags[i] + if tag then + client.focus:toggle_tag(tag) + end + end + end, + {description = "toggle focused client on tag #" .. i, group = "tag"}) + ) +end + +clientbuttons = gears.table.join( + awful.button({ }, 1, function (c) client.focus = c; c:raise() end), + awful.button({ env.mod }, 1, awful.mouse.client.move), + awful.button({ env.mod }, 3, awful.mouse.client.resize)) + + root.keys(globalkeys) \ No newline at end of file diff --git a/awesome/.config/awesome/keys-config.lua b/awesome/.config/awesome/keys-config.lua index 42a76dc..2bc1696 100644 --- a/awesome/.config/awesome/keys-config.lua +++ b/awesome/.config/awesome/keys-config.lua @@ -6,7 +6,8 @@ local table = table local awful = require("awful") local redflat = require("redflat") - +--import xrandr library +local xrandr = require("xrandr") -- Initialize tables and vars for module ----------------------------------------------------------------------------------------------------------------------- local hotkeys = { mouse = {}, raw = {}, keys = {}, fake = {} } @@ -125,6 +126,7 @@ function hotkeys:init(args) local appkeys = args.appkeys or {} self.mouse.root = (awful.util.table.join( + awful.button({ }, 1, function () mainmenu:hide() end), awful.button({ }, 3, function () mainmenu:toggle() end), awful.button({ }, 4, awful.tag.viewnext), awful.button({ }, 5, awful.tag.viewprev) @@ -204,6 +206,7 @@ function hotkeys:init(args) -- Appswitcher widget ------------------------------------------------------------ local appswitcher_keys = { + { { env.mod }, "a", function() appswitcher:switch() end, { description = "Select next app", group = "Navigation" } @@ -252,80 +255,6 @@ function hotkeys:init(args) appswitcher:set_keys(appswitcher_keys) - -- Emacs like key sequences - -------------------------------------------------------------------------------- - - -- initial key - local keyseq = { { env.mod }, "c", {}, {} } - - -- group - keyseq[3] = { - { {}, "k", {}, {} }, -- application kill group - { {}, "c", {}, {} }, -- client managment group - { {}, "r", {}, {} }, -- client managment group - { {}, "n", {}, {} }, -- client managment group - { {}, "g", {}, {} }, -- run or rise group - { {}, "f", {}, {} }, -- launch application group - } - - -- quick launch key sequence actions - for i = 1, 9 do - local ik = tostring(i) - table.insert(keyseq[3][5][3], { - {}, ik, function() qlaunch:run_or_raise(ik) end, - { description = "Run or rise application №" .. ik, group = "Run or Rise", keyset = { ik } } - }) - table.insert(keyseq[3][6][3], { - {}, ik, function() qlaunch:run_or_raise(ik, true) end, - { description = "Launch application №".. ik, group = "Quick Launch", keyset = { ik } } - }) - end - - -- application kill sequence actions - keyseq[3][1][3] = { - { - {}, "f", function() if client.focus then client.focus:kill() end end, - { description = "Kill focused client", group = "Kill application", keyset = { "f" } } - }, - { - {}, "a", kill_all, - { description = "Kill all clients with current tag", group = "Kill application", keyset = { "a" } } - }, - } - - -- client managment sequence actions - keyseq[3][2][3] = { - { - {}, "p", function () toggle_placement(env) end, - { description = "Switch master/slave window placement", group = "Clients managment", keyset = { "p" } } - }, - } - - keyseq[3][3][3] = { - { - {}, "f", restore_client, - { description = "Restore minimized client", group = "Clients managment", keyset = { "f" } } - }, - { - {}, "a", restore_all, - { description = "Restore all clients with current tag", group = "Clients managment", keyset = { "a" } } - }, - } - - keyseq[3][4][3] = { - { - {}, "f", function() if client.focus then client.focus.minimized = true end end, - { description = "Minimized focused client", group = "Clients managment", keyset = { "f" } } - }, - { - {}, "a", minimize_all, - { description = "Minimized all clients with current tag", group = "Clients managment", keyset = { "a" } } - }, - { - {}, "e", minimize_all_except_focused, - { description = "Minimized all clients except focused", group = "Clients managment", keyset = { "e" } } - }, - } -- Layouts @@ -353,6 +282,10 @@ function hotkeys:init(args) { env.mod, }, "+", function () awful.tag.incnmaster( 1, nil, true) end, { description = "Increase the number of master clients", group = "Layout" } }, + { + { env.mod, }, "=", function () awful.tag.incnmaster( 1, nil, true) end, + { description = "Increase the number of master clients", group = "Layout" } + }, { { env.mod }, "-", function () awful.tag.incnmaster(-1, nil, true) end, { description = "Decrease the number of master clients", group = "Layout" } @@ -361,6 +294,10 @@ function hotkeys:init(args) { env.mod, "Control" }, "+", function () awful.tag.incncol( 1, nil, true) end, { description = "Increase the number of columns", group = "Layout" } }, + { + { env.mod, "Control" }, "=", function () awful.tag.incncol( 1, nil, true) end, + { description = "Increase the number of columns", group = "Layout" } + }, { { env.mod, "Control" }, "-", function () awful.tag.incncol(-1, nil, true) end, { description = "Decrease the number of columns", group = "Layout" } @@ -581,6 +518,9 @@ function hotkeys:init(args) -- Global keys -------------------------------------------------------------------------------- self.raw.root = { + { + { env.mod }, "b", function () mouse.screen.mywibox.visible = not mouse.screen.mywibox.visible end,{description="togle wibox",group="awesome"} + }, { { env.mod }, "F1", function() redtip:show() end, { description = "[Hold] Show awesome hotkeys helper", group = "Main" } @@ -589,10 +529,6 @@ function hotkeys:init(args) { env.mod, "Control" }, "F1", function() apphelper(appkeys) end, { description = "[Hold] Show hotkeys helper for application", group = "Main" } }, - { - { env.mod }, "c", function() redflat.float.keychain:activate(keyseq, "User") end, - { description = "[Hold] User key sequence", group = "Main" } - }, { { env.mod }, "F2", function () redflat.service.navigator:run() end, @@ -640,6 +576,12 @@ function hotkeys:init(args) { env.mod }, "Tab", focus_to_previous, { description = "Go to previos client", group = "Client focus" } }, + { + { env.mod, "Control" }, "j", function () awful.screen.focus_relative( 1) end, + {description = "focus the next screen", group = "screen"}}, + { + { env.mod, "Control" }, "k", function () awful.screen.focus_relative(-1) end, + {description = "focus the previous screen", group = "screen"}}, { { env.mod }, "w", function() mainmenu:show() end, @@ -776,9 +718,31 @@ function hotkeys:init(args) { { env.mod, "Control" }, "s", function() for s in screen do env.wallpaper(s) end end, {} -- hidden key - } - } + }, + --application hotkeys (logitech keyboard g710+) + { + { }, "XF86LaunchA", function () awful.spawn(terminal) end, + {description = "open a terminal", group = "launcher"} + }, + { + { }, "XF86Launch9", function () awful.spawn("keepassxc") end, + {description = "open keepass", group = "launcher"} + }, + { + { }, "XF86Launch8", function () awful.spawn("firefox") end, + {description = "open a Firefox", group = "launcher"} + }, + + { + { }, "XF86Launch7", function () awful.spawn("code") end, + {description = "open VScode", group = "launcher"} + }, + + { + {env.mod,"Shift"},"o" , function() xrandr.xrandr() end, + {description = "xrandr shortcut", group = "screen"}} + } -- Client keys -------------------------------------------------------------------------------- self.raw.client = { @@ -805,7 +769,11 @@ function hotkeys:init(args) { { env.mod }, "m", function(c) c.maximized = not c.maximized; c:raise() end, { description = "Maximize", group = "Client keys" } - } + }, + { + { env.mod }, "o", function (c) c:move_to_screen() end, + {description = "move to screen", group = "client"} + }, } self.keys.root = redflat.util.key.build(self.raw.root) @@ -856,8 +824,7 @@ function hotkeys:init(args) self.mouse.client = awful.util.table.join( awful.button({}, 1, function (c) client.focus = c; c:raise() end), awful.button({}, 2, awful.mouse.client.move), - awful.button({ env.mod }, 3, awful.mouse.client.resize), - awful.button({}, 8, function(c) c:kill() end) + awful.button({ env.mod }, 3, awful.mouse.client.resize) ) -- Set root hotkeys diff --git a/awesome/.config/awesome/layout-config.lua b/awesome/.config/awesome/layout-config.lua index acb05f8..fd88f6f 100644 --- a/awesome/.config/awesome/layout-config.lua +++ b/awesome/.config/awesome/layout-config.lua @@ -26,7 +26,7 @@ function layouts:init() awful.layout.suit.fair, redflat.layout.map, awful.layout.suit.max, - awful.layout.suit.max.fullscreen, + --awful.layout.suit.max.fullscreen, } awful.layout.layouts = layset diff --git a/awesome/.config/awesome/rc.lua b/awesome/.config/awesome/rc.lua index aaf6ca5..b6c3823 100644 --- a/awesome/.config/awesome/rc.lua +++ b/awesome/.config/awesome/rc.lua @@ -15,12 +15,9 @@ local wibox = require("wibox") local lain = require("lain") local markup = lain.util.markup local beautiful = require("beautiful") ---import xrandr library -local xrandr = require("xrandr") + -- Notification library local naughty = require("naughty") -local menubar = require("menubar") ---load revelation plugin --load hotkey_popup local hotkeys_popup = require("awful.hotkeys_popup").widget @@ -35,28 +32,9 @@ require("ercheck-config") -- load file with error handling env=require("env-config") env:init() --- revelation init -local revelation=require("revelation") -revelation.init() --- -- This is used later as the default terminal and editor to run. +awful.util.terminal = env.terminal - -awful.util.terminal = terminal - -editor = os.getenv("EDITOR") or "vim" -editor_cmd = env.terminal .. " -e " .. editor - --- Default env.mod. --- Usually, Mod4 is the key with a logo between Control and Alt. --- If you do not like this or do not have such a key, --- I suggest you to remap Mod4 to another key using xmodmap or other tools. --- However, you can use another modifier like Mod1, but it may interact with others. - --- Table of layouts to cover with awful.layout.inc, order matters. - - --- {{{ Menu local mainmenu=require("menu") mainmenu:init({ env = env }) @@ -66,43 +44,141 @@ layouts:init() --mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, - -- menu = mymainmenu }) --- Menubar configuration -menubar.utils.terminal = terminal -- Set the terminal for applications that require it --- }}} + -- menu = mainmenu }) --- Keyboard map indicator and switcher -mykeyboardlayout = awful.widget.keyboardlayout() + local tasklist = {} + +-- load list of app name aliases from files and set it as part of tasklist theme +tasklist.style = { appnames = require("alias-config")} + +tasklist.buttons = awful.util.table.join( + awful.button({}, 1, redflat.widget.tasklist.action.select), + awful.button({}, 2, redflat.widget.tasklist.action.close), + awful.button({}, 3, redflat.widget.tasklist.action.menu), + awful.button({}, 4, redflat.widget.tasklist.action.switch_next), + awful.button({}, 5, redflat.widget.tasklist.action.switch_prev) +) + +-- Taglist widget +-------------------------------------------------------------------------------- +local taglist = {} +taglist.style = { widget = redflat.gauge.tag.orange.new, show_tip = true } +taglist.buttons = awful.util.table.join( + awful.button({ }, 1, function(t) t:view_only() end), + awful.button({ env.mod }, 1, function(t) if client.focus then client.focus:move_to_tag(t) end end), + awful.button({ }, 2, awful.tag.viewtoggle), + awful.button({ }, 3, function(t) redflat.widget.layoutbox:toggle_menu(t) end), + awful.button({ env.mod }, 3, function(t) if client.focus then client.focus:toggle_tag(t) end end), + awful.button({ }, 4, function(t) awful.tag.viewnext(t.screen) end), + awful.button({ }, 5, function(t) awful.tag.viewprev(t.screen) end) +) + +-- Textclock widget +-------------------------------------------------------------------------------- +local textclock = {} +textclock.widget = redflat.widget.textclock({ timeformat = "%H:%M", dateformat = "%b %d %a" }) + + +-- Layoutbox configure +-------------------------------------------------------------------------------- +local layoutbox = {} + +layoutbox.buttons = awful.util.table.join( + awful.button({ }, 1, function () mainmenu.mainmenu:toggle() end), + awful.button({ }, 3, function () redflat.widget.layoutbox:toggle_menu(mouse.screen.selected_tag) end), + awful.button({ }, 4, function () awful.layout.inc( 1) end), + awful.button({ }, 5, function () awful.layout.inc(-1) end) +) + +-- Tray widget +-------------------------------------------------------------------------------- +local tray = {} +tray.widget = redflat.widget.minitray() + +tray.buttons = awful.util.table.join( + awful.button({}, 1, function() redflat.widget.minitray:toggle() end) +) + +local volume = {} +volume.widget = redflat.widget.pulse(nil, { widget = redflat.gauge.audio.blue.new }) + +-- activate player widget +redflat.float.player:init({ name = env.player }) + +volume.buttons = awful.util.table.join( + awful.button({}, 4, function() volume.widget:change_volume() end), + awful.button({}, 5, function() volume.widget:change_volume({ down = true }) end), + awful.button({}, 2, function() volume.widget:mute() end), + awful.button({}, 3, function() redflat.float.player:show() end), + awful.button({}, 1, function() redflat.float.player:action("PlayPause") end), + awful.button({}, 8, function() redflat.float.player:action("Previous") end), + awful.button({}, 9, function() redflat.float.player:action("Next") end) +) + +-- Keyboard layout indicator +-------------------------------------------------------------------------------- +local kbindicator = {} +redflat.widget.keyboard:init({ "French", "English" }) +kbindicator.widget = redflat.widget.keyboard() + +kbindicator.buttons = awful.util.table.join( + awful.button({}, 1, function () redflat.widget.keyboard:toggle_menu() end), + awful.button({}, 4, function () redflat.widget.keyboard:toggle() end), + awful.button({}, 5, function () redflat.widget.keyboard:toggle(true) end) +) --- {{{ Wibar --- Create a textclock widget -mytextclock = wibox.widget.textclock() local spr_right = redflat.gauge.separator.vertical() -local cpuicon = wibox.widget.imagebox(beautiful.cpu_icon,true) -local cpu = lain.widget.cpu({ - settings = function() - widget:set_markup(markup.fontfg(beautiful.font,beautiful.fg_normal, cpu_now.usage .. "% ")) - end -}) -local mymemicon =wibox.widget.imagebox(beautiful.ram_icon) -local mymem = lain.widget.mem({ - settings = function() - widget:set_markup(markup.fontfg(beautiful.font,beautiful.fg_normal, mem_now.perc .. "% ")) - end -}) --- Net -local netdownicon = wibox.widget.imagebox(beautiful.net_down) -local netdowninfo = wibox.widget.textbox() -local netupicon = wibox.widget.imagebox(beautiful.net_up) -local netupinfo = lain.widget.net({ - settings = function() - - widget:set_markup(markup.fontfg(beautiful.font, "#e54c62", net_now.sent .. " ")) - netdowninfo:set_markup(markup.fontfg(beautiful.font, "#87af5f", net_now.received .. " ")) - end -}) +local sysmon = { widget = {}, buttons = {}, icon = {} } + +-- icons +sysmon.icon.battery = redflat.util.table.check(beautiful, "wicon.battery") +sysmon.icon.network = redflat.util.table.check(beautiful, "wicon.wireless") +sysmon.icon.cpuram = redflat.util.table.check(beautiful, "wicon.monitor") + + +-- CPU usage +sysmon.widget.cpu = redflat.widget.sysmon( + { func = redflat.system.pformatted.cpu(80) }, + { timeout = 2, monitor = { label = "CPU" } } +) + +sysmon.buttons.cpu = awful.util.table.join( + awful.button({ }, 1, function() redflat.float.top:show("cpu") end) +) + +-- RAM usage +sysmon.widget.ram = redflat.widget.sysmon( + { func = redflat.system.pformatted.mem(80) }, + { timeout = 10, monitor = { label = "RAM" } } +) + +sysmon.buttons.ram = awful.util.table.join( + awful.button({ }, 1, function() redflat.float.top:show("mem") end) +) +-- battery +local batstate=redflat.system.battery("BAT0") +if batstate.value ~= nil then + sysmon.widget.battery = redflat.widget.sysmon( + { func = redflat.system.pformatted.bat(25), arg = "BAT0" }, + { timeout = 60, widget = redflat.gauge.icon.single, monitor = { is_vertical = true, icon = sysmon.icon.battery } } + ) +end +-- network speed + +-- use self-drawn rectange image as indicator icon +local img = redflat.util.base.image(7, 40, { x = 1, y = 0, width = 5, height = 40 }) +local interfaces = "br0" +local netstate=redflat.system.net_speed("br0",{}) +if netstate[3] == 0 then + interfaces = "wlp2s0" +end +sysmon.widget.network = redflat.widget.net( + { interface = interfaces, speed = { up = 6 * 1024^2, down = 6 * 1024^2 }, autoscale = false }, + -- custom style + { timeout = 2, widget = redflat.gauge.icon.double, monitor = { step = 0.1, icon1 = img, icon2 = img, igap = 3 } } +) local mpdicon = wibox.widget.imagebox(beautiful.mpd_icon) @@ -132,8 +208,7 @@ local mpd = lain.widget.mpd({ end }) -local baticon = wibox.widget.imagebox(beautiful -.widget_batt) +local baticon = wibox.widget.imagebox(beautiful.widget_batt) local bat = lain.widget.bat({ settings = function() local perc = bat_now.perc ~= "N/A" and bat_now.perc .. "%" or bat_now.perc @@ -148,337 +223,72 @@ local bat = lain.widget.bat({ end }) --- Create a wibox for each screen and add it -local taglist_buttons = gears.table.join( - awful.button({ }, 1, function(t) t:view_only() end), - awful.button({ env.mod }, 1, function(t) - if client.focus then - client.focus:move_to_tag(t) - end - end), - awful.button({ }, 3, awful.tag.viewtoggle), - awful.button({ env.mod }, 3, function(t) - if client.focus then - client.focus:toggle_tag(t) - end - end), - awful.button({ }, 4, function(t) awful.tag.viewnext(t.screen) end), - awful.button({ }, 5, function(t) awful.tag.viewprev(t.screen) end) - ) -local function set_wallpaper(s) - -- Wallpaper - if beautiful.wallpaper then - local wallpaper = beautiful.wallpaper - -- If wallpaper is a function, call it with the screen - if type(wallpaper) == "function" then - wallpaper = wallpaper(s) - end - gears.wallpaper.maximized(wallpaper, s, true) - end -end - --- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) -screen.connect_signal("property::geometry", set_wallpaper) - awful.screen.connect_for_each_screen(function(s) -- Wallpaper - set_wallpaper(s) + env.wallpaper(s) -- Each screen has its own tag taawful.util.terminable. - awful.tag({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, awful.layout.layouts[3]) + awful.tag({ "1", "2", "3", "4","5" }, s, awful.layout.layouts[3]) - - -- Create a promptbox for each screen - s.mypromptbox = awful.widget.prompt() -- Create an imagebox widget which will contain an icon indicating which layout we're using. -- We need one layoutbox per screen. - s.mylayoutbox = awful.widget.layoutbox(s) - s.mylayoutbox:buttons(gears.table.join( - awful.button({ }, 1, function () awful.layout.inc( 1) end), - awful.button({ }, 3, function () awful.layout.inc(-1) end), - awful.button({ }, 4, function () awful.layout.inc( 1) end), - awful.button({ }, 5, function () awful.layout.inc(-1) end))) - -- Create a taglist widget - s.mytaglist = awful.widget.taglist(s, awful.widget.taglist.filter.noempty, taglist_buttons) + -- layoutbox widget + layoutbox[s] = redflat.widget.layoutbox({ screen = s }) + -- taglist widget + taglist[s] = redflat.widget.taglist({ screen = s, buttons = taglist.buttons, hint = env.tagtip }, taglist.style) + + -- tasklist widget + tasklist[s] = redflat.widget.tasklist({ screen = s, buttons = tasklist.buttons }, tasklist.style) + -- Create the wibox - s.mywibox = awful.wibar({ position = "top", screen = s }) + s.mywibox = awful.wibar({ position = "top", screen = s, height = beautiful.panel_height or 36 }) -- Add widgets to the wibox s.mywibox:setup { layout = wibox.layout.align.horizontal, { -- Left widgets layout = wibox.layout.fixed.horizontal, - s.mytaglist, - s.mypromptbox, + env.wrapper(layoutbox[s], "layoutbox", layoutbox.buttons), + spr_right, + env.wrapper(taglist[s], "taglist"), + spr_right, + env.wrapper(kbindicator.widget, "keyboard", kbindicator.buttons), spr_right, mpdicon, mpd.widget }, - nil -- Middle widget - ,{ -- Right widgets + { -- middle widget + layout = wibox.layout.align.horizontal, + expand = "outside", + + nil, + env.wrapper(tasklist[s], "tasklist"), + }, + { -- Right widgets layout = wibox.layout.fixed.horizontal, spr_right, - netdownicon, - netdowninfo, - netupicon, - netupinfo.widget, - cpuicon, - cpu , - mymemicon, - mymem, + env.wrapper(sysmon.widget.network, "network"), + + spr_right, + env.wrapper(sysmon.widget.cpu, "cpu", sysmon.buttons.cpu), + spr_right, + env.wrapper(sysmon.widget.ram, "ram", sysmon.buttons.ram), + spr_right, + env.wrapper(sysmon.widget.battery, "battery"), + spr_right, baticon, bat, + env.wrapper(volume.widget, "volume", volume.buttons), spr_right, - mykeyboardlayout, + env.wrapper(textclock.widget, "textclock"), spr_right, - wibox.widget.systray(), - spr_right, - mytextclock, - s.mylayoutbox, + env.wrapper(tray.widget, "tray", tray.buttons), }, } end) --- }}} - --- {{{ Mouse bindings -root.buttons(gears.table.join( - awful.button({ }, 3, function () mainmenu.mainmenu:toggle() end), - awful.button({ }, 4, awful.tag.viewnext), - awful.button({ }, 5, awful.tag.viewprev) -)) --- }}} - --- {{{ Key bindings -globalkeys = gears.table.join( - awful.key({ env.mod }, "b", function () - mouse.screen.mywibox.visible = not mouse.screen.mywibox.visible - end,{description="togle wibox",group="awesome"}), - awful.key({ env.mod, }, "s", hotkeys_popup.show_help, - {description="show help", group="awesome"}), - awful.key({ env.mod, }, "e", revelation, - {description="revelation shortcut",group="awesome"}), - awful.key({ env.mod, }, "Left", awful.tag.viewprev, - {description = "view previous", group = "tag"}), - awful.key({ env.mod, }, "Right", awful.tag.viewnext, - {description = "view next", group = "tag"}), - awful.key({ env.mod, }, "Escape", awful.tag.history.restore, - {description = "go back", group = "tag"}), - awful.key({ "Shift" }, "Alt_L", function() mykeyboardlayout.next_layout(); end), - awful.key({ env.mod, }, "j", - function () - awful.client.focus.byidx( 1) - end, - {description = "focus next by index", group = "client"} - ), - awful.key({ env.mod, }, "k", - function () - awful.client.focus.byidx(-1) - end, - {description = "focus previous by index", group = "client"} - ), - awful.key({env.mod,"Shift"},"o" , function() xrandr.xrandr() end, - {description = "xrandr shortcut", group = "awesome"}), - awful.key({ env.mod, }, "w", function () mainmenu.mainmenu:show() end, - {description = "show main menu", group = "awesome"}), - - -- Layout manipulation - awful.key({ env.mod, "Shift" }, "j", function () awful.client.swap.byidx( 1) end, - {description = "swap with next client by index", group = "client"}), - awful.key({ env.mod, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, - {description = "swap with previous client by index", group = "client"}), - awful.key({ env.mod, "Control" }, "j", function () awful.screen.focus_relative( 1) end, - {description = "focus the next screen", group = "screen"}), - awful.key({ env.mod, "Control" }, "k", function () awful.screen.focus_relative(-1) end, - {description = "focus the previous screen", group = "screen"}), - awful.key({ env.mod, }, "u", awful.client.urgent.jumpto, - {description = "jump to urgent client", group = "client"}), - awful.key({ env.mod, }, "Tab", - function () - awful.client.focus.history.previous() - if client.focus then - client.focus:raise() - end - end, - {description = "go back", group = "client"}), - - -- Standard program - -- Dropdown application - awful.key({ env.mod, }, "Return", function () awful.spawn(terminal) end, - {description = "open a terminal", group = "launcher"}), - awful.key({ env.mod, "Control" }, "r", awesome.restart, - {description = "reload awesome", group = "awesome"}), - awful.key({ env.mod, "Shift" }, "q", awesome.quit, - {description = "quit awesome", group = "awesome"}), - - awful.key({ env.mod, }, "l", function () awful.tag.incmwfact( 0.05) end, - {description = "increase master width factor", group = "layout"}), - awful.key({ env.mod, }, "h", function () awful.tag.incmwfact(-0.05) end, - {description = "decrease master width factor", group = "layout"}), - awful.key({ env.mod, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end, - {description = "increase the number of master clients", group = "layout"}), - awful.key({ env.mod, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end, - {description = "decrease the number of master clients", group = "layout"}), - awful.key({ env.mod, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end, - {description = "increase the number of columns", group = "layout"}), - awful.key({ env.mod, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end, - {description = "decrease the number of columns", group = "layout"}), - awful.key({ env.mod, }, "space", function () awful.layout.inc( 1) end, - {description = "select next", group = "layout"}), - awful.key({ env.mod, "Shift" }, "space", function () awful.layout.inc(-1) end, - {description = "select previous", group = "layout"}), - - awful.key({ env.mod, "Control" }, "n", - function () - local c = awful.client.restore() - -- Focus restored client - if c then - client.focus = c - c:raise() - end - end, - {description = "restore minimized", group = "client"}), - - -- Prompt - awful.key({ env.mod }, "r", function () awful.screen.focused().mypromptbox:run() end, - {description = "run prompt", group = "launcher"}), - - awful.key({ env.mod }, "x", - function () - awful.prompt.run { - prompt = "Run Lua code: ", - textbox = awful.screen.focused().mypromptbox.widget, - exe_callback = awful.util.eval, - history_path = awful.util.get_cache_dir() .. "/history_eval" - } - end, - {description = "lua execute prompt", group = "awesome"}), - -- Menubar - awful.key({ env.mod }, "p", function() menubar.show() end, - {description = "show the menubar", group = "launcher"}), - awful.key({ },"XF86AudioRaiseVolume", function() awful.spawn("pamixer -i 5") end), - awful.key({ }, "XF86AudioLowerVolume", function () awful.spawn("pamixer -d 5") end), - --multimedia keys - awful.key({ }, "XF86MonBrightnessUp", function () awful.spawn("light -A 10") end), - awful.key({ }, "XF86MonBrightnessDown", function () awful.spawn("light -U 10") end), - awful.key({ }, "XF86AudioMute", function () awful.spawn("pamixer -t") end), - awful.key({ }, "XF86AudioPlay", function () awful.spawn("mpc toggle") end), - awful.key({ }, "XF86AudioStop", function () awful.spawn("mpc stop") end), - awful.key({ }, "XF86AudioNext", function () awful.spawn("mpc next") end), - awful.key({ }, "XF86AudioPrev", function () awful.spawn("mpc prev") end), - --application hotkeys (logitech keyboard g710+) - awful.key({ }, "XF86LaunchA", function () awful.spawn(terminal) end, - {description = "open a terminal", group = "launcher"}), - awful.key({ }, "XF86Launch9", function () awful.spawn("keepassxc") end, - {description = "open keepass", group = "launcher"}), - - awful.key({ }, "XF86Launch8", function () awful.spawn("firefox") end, - {description = "open a Firefox", group = "launcher"}), - - awful.key({ }, "XF86Launch7", function () awful.spawn("code") end, - {description = "open VScode", group = "launcher"}) -) - -clientkeys = gears.table.join( - awful.key({ env.mod, }, "f", - function (c) - c.fullscreen = not c.fullscreen - c:raise() - end, - {description = "toggle fullscreen", group = "client"}), - awful.key({ env.mod, "Shift" }, "c", function (c) c:kill() end, - {description = "close", group = "client"}), - awful.key({ env.mod, "Control" }, "space", awful.client.floating.toggle , - {description = "toggle floating", group = "client"}), - awful.key({ env.mod, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end, - {description = "move to master", group = "client"}), - awful.key({ env.mod, }, "o", function (c) c:move_to_screen() end, - {description = "move to screen", group = "client"}), - awful.key({ env.mod, }, "t", function (c) c.ontop = not c.ontop end, - {description = "toggle keep on top", group = "client"}), - awful.key({ env.mod, }, "n", - function (c) - -- The client currently has the input focus, so it cannot be - -- minimized, since minimized clients can't have the focus. - c.minimized = true - end , - {description = "minimize", group = "client"}), - awful.key({ env.mod, }, "m", - function (c) - c.maximized = not c.maximized - c:raise() - end , - {description = "(un)maximize", group = "client"}), - awful.key({ env.mod, "Control" }, "m", - function (c) - c.maximized_vertical = not c.maximized_vertical - c:raise() - end , - {description = "(un)maximize vertically", group = "client"}), - awful.key({ env.mod, "Shift" }, "m", - function (c) - c.maximized_horizontal = not c.maximized_horizontal - c:raise() - end , - {description = "(un)maximize horizontally", group = "client"}) -) - --- Bind all key numbers to tags. --- Be careful: we use keycodes to make it work on any keyboard layout. --- This should map on the top row of your keyboard, usually 1 to 9. -for i = 1, 9 do - globalkeys = gears.table.join(globalkeys, - -- View tag only. - awful.key({ env.mod }, "#" .. i + 9, - function () - local screen = awful.screen.focused() - local tag = screen.tags[i] - if tag then - tag:view_only() - end - end, - {description = "view tag #"..i, group = "tag"}), - -- Toggle tag display. - awful.key({ env.mod, "Control" }, "#" .. i + 9, - function () - local screen = awful.screen.focused() - local tag = screen.tags[i] - if tag then - awful.tag.viewtoggle(tag) - end - end, - {description = "toggle tag #" .. i, group = "tag"}), - -- Move client to tag. - awful.key({ env.mod, "Shift" }, "#" .. i + 9, - function () - if client.focus then - local tag = client.focus.screen.tags[i] - if tag then - client.focus:move_to_tag(tag) - end - end - end, - {description = "move focused client to tag #"..i, group = "tag"}), - -- Toggle tag on focused client. - awful.key({ env.mod, "Control", "Shift" }, "#" .. i + 9, - function () - if client.focus then - local tag = client.focus.screen.tags[i] - if tag then - client.focus:toggle_tag(tag) - end - end - end, - {description = "toggle focused client on tag #" .. i, group = "tag"}) - ) -end - -clientbuttons = gears.table.join( - awful.button({ }, 1, function (c) client.focus = c; c:raise() end), - awful.button({ env.mod }, 1, awful.mouse.client.move), - awful.button({ env.mod }, 3, awful.mouse.client.resize)) -- Active screen edges @@ -487,10 +297,10 @@ local edges = require("edges-config") -- load file with edges configuration edges:init() -- Set keys -root.keys(globalkeys) + -- }}} local hotkeys = require("keys-config") -- load file with hotkeys configuration -hotkeys:init({ env = env, menu = mainmenu.mainmenu }) +hotkeys:init({ env = env, menu = mainmenu.mainmenu,appkeys={}, volume = volume.widget }) -- {{{ Rules -- Rules to apply to new clients (through the "manage" signal). local rules = require("rules-config") -- load file with rules configuration diff --git a/awesome/.config/awesome/redflat/float/player.lua b/awesome/.config/awesome/redflat/float/player.lua index 33d04d5..62f6daf 100644 --- a/awesome/.config/awesome/redflat/float/player.lua +++ b/awesome/.config/awesome/redflat/float/player.lua @@ -355,7 +355,6 @@ end function player:action(args) if not awful.util.table.hasitem(self._actions, args) then return end if not self.wibox then self:init() end - awful.spawn.with_shell(self.command.action .. args) self:update() end diff --git a/awesome/.config/awesome/redflat/system.lua b/awesome/.config/awesome/redflat/system.lua index 6469c0b..1e324b4 100644 --- a/awesome/.config/awesome/redflat/system.lua +++ b/awesome/.config/awesome/redflat/system.lua @@ -119,17 +119,18 @@ end ----------------------------------------------------------------------------------------------------------------------- function system.net_speed(interface, storage) local up, down = 0, 0 - + local state = 0 -- Get network info -------------------------------------------------------------------------------- for line in io.lines("/proc/net/dev") do - + -- Match wmaster0 as well as rt0 (multiple leading spaces) local name = string.match(line, "^[%s]?[%s]?[%s]?[%s]?([%w]+):") - + -- Calculate speed for given interface ------------------------------------------------------------ if name == interface then + state = 1 -- received bytes, first value after the name local recv = tonumber(string.match(line, ":[%s]*([%d]+)")) -- transmited bytes, 7 fields from end of the line @@ -144,7 +145,7 @@ function system.net_speed(interface, storage) -- net stats are absolute, substract our last reading local interval = now - storage[interface].time if interval <= 0 then interval = 1 end - + down = (recv - storage[interface].recv) / interval up = (send - storage[interface].send) / interval end @@ -157,7 +158,7 @@ function system.net_speed(interface, storage) end -------------------------------------------------------------------------------- - return { up, down } + return { up, down,state } end -- Get disk speed diff --git a/awesome/.config/awesome/redflat/widget/battery.lua b/awesome/.config/awesome/redflat/widget/battery.lua index 0330b54..a6dab60 100644 --- a/awesome/.config/awesome/redflat/widget/battery.lua +++ b/awesome/.config/awesome/redflat/widget/battery.lua @@ -62,7 +62,6 @@ function battery.new(args, style) -------------------------------------------------------------------------------- widg._update = function() local state = args.func(args.arg) - widg:set_value(state.value) widg:set_alert(state.alert) widg._tp:set_text(state.text) diff --git a/awesome/.config/awesome/redflat/widget/minitray.lua b/awesome/.config/awesome/redflat/widget/minitray.lua index def6e8c..5a23384 100644 --- a/awesome/.config/awesome/redflat/widget/minitray.lua +++ b/awesome/.config/awesome/redflat/widget/minitray.lua @@ -53,7 +53,7 @@ function minitray:init(style) bg = style.color.wibox, border_width = style.border_width, border_color = style.color.border, - shape = style.shape + shape = style.shape, } self.wibox = wibox(wargs) diff --git a/awesome/.config/awesome/revelation/LICENSE b/awesome/.config/awesome/revelation/LICENSE deleted file mode 100644 index 65c5ca8..0000000 --- a/awesome/.config/awesome/revelation/LICENSE +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/awesome/.config/awesome/revelation/README.md b/awesome/.config/awesome/revelation/README.md deleted file mode 100644 index df3c259..0000000 --- a/awesome/.config/awesome/revelation/README.md +++ /dev/null @@ -1,169 +0,0 @@ -# revelation.lua - -Provides Mac OSX like 'Expose' view of all clients. - -This is a fork from [revelation](https://github.com/bioe007/awesome-revelation) -It is modified from the original revelation.lua for incorporating with awesome 3.5 or later. -It also have some features. - - -**Now master branch works for both master and stable awesome WM** - -## Changes since 2015-09-26 -When all clients are exposing, you can zoom (__Modkey + Shift + hintbox charater__ or __right button__ of the mouse) -or kill a client (__middle button__ of the mouse) and the position of hintboxes will be updated accordingly. - -## Changes since 2014-02-19 -* Now the revlation is able to handle the special clients(float, fullscreen or maximized etc.) -* When you select an minimized client, the revelation will un-minimized it and then focuse on it. -* Added an option to change character ordering - -## Changes after 2013-12-30 -* Now it is possible, in revelation.init({...}), to change the default settings of - revelation module. - -* Function `revelation(...)` now accept the parameter as a table `{rule={...}, is_excluded=..., -curr_tag_only=...}`. - -1. To add specify rules `revelation({rule={...},...})`. -2. To exclude the clients matched by the rules instead of including `revelation({rule={...}, -is_excluded=true})`. -3. `{...,curr_tag_only=true}` make the revelation only collect the client from current - tags. - - -## Changes from the original revelation -* Support awesome 3.5 or later - -* Add the support of multiple screens. Now multiple 'Expose' views will be shown - on the multiple screens at the same time. - -* The way of selecting and focusing the client was changed. The old way that is - navigating clients by pressing the keys "j, h, k, l" and then selecting the - client by pressing key "Enter" was deprecated. Now each client in the 'Expose' - views come with a letter surrounding by a hint box, you can select the client - by pressing the corresponding letter in the hint box. The idea and codes of this method - was copied from the module [hint](https://github.com/zackpete/hints). - -* Add zoom mode. Add the function of zooming the client by pressing the right - button of the mouse. - -* The unwanted clients can be excluded by the parameter`{rule={...}....}`. - -## Screenshot - -![screenshot](./screenshot.png) - - -## Usage - -### Installation - (From user's awesome configuration directory, usually ~/.config/awesome) - - 1. Clone the repository: - - git clone https://github.com/guotsuan/awesome-revelation revelation - - 2. Include it at the top of your rc.lua file: - `local revelation=require("revelation")` - - 3. **Important: Add `revelation.init()` after `beautiful.init()`** - - 3. Define a global keybinding (e. g. `ModKey + e`) for revelation in your rc.lua: - - globalkeys = awful.util.table.join( - awful.key({ modkey, }, "Left", awful.tag.viewprev ), - awful.key({ modkey, }, "Right", awful.tag.viewnext ), - awful.key({ modkey, }, "Escape", awful.tag.history.restore), - awful.key({ modkey, }, "e", revelation), - awful.key({ modkey, }, "j", - function () - awful.client.focus.byidx( 1) - if client.focus then client.focus:raise() end - end), - - **NOTE:** Always double check the key binding syntax against the version of - Awesome which you are using. - - 4. Restart Awesome (usually __Modkey + Control + r__) and try the keybinding __Modkey + e__. - - It should bring up all clients from the current tags on all screens and set the layout to fair. - You can focus clients with the __cursor__ keys, and then press the __left__ button to select, - or you can directly focus a client by pressing the corresponding key shown in the hint box. - Press the right mouse button to zoom the client or __Escape__ to abort. - -### Configuration - Revelation's configuration is done through the init() function - - There are three basic settings, shown with default values: - - -- The name of the tag created for the 'exposed' view - revelation.tag_name = 'Revelation' - - -- A table of matcher functions (used in client filtering) - revelation.exact = awful.rules.match - revelation.any = awful.rules.match_any - - -- Character order for selecting clients - revelation.charorder = "jkluiopyhnmfdsatgvcewqzx1234567890", - - The rule matching functions must conform to `awful.rules.match` prototypes. - - For client matching rules, we follow the same syntax as awful.rules expects. - If `rule.any == true`, then we call the `config.match.any` function. - -to change the settings, use: - - revelation.init({tag_name = ..., match = {...}, charorder = ...}) - - -### Examples - All clients: - - awful.key({modkey}, "e", revelation) - - To match all urxvt terminals: - - awful.key({modkey}, "e", function() - revelation({rule={class="URxvt"}}) - end) - To match clients with class 'foo' or 'bar': - - awful.key({modkey}, "e", function() - revelation({ - rule{class={"foo", "bar"}, - any=true} - }) - end) - - To exclude the clients, we set: - - awful.key({modkey}, "e", function() - revelation({rule={class="conky"}, is_excluded=true}) - end) - - To set only collect clients from current tag - - awful.key({modkey}, "e", function() - revelation({rule={class="conky"}, is_excluded=true, - curr_tag_only=true}) - end) - -## Credits - -### Maintenance - * Quan Guo - * Perry Hargrave - -### Contributions, many thanks! - * Daniel Hahler - * Yauhen Kirylau - * Nikola Petrov - -### Original authors - * Espen Wiborg - * Julien Danjou - - (c) 20013-2014 Quan Guo - (c) 2009-12 Perry Hargrave - (c) 2008 Espen Wiborg, Julien Danjou diff --git a/awesome/.config/awesome/revelation/init.lua b/awesome/.config/awesome/revelation/init.lua deleted file mode 100644 index 964d60c..0000000 --- a/awesome/.config/awesome/revelation/init.lua +++ /dev/null @@ -1,508 +0,0 @@ --- revelation.lua --- --- Library that implements Expose like behavior. --- --- @author Perry Hargrave resixian@gmail.com --- @author Espen Wiborg espenhw@grumblesmurf.org --- @author Julien Danjou julien@danjou.info --- @auther Quan Guo guotsuan@gmail.com --- --- @copyright 2008 Espen Wiborg, Julien Danjou --- @copyright 2015 Quan Guo --- - - -local beautiful = require("beautiful") -local wibox = require("wibox") -local awful = require('awful') -local aw_rules = require('awful.rules') -local pairs = pairs -local setmetatable = setmetatable -local naughty = require("naughty") -local table = table -local clock = os.clock -local tostring = tostring -local capi = { - awesome = awesome, - tag = tag, - client = client, - keygrabber = keygrabber, - mousegrabber = mousegrabber, - mouse = mouse, - screen = screen -} - --- disable for now. --- It seems there is not way to pass err handling function into the delayed_call() - -local function debuginfo(message) - message = message or "No information available" - nid = naughty.notify({ text = tostring(message), timeout = 10 }) -end - -local delayed_call = (type(timer) ~= 'table' and require("gears.timer").delayed_call) - -local view_only_func -local toggle_tag_func -local jump_to_func - - -if type(awful.client.object) == 'table' then - view_only_func = function (tag) tag:view_only() end - toggle_tag_func = function (t, c) c:toggle_tag(t) end - jump_to_func = function(c) c:jump_to() end -else - view_only_func = function (tag) awful.tag.viewonly(tag) end - toggle_tag_func = function (t, c) awful.client.toggletag(t, c) end - jump_to_func = function(c) awful.client.jumpto(c) end -end - - -local hintbox = {} -- Table of letter wiboxes with characters as the keys -local hintindex = {} -- Table of visible clients with the hint letter as the keys - -local clients = {} --Table of clients to be exposed after fitlering -local clientData = {} -- table that holds the positions and sizes of floating clients - -local revelation = { - -- Name of expose tag. - tag_name = "Revelation", - - charorder = "jkluiopyhnmfdsatgvcewqzx1234567890", - - -- Match function can be defined by user. - -- Must accept a `rule` and `client` and return `boolean`. - -- The rule forms follow `awful.rules` syntax except we also check the - -- special `rule.any` key. If its true, then we use the `match.any` function - -- for comparison. - match = { - exact = aw_rules.match, - any = aw_rules.match_any - }, - property_to_watch={ - minimized = false, - fullscreen = false, - maximized_horizontal = false, - maximized_vertical = false, - sticky = false, - ontop = false, - above = false, - below = false, - }, - tags_status = {}, - is_excluded = false, - curr_tag_only = false, - font = "monospace 20", - fg = beautiful.revelation_fg_normal or beautiful.fg_normal or "#DCDCCC", - bg = beautiful.revelation_bg_normal or beautiful.bg_normal or "#000000", - border_color = beautiful.revelation_border_color or beautiful.border_focus or "#DCDCCC", - border_width = beautiful.revelation_border_width or beautiful.border_width or 2, - hintsize = (type(beautiful.xresources) == 'table' and beautiful.xresources.apply_dpi(beautiful.revelation_hintsize or 50) or 60) -} - - - --- Executed when user selects a client from expose view. --- --- @param restore Function to reset the current tags view. -local function selectfn(_, t, zt) - return function(c) - revelation.restore(t, zt) - -- Focus and raise - -- - if type(delayed_call) == 'function' then - capi.awesome.emit_signal("refresh") - end - - if awful.util.table.hasitem(hintindex, c) then - if c.minimized then - c.minimized = false - end - - jump_to_func(c) - end - end -end - --- Tags all matching clients with tag t --- @param rule The rule. Conforms to awful.rules syntax. --- @param clients A table of clients to check. --- @param t The tag to give matching clients. -local function match_clients(rule, _clients, t, is_excluded) - - local mfc = rule.any and revelation.match.any or revelation.match.exact - local mf = is_excluded and function(c,_rule) return not mfc(c,_rule) end or mfc - local flt - - for _, c in pairs(_clients) do - if mf(c, rule) then - -- Store geometry before setting their tags - clientData[c] = {} - clientData[c]["geometry"] = c:geometry() - flt = awful.client.property.get(c, "floating") - if flt ~= nil then - clientData[c]["floating"] = flt - awful.client.property.set(c, "floating", false) - end - - - for k,v in pairs(revelation.property_to_watch) do - clientData[c][k] = c[k] - c[k] = v - - end - toggle_tag_func(t, c) - if c:isvisible() then - table.insert(clients, c) - end - end - end - -end - - --- Implement Exposé (ala Mac OS X). --- --- @param rule A table with key and value to match. [{class=""}] -function revelation.expose(args) - args = args or {} - local rule = args.rule or {} - local is_excluded = args.is_excluded or revelation.is_excluded - local curr_tag_only = args.curr_tag_only or revelation.curr_tag_only - - local t={} - local zt={} - - clients = {} - clientData = {} - - for scr=1,capi.screen.count() do - t[scr] = awful.tag.new({revelation.tag_name}, - scr, awful.layout.suit.fair)[1] - zt[scr] = awful.tag.new({revelation.tag_name.."_zoom"}, - scr, awful.layout.suit.fair)[1] - - if curr_tag_only then - match_clients(rule, awful.client.visible(scr), t[scr], is_excluded) - else - match_clients(rule, capi.client.get(scr), t[scr], is_excluded) - end - - view_only_func(t[scr]) - end - - if type(delayed_call) == 'function' then - capi.awesome.emit_signal("refresh") - end - -- No need for awesome WM 3.5.6: capi.awesome.emit_signal("refresh") - -- - local status, err=pcall(revelation.expose_callback, t, zt, clients) - - --revelation.expose_callback(t, zt) - if not status then - debuginfo('Oops!, something is wrong in revelation.expose_callback!') - - if err.msg then - debuginfo(err.msg) - end - - if err.code then - debuginfo('error code is '.. tostring(err.code)) - end - - revelation.restore(t, zt) - - end -end - - -function revelation.restore(t, zt) - for scr=1, capi.screen.count() do - awful.tag.history.restore(scr) - t[scr].screen = nil - end - - capi.keygrabber.stop() - capi.mousegrabber.stop() - - for _, c in pairs(clients) do - if clientData[c] then - for k,v in pairs(clientData[c]) do - if v ~= nil then - if k== "geometry" then - c:geometry(v) - elseif k == "floating" then - awful.client.property.set(c, "floating", v) - else - c[k]=v - end - end - end - end - end - - for scr=1, capi.screen.count() do - t[scr].activated = false - zt[scr].activated = false - end - - for i,j in pairs(hintindex) do - hintbox[i].visible = false - end -end - -local function hintbox_display_toggle(c, show) - for char, thisclient in pairs(hintindex) do - if char and char ~= c then - hintindex[char] = thisclient - if show then - hintbox[char].visible = true - else - hintbox[char].visible = false - end - - end - end -end - -local function hintbox_pos(char) - local client = hintindex[char] - local geom = client:geometry() - hintbox[char].x = math.floor(geom.x + geom.width/2 - revelation.hintsize/2) - hintbox[char].y = math.floor(geom.y + geom.height/2 - revelation.hintsize/2) -end - - -function revelation.expose_callback(t, zt, clientlist) - - hintindex = {} - for i,thisclient in pairs(clientlist) do - -- Move wiboxes to center of visible windows and populate hintindex - local char = revelation.charorder:sub(i,i) - if char and char ~= '' then - hintindex[char] = thisclient - hintbox_pos(char) - hintbox[char].visible = true - hintbox[char].screen = thisclient.screen - end - end - - local zoomed = false - local zoomedClient = nil - local key_char_zoomed = nil - - capi.keygrabber.run(function (mod, key, event) - local c - if event == "release" then return true end - - if awful.util.table.hasitem(mod, "Shift") then - key_char = string.lower(key) - c = hintindex[key_char] - if not zoomed and c ~= nil then - --debuginfo(c.screen) - view_only_func(zt[c.screen.index or c.screen]) - toggle_tag_func(zt[c.screen.index or c.screen], c) - zoomedClient = c - key_char_zoomed = key_char - zoomed = true - -- update the position of this hintbox, since it is zoomed - if type(delayed_call) == 'function' then - capi.awesome.emit_signal("refresh") - end - hintbox_pos(key_char) - hintbox_display_toggle(key_char, false) - - - elseif zoomedClient ~= nil then - awful.tag.history.restore(zoomedClient.screen.index or zoomedClient.screen) - toggle_tag_func(zt[zoomedClient.screen.index or zoomedClient.screen], zoomedClient) - hintbox_display_toggle(key_char_zoomed, true) - if type(delayed_call) == 'function' then - capi.awesome.emit_signal("refresh") - end - hintbox_pos(key_char_zoomed) - - zoomedClient = nil - zoomed = false - key_char_zoomed = nil - end - end - - if hintindex[key] then - --client.focus = hintindex[key] - --hintindex[key]:raise() - - selectfn(restore,t, zt)(hintindex[key]) - - for i,j in pairs(hintindex) do - hintbox[i].visible = false - end - - return false - end - - if key == "Escape" then - if zoomedClient ~= nil then - awful.tag.history.restore(zoomedClient.screen) - toggle_tag_func(zt[zoomedClient.screen.index or zoomedClient.screen], zoomedClient) - hintbox_display_toggle(string.lower(key), true) - if type(delayed_call) == 'function' then - capi.awesome.emit_signal("refresh") - end - hintbox_pos(key_char_zoomed) - - zoomedClient = nil - zoomed = false - else - for i,j in pairs(hintindex) do - hintbox[i].visible = false - end - revelation.restore(t, zt) - return false - end - end - - return true - end) - - local pressedMiddle = false - - local lastClient = nil - capi.mousegrabber.run(function(mouse) - local c - - if type(awful.client.object) == 'table' then - c = capi.mouse.current_client - else - c = awful.mouse.client_under_pointer() - end - if c then - lastClient = c - else - local current_wibox = capi.mouse.current_wibox - if current_wibox then - for i = 1, #revelation.charorder do - local char = revelation.charorder:sub(i,i) - if hintbox[char] == current_wibox then - c = lastClient - break - end - end - end - end - local key_char = awful.util.table.hasitem(hintindex, c) - if mouse.buttons[1] == true then - if c ~= nil then - selectfn(restore, t, zt)(c) - - for i,j in pairs(hintindex) do - hintbox[i].visible = false - end - return false - else - return true - end - elseif mouse.buttons[2] == true and pressedMiddle == false and c ~= nil then - -- is true whenever the button is down. - pressedMiddle = true - -- extra variable needed to prevent script from spam-closing windows - -- - if zoomed == true and zoomedClient ~=nil then - awful.tag.history.restore(zoomedClient.screen.index or zoomedClient.screen) - toggle_tag_func(zt[zoomedClient.screen.index or zoomedClient.screen], zoomedClient) - end - c:kill() - hintbox[key_char].visible = false - hintindex[key_char] = nil - local pos = awful.util.table.hasitem(clients, c) - table.remove(clients, pos) - - - if zoomed == true and zoomedClient ~=nil then - hintbox_display_toggle(key_char_zoomed, true) - zoomedClient = nil - zoomed = false - key_char_zoomed = nil - end - - return true - - elseif mouse.buttons[2] == false and pressedMiddle == true then - pressedMiddle = false - for key, _ in pairs(hintindex) do - hintbox_pos(key) - end - elseif mouse.buttons[3] == true then - if not zoomed and c ~= nil then - view_only_func(zt[c.screen.index or c.screen]) - toggle_tag_func(zt[c.screen.index or c.screen], c) - if key_char ~= nil then - hintbox_display_toggle(key_char, false) - if type(delayed_call) == 'function' then - capi.awesome.emit_signal("refresh") - end - hintbox_pos(key_char) - end - zoomedClient = c - zoomed = true - key_char_zoomed = key_char - elseif zoomedClient ~= nil then - awful.tag.history.restore(zoomedClient.screen.index or zoomedClient.screen) - toggle_tag_func(zt[zoomedClient.screen.index or zoomedClient.screen], zoomedClient) - hintbox_display_toggle(key_char_zoomed, true) - if type(delayed_call) == 'function' then - capi.awesome.emit_signal("refresh") - end - hintbox_pos(key_char_zoomed) - - zoomedClient = nil - zoomed = false - key_char_zoomed = nil - end - end - - return true - --Strange but on my machine only fleur worked as a string. - --stole it from - --https://github.com/Elv13/awesome-configs/blob/master/widgets/layout/desktopLayout.lua#L175 - end,"fleur") - -end - --- Create the wiboxes, but don't show them --- -function revelation.init(args) - local letterbox = {} - - args = args or {} - - revelation.tag_name = args.tag_name or revelation.tag_name - if args.match then - revelation.match.exact = args.match.exact or revelation.match.exact - revelation.match.any = args.match.any or revelation.match.any - end - - revelation.charorder = args.charorder or revelation.charorder - - for i = 1, #revelation.charorder do - local char = revelation.charorder:sub(i,i) - hintbox[char] = wibox({ - fg=revelation.fg, - bg=revelation.bg, - border_color=revelation.border_color, - border_width=revelation.border_width - }) - hintbox[char].ontop = true - hintbox[char].width = revelation.hintsize - hintbox[char].height = revelation.hintsize - letterbox[char] = wibox.widget.textbox() - letterbox[char]:set_markup(char.upper(char)) - letterbox[char]:set_font(revelation.font) - letterbox[char]:set_align("center") - hintbox[char]:set_widget(letterbox[char]) - end -end - -setmetatable(revelation, { __call = function(_, ...) return revelation.expose(...) end }) - -return revelation diff --git a/awesome/.config/awesome/revelation/screenshot.png b/awesome/.config/awesome/revelation/screenshot.png deleted file mode 100644 index 9cd759e49e2025174e3e8fefd9705401c2c9ba91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051437 zcmW(+byQT}_kG|1Lpr3i3>`y*grLLF-7$1`my}2h-2)5_f^>HYNJyt3UD72g2q@r3 ze|&#${&;KN-22w7b?-T6-@VU{)6!5RCZHt%0DxFoNlpg<@WKE9n;wk)@Fd%mmE_?D za*$D%0f43y!ar6x58s(=lyuYqAc!3R!cYKk_wXp}7y$eP0N~UT03@>k;E88`x3<*7 z54hH^AdeOf>M_CP98|%v!=EfqFxqqjhKD`OrOuWeYrhHhpY3~`1A%wCbX-=JJj-4Z7 z!B8f^6buyyL2MH71JeeD{eS`LCt7GQ00)x*t#8=Gp8#+a6M%>%Brb$tBf!v}*iXGi zxjC@+M(^Wu8tlz|W-J032(M1lzT^uL03lu^Azs~MltBj5!fM1&6a;JFHgF<)QY*~o z#VaTi%6=kfABv zbGna@V0{*&&F{@s@cz{-8w>On%+6VI5v=`Wb3#YX=A4-<+=p2L<8c;!X5Kr``3{rzxRV@7{m!drnQ%2RnW) zDCjjS{cFQ(lp)%RGybw7rs&VD$G2biJ&8?O?jQd+0sJ`l;$aXg?G_A0=45uHUZN<2 zlA3xoLDN%N@M;ftXJhz)nmqp#4_gDg53vmU%)vQ3B;enHblA}7)Pj`%4zIBREFdDx zC!C3bhV>_NFABV>79&9R^$*<&j9zjZH<}5A`0-PgU50BY+msgjyQt>BEQ($UsbFob zuWV(1Row^($Nq_`W$5H-%P6cWLdcYJU+z4y#(EepH<&{#CcTOHLBtXH#0CKc!NI*D z1->L@zX}aw+P;RC+{&Aa{IfXz8Rh4tJm;bjN&WO`4*kuY)s)IAEDcnT^8eDVl^=o1YDSbgEoMar9y)BSNa z)l-k|TVj|^$XiTQEXpzn)d>+EWaDL41)CE=!Mq7C zevGB_^70PLN3FNJ3UFygt`Kdg*~pp9$n?{UqNc#6&`vvJBQ&TCu!i7~P3}wnNbJ~v$8U?V|$j7h8P%xH*n%6CbqlUU-R~Q;5tD&xf z1Fx=T?!V5MiGpWyHWOI|NeYcTVM6s&`zUa=T^pJ7Rm6CIi(U2LSICzEU<;^h2oYBq zm^{vMqzi)0{84R4fENoGl+)J-37bqx=-!GQ;}c#9DS?YClTANZfIXok`7-qg0CiZ% z=LyVrtJz1*T#hA{?e&loK$`e#YEVnsx~*RChwumpvODiftY!EQa2ZVgr@@6M>*zfA^V|x z8f(Z1sWs3kkp*8v6F?h@rb~$stUU2@slA@?5&CGs!Y0;Q_r`z z1kJ@|oOspM2=_7(LTlzpp$ItGotD-PVL(BIWUi;95>@~CeEW8$O1FZuO!LLKzjIzyi?taBo8bAE~YkQ z4T&%$z4PW{g5WZ#UKmwc|CDQU5LtgRWEbc7ySHIdJLTWOD!ElmJPJ}}J8w-7udF7~ zA4&8=7n;KBB%%oU;CELxxDHGi^@a~M*AkN>07J!9PptgqCiZej!#=`Zlin4^?aPse zqTpmQ`9AL@6W>C@1f8|gkfuLJ$OL%Gbt@LI2GsBYC}(FF3O*18lsgH8v5k>oJgd>} z*Y&LspH%1HIIi9!w$m0teVG|PXXrP(`Dzfj8 z!ToB6uA&3DHiJvFhbn&q3!VbmguYdS5aEPH7_*a;#K>yts+KiRV(M!q*RH>sf4f=NAOOIy z_bO+!Kbs41kQ&pUc?nb|CdkMmNedon;4llxRM`?(F?)%Gz4<{odmtS>b zex(d^Ibf8#V5<3E${5%XT#gK*K_k``a!#BTV@$$$nyX`{%%o#xCMY`Bu>YjQ)-gb6 z1n`yAx618)SnaBZ-6%x#`s6Y*O1`Wcg8;9S_(BjV%fEg^{=x^86ao6r4K zOMkggjkTQl&KNsV&A&_2dC?{*cA2pHF~8OVNu1`1(;9*(nwMV3TBu-y`pQ}F$>OxF zn|c{;lv6HXEuWT?R+4XGy5)O|`Rr*ZZl|7{l1l`aqrf*YeaOEDaBwWdfnF75LZSN6 zzK+J|kx-=wOHh=&jFVphDJ^Xhb=Ls>c#fIw@k+~m*#5=IxSqM+&}Fv{YZ%SbmjTB{ zXi|B}e|pvNLfapl!_8kKz-2n)i)YVpBLk!B3sN3I5n;yBPJ+xlpm^H}I64taj7ygy z%A|W3hh0V42^nH7U=JV>023(6iux#Lj_8ba&q~pJGn%an&s-dlMgeQE(9uQHe}B0c z6pg@!!XX4u@v>$yBT8T2SJxATVHVIb(FA6*(X~+>J{s!&uESa^R41#t9GhOpY6{# zec+KGY|e2V+|vh0;6U-*r@g*G-0w?Ri*sO=>P!EU#a)0D$u3Zqmnihg-+Zo&0+Z>Z z{;9t5W*Ua5QL2%lgTmv`^OFr!?%=J{&0xy9qJn=Z>rzEI!I=B#^Rjx=9#}rkr5PE zeE+v19WuD%i5n@SjCOW$;o;%oU}ukykI&83cubTep{IjHKc~#G9tjYbT@JEmqDqj^ zLuyk%;r?Em%~v|kIq@!uUa=60eA!xVbiETcTyEb|BYA(Sn#=q9dP@4IK2of@_dg=ngIY1BPxEg9%t>qdd9~cVnvL^F3m7O6)aR@Zm#?@k8R1-<_|uI zU)_3U3*uq%%(_1IDPQQV^)avnG|?0Qc=mh5D`W|IHY~5Fyv=WyAtWj7rmRtEIY`DV zMDCHA+$IVJ@&4 zjEQC;C|o{iG2G_9vg16;tTH)8c&$ zT)e3(KK$=qa_IV6f8=WAhu%YBt0W<+MY$tl^08K~*;vZstV zd?TOLu6_}VF7m*)cs*2JKZG}{#tMXy#7tD#XJ@c6S)!Yd)0}E>=R9 zj*($^kDnRTA`M8@~g zp?c)Qt6zlp;ewb40Eo6Qu>Dx8HMP|+8JS3qOiNXwb>g+O z%lxo66;?IMQN9O3C~HGInAjt9u)-jK%mCI%>a0O z(2{!7H*zy_E}BPXs@m+atg0aATsD;Ftq7lK0 z@(Wdq$S}Bo(y4)K^^{+`SW%Grm!tfA`i}J^pNOs??kW!QAntmXI6dZgL9g!K+;aZ< zI@7L@@%iXzN}gp_y!R=EFBo7A7d2@9^#<|g>iEcf@emTOj&84o`0A=OD~pp|(McD( zMDV`p1aJ$%IPtnBv~T#28LOGn`5cSw99c~gLlJaJ-@g1muxUr2S?2m94( zsjS%2kMY+>ITKBv@JTM%+T8zrCq<>|7@Hbzt!~9LJ%5TvFamFE_20}@SWO&>ayUzN z>mpDr>{;Z&7+rWa+Ao$LP?GO0xYYLr%E#3-ycx3%%Qe<KG(xE6&i->wmEZ{B?Nm=uR(!cH1MBj!b z#>7j!-~j`4<4TE^tx9i3W~$N-_D*|Ac*wuDsyZGqKSs> z#-=7~Z(o>^!5&KLLv7-41+jk|%8FMj7Xq-$iJk0-{k}AKX&3W|Cf z`9!>8%XMs(ZFki2e%o^f^O?W8p@E;1)ARl2iz0r;l;Ga2c{JLS^-w?Xbs&i-@jw;& zLu+m5P_-zXd(VYm@pxR5c=zFDrh^7OW727PJ)VlQVT1G3?BzaYX_2CHq#R9Lv%E;* z5W^wcw-FLk+o_+itJ5FF;f*?=;+9VQvv|A#rMrgvm1}9u|@~0?<4~Z*%Bo2=^c}n&*WMAS@F)e z5?at)t0iP%LO%UJ2JM|H*p-VO_xMlkuj`$GHi4lAu96we*`?xAe4_8)R`}SRbY{XQUjdg=>?&2!>EoPJ`38M#OJ-pHqkQjckd){aP-9J`5ZK~qf)5*N{r=; z6#hoIB`r#@Erx%sU92&DPM_S<(_=S@k^b{z==JN@bYkwbjEpoi^l!_{*)072z#b>7 zJ>*TNy^*BiDtskV!RR2(^Vi5ZvEwv_5!o!WcDtcy;9$|KO(tb~y5o0ts)PS+s)QcQ$LBYt zRSjN}v82IZ{DeW2Dxc7cHDV353l$1#h8IbO9!NbjLt(ZWH3iSNYm;ZNy0M(X{CTcr zuCASHG42JkI@vTighi|Kf+(GH8)~UBbZFPqi5vf!`>Ih|5}x7^B{5HXeYG;G{LgTk zp{to;VNy)Rm0y+{61h{9jGQzSTgp5-S+L1v`G?7CAPVc;X}J6Hyk0%&`ms7&*q69c zTu2&NNWG=U>iXIQlbG+6Ctzl1-qt2br%89|CuXYu74q?kt7$jqTO(z9Bi({bZ;H*v z?nVc6y{R5`aw$Duhb}gi|6;~Lm7JQInrxyUubq);T3r2tpP~7OE(_2{RfVb{Lh<;i5Po9PkDnuQv^83r%zWR*H8q~?r@${AU`uo*3>4IuM zw%Pmt{!>CJEi|~vYYI3^JQ{AJ#0k&u`RF+co;F|B5@DPdbKfpZ(&hRxb5Y$jyvR6c z`q$Fk{cm$-4WX1k$idw-wUV)~47t*Xi!uUAV0^(XFbOhp~nB7Y2qLPV=6U zK4uOP2`6vxZ|uuAb>#c`fxYHxN`?+D8cZ&(zMXYlRb{sn>>xl;QmAySdHAA)@@yGq zfl4|Va0*?eG~BN-SV6cQNWh(48Z~FX7 z6O&o1^mKJ;Y3X>}j6V1W7EI|XAFub==_2b#O9dv+1bCy<^t88Ej4Y}Y5#Khf<4*cE zu#1+n=sax{{R>k72c~1x4k}r2cWU0ZK!^k+%w_ty6Y;5hWRMnB+1YJ1j8@@&NZ@)6 z$lhK0F^X8VK%!#!=n> z4L{Rz-n7dKtgULFd7H_omD)fk2xx$?_x&C zX={v4EsXSZ^z*-aR#T_u4@NX!o?2pL(Y7(`CR)bk$c(eg&ZMyb&hk+m5lk!lUTY<1 z)=AvJ(wB^*ej6XZ+QK{9{)y>V#TAa4I<*ehw zY-PQh4oqLlJzZB?{e#|;i~lEglX1Wkb92sdt7@Pp{`lKVG^*OL#34xG5e^OkZrqQ6 zV8xV$&|Q(cjbb#l&{Ye{JdJ{L}+(+TWPMr7o}d;Yit z@qw-pzkixGqxZ5D%U9>Sd%g{f-OcOZQ5Ljg5ZbkO6bG#V1TMffn@_kM`hJ-p$@ac32{tzV;!*(ZqLJKbw-94$j1e z#*+oL8f&SGXx=5%c#}7MbllD#1j2bf>BhE%E6bv_|)V%k!RTDiVyaEW)0V#-EXRXcRtq)mo$-dCt~t=9Bqe3ARpsc}Lrc3uxx@c#at?amYz^wU;hwvDW;)vS^?(kyh_v$h+y zvatC$j)-dGl%H)EVwxA_yvfNJZ4vMK*QRxi@>{|y;y;t+19yMMU%tr52Uo{NO?y8pu|E;52mg8%6kqM*_C%gWnX zC?`=a=Z!YjH(DFjnwIBy)?yoXxPn_-67=kZYxiY}^bx$}nCA=GU5zzDzLsV$7eT;;rW$d#pipb+`y?V-I2{qsXoTrStH_w^i-j)EC1; zt(=`XGa3az05(csk$DJOSKH%R((ukfJVW1z(Kl}E+c%|o5%ecedJT7cNjlV{{ljg4 zeWi})^jbInn=`x=sXtoU+Mizk+I;ozzhBFrKbt=2oe$Ro>S^;3QP6v3pz*gRxya=C zz3t*B-@7aR(2E3%Kf76vUo@$z%IWA1z2+ypiyoE5XQA)#@Acfxc_+P!%`BNoy+CyUOR)h@H@>-?qvyD}d#37uX;I}|`EJgoYzLq-e6k8yV=~vygpaq__W-Q6nSkiN0P&vY#KW3r4&yK#J;x zcaOTmMuDN%fR0sJ>r%$L7EkED z{mj%GiN4R5U+iL9lg@1-9AP5l!I(ad(+X&%7e>d~M7_D*4bPer{P4cILjoX|>kEF=rbVdl`<16iw zQj!py*mjergj&CpHqQJ(gsN?yFngP6etBZ-c$!70w38F~DBNJOIm#(-FIBqJ6Z*LD zVf`-k3dx7_H=2u=HVAkao@2q2>&s0r^~Z*Bh0JQ{gY06+Gs8Sk}uJc@T}H?+;d!`!vtO>{<7wm zn!~(6iwa%CcHi0_;ctpB1XM#S4`EMYJHh2-y2XTE7>EyYX*~!qbiBQrUKLpTBwR@o zjZaVatS;}{ccwl|Df)|`jM(~bD}7sMg!`SAFej!}vyMu34x^0k&!U+tt69a2x;yJ( zVjnsMD09`yO6qtE*vV(|=O1)+r+F9ENC-A04#lA;+oZ?Dk$2Lx3<|BUtJ`d{!Lv^E zR;aQY9!&pqaEsAO#HN-z6+DpYg%ac%)X3FU^Q=Lfk0LMVhp(elj!N|n^F>7@ zm07JFob7{pDm>s05G;~Lm?{Wfd3KkR+@2hMayN3I)9Mgl%mN~`r=dz`#TW4Dthml` zD5TTOO}p4htD>$5^3eQc>loDdfj>h)UmhDc?%vwkdL~X8}5Npl}Z zb(Km5{P}%h85k+}sft20wW__HYhJ4~KS#tRp(R>@oee2OhwgwUv8kW0#^Q9{oc)WpxxBFIY%AN! z>?ED6K%kF(U-Kg(LWz|k2b()gI44r5t$sPYDe1B7PYCUy) zelAA+Sn~mmKaMJA54w+eTZ_ioJRxHN1LRC-Yy%=Da#shl?copRdE#FaN$P&REcIg) z)-gpZJBF<28*OWm`r1+&X5m)JFL3RD)d2wzf*Cd0Wf3!YEvJy>h^OY+jDvsDM$SCD&?Fzx4)X*L$OSH3Tk&>$U9LfgeLu?C+#Sw_VK>1t`) zeU!+e5EWc%@j3drAgRSBE+{E3M1vENeAW6b#J za}o>|+)X^oEkEOWkaR@B*tz9Nnrhh?nnHR%Dn4W5oV_XTYOYC9^rybU!tuE)%Qyc5 z#I=pOO6T0JiK0x+#Xx{n$=LkH)hq-cj8zyqHe?``F{EuVtN}wQDmWS%ZKtFC9!QI% zxd+iRV#Aeab$?}U%$A5{X?tCoQDff_#^t+EIFP!2w4+ec@t&hak(xxFDq=`t(F-~O zYngB6=G32$1ruPgDr;z@C{)=ToL)~p$<%y&eWE14K>@J=@g^K%^eAz9QA)RE`ZAAk zoek9e%5)VH1t @|K0Yx*|cM*9EK+}}Uw-Yo2ih_GybEX&CgUyz`~8J@TOryR&T z&HFsbqcRw2Mtg%RRqd2}(_;2Wci=65S~I5B*n(8gChqfE+nIsLvo$CxDJkjp_ICE` z#_eyLlMUyZ zdm5xQ+f$MO1jUcMC=NfIkzsnC`nJ2CLq`%XHrL+$c30)8+j-8FT_9i+2EjKnlOD>P zTo%FHiKZg}FfPlZ*V6B_0Y}aIlY7RH=9endzxV4aibDUuW4;*p=$@70It6^mk?lR} zu;>%tmKK!U@U{mgNYH&AxW~EfLpHIEq1>;tv)!*V?Z|-^r32rQx%O2`kxFaI=8I0qTpbWDI%1 z5VqA!)Oua=wLgQ@8d=#`ndS47Hm3{uB%Yp;m8KhQ`Aor)>Jla}LCq;oNGqE#1vYc$ zk6z7}*Bfy!kbZM|t!?kbl;yc4n~riE7&m>^D5U7)jj-WNpd&dQTbOV9BpFgbzelJ! zy(=sF&qvDM`DSa7m%zHHAgNC8-;Friv~>wzO@ly+qH4ZyO^FfM<=uy{#$sqo%7eJtx- zC&3xhi42f(<|f015GXJpak?~KNYaFdxm0C134)=ZIT2s>MrPHArUEO+kk0oW)YjwH zC6ztZ0@+cdX^jGo#x`w~_*ki^-0avciQcF~Kj80Q4XF`q3ZIr61va2PGyd&M*rDlnP z#FkF5@l3Sz4?I#lfHzr`pJ0d**{yeq)9|4y$8ZbI+-z!wWOj97!A&s%Ol*__`ye)8 z;qUI>2p}v!R;18-Wd0dAhL6G#<~q7+={xm*y_omDB@0LH?Ri!6Rr5WwF22xm^$i%) z>4~RwaeFB&?zXsyksDRWHCb1Cbuo_!TrOn6Cuoy16?5_pTH6n0=dXj-N?30F#m_aM~LzF3lYqEu65M%{ZCrNUQ}0(c1D`m@?+kC$V3Tr^y^n z)$n>hed#NXRUo8Fl&n!kRMS~a!p6>SW6UhI^=XN!{Pb?xgeP);?&te-@4vgJWUj+A zzSkT&RdP~{DI7Xn)7DZV&uqEEcVQcw&-XniDjq*=)_dA91sA9sW+t-iuN%Aab@Z-% z|NePy3Ca>2R;b46M-C+d;TiG4xTY_vboburE~LpZr|o(p!y69v$1|9y5!Lc*lJ|db z>?GWU1piv=#_=WTzWY~$VrqregpLbMHlxS)rAS~6$F3exfM;03M75OB%Z05C330PF zTO_<)VU)vfGrN#}sBd@Tt?%yGCoYD}tS9mu3VsvQddyWh)Wx5X`X^Y=cjr~ zE_<%1(Wbn5px<@b^ypqu_cD62J<~3{yc}Z$^DYnWx6s1uLCJ0Q*ki)VR`H>n0K}lW zw~fu&%2q)#nBx?~m*iW-n7D@?d^>vn>78z|BaAU&c=sZ}HOQ5_F!Q{C`YQutkv%p7 z$hKn@Wk5hu6wtZ#Y$Z17R&PR;lk?Ox)MzoHlArNjmo0Yv{*h+?M&SMJ9M(b_n+|DG zM3l%}7KIETE|;G(j0w+AriftWz*C6@V~W5})#ZNSs`k34blU!T0ssgA$^4>dxf!Of z4@GHIr2DudG4gdyP0ISL26_&{&Q@c}Z={ zAcFv4PckuG@YCNrLy=ZBB_(P_j3-ZNm;I#E)Ud$1aiD_`XWwid^PG|H;5!>G-DPyS ze4Fi{$aKI2(Y~!q)3F)>3CZv14AOK~zWy*62ecmmm^%B1^%LSletb-OAh38i)}vc)`!lT+a(cmOVDjF*v!JVjR3o0B4mO z=XFBleM)5@Wz?#B|5YVa^mCRb39$+GSbc58+sD>4CULP`4W_FCt9~V~S@q2^PxF!~ zKJ)Qh$L%R5U!{yrxSWoxrQl9J;Wz1-A*9jon;^n9zM&ZSZqApqHreElD0SHIR#Rq>6u)a(6#_hMq(v1&vqG2~TxQg+61 zT1VOb2Y!b9B!iFeG)K6EbnsX6*l5x)$y=U-*a-1I18qruX@74x3SSON$)9EEqZFe# zN*<=pza%4|%A$0rajVcwrb)ibwPul&riw4qF;-bnFV@3=MuTTtZ<6SuNmZ%!2#a0_ zZ*`Un&Tn1~p1gRYjnpc8^v;TD#g|n93xsWN7u=ovG|2VWC#Of2<(jCyDx&~Tp{7nR z`9AAw;*?P`t|9BRIX&^Jm{G-UT-ndD9e%_@SmYN*hAyhVMEIxB_jn2wHe9h<+>8lj zYN)h=`d2+4&H|1a7Y>fyJQnihC*#LjW{W1ccpl$LyAQ@Fj0~k2iPI*@?F~iB>RoUd z)OPj0lC)ZT6~ab_pMW)~q#pH-YdV{nE>3W?n^d5r;yW&fa1oe(Uq^oMe(DTmAj_!QI_m`+VHIelq7P z1OJ)rt?ibnmOSF+m9~NW`1H50%F#N+R@}}@I#Ym4ePnOksPg@r>hfZ!;7U+Q-R#cn zfI&|~P0K40?f0D;d0*+`8qvEwb6T&y|6q-A#Jc^kgpU}b{(1i=Q(ts%&nEHFkU$)( z40w{8o7jwwhSpa+|KdmKK0n{I_T5Zt+jX)b%!vrSU)A1sd3PW|z)%2oiW~c4RNCD) zKz$}2X#e@>r&G=&7C4~mGfpK=$^Zs&2KmpfxS zKa~_*T<~rVyX9*gVCIGvS=3KO;&dM;T@evE!+CjlThTjO;*5lvQOp-ctZ4l{-^uQ> zxSge=#~lY0h9K$r|DhvFklwRrG+1H0wF#=J=E1Zmfcl-0RA#23Uaq_by~OX_{@J>^ zy0fLaNU;ysk8UX0z*Z<_DYE$J5rT;`rm)D(>35F`QLo%l#zAFHB;7dlsh(6`fFhNgkqQcErS4@1g~qYX^EN=v=t ziaB7o4ArGBl4*AKw73V&wUt6D?4rtk6V%7u?mG3H1R#2ZZ4Ns*979QzZLfofWhHe! z#--HAlGTa_?_^-33N#co*Oe<^6Fe?NvUm?2nbc*F9X%nh(~sIn3>J`Y-0g%Nt1n-S zaTk1BP0&G?q;rI28PlZ!ss&;r#1= zIrj@t6s9VVN|xFNB^Vt&euioAKV_LVdxvKBan>dQM@PE@zJj`4@HhMs5F|$1#Lz;| z)H!zqM_kLOeEP9aG-8>Ub)0(5aPE=rGB2OrB34&fo|;$XN}n?%j8LtTHzun1EQ1hX zE6)yqCq>i~td(beZ%l736N)eR$pVhT8J6W=d5u@KHbO6LHxMBFg;oeO#{^BmDgF_J z4MdNH=BkaQQmbeMV9+))7L#6ulcUKmVY&iM)7`EEo-0T3TXHAAdKhfr_5} zY>2C#;04{fX(-~Zsg{Kt9v!{8X?Z1mIc8x>qQ5|#-M2G=KzS;VvPTF4(05dO2sGtG zKm9`!IMWwkX5-=C3qVz%V3eoNi#On~r!v2Gh`yj7F&R>eT$vl!cgC>V?sS;)noVDoh}X&Mi8c4jHcX{R6wOTJP?x+A;6#4 zo!#cs^TS;69sGeLVG>X$WR??tON*ThDWRf-SSO+YGMR3B+{v0{-n#s6-=(%*fZ|xi z7yTmfna1OptpHFPY_pMxT|@tw-?S}U+m;Cho6OJ2b;pinAc>;wwu%fKaPy}Gj0}w1 zeQ?3y83YkBLS;6}Ue$7{)Z~;_cC^zri<>q{7(82vdPbw{ORAF6ob5z^a|xNH5GPbd!n70hBQq6( zF1hi~_nj!|DOnQm1Nx&Vr3vAs)dZr%3HbW@U3S@OwiMFVr@6yXwc@O-LO{V6uO4?@PSQC~z8l(Pc+C>+&J)yE_${%71I6nK9hnjmj%O@-ckHD$k7Xk8A4k%t z#1STk^fEsFf6+~f)IX45md8p&sDT^+0LxOrMT-KTrh5P@l@&*}o{k-E#Gb7~2!~C2 zm+Jto-wIOxV70J%>`X+XZ_+t-DM-O;3vzN3Om6~TTq;uSkttBwpjoFe_a(x^T}GZi z|Is}ZcnL#&zX!?-v2qbb54O_go>U2*JgKTume)poX}{!DZbpTd(>$<;M1Gr%-_I1X z;dJs$%KCQpIoPB*ObfQRln&6CBSWf=Q&R+PB_ zlksZv@jq`xtozlRWLQFPLxRF*hyQpCt7c(C_d)^#Tzl(PA)S{A^i7U3B39yGUTv(7 z&#&$Fge1(X?*DxX1wrS3uguNC`QdVCTh44d?XcKtrSf_#SWUcbPBa|NZA15x&>3mU z6xN);gZW%q7yB&qnUEH_x2mvOZ0y3xM=h-p2e&S;GCC0uQzIuurU{fKLR^RRkotmO zFn03Rxvqq zz@C4#x8~2q2LhdR`1~udz->Gu%XjFTYz1M@;K(^Of;$aY5sVG(gg}@kTvGtWCZ8tWrZ)LM2NO0a zc76_3x*LtiXo!@_n(IzWWQaD;dLP$#yE9=JlK@eHZ0#5s#NUXT;=uuIFX{J9kB@2d z4Ux=)@39d^7}nY-o%Lv8YNU(dKj|TACLi@@M;oDb9N)6JZspm1qr)9g{Tm$)+6uHQ z#}EPyzacc`;tfYZ6*htsglDPHSc+VKA>8!g&LQR3WLbhK4g?H^sYBR!&&_#Q!@>Y> zFWxW9_hn&EISHuMB8rkfEl^0h#vJ&9&S1eS&C7o`k{6B=b1^ui+O{-n9MoVLXeYxz z3{491#g0_3X58vL1kv7E__Fn+ZnPYUp9pFE^p+PRyeI<}#{&;MxQTziaaW}})_E}I zqVne>|F#wTaU9W%ROsMwUyr1~}0FsO9|pyt;a=_s|E$GG@fLVDf9#1(>RI zxS>ft#~lYKAX9I}Vj;Oa^Q71(Y&Ju@z6QMcMHN^lKfX^PNa0_IxNRUaBa`K?h#Viq z<^)0IfFD;5&$QGUbiwC{N;_jJIW#PtrZ(MO4YyHnW+2~J`yrA^dH(bM z{?UgYQSI&Rk$8_ocgc%Z-oN_(>7C-szZWUrw|ei#(pZXar_2;h?t+8vDdkBY)^;yV z3npc5+698IEPHu(Ht3`EfbiaQdj-%G+`{B*KeARzvt(*j^4u*D_hnH<>Qv*;t~q0{ zWlj)sy7^(_Vw^0A95`keZD($4`_*QDPnExP5Mh#YV#Q*T%XvKD8uB3w&{At2iD@V5 zSn7tw(1C#)WcU#wZ8)o}pe}pvsDQ9&I87JpE5voY^@B2j-SGpPwFu& zfOT-IFtt7$%s_Iq!G`N98W=rv)YRSBvIcfnysoe!`Z6V;#s^|XGpj~uFSIhTH^ZQ@ zpbB=oX4ouso_$i24*_1kLKnFRyMLR z#|9v_t6R2Q8nRkTGGC%0P)&!at)?#jNjs%vl@@9`rPR~4duVM>z+B3C`ZCYr@AuU5 zvi^;MCt-y3obfOoVF5+}Kz#w29M@x9cSant{|^R1`Mzj|H|DyyQPVIf0}v^Sf)TI` zlL{frGDZj?Xc{KOgy6IC*Z?rcPwuRyp7#@I9|X=~8!%tU3ov^$1LlZUdrO`7WBWIp zv-BhL_Dx|gI?J?sptc>ZJa?}@Mib<@gIqcd*sEYRR}_)(b1vt(P2rF>>c06 z5nKo~%Wr4~7|c4I&d1NQdzK9(=iuiVCQO4X0C)yeXDp&nWURsVb|7c)b8Bncp+o1v z&mX??W3aAaC4?w5=Fl`WQ%|{l0RUhuJTWyq0pb6J5G~G_H#_Lf%H@n+kR>1xT*wYA ztN0>!xEXc97OxnSXm}zXnIc4*SAsoB{BL(=oY6ysnBkRKe0r|M{_jOI-24xyYk^)a z**f_Aj{p$1$hg#|3}!SgD7X+8<=F6Ari?`V&9c(gb5&Id`Tx5Q<3$OIv+Ob#M+l)*Dz$a%*0pQb z#^Z5SRT*Q9FE2Wv2xiGj%ITFbMq;kn^J1Hh5foxUr(U2-jRe9Z7M_SlrZ72=%i-Lk zrk6`_)-DVofI{$$w^QcG-2T>n`#1FAVjTkiZZx;2wg&skM(hG45JZMyv^O7{v2|X` zbn$9W=0xCS(W_t?NPD53-HxKt#6mo+#S=$)9U4Iz|FCbw?eX5(jvs#3-nV~V0!mPHVJ(~d1KF*>VmF2E8L zVwMqS`3HcEuT0wM?cAnt!68HtyvTAu5O9l|0Ad1({bK=m+L0yQLm`0Rf>KT~Qt*p; zK61(_fCxiuS1JT!KwwB91e`I(=!F{tgbTlGKK)|$ZRR&{-d7kS*7){+S!{gb zBkv1MhhJN{8f_hk0$_tL3;@n}K`hV${bR^BL#JP7%(|TO8NZcFh6F+w&JQ=4Av8a! zA40Q-i=4k2y59m_m~0Gf7zRRUCQOZU&N&YTbH4tKZ!cZ3_V#zYX*wLi2!V`SE@w;t zfH6ksl?&~8k$*4q!LxqP`Ab0G7iqxDtr`IU5Tp*vwm?9L17sNhgg=Rx!&ydi7g=nA;1|InK+4z zt1W;62s_LiK+Y`F;zW`Ow&Pa-wJ5-tKsZ;r&lss^f~!C#benNNBx0Mo7-M$22?&AU z%#K~e7;(mU+Bezul4iE2u-zce7(^Ij1h_p}5Y9wv0l>Ks83UEw$GN6dgb=d~g9=HO zFofqcS#ZwnS+uh=VLR$w%=rf*oQVvE017A|NCyF6j3D5;t^*{=5&<*FGh_M_LNLY| z=RyERDP?@dd^Qt^$vGE5aK;!11Y`T;c)q#VW7y56d-cuEWI9SKb6h9@ z00IgCZKHlB)D2|vAEq{F!PBWdY%qI zPq$Kl^PK`_q5@``iV#E?LX0sX2os2LnmZX6jB(C5qnrsYIOhUElu9Kv-NYCQE-=P6 zv)RF6zxwP)2t@M?#P(`~5OOY57ry-V3Wt|4D(ns+1UVCS2N9YLNw~l{2$HbExj_Y= zBPixEoe&lSB+F3%c_MDcOr~4hLP$}uY|Grl7MMnK1?7+fLiIA z5rKjW2mt3Goh{?Su}0})*?WZV!GV^*) z043+?BS<*Y$@9}ppz+Hi2e1`CEDDd1&dUK)DE9=VwUD^aQ!Ses?hAhx| zNeGO9;1px5s!}W(MY2m(pa6hdddlE#w-X2sfk-9d7F4`$2LyuZsaRY`vg&p@(Tv=K zb4#^j*rBBxp4_s+EO~Mw!~n2NOTbw_Zg94%sYsUuA>a%Ur&ES0%>Xm0d}cGkXY5}< z%m(d11UQ4lsmjFV3&<=!HW^`QLyeucVZKj`odF_kG7=o%{E{k}#>PWYK4YF@jAO;6 zqGUX#nZWIGfK0aRO!^535wsI43C<*cZb7zldU8CjQ3L@8D3DvglHr(62|{NX#L}$- z8S5{jKz8_K5Sp4cDH9O8JRSv!L_B6P;BCNG@c}i(;*?-oS8{+!#STx5C!Lsrw{@mXd1dZSXSeg#z#g|mO!( zEGvQLLddDjHZGXfSs)M$V24vdsYJqpYSrQz9-o>B$Dw_> zvq*as*~tnRayo zYeiymER;YP&w;)+>j)tPf*_SlBE_l7$lj(i`!hrcB8Z@1NK#x9NNGAm7y!f}5)cbS zYy-3aKyVHPXOw!pK4zq-K-h*ZfF`ijirpKpeq@6A2m{yy(}kuhMWh0Tnd znd1gOTYxyb&~$#_*^DvsE1dH{=JKS>!IEu&Mu=cUB#bdY*zUc+OfbY47yNtBp_Hard6%?2P^6kL4XS=^3P>9(BqAGG#P z!PRdq?s;fnS_2Tl3&r)$^1`bcWi-p4|48liZ;bm|P_)mbxnk$lAD_R&h+hhm2xrbh zUiH?zgkQ@mt#W>`8LS7uS-N;8%^idQBF30$nxYDIioGPNv7h z8gn?5xs?jRA+!xHC>@x0jz%v4P*hb|ra`&lZ~$t=qH!!M5`y-|kBF=gpy|5pYzWf* zNuPtK_dkThOy;Tcl##QDvp=La*ev@cvHxihs4hzW*(U7)CQ z$Bk3NqAX*m!cZ{E1euY~7e0(!pw}c_3P^Z?&LKNUMF0pPkHpP&m*0?V+jV?Mb4ygo zUv|SH=aWx84_!V8rHwcLOAYL~@39w54g)nC-go0=(a!x3J+aTgDgq*7a^nCX&MYR7 zqDYpODp+;>9q+t0)VA+PzjVb4*EhcQgQOBrv7lT?1dFs)W%j-u#u$K*AQsk@58n03 z(9WOz=}64yk{M;TOkkF2SX@$Mf*|7@BVZa75eXxR0gV`r4}R?9Ov7TbtO_fkuA*Zdy!LRm5#adSRNB5FATb8?L-5(zNq%Z`|v4K)?)57Z6K?2muhJ30=PPYhNCC z@EZ^JFM7k;z@H!AjU*Qa9AONh5R5a<5k|~1I6$&Q0Dyv7CZ&?%;MDS#t@z-r+m1YX zZ|f9wD-wb%tSKM(?5C!l`PlF8GBneMfWU%8V)g zg4ciGj*95sJHPZF!0k^ajJg#yZ0JNNo={{0?VA!2mIy%zn~8A#`nP;=hyOd@`MF6P zhOR>*5rlXqAus@lV8p3mSX`1733DBK-*LysSLcJHyPkOP>4O$c4-^!f2@Zk%R*ELr z<||*9XnXGHK+5lNKp-?t14vR8SqK0jjT(**ed1Ho&-~}Z$25mz>K4GVf{UJ_uZ7~)Gz}mu69^auLLk5~0`Y{{u;X>9_FcyZQ$Dwvv9}7C zzWYr;J7fZ8k|w8PA;gTwGXR-S(tgl0St!zu@&XFGoVni5_W5PT@C(l|K+ibO&-^nR z&pGqlIo{LrKAUe%o@p&KGl zl;xC!fKUj*0U$Dgh$}v~TM^Mn3dpL@2Q-~~-4!c}uFw+u+M>fQHJIbhlMtXhMFH@; ziv6lbw}zeBH{MuU`kSL4Yl-#;gSWn`{;C6m&t0+X-^}pS-KmM`M62xGvbku5*I5GS zaFnKGN7a(7yq1Z5inA@XrPQ0BN5bRgdA%>8J+-#$NG65XtGU_!qw(x(-TnFR z)Q(qF=Bv#M=d?sz_^X%In}2!=j*E1Ee(^S3ObU(*HVD4NLl^RZJ}U(Wn00fW2`$Qa zJ^xP!tU-dn>2k>u zqLiIoxe$;@W_0lJzdnAlxwW~q+m%0&M@}3*%pAUs!@Ht#etDixQWS^k(5DBQd#1|DOPFanTyCeTa7sDA zF1K5e2}D>Th+3AUI%ERRQ@#XS5AAw-&w-Yn%=zNR4kYs7>%*kh--E+FRxw+|d=TNk=t}e?Zb4Do>vZA_NPK=O@ ztfwCOQ_N9XUFer&RXL}qbI0xEkwZ!1&+)26aXJ)F(g@>zfv z8Mm~2_NYX0I24IU%GvUnAj>?@dBy@Q&;q@R#JNyZrM?V;?Ut`UYYa zGmOPM-tpm^8{6B?m`qfyy8KOVymeI`fBdnh%=~rVy!!)(AN<|&_k8t=z|dcw?{GNP zbXXoyAg8K7FW?mML@E@u-t@i?hadmO7k>7LTD9r2DtZ6O9=}%&$90!VBGVCpWkn)F z2#hf^Qn9%1aJvYC$!N6xn)h6pKlbxK?ek{)Ez6V@2SLKnG$pH`ro52p37rZ>CY0m+ zf;?bp6kt6btH0*mI|`nC5#b57$FD&r-miuywaMhuDX1(>G^Tt7vY}1$&@S;OV?z7 zK}~r9(-WF0mRNH>`lk1o09-B%S&|HscCbS$~<{oAtcc+W=H6*CC!RSznDn^RL?lvw?YpnY8~?=v`(%fz`ho!`2uD&*j~fdrkgP!J zDrwwQr5rrj-$cDhqJCXK~hna*e0L)qdGV#!v0>yl-?!^-kWD@XzbFD!F zoD;WWJI7xz@O(}Rj2;y0 z=lW9NggKN{mR=VKKHc%_6^p)DssiGa+?Z>IV`ce!tNbMz%qznKzihsD+oF#`W27W! zV|(|P|2jHlCpr>>D{}7o%J)^_-d~;g*0jjEY3X+=$j~Tt>)}U^B=c@5sra9hKe=-0 zSK?ET78Jd0Y~Tkm&+F?^%Wqrn#l&lS3nBuT!SsXxP(cJCnYb0KX{HL1<>Zkr4M@m{ zS&m{z%|E|S^z3Ju3}J}KvC+)VGS1*-?#pgZFrObo>a{FyaPq@AK#NH?Rr{cW>Q#q?ZR@TQWK7RBmE4Zv&4fRIV<@KeOVa_J26;Q^!>F9y{?TatZ_5ShXfv~HjBtKs`mDohz z?!AZQ+$wjXsNUsFgGO$wWvF%bjwEnpML+FoVB-XS>!wT!~+v4 zyn55->H^askqZ}s+T@sVftcC1=n;|(ZRUw{4aL(f0I=Yj9X@m)8UnwnOO?XbgaC-`iY-?{U~d^am%tu*84xAK6-E}Qn38S z+izFP7FYh|zkei_ynd~J^mo61pmjKs<#$J>rrkyLw}0@q5~KBJzqpqLmc9Mzy8FIy z2VQdPmu@Ni#J~OYtzZ3G^snE1Qrq&4k6zP!;Q3P^@qE+NM?Uw1b+}=9e)K>W$XR;ZRW%R(;EN`~ zN1u9VnpD3TMGkhRcHCC|(0~72U4I8s3O3cczWtqVX8FD$Ad)0J-g#=u;oG`a?d|H) z0ZGPETi*6jPye$I9UfnE({&}e9?z=n*Q=)=D}z7%-LVgS`Xf#)#3Z$6-=7{h1+L$`JmP!b$FlZ3zVn5MZkeV95OF$W8V}z4g%EqgFJ50&7>)r3dQJuIG=m zi=2kHUA^c}-}{`F)9~T9-%?ra`qbT@+xf`-BRShY@wRQTxaCZ>-Tm!9-1O<6ZOfS& zrQU(P_dY!os4U3xth?f7+5h`{pMB3~zq;Hpv}^Cd$aFZ8O2I(G?XO$BCzD`S1-Q*8y`iBZu#%K-+c1m(Te)22Y&S3+#Tfqi3M-$OgaXlph4R5=; z_Msnsd73I4Z+Pe1uUZtEnm)FBr)&9*H>@oU$2FP9{`aT<{#TS=}%{J zo19>{(NJ;2;-;dARvCzhW{ zWGxKSK$#?xaMKO%_~IA8^rbI;;jX(r^O?Ku`pl>Q?K2;Fql!!p&`jD%M5Nq2XKZXb zNwL!{X-SGOqzw3i-YgHA97|*ua+N!=;DR%lech5flT&{_6`fXr z7N<;x#4R~vhS*SkZA;Jho*g>GfMaFF?WK6={-*DZ7~DxDCa4{+ClNIi-gj{15GGy> z0SCY-`^Tmp-8p!yGO*5t5y7eu7Q$X=cHGzWpDUOA$Br!eXxD>~co5_e*-6=%n&Vr# z%6&asBrE0+)5>czpGH%3${b6*6J9W*|^fA0&Yn@=@&_Hl$Uk!iT^PY*mM<&+E`d-CDk zO^Q?Hb2BsxkbW>WzJJfIW6j-NC-*(yG+w{BG9C(Hg1eeejHggpMa7b3%ZqbdbA6~G zfTpIEE?HNALuZD=18t{Wm21i!kt5B$G(PgD2mUJM6b~JF{ILU_Q-fztw|5`j{p9{r z9j&L1_lGnY&q?KBo6rGrNZ{zRkN)rP?(Y~*_*_y))5&l$^}>^njEbE4$^wrsyS!%c zx|MY&cRt)2_be?YfBDPPlT*Vx_Z%x+w4%%p_U_u7FpR@{cTZbHnw$H2rhJ9;HXYi1 zs5z&+PEB;*|LF6TE7pvkc=k}+aMQjgTBGiz#nK}WJQ@cMm>m7Z!KKxO)Uv?*9KM`$#qBRHEe-~9Dk{r{oA-AmJq^X=(MO({n&^Mzu|1V5)=Zpy zcK68v)uB2hzU#3+pTDSc#;tugp6z!YefE(TI-^Bidf#t;Kb!;(RWYV}{`$<}ie)P% zPw(1$dRSGYi%-(MKnt`$FPB6HX=h9w3-WnEJ}=1U1zMm>gKUv3fGY95f4z6-{-(!& z`|scV#p5IWP50gZ*y*FsfBWm-+<9^kAfz~5s*E8b4p|t!`cHn~y2t+Kr^D3akr89e zjvt4TGuvU@_k%C~Y}e%LZoXpp)PdHX;g&kc{>Sdn>u=on%>VxI z*)I0}Fa6+~AG<}xjyHY$oB#ghe>FOu{pFvY8BdZMZo4gU{E-)WQ$Cj>D+*wifJ7z` z$&UQITx`Y1Cc_p-{_L!&wr9Wk<*z+;xI1CtYu|iZ;@HFcdNr?#D5YEgi2zOb-txBF z2A}-NouB+Vuekh%9XsB1>*l9^cFz~T{+)ZD>$>%QAHq%d-udx+P7IqK6jy^;p@Ns z$bbH2W%#L|Ki=YYtCqz8LAPyFGh-~RFM z6M>Z@2`FB$2*61TyxD$x4rwuwZ$WosZH14vN%r$l=wU@jIku4XpCKV+uP#D zAKurK@OnIc)wu5mU;M8<6IWlqLlsn(kYzDRmLMW3h~4*tFaGE5@oTT&0aFRe1%wD; z;vnXe_x<@h#i_eKdDjpB=f0s(%v-hb4QsRRz4tLq%D&}Y?;*|i zef(p09~;!NbF!lSO-*M8x=x?Alx&Yf$<52dW^804Y^6d+kDMCnKl9XI|I#!mzxzFJ z?|tk?pSa^5P;=euRu?1H)wB2aU-{XSD>ke?{=~1Je4**DzxnZZe)d4f#94u0(C3(* z7)uydJjt%R?QMzUf7#a+cIDT<=bhW1_{rU0xaT{M?my%6;**CDj}G>=_eXMEP%2t; z>pJfr?|(|?^2XP{ZLv6Y*QY=Kga7*DlyDovElr&RXHGXEZ`O$?{_yk*O;7ypNB{4? z{yc4BoX(ArhIPWu&MmlLOmHSR7hI%0eF2!Kv%@(q&FReI>3kC)oqPgAj1VRmV?;2v z|KhY)bSBrdeTnlN5jOKK6P9dyUPEx+FjtZBV4H)z&Jm0AKDbcWwq4phBgE{h*$f~8 zg7htmvuQ}umhZWVKhj>;nRY|l3=I|4fgnOch}>m2-hR{SlLuco)!f>2x~ZwD>Ga8y zZCyj$PS>7ElF2P=WGIncn(KD}L+38HBp8qg43C9FF;QIVpX?cl0q>IXs_AH_M0V4-;9w>{Jph!(qDGW6Z7R__nToBb`d~R~|H`v(7XCM0o?q$lZC~c5`-b*$ zo)}LKwhrI_$CF?9?TIfQoa}RBK9)*VWG_V!<~R$Yscx)R7rV19W&wZ@#1@Tf)WF#3 zkX(Z6DJv-e20S^D7!-gAKmi~SP(p&a&H!c1=g8CaK@$b?UAbJ)nR5apk<|F~p}nyU zAFRwqG!{p>L0LBi0rcd9gTsbn<@T&Yzw8x@@>X5$7hJ&k7ibAC03xa0iT`-#uDype zDHeJBmwf;LC|(Wp`P#BRFOW@h?Z*GmTK^XMrz=YrO4jj@8-iD%@pJP#oo7hTf5W4g zae@|tQtI^QEnU96q9{+5u;7Boa%8-3EKVUaa>|!f7kCYW+8%l7EO_>V7Ig;-8&|Da zyK+%@XgIHW_0}yLmn|-1rYWlqMV1wZv#_Kz;8hu8Ad^9l3n92=VQ)iiar@yt$GWB# zH7rKda(O(FvEH#bh0F|A)R*T6tERFK ztyx(V^iaxFhl6pna?@77HFmtITM*eBD5xm#4vmMGuHAC^)=eHgG#s`XRxQIF!ojmR`Pf6NwL`PPW{4L5GXOjIpdw!ERfs=B&%asATzYAnoDbbQ~Qy<>4EV>%Iv zc!Q;D*RRUU@?kUdlRqG>2kk0cAla#*S)hi2fe85a} z_YOdbSkTe9qCpl^Kxk1|*SKoKrY)=M3WoZI1R=AnS)c`4pjVr0Eo4DHFUaQw`Mf|2 zbg5BVJ_{iPR2(i}mOtC)kri1{9WJ*!CnwvbDyl=Zw0Jn0Fbyr4vN~GMYintU!KqLv6poGcpXnT!kR5XG@%^VJX+w3v z#NdD_pk){WLW~iD0AYj?6rAhvNdC&}uddX8_uw9f*TWdc+=R~DhQ;NQq)smAc#l8%wV&Zor?4& zr~(MVECZ;ed0E{pZN4R&*Dea`x&W>CjZcs_U<+)PMWn9@XOlkht8gKp@-Y zP!v^>5btX}@$6rIbH|51d3*wv6lRYP^|^{`@;%tJIKr5lscX;r>@&Se&_U4 z-~HUro@V;=1T4OJmGaYHK2y82w!gcNClX2BOhl)n8k0r*!5{wH>uiT!r=lO4V z^DVtQ|JXDIR03qx>C5s3d>&bmWmz`DBZv3z`RP3$|LXrd>CP{8iO677)YX
X3@ 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

oB7@1^(1tI}1QW=Laurih&E*v#x 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%0Dv+sv<@0i6`~9TVx2zZhA*>(2?NR2l{PTT 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

oy3~xiO%8%Jumn|62ebuc5mUcE} z+RgIo_hG;CaJa-`pts>vyww2p?jVNV@YpRzHoy1m#j<8lH6sYPw&S$d!!^Rv#n(|z zHjaR|_GxHDi@^8(yQciw&BNsQw!6*enoDvO7J3-AC~v+o`jnRI8YkX`J8iyODSKo-FBX0*g1!A(zLs%UZ)7Z>ZWy`%-{!7+EaQUVd$&Q*{QxE{%L+P2#O80GZX3%3B|?g?2bk>-UXXWW$rMh%0ZkE^DV}#e z2m?lB0wl$FLgNXP4}S`AXPW+V1^rNb93wfA6jHEuG-x(F-3S9BX9VUQ>V&e8x4Djy z)^FErj1!g<&vH!Rs32oo1Lwa+yeh`SBwZmpX0j4w#(&S+vnjc&NPK)@X`ts`Ve zSK<9HdQ^0iz)X68NXLx_a_ut8R+$QMkFQS1nZGD=$=-)(*XQeTZVO-V_$mifNbe^P z#=BB0`rR<|fx1~>JO73f^}p85E9?@eQSrI9yV=h3;N@AgHAVSR=RQN)R?-D{2lpEO zB*Fi5n4p)h3rjgaV~4!LzWIn~_`kPW0t0P^9b3bfe{5(1ebS$~Sqvoh<$_vnY8LXg z>Tz8+-Ulft+<^t>SfWWC=h*=eomut#kpEX*j5Ae9gTrpg2y4{q3({;ABAd_^Rs{eI zG_b#(bJ}no%gV|EzfNT}kN>vfT#Y?S4~zw}=Nyg$5DvlZ3C`W=ZyA7EQH00tvF?d0u#Ac``AU!h~0ZWWvW4H@2ELFjgToc@H11f|c4N0ctBcPb}mM zjXR6_4~azsG*}U$sD%CYz88yF5QyIhjcxeYEBGbV>zJG=d6pHhr&~?S!pRM~0~+PJZLb*94&^J`!_^HE&j_ZDcCmNUK`4Y||`en|k#mj08k7Khv zuNjZarKl|W58~`h($o|C)JQaJ`)f%HMGAk_Wb4Neah2Ocky#=wQ1GyB)Bg3=bZ*nN z2PHtI>;24-Txl&ox*H;o&tf^_Yb0-jKAUnxHyWQ$87V>e!%F+}>I{y8ogw4o%ZZ>df**U(Tq7Qi(-=<9U6d`KUC!8BqzD+1R+L zq=`Yt>F|!rLCRFu_AK!zg`grX3F`Z7istC!^O>OW))hC_E>;QA9ujTe^z*{wnD>1g z$HnY%4;s`yxV~YY|1g~9i#cC9}#uEui0n2+QvSEt9N?_shIOmz}&33cS zET_g+g8cF)eUE?F_e#!LN!&&piDLTw1MYag=SnS*T-} z(!DLv`*K|`aH+z7UYs|@XYA?wIJ~~9bK3T_znttrw^=vp_ByJi&~r6g$Q>y_nB@BG{E6s$`Z3^w z&Pr1-&8ZK~EJ4N$sSWZYlC9%L8XT<== zTPt+)hxrxk%&P|$12dju6CZNjP>y*E#a1Fj0)K^A%^d3v0X~j=`%EJ~5#BvG_T53K z%OQ{Cu|7kKSksC~1LO9YFRv*FW`3{Ey z{DD<16?bmSdrpF$6me^KnXq6DF#n>ePjmW_Usk0F20xXZWa{PqXj&jD41h z6aUFDS3cN+i_52kV7bwQ2{{htCx-Gxbb*H&_sTxRPdnO;0RRZ0ArpT=5*yP!CkuR7 zy>w-e=Oed!EU}sh3yA#~S?TS3U}}s`Ff&_dgx-|7*^qe;LD#LOg2ii@Re&7Pg7UE3 zqt*W|c&_?Ss#7Kwu^(M{rN5aj><9U|uIF1GR~goD4EA7yRR)K3IYIJ>I-;uP_t$ui zj^h>8vM%4pC=`KuU6-$Lku6E~}YF zX?QGj59{hA&D*yS9!=*;&&N81?$-qlpbclB=yIk<8*Ln;GdewwMn+0flvFT^{I6Ok z^ZS7ERQFB9nV;&kfTK$V|6VgrO&Rbu(c|`U84lFA{`Sz~iAh8qPF$k@7<1CA^10t` zSZ-ERL6=@Xv$QcvN5`_AQJWHQUdK5Nh~bjLn&~b+%E{1@)iLl*l`JC9{Fr?Av0GJk z@p{Mc@gdXvT_wgg-l(i&rNF;ifq~m$ZhZ&r$20w0SG(@EamXmEnAnYvyidjhF2Yk< zw4<8w&4Ng9MgKV%e z7Lvd(lEn$^=2sX`rcup^H0Bjc3ccG&;l%mvgIu<$^8k?e3ao3QKL9PtBpV-{zfQu; zbm$m_ch+`2-Qw5G~C~}eGKc=>7RO{{v4CYOan5| zD#0IwApIVaIEAuvVp={FHHqB$ZVSk{n0@Ea&GBRG2FMz3d^ z_+wDZrwT}Bj{L(^IX(ts&2bH)E`xSiW6ROos_6CcjyS`d{86jD8MUIN=FxM~LE_Cgici*mR;7#to$M?HIFmc9Yda}Mgz1!t! z$Mx6v_P6siSWM4cd_68?l;Eo6&;?Q#S;nNP>^N(KhV+Qa_!Pz0=d-}~xf-qO<)thflFqF%9P@@WB>%CHXfx@$ zm)wLNzV6AN3T5&z{NI`JBgv!(_}Aai_2}x=lLxx}dSVwDox#w?F=#=gw{ET57ZKgS z*cMVOsti*&vSOk?G%HEIg?ncyC(uK0^Z!qSH*XB*H`8^Jx+G4h7gxLD}a=2`JuW!YMg@=s6Am& zuQm3tqM`itcmu}JdHa^1WmENcNnCZFl@h3foS})4dcY$= ziEP=KoOIT@l{xobYeI>wX|R$ z_yTa0s?q9j_Ye{HxI8*M$5EPGKk8|7wXm{iY&Cp&5t-_KD&9*ky0$*ArleVFgg$G} zk}S65KTK8be!Q%a#rnOqq#%MuBF}YJdhNL%pI6kLkBvlvtSp$CCQ8fw?$?u)b5n&< z{#V!AL!7qwhXI&m+NFOun2+~+kqzG`B^-CDkNMx*u}9kV;DG2^*q8<`gw|9qYNtyO|)ste02y10O4eWF9q!P za<%CP4xiw>f zT-+7oi5kPkafR#)`nbqWn+#z{9~br_eqMndIn2z!rhET75NDJZJjP9WC5s$WT4OblB}qYVQd-A1Z;`eJ%LQSAB0&4|El=F| zZdzcf32AGXIC<9;1HdV&mf5@D!Z_7_#Q@=)+sn?rgrq7@71%0BDZicHquc2dI1TgI z6s79S=iRAHFdaj<@%+QIf6gC&(EQyR-uiQ5X8UVL{Hy*(s?`VQx!HcoG3H$h(u1cM zzW}V$rna{u^Bf)3f9GpjG6qk1N{l2EV&YSqbNDr??z#T(|Chi#f71T90v33}lV>PQ zjI49JKcY!zx=$r}{wwJh%Erc4r!J$2N(7DsBdLg&{V{;x{dB`qqWe-LGW;Y>)`0d2 zl|0mx{FXihtO~MYf*wbnb2A3@wPaskTx8Sl1>D&1b{TUWD@kYxYh!$W4NRX&BYe+| zLN&2B4@r$9Gx061)pq3ZDQZuMwp%|>tp)$K{+EwEZCszGVx}XaRav-j@n=PGT~k-_ z;Y}IAnn@Z8gQ*WLN>a;J-dMEQ{K!Nf;V@w|z1{ld?oy?m2R+KR8dZJ1k)-`eQszK` zFjP=kQCUG%L8#V*Q7pRpkO3SpC8VaPst`N`jqID3cSZ`Te=L<{f3+*(0tL~ez}1ot zfCc^_JQMO@S||ETVP}Kn&SnS>P8DAGsPNR1I7}s|N~gsQ2stATj$;YOL6WfN5daup4V`5Tv4Ip0TXhW!Ya znT)QY+e}_vY_(GJT53f341o_dUanl{cO6q?K@i9_pTt2BXds09YK1Uk46jurV6iqn zZ*GcGu-mvDj-p4I=6l!)zq~9TbAWmU0}v`R&3Ae}PEoPQ^E=8cK1F2!&sSfeFrVDc zHC^9&F-yjeFi`S5Poble7F(_-s}Pb(3dTV3%*KjIIjoElLaM!f@zFq(Q(3Fr`Lb1I zy6wx$-^+l*h;8jQ2Oz}q47r{m^hq_rB+Y(-SkH1KOA_3+><9CTXk{nVx-*exTNj@z!j&1>;-Eb!hHQKF*@0Is6KwEjk z=QH2&+DoNHy&Va@p&&A=ATpuChK^QvW2?x|AmXBhKU7!neK37{ze3;1&pR4;_#GZI zw+UPv$^1R_d_JE{Mz-4QKeD-wxu)H=O3!2MRC9XnuYxZhA7$xoCDxPioG3>&BueXE zPNlhw1nZqR#WAk6@O?gv`{gxegn7*t zkrarH0Wl$EWX#%p82jZeR$zftm|;o57w-9)=2$Tfuj^J4;l==Mm{JjYuR!s}e$e&m zwoYKr9W=q@JScy^`&e1dX}C2i_Zn2q2Y-|odCKb&Q|S`dGGh9J%PgOCI^Ch3QqptV zlp-`2=fl^ofC7$c(J1d#uj;SljdhkUNxs1ef%i*vo<(X}+(G_C8brwiO%~3W?u^+< zb<`89`zH*At^mIKmHoMV2>*9%=JmC9;eCwW)_PXQT%!PpGhF-q_D9aw)as-(qBDwE zOI8V`!T@FW`P2P%=jZPMMp4C$W2KWO-Shv9oN<|XRPfy+Eo-%nFCLq=t)T*s_SN8$ z6b3!r-@lI>x#`A1cSP+qCdcJo2aA+zzJ>|t)7rhn8%lC}g&tkL9#>L$CZ)vlb+BJD zEa-1g1`eJKd4bG*IyyQO3b~0z-zm6c2V1VwPBVPHxk6lCw~N$Ul(*zo4u;p4ONetX zT}fIjx3|jMadgjFoA|EMQSyJ(|_h6&2(=21F}bc zV3|>xwyO4`};JF##7j2%xaizoOEqxY3h-;eZ(&0Zz%OY%k&BKZd^t)OYM(S{VdDi$~Gs04rO`3H^O*oAUOnE@!bwD&XnSRageYW>h}|9w(#x&*$pI zh^3K|jX}ECkz9Su{+&BbV*h5I5o3jfNAmTX@+E{u&cN+JqY4oM z0O>FQLCR2Y%n)PR*WIgwOt2q#8|YU6c*38(w2WMgLoi}tzS&PiscnA&(8WOcAi3s& zfJrEZj36kuAM%WBF6xY-C@BN*tUAxo`FrR2u&qq=AeqWN+)R!@^`a1ndi-*qv?dOx z@)3eg??b?3`FmH(OoFd_vsgaVN*2%SB9SR9LovD&m@g>EpZDHl7 zFR9UHo*sxe&+4*ljqzs;kXu^2la{j8emQjh_FOZIG8;IhEk^-DgA{`@N@Y)1tSOfg zfHSH<*$**T6j~=C+Q6B=W7{U?cVKNR8fZ+5yqvavjz&wDJOfaOMN3h>s^m}4t|TU! zP$*zZLX^1i*Ya_3xwLTMYbmYjtd{`Lphum-#wwJ|lPN|H?~6K9f*Rl=R@yR(;_IP$H%3H4 zv;bz36dX`Ce2xTz01>dT>%aqUns%$MFW@JH+Kv8UFRb`t4+-qutHX@TtoNNj$2|0vNX;8!yRzqrV-jqPG$u{n z5zL~;;6R316fC5V5znVZ4?`Ly`Z>a-?#_%YPlyz&6f+(d8SE6HEafK!kA$3ldfWOa znm^q-K+pS*@s=!4@G*Wqu?u27FpUfF!-7$jO+rxJkfXwnvIP)(Xe0kBU;;o2mhPeV z&MlAv0C8k#XOJ#!o1h@$dsv^K5?rz4P>6F9gwy@BZV^7vy&7tVJ8}~}o{!Uf7x@q) zt9BWed2=Q0p&Ca(1Pkxu;l&^Md!z=#=`vPh+qH+F%*J}u>cKp%3zFeeu{STN2uNcS z4xmE=28k*!F&q?)vZ)3%-m)__8A^hM+yS6BTvmWRkh2PX3rlW|e{ zAV527R%xU&=e1BLo9O14Z_#|+z$}t8g3yd)YTxUaPEcrTGdAGO1l~P8=33|GGVQHE1!X6kgiK<)z>A(wU3d;!CHm<%kcem_S;U!@uDSg_Vev5 z&d>OPcM2nHq7fG5Okmb)CysN1`}pi@o9^BEF?_r0`?SX9ZL#FK`#jyX?-b?Gf43qC1Bk=cqP7p7$AJ|ElXL7>PpH=VJwVab_#MhQM~ju7|tr+p4F_ zN7~5PFsT%)m=0yt3iK-h4oT*x)Q^pl=;uJKb?aCCbv-$PExjFT@$p7v$Zdt?sqh~N z^p7jLEf7C;3(L&kv@%diVyLJgsvTmQ z*fc0B3usl_MxvVo=MO1e2nqk~xqHPUP{;Qjln)NrZ6g2U#~%ZUmo#$tS4w4fXMC6B z1kC#KiJ{W)`i}~Nc6Z4-b>NxEz1)juXnv3_$Iv-K2igk$Kt5hySBcT0a@t$}>C(Lw z+Cy*!4(Y3}uFWyARJd3p5hmK?3lb1<_-UJSKQM;jOEQM~cO6+Kv3%2?*pSwGfkK_2 zM+Pef$5bo+ktV(=u$yia3VjUK7ZfOQU9+ZH z^C^y8`YxHmnz@e;R!F@TTpH+q)H!)8}GIID1NE zi^513;df#S6HloKioOr{lLm=Mjd(z{(VIPMPfQIVMh|{v^07MX&45@}Y*S{U30u0Z zHbRR6BesLSZymFIrH8}`wZ}jWVyY1d22iTYEyeWJN`}Z+Qa=y{jMppN5!tIQ8;3~e zrdGhjg%}et!*}-^PSMR9hp(UC6&FuLGC?+$7EUn3jT-_M^c3{dAf-p=kz1A#z_HAL zNm0&C-JRbQ53BG{oOT|axW1ft?20k#uo{4rVW^3*i`&|FSYoaZ=Je!2POxYdM^uas zB_XPyZqTtbb4>F6liOFTdOA=HW3#$>tB$q?+VN8wd$aofJ_^n9VkE_jm9Ep*o{v0d z@v5R$2z_3jzCA(F7>*|BzYcCXx&lJR6ZM?#p57irX-q>xDw%Q;%0VV+gv|4ebM{lI zLz)`c*^;t3Z6@jH81v_DT#h`^f$G7`&o5TPZFB(eH5Nue`Al!TcMVPjTO9onPpL~CL3N(m8-i>uR;2}4O~ z9Haj1+n*-+vT{$|8DzrF4LWWjlcfp%HNpbyDNa;@z<^0i#Y6$q4a>Zi^$Y0&pHq!=O_XD94=mGCJcy(Dl9^U&UXM$-jOXat90* zQ@wK0gU`p^%8dJ8-~_sjIK$`R)T{d>D`rbMvZFbFDd~V92Ma$9j+PZ|&^m>b>T^`| zrAk*^VkwV;M!fU3zSIHmj+X70ckENF?hF(FwPECGk;fq!HB_;Et#jp9e+06^SP5n} z25x>dL`d>Rq!mfd>a@0(X-=DPA77D-Xf&KbPEJ?!KWK{4-?mB5U%(C@+732I#^*y^X(32<{e-!wd4YukXHbbxz0X)bSPy5$EtwVWC?Poh}_zc#Q{g5 zLttv%xh6|-*jnTaiRZ$)L~sgwR6bJZoAIHIhVGL>D5q||#d;i=w7MgnevSVGs3HV=7bJ+S25mXd>cIaXnx5Ux#KJ+|MVH z)1D8)+6@<@wdSkuW6EO@i6qCokCxMY_JSaL7R!sO(W!Q?2FmC39cLX?lXAf0sKM)T zyUj_U2yzC$yS?HkS`Tl_RYy_SA8mBB8u2-Qp#TuG307e28S4jp5IG5qB0AkbE$v^8 z3H({-4Bv0t2F@4lc;i~aSmqc~Bz@f20LhaVA+h=9mZ14RaKtC%HMDlwa^c5pEhgR` zSYRO{)TB!t=b8wo=RB24kejZSeN%YkRaAGG3wmu|n{*~#(o?v)FI)A=ngPrSS?)8w z^%6UNs(tntNk4yhbE)v}AIg$IVL)jbiOXT}4p(fwIVr2=H830E>5&id#|Wc)ZAQpgJk*WIQ|2><$cU4le}%hF-= z>K#(m%BegKNtwHB|2SUt+SY6Ja`S(3lAaGviF#C8T%!=W1g>*+Fd%s_6N0ST*h5)s z;n3NByzvto#Me4Czr$5Ouc51rD!!IkO1w9&getHZ5+HBnh`zs3PbzOG8`n_KM3&4N zO9-W;u4z3O5LYN^sSiuk6_wTSFa;(eEs88DWJgU5G9(l6`ct~nl`&rveAbXQW+dKT zB_lmsvpB7NC~Z*PJ-mOR@Qk{;{6TsW7y}!3mPz-gLsX`W;bUTkr1-{_Z5nPbVb{H~(o0xJ4YVJ+XaebowzM&)4M<>&;OtC- zAVoZp2-a){r`50v&t$O`dltWTx{Z`l|8PY*|IyfpRj7Ic2$WUras|;(uUoEv1@&N)uETZWNdP&lvYTT3W z(A<}k@(Z%il!CpxalFJ?q7sg0^LG=7vgi~i6(yZnm_BDU%~pK3*i>}#(Vw}I1)=ov zw4@%{wu5m$Z=yrbG_bgFnohsBP02Ic@INMrB9^&n{{{U(0>9flXwEYv=uTo|wu3;- zRF}=pPJ>>Ar#RUu8fZqhIY+Ue8{TOyMv;MBdH!A42_(wLZn7dGX@)ptfw>&EeX3k- zOeWpKrSRue^gNT|te|u%=9Ek0H13?ipwn^W$^qNE^imnZ&XAD3);U96ecsK(SxtP*L!Yq=`rO@H zkk%&82`5w9*`nySW^w;oLfR|_)dL3|dC&pXg-*^aT{l!s*GyhrQ&sMffU`h*C~59- z@R|ne^YxK(*9rE3KIh!IAI3ZV?OKvQ$g$P6%wf{h~0S+sT7F&8!7fY|X?e?m~ zy5HUXhZjFuRbJDt|L}t@Idj&kcmDD4zurIaxO0!0P#uXTIM0EYdtgA@H<+f0gw(D3 z_OFlq@elVstd@+OJYwL%N6xPC(WK6cEBXu=IJnqpe)GlWJ6oc%EFw~5dJ?@y&z!z` z-ZM}9^SKop>mW^ssKGKm z04V{AXfkL|nmXeq0{}oo!{q)F|1&2I9p#1>zuJ8B($LnrwncIAPqPPJKdICQmLWUu zJ*H-e6?u7=cGaQ%C%VjkFRlCg%BJEzWj9PNUAdwD^Cs2nao%uv&98^MzS$8ET&}&aT8)H%E>fRx)!~+0=4LGdKW5bvAiK_02Q;v8Z<$$sKp$4XAtt?ks`o2L5hlzr(5>?Q!Fvku{f$ zDSTsDoxi&L#>u7Ywl)84>F!Tk&C93vpX4(Bw!A6A$)ur`H_sd_Mj{(RR(n+CqI|@V zqQP!zuwL}J*M7JmLCZ9~RU@ys@y_#)9jnG-fFv`GW|k!vRL#BYj(e{;9g`781cF>m zCUw)YB~AqjreT;22o*$uGE>)e(=;tdVdbe;-SNP6r(-gTgd~!BMZX~xKH0E1GmT_2 zp=z38m>hr*Gz>MV=>ROD!PJ?@k0_zRh)NI=Nh9@?$tfY+)RU@aBQ=b1#w<)a_uP5Y=_kw_Q0%lAH+9vpI3dIaCYYsby1_YT%rq^_vP{M}5(3;xCX>3! z4K*f~j+lGoWG&obG8T!OQ;s@*L<#MPBoTQcsaNzHT;Y>Vi`#TzL)UbZ*-{Cnp(PVZ z!^--Y%Y!qxjl&V(Rx**$bQ4m{NTz8zM?^%5R$It8>+0L*j4FyIO@SZ)P~?$>l}QF5 zXN=n#-;i<&iOe!}!vZ9>Zn18dKqxm{}9z)Vfo0g)g<;HsL`bdzVD zQ>El=nO*Wg5IN(FF-udmbQTzJh6qL?B9)Ff>DYtRNV{e-g2*jB8BZ|IfEl`O03tVa z!!#`|&P4x+!F|!xIA@k+GRsgkl_N2diJD1s{_y+T&N}hv0fmZT8d@^08zv$LZrLTq zI0J5}akZlV&<7acKi1hI6}(DY=2bNeN*IJ0z3H7tuU%QOvpAOV1cfT8P# zt^-)QZcaVw_~B)Ot{GX_hah9DsQ>W$ zz!7a>XG#bql!^i*Oy{LH-g(6EBF#i@8HU9vLCdsK#Aar3W+hdlyx))tzoP4=qp<44 zEAG7S+A~Np!U=^mUy=hN5@42^OlrDmkBB%RV~lgKOvBywJ=?ENwBe0amLY7iMPAhC=TqDvA6iBy>e>UlRobYk}9p!|D!0zA#a-gAsya3@Typ+IJ7D6GNzN-b(hl0QpWSR&p9Q&kIM|Xx!%9I4L3|)T3vl) zVNq*aM_VXvFmU^Peaj0Jk!sQQ&AS3f>D~w&o#6iNlJUbeH@baI_VDifFdj7S_mysW z<$J2AeMg^v=%YWC?cvqtne?QNI#qMGZ9M;3zL$Wzrsc!D+2()jK>NFOuqfz(M?S)j2>~C-zy5jkh88H*V-I2g^Kc0Fg49eZ5Skk z*xn2G9Be#^2OWFn@IXsc$MTADfyLc}51d`xw=IQZVRi2&NxyMC?9wd zM;ZtOt4Gbau9RVWs*Q#A{ILZfs#TAhzXp5NU^OW(O`*l$5u>rTW79l zKc&c>nK)UD``wZN5Y)M;>F=&-)|q^0wQJSJj-3r1uXAa1zoIe$6o*IvOoGHROG-=s zI8#}^z2%zKZTB2p=ywVnz(kO3c6N3S$|I^7cji;h)8lH+c}zDWstM@<9TBKcAz)ag zUc~{BWFV5fjrn=O*!=o50^Mb5nVQRT`<^{^jjD;496F@7J@$|JTgHv7_Q+|@H3uTl zViyJA9ARsH`)igsrlzn;HscBXz3-cKCLdPqYHx@aIw*kUk}zW6C5I0Az9she&$sj& z-tW3Go}>=6w`1J+_TSh{MK7)oD9Suz(-KkKOJNpkFMD$2&pd%7DimUqh1fw+&Z25lvpa0eO{xfPs zWJxB}^si{$y0R^llmvA8$_AGBjYK3GOD5v6a9l6zJD@KlK&aiZ%cKs6L<}xfmpR)Sn=LAl?xvuWu;!3)&dj6M zzkJWb^EQ`Plrx5X2MjTS^$qQ++v8@sD)~x1qTU{i3l6u4mdPpMdNdkGN5PO`Wyw&W zC14&fb=HN)6x4374J6byz39|)FKU_>YKI;1P^3@4YCDAzB}gckrmv)eYN7V1W*LUJ zw9f#a(Av@xOB!jSY#w|@5KS$?760I2{ga`#wopB-B(*ak{vnS|D>%Qwqwxg5J^|l|<15u}_7&rM_M& zsIGLY3m5M&1qA^FQ82mEx7^**)NC?lf--RE2rJRi8VH#z%K+7q30HCTz(Q%qwjHM6 zbV$VHV&8Iib7K>yQc6CRaU{~1>Bn7uT-nae+XJf6+|(-iDh?Rv-??S8Ar%yRps6_^ zxeI*?BrQ*+EAjQh?IsbCF_EGPN}n=MdrMPNS7#nObJa7q{bRu{#qF^y=s#$P9;j<* zPdFS3=N1P*$=kQpnpAem zRMnxXZ+Rrps#(PCmUT^+BrzF_>IN&S?q8&^rpBhEtKT`7{&Lq_q4qB}$3yL^W%Km8 zD2Y3ke|+_p9sl^(gKFrS7rv=g6oqk)hy+=ZdvCq}0msUJ-u%x`6_-a6(!^UpA_$3a zaQq3E4kO#2Uc8OUzVZP>q(sy1)qaEP{FDfnJiSUbmyuIO~ zJ8!z>SHJ!3{YlYB!OB5OIi@)48KD&$A4>^sa7GYq(G{M>5>hA`LEu0zL-4gVp^A<<+ z^Snad@5u5FvGcJV0j3uMdcvS{8g%N>{4&e=gIRTGL>q(7QrqqO(mN!&M~HbhfkI|e z2joL(-9TAgA?KX@q*9Kl^xMt0Gklg`O1XYlJ8_n~BS2$M#okTH_h6j>_x+mKAVE`I z^W6q@Kvi|AzoM$LUw;7+EYnm~JrrnJ`Q4U4!V(0smry&gp1UR^@9Phkdi?+ldcPv- zZhHaWW7+SwBbEPu(C5yjkg@z;5Hc`yUix^~L!SRQhdmT7&)Hnj<607S^HldqPM__a zeD&Iov7C`iw)OpAZdHskKp;K3CFr$Y`&o=Jmgg1*01-_s34~Tu*8ninv^ZnQr0y;% z_aWD{B-k4y(>Ehxo-4WTgXM;4`AaH`5OiI)0Dl!>5}dzy=f}F| zp&2D#uWS6IE^dbF$NBorD71e2-j0jrj2M=TKfa`?wk`SSlD136mK0FV5vgVT>#N$r z0%ucu{ERXE#t(E%+_v@VdD{n+cxG2iZjq=a4DMfcS-@)5EQcZutME_u;d7fJQIq#C z@%Hy{Th@{waY;fboP2Lnz_fUEfx|&jricInrQBje29}TCwD~t5Z4bq*OOGgXHd}YE zs(anh=Y#=n&47`E%E#~8VPCysW~sWl)+J^8F^Lib0SJneAOIo6A@s<81^~-6le&c{ zNrGV4Z)V>$2M`320Ghh4n+$>MVMr<XHSW zGXT8wpnh*`kHsvk@H>wj;)x`AlV&Ooc}%%`NmE-A0RSX{ItW|5t!-t5$quQ~CBXmU z5VF_)|2LaWEV_J&#$|tbap4^&ob>*}2X!uIHk(t~<@bAlGX$oh_uT8Q9_G?SukY&@ zA9;6^eB*7`6|;_Lr0vD0UmADTb;l2vtfC>t+E=c*=h>n{udOz~fK-n>;)aWleDUsI zJ-4J~@WipxM^==KJZ4s(UB{eo^^xb_al&wk6%S3Ue(Bj|w11`FJMpkNa>3j0eo-~@ zh+8f@^7*^2eqmAF0n<;s;?zT;G0Pd>aNF-+Jo%=-9a<7-Fnp~`Uw!Q5ZyX*Mw=AAB zeMf>x)tE5zq~oTI3i>bqWx*G(ezN+UYi}OmRz;uxv!{Ny$T;Yk-<`F3`NoNp20iuH z7p9+bb|DLyf}{4^mmmG0>8`tesRqKMM-)7G#~(+J9_%Y|%$a-K!msB0T;m6n`@9nm zKVB|)>zxHvBagWC(xaZc^H(n{uI)eRq(^Q$YwOz0<;CRwTW)tAcFC2;4hUm;Rbu(& zH$G;$3kkD$&LjqrSb9RPI`G!(&q;Pf4;)kan~SfWc*VoVR(3QP{+310J^0S9+wZ-_ z5p5e*2Lbx z>HA;bcK1VfJEN_`CyaUiwo6}G+2(Z$3{X$R`%Rg9-ML3ZBBmq0;kS4F>+HLpJ-oEN z!SFRMeDT3&KX-cEoO5RCa$&!NCXVoxIOm>n%HsL&1Yzv8SDef=?lX7%{%>F0{-=k( z`s?p1=Ufr{^xB}d;0CQ*Ij?%x+RMTjUM{U{df1Bbye(>`#(rdx&N$zxBUM3sgpXD;6!cm1set*+V<#Vn-W4sSahlQ6u`{cLApgu+JsmGio7r*uTy9tws zG&Q+UoGvxI<$-^E^59wLzWL2P77++%NT?By_M3jrfzI0V{`slmE0Va$0aF?^KnPPw z>6iZp^i2!DA0^~srO!c{7ZLU z^~U!hm&5J%x`AbV^4fCEOizlH2mbb&bF^S=_(0{E=NBA0x$4e49zXNG`vY(PZtH;a zemyDv#7Auxo-pVScRb+pJ3o2)Pcx?cZO-KWPcLpNbcq)0B5jQvxGiF1Yhu`tLE80m z3M}S1AX-MQgCHUh8^-3GF+c{4AkXnp$XIqlmJuFEcUf7$u=~B%c{p2kbO->pv$d{d z*lr%qMJsq3h0Y2#@U(I|&%HS)c$SacDJAKddiI$vG8O4^OrPbL5{|Jegab!n z>kZ}0F{cZwo8UT?NCx8SBwv#`?uwG-ow2Jts{oGBo#J+WvE&IZV;=gP+eUjV^Zmq~ zp$k6ugE%#a5NvB*+!k=VT}6c+w<1x3mT5%7(bkTLW}&!O^f@;{ogu?cs|G)Y_0tmu z-Az&EALl=~?+Y~l0qFCd9U}g`hMnKzZY=v2XIpUR-afBM>|q@OyT8z>zHC~6!7~`p*Z~Q;j$_Nqw&@J5r3+$Ct0!gmQOmYd%|LxTE+JCK4 zN_XwrRajW~!!TS*X-7wg$K&~FgZ=Rd_)j*1pj$AmUrAYksu4P{Kq3}Q9$Pa3&@y3Q zW#Oa0C`QIanV5oj-*H0~8Mq<;Vq*Vu4k8JII|*<=W`eKC_sAUg&amcoDphV`Sa9vk zp*sUf(IJ&9^ns(i3I{_F&z;hDdmza~q1r>8g@sr9T)X2|xmPKW@Q+7(6a$6~uDW?3 zx+FYfbXkkW2Nf$4;}6bsD+UZ6RCW6RFfF|4=%L#>RG-IDA_MbQJziF%BDE<-rXb!p zb4co{0`ZZ3MH7TH)pVfVD+iEZ>aF{n`XEDI}&2)YABLqMGk*) zVUcThW7LpE0sxw-OP-?2Vi#~0jl>cLBSH^b2@wIn1ajE$@&Q3r8CBWWO#q4?EA-YU zSf2uAVsU?ls2ec6U(v6M+`HpenOBhoa@OR&+XG2U5c)W2<&*&&(KPVpqlbtBA)fNG zpsI|n?CU0)-Ydb;Yd_MsWtg(d9oV_iD40{}7q=w2LcrcuV5=J;6)i2^=is@s2E)0h zTvvYTop;VXN!{Wcg6poh>F<)y;~qTo;+cJKIqPKYu-mVhaQSXwpttl5Lv*{5Dpaq2z4Kj-wd&(``B?bW|M z`0=-gC=Q?6u>SiPlbIUgrRQHVi+um;bq_B3-TN_>dz0a8+^}+qvxDHZJ@E@ z)a(Cr-6PM*ie!rcF^&$&`sV#tK0SCsj=J3Al(}Vc6eIybbQL+&SN{5k zFIOMi6o=_01)CQ<@z9$7k6(V6`OHm^{qwCy&KaOc6jUfEF5I%dUoM~O zdF~S(2;n9X9r5N(|9u#z>&@?5g}d&$Wb+%p{`051AA9kgxnn-14o~aaPi}nunTbP+Moq6-w(wiU|rv!b*6 z`pH%m9Rfv4lK_K94{zJGIRV5Y5M~Lsk3=AXD3V}1JN5Dl!YkhWYEygh0muCMs?%1y z^duc|*l~v}`PY~0Z#ed-cXq6wP{kivzGi9bw$Elv@_L+{hq$eQj+9br&ulEy6a*of zq!*ljvAFKpOaHk1p}*eaaXBPO=9X!3;xF`k_1pvFCcgXDqtYpJPHfa=pHonHbjz;R zk;4bzSG&<80YktP=*qzc&2spsJXc`W=9}7RbZXT$LteI3IKb9b=A5TEse~i5g`s&` z>7DZ~x*7Wfm~@gGNWF1s_nvtOLXI8>w-II=6GY759x03?y{#=XBV_hjxJA{h3lrLBM-1@Qm-opBBf$EC!vS z2JcmigXjE#6r^kG)Ti~xkzWY3OX>eJ$;l5P_iQSz zbQPxyIRis?B0=YQP|P^a#m-kdFTiwhDwq3I*8=ZMGw&XH=IO7UB;WVY2n9g^;E8xF z8i}MAu#i$hDG`NzgSAr(=-fnh)q4K%#`ob}>Us}$d)WP}voA6HTx^o=(dYk7+g~1e z)^aXN)I!GHyk8H0^TLN>5CE@aPFgT8vTB zOOEcfpVI6h&8ShM)~s0*iA3-R{XlZgolfVdQKK>e{v^Tvm<0U)VjQui*Z}~#!A(R( zqzGVgsPrqTp)v!Vf!9G91CWHl4#A#^8D?rHp=kmU=+H7Jw?H+3AgC7fFL3|^oq$U$xOU=NUNfozX>It1uO48DcHtmlvJ<%Qo7o=Tz z*>l1a;tRT_dP@5$(S{u%`P?H8@+9Y(3<;%7Pjmz$PKVdy^}7|?9110p2}jweNB(f< zh8OSp>&F{L|Kb;7xNdt;yx_=#+=+LAx_o}W=JN=0Od!PN@w*kWGuQzJBM2GgWI{wU z(z4q< zK_xB_>hSp83TX~@=o*tG+_8RLQz>Kwizphr0M`$|s>swa8c|LeYA3AyH#~*6|X(Wt; z>~Q-0e%nv~F6zOLUCTbR0Oas&UH#kcLg0H0b^Jbf6TG0HoXo0ssJV&WRuzk(Te) z?iA!9%rudt5k}yYfXC}8DJ}K@L_iS<+q!1?2d};P)u*pEHSvCjlr-+z;q5!DM4@e} zSyEhJsnK>503;*Qymsw&Di20xsd`6id$?)Grf^&@LXzn{(`jH?9vl{U9CUYk003l} zZ25jo7&t{HN_5?~^XmYP8D8D6{#)of*hp&qM~$!aiwwZy^^}&Dhya$NfTgD=niK%) z>Y5@!dHv2705`QslK{Xu3ZforSh{kn7HIf3fJ3Jq*3!~OLSYo7qN@H&<_xiB|$Tox4_Tzq^es)5W!4JZogm|s=-A;AcP|k1i*MS=^E$}5Q!iF zH#rcG-^UFt8tSN;H22uS`aL&%;qZC@PzyFL{^pC-Z-1$E5YpKKl3e zh)`7EbIGJF*ski9TLdJO>4{)4B9#{)pv&VYRxCgqeai~Bf4re^#37T0m8}296u>}d z>Bs{Hul+0`x{Ev{QWq{7HniW0#_hx{SsdL?XJTiJ5zK&R8Ne;|DrQu4GaZTDCem|$ zmew0a09#Qxr7MmE(FPb<>PBKqOsDPzWSH?D2av;Q1;}j@ok4;$?>PN`W)zrF)5zI^ zoy$H>1An&G1|X(L%ISD*NI88s@N{2dQ)qcE5`~y@@R--frpkxsP&u=53VBq%6l9uu zv2c$7bUsh8`)m6`g6?Elr-_&!V0X7>@7jZkapwf?1&+(;GUoxZdmzAe&3neNWLoMX zwMb&S-?Ym-N4qWC%j5)_T`z>}YD5kWoduP%$aK!i2ZM~CkS-C~g`3lmbA>qa$`;ej zI=#e!kZI^W)(qyRzw6b!3%r};rTgA)qR0<$&ooxf0e}!8V^7O1`&C>$qz`ir zdM9ALwr^%{nxX`Na^1An*I6sK(Un{2jz-eb!4pZw7z!e~9jvsFRTSzqC2VLF467zX ztEnOj0MufDz)AiluKyadcg}sZ`?IIlJlh;;4f~-?*CYK-y<*ld$5WNl?z&~nYwvu# zICA4d58uT+JQfr@H1g^Eg%_QE-MwSiy!*!M4M9C-$|qiM)w;&V{`Kz{uRrJNN2VFL z{iAnR)Lk?iV^jcBS9McQ#QGn1&R;Gaa``z|>`M5`0Fop!Q|DB0`HOZhf9Inq z*WUZ5M4@F1o|Lp*7wfb^82`>%LhV zzvlN3Kd|`APhNR%;b#jLU3~iW_l;fi&g-w&2ep_f|Kh^S*VjK7h$k)X7YUe*bZlSp z=AvQO-+fomUu2k#rkduQz_&eIEpTez5l`IS6zIkYf~WJ5ff!mS2ZF^ zmSIp-KYRb<-~RgYdy2Qq$za^x=#av^sLZ3E&j0q3)35v8sAaExxVl!n>b|?LDZ@xq z=P2nW2T>4+$D@V0su_YLf@!FlfdmraaM{>1t~`6ypWa-h8m1u2+_FT$nD^Qn*Ij-7 z^^R>WW>{boRFQ$G2(jm$dEwe~u7BV#1Gawj_R?KfoIr>mfoUc+J>7f|0c3}>Vcj?1 z$EG~^_=8{0d-b)yJwEi7%dWhlNQ*VR@ma+UmmGD&@dq7n#h>rF?({2u|3WMhu9$H0 zuTNh7r#F@*HA9djFpY$&0{}C1AR+**UHrxe({6eA5BEzx-_uV$5(mMN(q*tWz-tjh zI`hhF*4=zpM?7J7rMjl+(fH)Uk9**EgNo&yH$VU3fRlz@an)Uuprk#pTmq-rFm8Tyru;1Ob2m zI!)aG&NyR&DDPbU(TaYT{pokNazBX$MF9Blt-7B~J z>Afvpj}$Yr9cume3toHY%a2yJ|NY#u2R>aQdpwDR z8a1Wk&%b*%{1XNmz9XA1*??60J1c-*jB9~0Dy$pip-e};2blZ5CTd0N<`$g-?)?)V9r^3 zLBM_kvbqJCUaSi}H1}H;eNJNv-TZX&bm)-wWtYon&Kwg!TOlOvRy2=Mo!Z`zg}LoD zyNqYXRL_(K#d(%~of&DRXuANw!7@0aD1)fvBJrL2@2*E(FaNNyLQkvedwZ;>ROBZz zcR`?Q5E=NGXTE0s&qG6b9+KN_>{-e%=6>x2;__^8c{k)UpLtGV($S@#>sqTTp_q?48g$a=_fZseF**yx;`+@j;%oJ^;>OA|s4T$H3^XPqQT zk}Y%yKap|H2_d?!efaLHrmpA5{gXq_d70Yp8}#(77vK`EUAO^1d(24|ygE)UYbr=fIIC5{X1G=C{1R*>Trj)PMV+uwzxjpoZ#szkF}#@F9#b zTT$+RJFUI;pKhjU3W9L+Ew?$`1$W$Xy}i8gzn!T6AhRqh6pp&QKHHtTAP8+O%_YSJ zk|cM!(=g3YR4wqj8T&yo^;!>RS(ZbgFTe5O(=WbW;P-W_(1HMl$$UkHgKEmlio9-z zM1ZTwWFQdSxvR0UBS8hB+aVOCG#CnBaMmejoIES3T9nfN?d<+6h6uW0YPwqJbN>*o zRj>VQrt4Z;AXrjXZki?`#5B#_wc7=nG5{zlEO_?iw{N`eSA&L)I%xKp$BiTp-u=KX zRh9{}7~_mF&N*WYh_|TJBbxPfbx~dDH=w@}tZxcx4w)M0>NlW<>e0rgW?k@A70C?^ zt&-DeYAOT4UtH>w%*LixouTY-mzNZT+Zt7n+-|qW;|3#9zk9bzeSJzCjSa1m%VlZF zq;3^g_VrP%v8CPOC^_7vCH`1@b4z>FU0hvVDD2#^%c6?Qp;(4$a;iu)7V0P*Gxx!3 z4!!@{-)v4O3gwJt7nWp6W~Odf0L)M=Qq#Ym5p1Y$Pq^G}iGrr-0Eko+DcWprN_aGq zD6Z;@@z#zcaf&>lsvvr5s*A&IO_7A58&*+eA0O2kTRJR`lEYP2QV?lv45{29QB~DN zNkGvve&RSmjSQGNrz-sIosYa+IqjSWe?8;(*ZgL4Tv2Em#6Yg9MsZ~|##)0akp<3) z2&QI&;E+f(9QBk|yLhxMtji+k2Fu-#t!YM4RbRiL*VQ)>cS(`MYVC*%6iiMOk*Jym zfSjW&%goeFF32LPs>YEPl$5%OR@c}jDh_UF7EEG$wib_bCarHnj!A)KxsN zZ&{?ZF{~2>wT@5>1f{6J6Agzf5Q<96T|}#EY!w|&W~e3ziipXiCOaI=&Pd9E_&>;3AfyE`{w4b&JclA zRF%g9EjmzcS*D?L$upp)Jk-(V7^^uWxE&Ah?U64Sv0oj5BT{ z{>+APGbnD>m0*VFj9K<@K4CM51D!RVgM-^H5HsEcQ>!W&2pW+iK|*Z|5D|efW|_=1 znPoE5rfLHRf`~{6Qc96f3YfwQIcIifYNOEUmpJW`B()Zvvm9%+_ww+#lyr53Y`Z(Wzp$9SZ5uHOxE(W9n#!>n}VF*STZXf zXlr`dr1uA$Nr%z-l|;zDDRIbA=aD^5V7i=y{W zoSx_8X5@cr16;55+FlG1Ov5bcKfF}meD|I60*0bcW-%M=T=+&j%J{eC_5!< z_qL5hP#lVcNEKr2+PV>lAW4#7Mt9YPL`l$+NkRy6GtjuJg`up71i@6JJGQkGQ6iwl zBcVo%aYR{`1uIs&J1j|}noJNRiX;Y`Y6F}|l86X;BD8&LfQpjC<x6nI7MK| zWC9V98;PW0qEh6D{qvDOZ4RO0uzk2Oi={Y@s+vS3hyYY{P_}#f7C~}&Tn5?VJ7$KZ< zuDIMrq-9eFR}{C*nX0OYh`@9mkPzemh?Ek}7)lD|iLG0y= ziSX9V0YQ{0fq2psDAg?p?ppKg3)?r=wG)S1;f!u zbU%!U1ev937NG*?+~IVa(bi2JTyeNW&NWpXVKKJssp18Ml&diAu zH*T+QQ+X^B20{s%(Wp)-<;()kIS{8q4%BTA5W%I$qCg2S-9&*94uAxVM0m%x4oOic zLC#sQwV{KfAW(`t9t|TQh^Q!HuxU3?Ng%p`0>nESqaaXXntCLhL@GKIV#L~$a_Nk5 zL%)9NzK@q~@%TL4&^vb-xnO2ygH#II3If29 zAaH_ckCFfx%WzLK6_+Mvrak#|8Ng)G+;n2I5(k*cK^I0XAT$DkPi0Du5VL_t*9V{Yw>6T*Gg;(#AA z^yoUz<^vZn zC|FjmSRQZ=l3U-PibQOghnx?CPIA#jPeh+6xI2Z%b;c+RPF#sThruS|#L?TN%7 zdSb-_#zA(toQlFYLqY&j|_8yEK8;cNJYWYG+l8hz!?WX6cmR5 z0APclm>TGE%QOv>h>|Q)07OD51wtrrE(xM(=zsztNRSx1&WYeqB+faY=u;9t*D?Nk40k+kDG$2CgLV1PPbd4NCn&97XtuE zl2Yh52TrJvqR}9w0sv>65mAw?;G0iA&LyYUDMdpehucL`+E*#cFp@m?a5h4hQc+He zPGE+!nnq_iw}2xDlD;qX`lXfTGr$672*{XnQi#lkI~f3BoTbE(vvLaA;>=i@vYI`e zE~-vv^U2c45eTHx&}mqfL$|hZ=5+e==&js_&+{c30FdXBP4j%#b?%Zga4`UI0zyxB z>{maZ#ixIY@+n!564V1AbZj}>z*}<`Gc#@SaWxD<9*~pb}EG|8k{FUk-d!A z?XU>b>=Dcybso#}ypU5DSoYYilP+p9nT4?|`i%MLbABVvJh)G=Gjv9rb93FL8gl-2 zgTkX}8lQdgeve8cIZ^fyHScs!ZqyvOY5Y`xR~OCQ=fD`xjAd-ICme{L5yOW)`Mcxq zVP>aVdhI^72Hb1Cw*SUBlNAR7xII2W`0rF9_yLxtL+pnyj-Ss6LM&l4#SKvs2Na0h zN@*_JYS1lF)9n!DtRo_j1!xJWF`xqrMANiasDM(SjBRaIMOmuy2=1b(lpy9_0v zoYr_n1W0HWBg847$vEr}KAYZ|n?wBCw~Di$2y3j+NdO?JSr($jxKpA$KfkGD15kpg z3<6*pc_#!3WQ&NP4P=1rFUy9r?P3G~1kg>!00jgS{6}3H6q?oD&08lM13WNf; zYoGLr{r}%E&Ovdx4KrFZ{>T}_ogcsZL7NH`(hjpYCj?{B{oxG@*EdU&06-|E zHph<;!WpwQ0aCn0W?76AN(lgC3^>=hJmrYPeUmsH>f=CDfW?2lthSPx1G`lx7 z6GcEOIYbJEVOWfD4g?87WZdEmC?%F<0iguAp{pfB51P|Y{$jyG-Boq^rRPQ0eev0Em`5 zjz|#!fiugpI1)lAvG>%cvW&#OL@7mrDbbRGB7qXlEWYA_b=%WTGUoKdryQ)t+lL<(Q%jNMC0;Zvx78j@h=_LThIH80fGR7>60V0?h^VXa)d+^sEe-MUmL51DdMUOgQ@V;|{4`_Q^}{e<>8zj3{%}Zr`p` zSIwaQE=jOVE!f^3jwg|jL^L_}h`IjYx-Zw%I}|ZR+$7ZDbaBftEygShkWfm1bJMcy zCd3#}!Zo@0g!9gwT*Y5{>gkPbngpi5-?%9Q9iPu%$RwBD=xpfLE^dm*IkQaW@RbfM zD~z`{HnztRnBprRP%Q1(z8eG~mQagIN|+kgElxzavSyHEMt0UUQ&}O1U}@aj@6_2t zzWr>0F8he38y08GA~uE%+_IR%?RR^*VOWG9a>#52;{e<;bXsusHCK!(OuqTz%Nql_ zEZ8nU0Vx5CBPT>aV2lF_wul9Av|aik5JD`=olX)exCv%MaWF^yU|7B*Q&&#(O z_r8tWcar)I9n<=J^2gs)9yI+JD!LeB0NmCu!W<)nP=W}YF=jE(S#w9tdsL|Mwsf>a z2bHY*>+SLhvkv0?zkha~9vC9x;GZXTS3OvpW)^2o?v%K^EbImAmfxrv7i=Y`=d+2MV^^ zA+VCk-+j96`Soottf>F8QIjZ$B06PsNJtPIGCE~c1d!~La>|!c<~#>*$Y_5RG4<6c zqar~v6ux2pE|R{)I4DvoWJQ8CJAq5H4K@?#A+WNP4 zB_t7?GCE~+O9X5HiBf?QKtd=bgdj=%O9=sz;=+;iar%G&roP%6v?-;8Qp`S11WJ)o z0Ql`Y>leqsY;V8hgPqN>S$2@&*Yo6vXKjhCGms;`adj1ovhLv3wsv7`yyXm1Z%NVHfek~9!_!{$|AE?dt; z2hk&|zuSJq#kc(Gr19}+JV*2i!BTZc%^iRE-3X;^{q|Nt5_16&LNOdOjyUDq@fFzE z8jOU3;cz$@3R^(9k?d#>w6(T{V;Uhui$?-&Z5^Q~}Fw3{wFF;urRqA`j9=0F+0kcfoZ+S+4D1GyRO z2r)wScsQmS2&{4IcV92tz$FJY!ry(r{m6@Nz51l_@mMxrh{V(rzWx)B7+Lz++pm7` zF=i-dU3z6f+sZFi*NU>jw3u8q?vm4wXm9SAHs=?^3wfxu zMKd{q8EkKDYHp1tP2grY6byzU;ZQi1G$a#EU4!rEFW8&>?M3ih*T~UB|R6XnJ zI}WR%(MX62B3N1^9E?OFK&T#%#1e);STq_Fi2lu|UlflzYU`{?5*PprQ)UNj3dRglDJ+?sj%#gnT^eIR<)uWp^u zm$bKa5Grs>4|cS7grXdY8Vz6W1d-~Am}+ojMzEtJ5C}w*IxsB~4n;!2wzhz7aY`T((`WqR{0Wt0 zdwuZG(=R``sN;?I7Q`6kS}f4k+7S#}9J!f{goEK=AQV-#NIK_HnArFJ56afBRrErSDQ_Hm@-gjhBixnN=% zaUxma=L{1$Zj=bh=h-B~AL3Es_h&Vh9=!O;`37xp?&OHs^!0wO2& ze6X(%c9Np#9=OF^+N`}v7wnk@06r)*|RnDe|)_7~XTkW0(R4Jp0W z(UnD<`>m(O^HZ^&a}V>sVtU0Xr!i$SktM?Jy#)3>75kIo9~)ezT7L96e*fxX5A^Na z%I=X++;tm6xA$RgWnm9tbvnfEPGHXu=D%U7mlg9{2hyp1U)|cneAK0myT9YW1ur~^q8vk z&9R7PWp3ss?^{`T-#AZEGIHcAyG|ZeIG6$#psqFeUW4}Pc|-ckkkmLJ?5q#IzByD{ zRxr1p^OH?&4M{eBK@N%JIVUHNtLW##^*h_&-Wo10Ex2ry@1I|7T}`|<9a25B zpPN}+5pl!L_P4f%OG*na9OeJ(m$ly+?u)&WhyWZ)ypAHDuxVGv{Dx#)HTqWu#MVs8nSdybhfRMpmB1u|Yq1d6BvLr~rqbB!AB&eE#C@9E7x?Ne26YzW!fE5mYh1W> zcgHImg9XL@%O(`9*&g_^Dd})1qYH#(brB{?M;}l=L^PgT)fUk$Q;;W?N{e=cs;Z06 z9Ol`wt7G2ID3zt7hL?`;(74F~kXzQb8=KTdT3K0i;vg4SjaOGRt&Q^8W2&YW;HyiU zYLl#gxqt3ZFC?_5mbAnl?ss5r= zpyZ!(?)hV@q(vXU{poit(~ml?%%k+JDO>WvYb$G`iY#yd%Tyf|qs}|$q$wknTkjNB zFP{J5lHF5go;Gb{*^1BJTv+eA>gq$@dFrXMBhTm?Tlr0$`?u#E*Sh-CH$PiR6uN!s zd%tarJ@d$wQ)szd^OUJWN;*OjuakWC&Rfya(N|r5M7dX7_s#pSefs_A!%mnrZIsr!`Q_I?8+iEf z#iB7_%=o~nc`tpj^Mnhp8CxkX{N$YltLp}iJLKp?4@~S{^TFqfqGpOI%?-^_G5Y*- ze=&8WeA`{Z%Ej|PT)1n>F{e)-RleerH@>ZR{_@w;-~QLX%8opvCbshHI?oL``P#PR zz27v%o_+MnDNC?Z%DkqjKrUk;RJ^eC-_~iIkg2jCioQt&O+U z?{4gdu3UZblNWt zcUs{jaVB;xfA{Mh2OoRJw2@^iK7a3<_00lLmW@4j))3>q8{gN^HG0}H(YS zP=vUv&OPsx{snaTmmhra)rQfBoj7~OXtjCED=)uUHSLIUXy3ZCsiCE%`tZ3U{lVY- z>4W?4IJJoW^VPpSz)j)OyZY6ycqfVuLnW79eD5P?x{3Fmmzbhkp6ytJ`*O+qSF8L<*MS z??3fdXUu9{{mBb&f7$QgHf_zH;K4cV2%dUOfELi)T7x+h2Hj-ssuq z4@fS5aY_7w3nwl9dez8-4)Z}oCC+&5vJY3skC;4c_xm5Tw6$^50Lx5h48dYb=`YSc zar2k&f8U@^JYufDW7U#o-_=*msql$wzj*zdTJf04gDk0NWMAp^=U&{^8Y~_)`{=>i zA8&foJz&C&@q_9={vgoao{WaeN6wf#bE@9B=8f0ivC76BKYoz2sL~nU@b;HG&OGOo z$)n^O?+{im{&d0j!I@{AHM~q%I{(A(c6JagQat+DV}|Izzv2CnN1Z-ta7ic>aXVn) zCm*(H)ZUH6Im@7d0D1h+lrJ{`2DY=DbY}w`fdP{2)sil}X$WeAC1UYifI1)Qj z&TZ#}={=e`bZlE(1#E9|fRII-vv6+~vd%&GGBn%N&6)iXdEC}CzLF+ycb*yX6a-Cp z7r_e~?qcctvaxrkh>(Kw*-x)q$Mb-;pZphPk00m`7s@6Kx?Ib}e$tG0%mHq@VFd3z zbzNi2uY*iA4!J(>de>&%omfiGN-IB^bw;0a2(5@V#~d>b zMu~leq?*>ATh~vW-k#KCa&xlRtit}UBkVQ6|DnhB_pZ{ z_NI3b2xi9Az!~Ej#}Vb8A_3l7)m&KS@27yyK{uefy6n0GJa@gl{;bzGuZr?SN9dNX z8b%H*8Q~Se(b!|(Hk4PF48hoM7c?AmV2vx-{_pkSSC{TwqB*V{<^A`Ahy_ z-b~HxTDTG2u{g_$q5eJW) zJ@>$a4y`_P&h?j_J8tv=28V;j_4Bm1E;ig34N`)^*hkw#(WLt4ZyTy>O8l|lU)F@o zX!Mq^8jn7(#uaM+*ZRnctu61>8%GZ*9A4_4TH_Prk$b*ri0IlA-!}B`U&@=BZ(A0e zJF@VDWwlE}Fr?gjaE(ulNALcsK1RTnxv@+u&c#^+-7hVy-KD{+3%4)U9aoL^{p;%; z+f6#XzkhtG{PxnFpET)jEZw=0J7$zgJ42>VV2{k-7EnA#^>G$xKuJH!d22K1kD@@<#ST=Vtkn;XIokuCdnQSqpmhYTqQ zbm%8sa>KDT@i)KNe&G$bjxMGXPx{q`hgR$edd@%lL{X0c6$C;E5wvi_q9xz$+Og@A z4?kJCv2ntQSKM&cq}nEa%O4*ZA+>}(qaS$eiA!gX2?j#Zmd(p+`3bX+6pf_C(NkQm z)~)<@n|}Dg2dD`xB_?a>;H^1ibm>R)zL1M56v5W8wq-(qfDvN_=bkld>Dw>XMw~|< zKX=BIi6)?swh7KEZ-L2P4JHK9^s5o-Ukjk-hZol%_@8-Y%-L~eW0f(P;&96@! z(bP^yj~;!(`B%^CpL}z{_KSXV)2Ke>7u|HvXsP~-Mc*e)q=-m}KnbCu9&T8;WOeP1 z%^!XE@yZPi2ma!Uo6eb3+r)2unhBGm zr>HEsd&M_f^}`Mxp(YYp+=>GLijt(r4!_5-dBr!2*40yi0)S~j^}rG3J{r@(<#Hq= zp+VDrG0{`^!Ux|`k1Q4Tn=r)F6!)Ec((xysf8{X))HfDvzu?;696ss5IkOI*e%R5+ z9dXF`kt3$gIrpaXrtWIuxBl^=$rUW9`Y$+l_Tsl*+#a-s%{cY8%V#eCbl#T6h$$3a zdE4D%l*acyUEC6g4w!!W?N`oP_1XK&H`P&3`J{=Xs|Fl!+8L)z7+SUQvsZVQpR#l1 zb4y?R`N?ft=Pp+ zKJi#5=ON8`!LP2WrtE;D&pK>~f8gO4-gWWx+9rPcqmNCgB#jLn)6Tx_DDURS-(26n zgzsR(emQs0>+dcb+}FA4t4}&~qy!0ajXO@c>aN!xz4)8=UT@Zjj)mu+d)&e|o^NK( z`gKdc+f@7Ak}p2`Vo6x6x&48=`&v!qGcLaW>SMQUsypW5TmSLUEqzEw+&%ovUmSJF zp-0a?{NPCwCJY@mbjZNI2Oe?!iHDA-+$yTFeX8K5U54z)bw-u?)zJXJRmXd(#J@c&D%inr#TTB^xz^Fm}tH&O8 z{H!U1-PIFry!O293*LsgGt}l>ln`=d7;<>hxs2}a^ei&$*ev3mL&*j}o)x2j%ndvrC$tl8GjNe~ z%Yfbkfq9>}&1o1CJ3({%W8Fp6V^C>kqm9AmP-Z((9(hlQ5l>e@+FLfJ)sxd|9l20` zkA=YVq^LVD9dri(rdhqV>W(>VYep&S_^JbSDftyZ(`G!8RlcnKukO=cg<6 zIVb)!zMPk%?m*t09PE3Y^KP@+>82dfnNFPI?r!e>_-C^m)%YBCc_#iG!S9SdNqSl8 zr%J)zith)bx7gF!pS)yyqB-w-%J-D2{kvw@U_Rl#XZmvrecpSjdC%ul4uij3itxq~_T5er>#*ADI*uQ=>zKnQQbFR3?V0SbDWF<@99#!0WX0kemTh2Hqw6wfbWJ7V&P*=2_-_N{zhOzM;vSbK6Zhrc=cj zq(vh4Bfq`&Uu}p4IAbXX;kFQM8r|gF=C(K#(H>e74hhX98Ih%&`_se7pI{?luK@rN zaD2a#Qm6RflGfFs(g}V9fVj#5P!dofR6O^ zgZrHh@b$87_kUA&(_rc?DV)>a4FJiu(1?CTXADrbu4}H1TRU4K4Jr$_gf_Iru*A8d zS&t{RZDI4kLB+GGm0dCK6ZMJ81Ix}Ctbe(=ZD4hAA3v|D@Eu#N?1*}51LnF$)n8ID ztL`#PmgE5FlmsN8 zxRg0Hr2{IJp}y9(U~)SzKKa6FQ$(0gcFa0y!0N?ytyO)FC&5SRNQqNDU|iw3Bk9ul zf$=rM?j|^8M&Xe4%`Yc>XO0%;eI7V#cE#4MZS6tV+)2*+=GRw`^3rvULk=ER*3!7a zQ+C=AYH|<|n(Etw4o?+}FN?q=hv1PZV=#I^(X47^XVkMZU~X=T?@m}dTOy4~Ga85w zaXC+_DXa0&4_7pN6T-oY5bIC_ns@xbqFGf+akV#K_y?E!26;(LGZ*e|dao6RDMGYG z4H-~wzYv0W=z!vZRmu=gOM66H-V{^IJj_5v5$6WGlwha1Yo^y*nhb(0GHR1OvD)=Pw6mQ9f1zw@OdROCiXe! zlxZJ6b$irRq^)@G!}Z6UaN23g*rJyoe|W?d{}AHa46XhBx95ep(`eoJ;)kz1^Hs}& z5+%VrkG$kP;o@HpT{!RMcNf&v@7%hhJ`#%pEtovA-&YUcvUFkayE9HZXmr0o?e{Ny z^6w90(~lWE#39mnGS(3{{DlQpthuhCH4;d!T(&Yoi%&jyBE&ZsYWsWde3H;YPd@th zYj-W$`1|8OTG3QmNVaU++&H*IGfl9!z5$CRl6`$HWL63gVir|gvS`Ir%k~J0gqX=_ zILQi&3ZfmY<4(A?e{%JcUvG65mUYx^`gB>X=yVti`b|7$pt|nH=RcWv(V@eA$pa6Y z(Y)-fw?F^d;qhuvXtZvA;k{R${j%W=U)6(uer&;`4=r2N@!c6`9(jQ4k9XdA-Nh$e z_v`+zKJ)C#T~TT!+7o6$VWAakuB&ei2a+q6txAxhQxBPlv5ltI{@y#ECiT!iANkvL zb&J>k?zm4@HWm5l=1rR$2N!F)$z5PEPQZ#K5`DZbWGuaTI7{keoHND+K_I|%O;c4> z6JhF%SyTE-k8WxZs2L}H&Oha#5C45vJGw+lc&zEQSDyYLaqxj>O`cKH?~A`bynJEc zyW{6fA65F*#~+#~GEJ8R@sNWjK&;u+I_ACm@vgSyxZ^JBmt6hVZ?;m&efZ4j8$Nja zi$zPPpLL;9Hf+*h^2ojaULAA**Uo+5&ZecW&iiU1N*WZ7ET>g;HG5}=DG&EJUI4~`|HvL(xxef-9=FTH*Fq`3~N?cUuK4d^SD ztbyXf=(jIDUWRinx^~#o5B~Yo8zWD=X+Uz-onLP$EGP}tZTw>S4$&clqezfMTP4Fr z;?laxh`DUv6!2!_Hu=9EHf@;`;0$X}5qJfpE?^!?c!d zn%2n?xSgsrN|@!XrWng9=c!;TQE&v(4Hqe^OwE8ZKs(5^_(BF5PlwtWf##5Q$_iGU>#hCB~U%$<+rz|=Van8D1RrcZny&+XB8TAn+zB+&gQGwaM}e0QO~c9VcyYHsd9 zmb%;Zj?{`pE^?Hm(dWohWH_vO&+Ubln42BQG~%=xMGjLQx~ZPrOFX+u(j9jjvUyD9 zGl$Nc!UAlGA%aMd5FiAQBB79(NF&K)HJ#raiI_a*b2fFnYie`v;JIns=fPd39k6`X zb5G4BhilzUN^*+`ySw41v99%)ij-&C4`dkhIa=F!I>6XtS?x=b_fWumf3NH_H~42B zvSXKnefhe7*}?t2hB<9%-_hrs4yf~|C+YJ}XM3kdy_RR310~oRw%%F>rUtEzx`WrB zc%-|yw1%_&mCis!jzk8*XLq)Hew;JL83RO4sYR(th>2h!T7+<09u$yU`=Xjm$J|y?U3CXO?Lw4-O_5}2C&cU((5h%3? zF%S&PG%YieW!T63_S%27*>ir&)H$JwEHK81C@8X!Rt7{_76^hQ(KQPftl8PNarxIv zw*_2^U^}npjNA8f#(+?P62=%3!KSeF+7C7kAQAY!F1#URAZLMu>5y^Dw$|s@N1QSy z}s+hvFJg}5FyfdCf-Xm4x3<+ELD+x5D*SlO{;QSx+O}|>`|3tyreFy#Q;J{ zBVqEGW)106ct{cX$G3I$I*+M(1R$&$fuuF8(jRUMe%q9MWpj8?mCp<2s$IeMBqxMe z9EMc-?5i(t3Ju5(E_zyohAZdtRr{*$e3$s~kA z;kuSkMYSigZvB;CHl8v_RNFdQ+JnVTXs>Hr+!TLd#jc%!Fj$)2+WKW<;>8uanj*1= zU5yLsB1iR+v|zBQJrW9qL!k%&Xa<VJN@X<507`<{qfE^9pb8KG8TyIQGl>& zv?t906$L|FG-mMr<%MUCC`!cDHq`=v&$qOfRuqo&(cKXPIB$#TQGigw=tx=s5J;E; zumxM&OUnz#`pE8xp80i3>SnuY0$A+{!xW@xeZ8h`36gZe*y;)+_Enp8{IJ4gEEy%z zm_p(8)otHzX_~hy!8v1sH0OZgrd=)1ZH^*^-dza)<;J;0Vb|szMSTXjK-D>=z!H}0 z%wOL!dt7OAK%0By9#GTr-AB)UwCSV^FX-=K7Lf}}%7+Xa?iM49*4ECLd)lNUPaRVl zU%bAtsHjMh6|cX*=XL3cSlPH)H~;E1rxhoXLyZJHH6!QDKI*`c6)P4l4JP#sD;6$W z^?d;Q-t)U_-ni@f$bnbgaQgUITz9yAeFh8~SY1juC(KBKYiLdJwvDwYNvRpJAnBoo zh9DU+pd=PgijrU^6BXlU-+IlN4z*qBKkd@vhrRObtA^r3#uTU9KW3D*wlwp;QmESC?obrnk4nO4JgC>`_L{V|dvf^;aEZ(|w{q95Oo;vBs(?%7A zSM1gXmXjBsd@@!w{p>jtVu3*Afpc!T`V6NPC$dA020S$*kDGPWxRDjhzg-$s^$pAI zeAV3j`)gjm^SbDPzx>Uq<708%>Gt&*FnB?gUB7WoFtdvw|QX zg1fMM$l(5c`t}<~9ZbIYT%jv5x170w->&Rf;$bBQJc+2K%Rhqth_ zNJ=bSTYK2t(d&=a=N@V+@^-an4oeLH$T(@c0*jZPdTDAFC4}JZ|zdcx^ zXci+bf61^B!;1Y54%F%P^&K?0f1gUP!+iDmch0!)-xJK$-)s+TS^Ir^OkKD1+a=3Z zMtx)NzvKKxZ@tR;Oz2yrF8XdO)xxCu;KK%)pRTAY88WJ0pX$NGh8Fo;eTR%3SmrXg z;Gm|X-$7T*9r4oBFKZ4T0*b^8Ci%ff&N}GegXQq{#p|1sft_D|wP@X@T@#M~^(mE` zuX*^}Km7U5{!S*j{XUP|>GpcviX^*A%Sua%ixrPc5zKGqJ$=tTzrXLn$2Uf$_@?>a zMn^vT`!hd&>-}IN3I3WBkD7Vq1*i1!%P7i zNoi?OVPT2i*RXz3taS9rM@~HX_(ONCTM`1d&*gMD-G0B%=}?l9fU9QI?AbF$4y>u{ zQ`z?YM=yM`Y0jBv3?Dh=tYe40_1r7E;zNrmPPfP7bvT_KpHHHg!FnMh2ml#cq1_s@ z@E-8&)PZxB`J}Wn(g;xTQ%cb}=x4gW$^dt1)GmeKrTn!~`+S;ZovZoW9rrCu zxXuEsY4&xBFb%+w^Ne@8tk=XG_%Rb4p$G6NTgLfm>jA0k zl)F7-DvwH>%d5==j&tfgrS@Qh&MD1}6bx;j&%>I#Vqut<_&h3pj^IY8gS;1MZxxhU zZRzx2j@!{Jke^=tNgZ@kie2iqt2?)!56H_|y2wVIRvpPbpLbi&)tg_;J-%N(w!po< zvwO?P9W>@3@1>r)tK1&r#XVl#OU#|o;cgXUx}d{(i&(imZYTMUonZnRDO_3FU}pFaS#y;rs7eZ@$UjddvFiOLgrUeOIl{7?hR>)K(wdBbLoAK+2Gq zT004UL0VrSjn9ylXGz<8R>vYMvcWVGrcgmdnb<_q9>QXbb3jUfpv4$#39-hY+0bq@ zc34dvtf9kdXt$a=jQVzKS2NpGhnsinr9Mkh2m+bk^7S{N#ge7yjgd0F^sIx<@_5~l zKWMV)-?iGm^zK_Z~Jd*^OT^mrBe(F=cXbq|WJ z{b+5}H@L(Jid!ZiNHiX3ZfH*w6?x4>B(9^+B^hcwnlxou{GZvo^|KlwBoU9foDSM$ zuE7{nb<-hBKMNShfec8Q~DiPKEe8R$?3`IP}h4xb_pD{+cIJWlz5 zO810fd1G@_6~ytC9=}AY3mi2bVN|K>`<;PZhH&`6!qFuTuObdBa|(zhe&^rR8=dX0RD9~rxDTkEDzF540N}|cd;bX?=4Qsb{ zh{O6i=YRM~gew#*6ohbVLogg!_}TlrqO5uIs-WC|_RMK+9@)HQr)F7=wcFZa7DXl% zRL?m4@F9iPJ1;!9vNkLdFi;vac%a(2>C*)Z#XjQ?8&mrJ^G`0^8gfZ|_s;EsxT#0m zwrt<+sv3SkrTE=<8!XY8Y}>UnB27PJg4ViY!RKE@Tmxs%JjAI78e?J!ZF~C3f30p} z11nuyw(QVN?yKxq<+3(z+8T(M$6j>95vBEy{rdyrbfrKb6o?+Ki+e7+2euTUr7gTUULxvROEIOyw8z=51{V ztXcTkhJY~r&_gO*Z1ct~aouRF-PRH{JqoU0wE`-}9X_`7{pX+jdP{Wllxc@f8P&G- zix=MhI$<(z#h~F;(wfy9EYX!{tE~-7)2EGB+jcDYES)c{tsy3qlD2>UR zRER1Y7lR)-PN8zQ5iOJnBKN? zXH$eT%U?C1%4KZYUKea{3x~tse)_@gFmK+xxVf0Oj*#`h zyf|;k((&wM}Q@v2l>X(1{UA@bx zFa|QUHf`KecEFSo<*v7cId;6Bws4h?<$xgT1<#IR(B4KJnb4T0GHJ>itpoSWDgyn-qSAO-u z2b*^`G&Q#-qk)~fn+%3!{RSm>EdKWU2B%B0l>xY=*KOYtNOCJ!``xzSK}Q`U)Gz$^ zOCK7NOAj}1-`&Ky*<8Q7zIID}Tt0Z(#OUsI4N2FGBaa?jXukE-KkA{#tXuKz_jOLE z3;={1Ee*R{T3cG08e5tg!U=IQc2mQkMir-ydF=k)CBm3?Us|3d)uKBi{h;@!8T?Rf=l?;bwWzfj$*F{JNF ztK;llUM45ifA^IcOF zS1J5F&I7r<^NXO-+yL*qiSK>bSl`&<^;=%QU|9u?Ek*GJEh{#hPOD!(a>gm1Bae^) zIAcHvb_olBainIljkG*VTV8Cht8EMynxt41xL<6n@U&8QAw#Dn^ifOBr+qJQ%D|Zg zgmwzbVw@5LuvTv4Z!8oRuhUzCrUA0w3to=}oNJmDi(^}W1OtX1PnNlMo_|dA+VjU2 z7W*mCo7dd;KppnFTTJ9zmg%`{Cx5N^8pmg0(jzq$I-NYeBOv3q}g z`9>Ig*`*g0CpNw`Z@I@|(dt94J@=5O9(pi9N)KJ@DLFzr6I5e?Bqdl;6x5R~FYy^8YjR#W@!Q zp{=F4q_{wmTWCQ?J2Sv)>q?sU#zziT__F2Z={EVdY&?b*@OM zx;AtU6h#UEpc{5cf}D<5*SRPn0%%4`flrnotKAW7Mb=M@fsW@Ph{akHcu005#01VPg|M^wbrRl7`bGbM|uo|TzEgj5P8 z0Ww{tX@Vf6Gli)Ha1$7T%*wl69hsbF^T@Nw(+!YvlB%(6_AN6@wPGghiw8nP&<#`5 z)k2>;Uth7;{+CVHwYEU8q^#UDO+tuin!9Va3p8Z_P*hm(>`QOme8Y9sWqwWRd->Iu zd)t=&{oii}b%=&KQ1N*c5{bklr%OO)F~%4JZiRy(>h!r~fdf|)aoqwcDn74UOD0ir zDI(#(O)VKqs2ow09WF%%;K^7dp>wy_t56<^L=B6}PPfM)#$z!eyCg8;8gsc_Rx%P! zT7JKm07nEh9!qGZ>~y;wLOc>t4JJs6Qzr4G?)CevL^x&;pV!58H57?aQF8byPrc}} z$)&L;9(iJG7#$+AH0(nO#$xKE<1V=Hm?86?fAZ5+^^|L&gjrbVXKE~I61Up{j3e@7 zG6_giJ{U#GQez37%QEFCcw7!G9*t`Tp`yp*))R4*9I`+-2jo^P7Sk>6aCzJcjYXom z#gR~_%PEOePevmN<}dIf=Y(J~7LBWhk}83SYFJc|oidFlbdTR>CPFct_`EJ|Xpv}~ zh?2usaq2~vPc4f*_Q%J!M~G9V=@}Ez6QSaqMQf>K~mfbF~gCV$v}3vTuw=iM-r-mRCIei#M0ub z>2f&{I4~<3jT#o09WIYc(c)19M3++rZpET;(czXdnFAgU2C2j6Q3MXaEj<#6G8DZ& z51MK?n&3zrE*IC6OmO)eq$3!XTwbSy@n|HeS`N3zp@_`TLg6TtU0%0?0t<&i)Zuk2 z0_Qvti>L;pqU?4^u}G8?${CX!F1JIB$D*okIouwngwaS;H#s0WTy7DJSX|{u94?Op zdcr`D+X0-}s3^DeXf)1===FNhQX|ng1LAbKn4aXK%j>{kC@RXbjXx1WEQ>oGN+KR5 zl2Z{$CnyOCG1OQj$qM{l0xTJeY9=^jN~q+PQPr8(?Lf{AHI_8d?NT^n00arB@dQdv zdv}?k#$s`m2$IL=BbJuXx!dhj<583xiU`SAB&ivS%Ojx`izgZ9RC3D1)Ggw1JAre7 zqOK-^5F3r9qAUrSbms1z=NSTV4w9E5JX;pG7-QUqaVZt3{XeE2;9$eJDFA?E6>$Mm z)Mg~9e{B?j15devW89YPur)xk&@tm#beQGr7O*(a9q9u0rQv-tsaPletC2E8AsSQn*|E??7kbVgly7ZerpzU^ZoI-$?q zGFWrrKkVl5^fg|x`ocWbpXis5Eyg;{nO2G58-snXw8G((|rO`)BzoYwzK4-%1wpjL@n0>mqpXhVW6F<5%f9(3zPliG7 zJ(%wJ)?Lx(uI@m)$y~R6MK|9CN(^z}UDwUM^R}CN0q9AwQ6A3 z?t3q){q2>9G29nM*M6HV_Qepj1)mB}KNVfMaq-9l%(=%^jT`4LECS9Fjg9(S@0Gpw zzQ^Y_5v^cYKWUEduA9AzvkN9`s}T^R?F+H~A**@ex7){riq5MTd{9Ag2|-LoT3Fqi z{gQw66%d9L)%J+<7&hwf{=!mV7805X$VQ(V+Kq?bg_l3!erxTaBibvA<%Xd1i**%o zQdU{c8OKl{F`;y2brAqd&N)OpX!2OeS!{tN67l9W_dT%F2B3G3O^o^Ix(~|xWC3U! zebyW6*k2yyAAhx|s&DknQ)>=9(C70T$wX}7qT+x2yFfQBSu(fnikvdHvF{26`k{`Do}E_?j=5z$+(|KqT+gVydeAH3trg)jbL zL2StXWAD4;xY64qDkKBzuW) za%d%$2}7Nta?yPmGwqnks{1D;c5Imj`c69lK>yp?ege=pU4KriUv}j{fJEt-Qu4y_DLXm4G_NwViwQzGs3@l0~XIv0jmMk2ZA~Mbi zrHH_p<)Hyg!vrG96ir<>1SqOP0k{A};M|t$6@aoL3)8gY1f+x@Am@y6ZV~N;5X>|T zCRC3qn85`CA|(`2aLzavh=duMt{XsPuh#>@pgQi-5244rXM zR0TnB4wO=B)XF*I0iD4nAvkxrA$OWJYagYR;Cqo;{wGcD35NE-; z1w-2aw2Lk4f*u@7bmoU$0uGJ{2oi7rXo(ORkZ>-z$!rXoG0u5LkHl&`TN#8Pv6;{U z0EF|B&1&NcuoMfjG;EPY6a|28m^aLxDFJkYir7KiYXF%d?7wvntMzPId@GNX=&T=P zoiw`t&kg*&5vPohw#dLqPW7Qfk;hEi+945hK-eE#F_TKzc_FxxuL4v4HH#vY3H-5k{Y zvTiuDnMF;o8R)it2s-jS!hV|ZTqM3nWPBeBLO&#bJ=ph%^k0oW|Fap|zYKie^{5=W za`s~9G22Zx?Z;Br+YP&m67uh={4SZB;R7?C1LiX89kp?xKvduY z$-la{WYFigUXovZwR2Pb$8+Zn`T3<|`whqvk}E0`W5?|tHO#!>zF=`7Eh>hL2Uee&E`=O)Worw06yg zijra)i%UC1uRDKYj2O{Zh@j;e&Qj}c;2K`@Y2mpy_B$>9Us?K-~ zA(v>$xjlbyP06ya70U-`OKWGaxWq_C*}rr<;eV}JFtO_=T5DM(XAh~3Z{}_+&01by zM9e(5GLgFvf(tOsgvlhmk5f4bAxOE;6ZhFX)g}nroGK|43K&}sz}A6rd-pfJl5W(ajM9oe%DqYiegcV1q12{D40lTln@Yt z2?249HS^=;ZCCXJT}u@aBd-YfC$_| z6$Jp;bDGyfKJw7#%=ir*Ef;X> zI}_IzON^Y@3gt*`eP^WBSs=NWK;9>tW>3}Q&SCb5d)AZ#AG^fMxwXXNY!h%c3pmo| z-1XP_0s<^=P+4b#-F1)rT6KNNrBiqP_D@@GmlOLAljnJpJJph@C3m0gHZJVp`}fT4 zzqb7U1L*Vr%5-2q$u92u&4HD3cOPVL1vk|_`y9x-+O=+kt{W*Eqbr^K3_G&(2kd}3 zW=#aP)(OJ^T?b|`iHbl#{U5rGgb*B2`|w@5@I8HJ>t`cI48QVc6Z#Jzf^+AQ&KdKY zY}je1Yu8;G-`U8L8dQ}@^Z#CZ+x-b}yeb0-!2qe*@^@1ITas-0V$1UnUUunMYSC72AEahnqf+LPPY{b#CkNW!MM;^H6@!m(CQPuh7pFZ6C`#0w+8{T<+ z=`No~c4O5C?1x#mBT4|0KyAP1VI;GU!2c61@z2EhKa{2Ko3a1VY#guy_Jd7;AOwLM zsZ<&WL9kf2hQX|*aiqwjy62p0ZaH#LAf7gX>AGQBvu}!KOQ&(h6?Ysrs<2J-opaSM zuetQB=@W(|W9h?Y%^OihJEJL!6R2xx&ESL}GYuw?5HJmc3qV5kM6}}IV}J3}6EGRI zpk8JVodh>DD=k2j2x|$OXIy#fv7?G2aZL!pn8~=X_{iy0N;gaaD9Z{rw6xCb%u^QC zJ?CBhiz5g5;~Fy!%@jnDsSrd$))F?)xZ>91MisVe{`0QB<=RWno^i;~L@a&ytP@9+ z(T-@!qRARo=4mGLXqrYw+{0eb62deY7o3@<1u~kNmP%{P8oP0!X*%PadP0ZII^}`; zZy#4B$C+pR)EP5o9rwVme?5CxD5jZ`y*iH)5z#a~_ZJV{cG+n&XC5`UrgG}MbMCnP zjvIe^YPsJtdeZcnvyOY<*N@E_S`bT_ln_}_y*{7U>k&puga-WL-Uom3qbXj(IRFS$ zRIega!GR!)rak9hbK|tZ!IZ{KJ*^oG5twP(Qz^j(XQ`B4-ET;Bk*aBix4747m*4TL z>&_slm>?wc7$Yd62{vigybo0KA4E8?wx?fy7rd&>N^^hZH96kH^hn{$1 z&alE*nq^k<5Q#8S5E^jP{SW>0l&N0A1Uk?T03wkHk80ivue)X1(1MiCnW5<>BM8hi zZ4@(8OKA@Y!9*f`=_GBdRo)8v>vKC=+ZemZz{fOb(UoS8=G5o@ zFhsjjcHN64kimZ4{CbP=+?9cvJ>TU>UX^w2HhENcXGdI?y1qYS;2%bU&btTjyFzAq zn#c{_?S;-pkDj{g_b|-Qz`ww<{q2X|%socydj9{wZ0&bj?xWqY$79a(+U{rFEEi#R z6)Hz&J#(HocL#Qfzw7&;+k4@F9WdLhvE24X01l=p00a`Gl>W>1cDT$UFB@Anz=!Wj z;ndpBl=|b74(`*>f^joDn2}P>ITfPsl|SA6{^#_Y^|Uk~l@=R+cy-tGDI<@a3ycYZ zfRrWcp#Jv~CL1@mMoO=qJAN1l&aJV$6&0coNQ7BF?u>BL8*2CsQc%b}{$Rtx<`uv9 zPy4wnOh5`kJoB;G+bo3}WAhH{7&c-G7XX4=3%0reHGQgoc~Rq~51W4KEiZ>9>-^8Z zQ-8&|LC&+XruL+Y3t%Gmt-=LT^B?ci?OPLdoqI=)7=QR-)@~d^h&{j}6aoBWM%9_n z+?nc3q&s4b^56f_cktlOA~+Js$+jKctTr>^zBmy z94@)xwmr3Vf$~0O0ow13D^QZj_!|%XQKG#wQQ4=L!o-lNKe}=Fq5dgQx$HVKu$V)+IZo>cgj2$1XbO+GI(u(&}NSoOxdJ`|WLFS1QupndE&2 z43U#9I~${A6{T9ZJrWlsWyLI&FjzXR_BrR2DNCNeKduyqBva$ES3#2rZs=-JRgfg= zTjR0>X_Wg99#~URoFGK;1_C~+b3%k3izU!gG-P;rqNAlVp>tjL6;%c>QP&dn`hAIT z`@zSZJ49@KVP!*s&#MMYf|#@-OrhLw@PL}?(zVG>x%$wl)$t3@y*63gyR_HvAD?|* z)57+4*p;?2KX9m=Y~I-zEvqO?N7^C@EAuhUbns_^RFeH3#n25!ky43xBEic0^ea-# z#^yFtfNo-+nu_+u20gOpHxE2q^QS)y?Nj{a-lq5d`ea8~y5*^-gMQT!^l`>sDETF0 z!C#*I>lbywioR2(M&EnwwPUWi=LT>1C->h6P;&DVPY3-9XV!)_i=J)9S?K25Zu5Qn z?5%(N#9L4xVV1Z`C{2XJ2Oodl5ZLzDFSir5prY?UIn}(oIayTXPsS5~2vk-nDK0N= z-ug{TI2{Q3o7eo~$v^ad@T~q4FwJrghc<82U)Jx(=Umvhprc*vN`_m*8tp%LsL@f^ z(4nc4NO5(*;9-ysH?_3=<>A}wF24QF+b{q5H4mlaLW-6w3kW7W{y_VtrT5=`pYAU% z40u%q0f;ctSkULhQ+{;P?D4U0-uZfO<9mO3JQ9~~di-|*zsguFCb9f@3iwSYFrR*U$QIN*%H=B|3O2Ij=K5| zO_fDjsQm^H#dNf#we7iw?`XLA_SX$J%wJL)|fy5pVuSFMdkkVvTxQf z>h(hWy=R{pHey)NuQF~^kL~PIW%#6H&z)1UcgODbw9(Yq;w$UZw@9hoS<7XWrILa2 zKK+V3ovqD#SG;$}&RzFEeES)Z8(;WhPf<`6Lb!Rk*bR8+dVypqr`D_;t(UEhx$+D? z=ynH)nd!W6AUOv`a;Ewg5s?c-Apn6mJZOiWZLxm)+u37Y())}$7q-r@M04D@Wk!+0jYaQw=6YI{5Z#8(9?8kOL&(nu zzW2{E#X+}ZbLLBC1uW;MYbOJ^HwomDG&8u?cj8%jROlXw9}ciATzqG62*{a^+MQrD zcO{iGA?XQs-beLAehUgmAjOW&)vP_OLHzUM(*0Uh$%CQ6d4dSYU3AM2@K4Rz{uwxT z-*Ns+xX<_B6) z>nJYz^#MCz))RzrXzc`M0x&@kbS~+du=MNx#pxk3A=n4+Nr_Z)XH#Qk`GBzp*@K?E zUEzdq)AUMG;m^)Ze0hym6M~|o@s_8at(tK}iR$Nq0RnG)k+N2ZwbZp1RLz{^kqGBJ z&rcyD3Jx9u>X>U%pS>F}bs!+i0BfFU8Fp&#$}$ALd>dP~6^$h5@$kSJpXv>8p4l)2 zvLpcD~ND!;o(yWqqQf2cCM&kg`Mgb;*KGu#PZEg@;v8Hv-; zBTEVj0XTxNgrR{_2AnPZB6;UyEgkXg9yxh%zrgHs%O@WWZYPEZ?7zZL2o3@v(WQn-5ieP8nAg(J`!7;9GC6^UgbU;Gm)#@3`^91q;$OV+T|fgeFWsUS0j#{J$T0$|Y0!Dr!;b zmoGonJm~Bz4v9VSe)}c!2HbzgBfBHU^z+XS?)k?{OPX%}^q99FNC*UZI3~`$?xthLl!fDI4@4io=l+tDuR3Ln z7s`gTeD!K==*Xk{#y3WSRmO(9?)$A?GomaI|6ubj1A=9R#kwSWWD;?qkQN1)AaD+W zf+ByhR-kB0-+w2n3^+@QuUxaMprndHz`806lMtfE!~G|nI?lWE(myZs6!(&ZVJYug z<1S$&M9HXg=MJ0y$SrLUI_cC45AE&o78QQ>=KN7Vy0qi{2cP+%>H1&YnOO3dZ}IR4 zuRGz{U;ga1H4(qpUsM{7bjXYo)RnKjz2w|$ZWtBPT&#opD zAH42_KmYQludWXJeSxB)psl&$v=JCDJx%nd&#-iUOzgdNx_0e zFFg9@2Kvj}uPZUzIy;-+c za&n(%e!K95%kLkP{^H78p5%eTV4>fu(wNB3q!E!Dno`*Jka0sprQSIwp0xavcX;_R zS6whG8qvMUEe}5MyCKK^{DL{dTbkQ;uKZ}h;cC$PDQp}5 zv)v|w-TZk0EDW1#hDN%n+Wq=K&&RuqDYvb=x10*<8e0xJnOlwDC*vYR-E}_Q2xau- ze6OcW_sDH_4qzT8l{t=?BbZ^@6GU5*JXd+crNv?Iz;Ja< z!4Y?Hlrfw;FU!QwsYAECMs6i%8Y!bek>7IrZ}}ZQKc1e}Abto;(`5xE7ceW zE0^6=cC*>-mu-Fb^XvQC|HNoIAASB8MAdV({wt&2SJ=FdJC>d*p8$~T8;Lk~U7l!% z`(XByT^R*udy8wC6tXv6w*~q)n7|*fe>XD>Vd$K5K!OHW+am(tU#%9)IUw>a8_DJk zkkFznQKPb~xTLtJo7URbRycDS3>(N3Y2-kBUj56p^~+ZR0wU#!y%_$SfT^{&C3#t4 zX(hNe{^Z34g8Ql`vf@KTI!O>fmc5;uIyZl8008jM*YR)!lW{IM^QbZaaYu!SrYU@0 zb?zi7sc}G%DBrQitZN9nM}W@AF~8ITfNxxfjg2Curk zV1|*5CgV|V=-kw~o=nBUdO9VTZl)8amNvDdk%}i{5mQfdQ{$#?hc|UI9XGU;U^>$h zdOE>Ojp=D-{O5f1G&jAqOT66*yhm3Ic>AJeJ zUs?Oy&ZH~@6Ws?!ArOJ3Qulqd{e=y!e_K)aS%aofkY)6#=v9y)cvbYN=#fCN4yuSC zgzLBf@TzG2l+pg_Q_-V9DjfO6C$+>m#RYg2J7$jpYj$<63Ui-oVWuDisIIduP3?Dl zQoBB^n*bgK*X-)}rjz+pd}+y!SL!scieA~0EOq6?VUk$+_o?Wiz%$XRDCyd}o5CIy zrBwXUFYD7Xcobk<$TE5rSI#8>0(vz1tFIcjH-+#1w02FWrpnN@_$mdDf*uJNfLBEs zL6YpWa;icCCWJ>uuZp!h8z1<(RhDhnMqU*ufJZ^E0vte9;L|mAZ|q4bGFV0MD%oOs zRq^YOx2=u~MRH=MAW7&|01$jCB7jFh4?RGU{{PDq-aJpIsV#8=m@BWm`ug{m?Ftr`L~GZr+rD?_hPCaY{M?H#AnRYf=IXmv?o9L!t^JYZD;p5IeH@foeFLuU5!C-+$d+E{Je)oCn)FUTPJK@wJ=8CJXx%Pt<^|FX9 zU%s}kcH6=QcIN+{m-%=LEgOFFNk@JD=eri;tObvq_2)+(YcRbsa?>z47fjHA%D!Fx zO+#Jnx{bAiC!Kii^gfSXfBD0I`<%)CqN0MfjUV51!~JyBtV0GCM;o^+ULC#Ro_i(Ib0%Em2>0~IQk*s!XGR)|hCTe`{gK6geQEJ7zlUmup0|Mp5p*2}ju_NhyEQI6 ziv2_cW|~|Gi9l!6JmKuKBP-tid{bNbzzJ9U>{L14Osft$Zc?9*Ki@EY&h&~w2aoT~ zmn>Ve?Cs}1T-j6*@>y=&7-K+)M5*QC%`^>@fmh*6-hJioOV%uS;i*TSem;26$@7Ma zTd%tM$q)CQbmB?J{P?uNutcOWu9uqa|w>yztb+&paPI_~dy*;kK);dFsQxKRW58 zV}E@55LkEJHNSY|cP}->Igu0(k8i1M9Xz~0=mru50)pvkVXt1rY~zlWV8CnXZVSOp zlLHc-j(Yn|I_0pU7hhhG#NeDWE<9#zc~fiZh!am0JC<~ojGH*3X3|kpTh=e%xM9U# zpL;V&0;)s=f~7`HC5aMyk=Ha$B74(~YhHf&z4a?T`}N%qyuBiF&czq(UGVsoSKZ0` zPe1PHqknwrksm#M>#cX*w{Yo3q*V3!T6b(Pi+c4c@)*n^tYq=P9NZ{pOEZA2!kj_t z!G&Lm%t32*Z^i2XJCFzOIBe)lVlLjbO=1>;Gj8c}aK<=if-}LbFI-q22!-peKm??S zmIQ}nD{@FOp_E7zDJ7KHdc79B?C_T@x6DGI02G!Ib$0iZ`)BSNA~N&6Zc$*!z>~SeWv~~- zGYmxQ+6*+GGc$D)bzRlxE@MWD16{1>Y=m8~=?qCSkMC?R4d(9XhrIrf`JZ%O+HTs+ zsRP^brpsSu_m)>%IRfW7Kb`a0X4}U~L-#5EGlM{8ZSvlYgqUkIrp{3aV&r_lIzg+uq_Io2L{|6Av_u)bJl;7`!eMx4aGaKI3ln%DM z&$L{+F$f^selv5}(3!q*0M9yLwpm?)5(s%%Iwkxn5{e9z9Ss0nLzMr81YFxO&Z-sA z7B-VCrJ2MZkYxpWz*rGcn9LIhdZr%2HtqnADkx=<&gLaw8%G==BZ%nNM5_lvjkv~$ z&*Syzs?09f@Z?NKE=Q2 zTMT;Q*uU=BHm-b(2Q>~lC$kUgwV^2<)!4oQtH33wYw3KqUVHVtA^lZIX#x;-)pgF_ z5-zVOIKEWlcx2qTtNqPwk+Sll3r83J=Cj?ajle}gMMeO_{Qc+KS7Gqsqx%AiC7T-3 z4N`S=$w`C!B5l07qH$eJ96P3ZV!52sg;&9?dpZ{EicwXWIjnqS5#6?@bN-gjzP(Ea zvFHsS?ER)=z?lR66RHE-c6W9NWzGQquDzYBQ}RgzeXo2~w>~cBj;@+qsjS)?A&T_& z^4hN>>ZK*#t+gGmZV6YE7oIh`*k_vaS2b=*;7MaDQk_vVR4}Q8ELhuq@Zd5v9(#F1 zJNSG*8eQI-ny)NtSRWH}M^{g-l)v59@=24{-WE+4l>q=pRJr-?+RjPC$~LZRZ1)$< zDdP)w8AZkZlAyGyw&Tip3oH$~^ zn;rFumRLmHylD#*SNi<^P+@^l7^JGIDvH+G@b#CUuX^_j*^CA&Yy2X-H&Q%mSnp4_ z?D)wAr)~e}FKgS-D+xl0o;GWSkEslWk;0a*7q9N%R}HSLTmNBo-$@NyKY`*gQx6-u zZo&GNR?}dhr;T7R(5Jj;$LE{;qoy1-tbEI|4O_qYVofLe`LJGlH@{yt=ES*!Qup5U zxhE8oC9(PIFV=Ljs|Hurult}^-$@Ny{{e+#jyQbSg4a9i;w`bTym`}REUEJQ0|kYJ zrj>bB(K;HIfBE^!oXi)E7+SNuVJBC8{!jpo1R$nk;dFZ^#u7l~qN*AtTDLPIT|9GA zLF-5D9gQD<{H4-&N-=A1Xp5?$K0|7}|9Efy&URgv5Oe_dI4gIzHX>4F2_CxirmI^& zc=%T@FA0|R0sw*;#t&vN8A?Pvmh|=W6W~Y)GA4io3j*BGV&RTn6Hb^jSikS)&%A{} zK&pouzFPYEs<*#T%y3LqcpfsEjdAs7!%z@cX>UXk6GrZP|IHHQ}dJ zF`{*!{{4N4q81AaN{#mRL|TtWI<=&RK|i`@eby4507^tWn)LMxP~b=iFjD{tgbIbJ z#UdTO4mn}&VEx{k7I_PTfK=Og*KUl;rGFwgIhf>5AyaX~5}mvNN&_wjcx$YNOShApjR3fMb_w zisP!#g`~R?4#Y07o|Ee=B{~Z#b_@Py@i`aHZ~dicp(=LzdF*Cz#gHMfikyHwP@nTJ z?Dp9Ha9%|o#WnwDZgqCgb9OSGac!5;7w1{Wc)|&vRWZ)x(&kWZb80yUsLSHxU3SoC z^kK4`N7okq90n!HvYtr}!PccO(>-+GgJt&<2*@Vq;yZT>oVnc$x>d~G=(EW7s60mV zcQo|=Q=Weq42R$I`2OUfEBb6>$_|~`&5d323h;5&~$wm=THF^JnH(CHbWI zoaF~}-dMTGxr=sSo9F>^ndSMsZ#hY)5fFe6$PAh=xWHOETRg0-(J;^66)-7hl$V^t|$Fd-C^RHT3FR zRuu32{klkfL(8we?VLHhtXu((&>1&|_AL#?!@pe{*20n7zi2#iRAuwdx+gcp#@7@~ z8c;I1%EuYVGPXB&+_9wT$kCO}JL;a?5Id}I;pmFsz>sV(09hJV9+)z)bZWKF)Qp5s zju{wuY3c4-4PITk<15|!^DzZ~{$kgbBzP(64EmG>r}Qn5;?et-Ha2&}?pRzudQkab zAMyFrvAqh99adH@5vv9fNj32%P6-HPf@U+iu&V0BY!!l2TFOMT;O zibBcoEsGncjjC+iS^vikk@?GaeHNuB3@%WG`Pt^?rENM8^Yt~&9Xfkv(T-M6aC&c_ zmx$*UZ~t2NUN$=P!m>Tz)OJ3$qHWUPQcP(P699m7ASzk5tz~gT@|_j6&u;Eqv9oPS zQ))*;=bEtb&F02;o7gGCLVsJjd$$HJf4Orrc#o`5c6Ay>Dm?f3_Eo0mgx>Ol|Jb=D zoO*Lp+lGel{h!r-+nRV|ZA%0Q>^Jl3fc!n2U@Yp{-`EvYeSKoirrGeJvzj=Mt(Wjk%?pZ$`-LGoyxtG`MedXx$ z9y#iq%g;IUXjg!OxH}9{n)RcK1A96>br}Ve72-~>QC;u?sPTTkz~{(p>A-m&r1kZ zMfBrOmX15^>ici{Nuc$c-@d;3=+n+S_sk!U?pHPE+@JT^`^t=Sel_Q(H&5#)wT}viYnr>v33LKmZ5IAGHrX{0cxpeTfLk5)&oOI{?51w%Nz+^P4>AG&1 zU@6*LoChJie$Vhr_hIbgPnJ$N{hIr4y*$1C?RU45`<{60%DFXfzw_3@*I(OC zMnCfCL)ZQE%w7R(Z*KJToiJsv`so)NRG&BFlnMX&@@dqM0WOvTnMkvvu??!%Am=I^i^BhV-gWb7P|JK zr_PyN5lIG5J$c&V`Ooi4Dn73_QTz4pUtcxr^b5{C>(t2y4KfBXDi^?fdpSZ+-CkYum|~hkyOhb(fymJAj?djh;RerVLURE#2Vpc?9PG zLJ&nnYnQBPnRDDxT1R7=6C)YxGv%yj9=t-1Huar&{BUXeiwnN>1pQUKQlcO`3;oGt3CVMM>bv9F}fMM&KJxLo*zk1@Hb|krnbI!9{oA5(3sN;GXSN7 zL1*QjbJsV3xav=2mRZF9BDmiX$dws4dlyBn$3=H^ZuA+tsn36zVRzrVBO`aEnRkuJ zwFv9pBlF$$l~0s&*I1^d+>aW|RjBnjW@g{|Vfuk3bzTlI9s zci)0PnE3oduK9sa1l*64n196X-8svVkOMutufQ(f-Dt79-Cc`GJxOU~DDD6b3EEyi zv{t&E*2=z>>~$jezuv-p!2YewdR-0e%?yJwMgfS&Bdy=<-(43OF|2}j-EY&KF)pkz zQ#ML~E;ki2##l=mCN*vdM8t5^G)(aJyg7pq0Pqa%9}jqi$pC->B%*O$H$ag{atks| zaEbt45jV8-KJ$nOK!byYQiwb%1aK2D)}|$6P+a7pJQl&APpDpX)pmbtTezaKfb%T- z+xox2PkdgChfO`1s_K_4EB59W(zWw0Qw1D=g<~Y42|mLAsRBL!dzmhWsc($!?+MQs#nxpk;9%&A5Y>i`?Z$*=y zNNL+6=7d3|$Mp8p#zRlnC95Y?oHJPeY)k9F-lcsCMc=A|xxGC*W5L~R=K6+oVOi1C zYG1|Bf~V_ahx*llrGa7}Nu)VNvb7;nP+l~(%2zq8;IYQ|p=F*v)LW!NJS6}yph^SE zgMc8YG;Lt%z+Rpq!RGd;_Dy3vT@hT-Xe3hF?wC2$D=7dUZfg9z69=i15!ILN>MW=z zKE8hd0Q7d#=T*m-5YkR5!k7W&qt%TI!;2o<*1FR)&z@0zZ~*{-Oi9Qm1JVk=WFkHL(B5zCjD5Jv zIL#+7Z-}$1;5UuBVHh86ZLg>-o>b`#jVgV%jRODz2Ox6?gq~YfH>iJArO=+=k~(>6 zWnz1rQ}p^h$Mr2AQ0*BSYH1CpH-*_LlgbYA^XY4&sieNP!#Mfa@^L|^`gUE~Uo}|l z{o78@4O6QYeOs>=geDXd(-h?2sh1wGf4K=Rygtv`51zeaWfi76o@tBpJ>o(sy65c| zp4#3VO$+6NKRy(V#tQ;UDq_lBzuva{jlcYQYg1U~L0s|14L5!hz~s}vVIGAt`1p=r zQ{58;W_bLbH6K2I=h~VO)glJ_?4>6+*Yqot_4>wkb=PkeN5h&auDEVXftP-^D55Jt z$_$@RUHTHk2qg4~nH(GbT_59P@TcWxM;;OfAymh%>#GiUb^Qf}3Fo~3i zSUk0R^D>fbd!jAUf7*pobkAGQJ-w|tqJjGUA0CcI69oZPkHr*UKyRyk`}t?Kw^|Xt zbK|Yw_(kmL-{`6YhWP0A$B3>5g=u(vs+IWyNsAcfXD>gwsiv=;`JKP{Jkpsq`A;v~ z?h#6{5`XOGtGSjaDkSw;w!r`|3U+N$-et{_U}Q`wi%8bk@~(XnsjN zc-t@g_pc%8NMl?KpM2uaFFSYDYfpc*R}U7*obyco1EN&+={tPHh?Fch)iQy^jWe`}<`Z_xh#y zV>e$Zv_xsC^x9JoL}Q5pzhaoer@}|i|9WlBfI?YsY-$OWm9Ko|u8H$eXMRdWz{6ko z)eRq&7sXI-#l{^;^6Ru`x&#b}U5AG_&Ft|tRtnG#t2!E?8-sVR{3j%eqLkKMO) zU|*x7zM&)Sm&HT3|FVDo8lpuS<1lRUi9h?lp zZu`}Z`0N{tT3DcN=}VV?11VpHxoy!s4<}MekTM-)Z))#~d+*%YzotCi-qfB_3ZUuI z#kbsr@ASmkcZ8G{FjT%i&7m?PeD<`k{7T08WYq{0YzfZZyva_ zrgwR~t+}Or)BX2tsxFdt@7OJT1?%4b{XHxCR2O^Oo9aC!HD~|iqT>fd9=h#aIaC0S zj|IDx+)oUVGy8XjbvYv}L~c_<34lNWfIKrRvY=dU9e0SZP72P<-nzfh0R==(UJyV4 z&+xJVf!k1%u#zSjFNFwbiFpH=pT$zi~P;Ud5rq} z0_I)aEvH@hVE_Pt07*naR9@NL?%b~Y=S+=dmBzuriL+Id1*hB;SLZ}VLB>HU!PTWQ z6`oh6F3x`Te}r!F)9x!6yQ>hFqDXFZnAgR+;`?1Ir`!C9u5ov3`%PiaU1#d?(){V0 z$S_cI7dJ3lkHUQ{FW!uQQdeu*5j!u;Y&~WXKL8AJ20p^8cxI)jT>wvQO53sA&9RXD7EM+pM(Z?+lX zs6mOfoeDVTjDumKmV&fq%sf=CDDkmalB9GY2qjc*?Mx@)5Gv>~Z-@XORacRs0^Zyy z1knLB&aAO1mm!a5 zYpEFF(u}2SeUH$2i|74U-04N03 z?u}@&S|E5^()6mhb$iR#n&<2hp;SWK)}GQmiKO9EnEvObtux0~r`n@YNi7t-BV}4E z$C8XqjqT5Dh@Ua8YHxxSdVHgL2jkz?F4z?+qfjKwsAjYZ=v7`Y#2=3vVnAi#;9iAW zw&G^r;MP9Eete*T6ZO&?XJ;J97|U+GLzyeE(AEyZGn-&YRs zWzuLg^#T1tk+18PG!}olDLiCQO?9OCZ{IZdh6NRmQsJdbc6Lk!{A6$PWX8Fq95=G; z&;Qu^SJgXvaM3&MrmXsA46B?_$nIR+ysV}0%{9$+C4B$@0Za~K`vlH;YwPf{CJk@g zamNnr;Zv1Yzty!8p=f4n$^ekt6S`28(M5Frw{6~X{k>hW3%$xgCGwl!w)iXg4nw}R z#$UH8@#rqL?z{oVKK|t)GscAoqy*6a+@5{F_RqKgk1BUG?nPOZWzxB4&1Q;+yjy#Nu;xO%}cLt-mt5Q28%pkMxr{EB;<_B z-ekkN7hl=3VRxexELI2uNlkV%#ehfzbQ1xLL`qOXEMUXy^Tt~0!ayWh^7){nepd@e zMV5_NoGRXsidr%f5k#US76~IE6j9SON+n8wGY*m}vBaLbn5xPoo&56eZ$&n&4JTR9 zBQvG=*yE;e_~1_;tZni6OGi$eIi$qfy799WyCXhD0wjoBfDnTCB;&J>-k&<+ursT) zm7l%)$%;ME_GZou@RXf!`mCX)zSa$&eX~32Q)Nf{0vO}Ip#PgUp1!AH&WwW&-ne~l zn=TU32oOpMOC(KMQJvX53HqguhTSa!Wtk#ULXZog$TDY)1DdJmj_n zUHH{De<)y~&xi=Xsp^Z?uKIL++3b_gNVaX6|3*XDM9C6gFw;A?ZAC(X8B8siclw-R zW!{$ci&pH4_*IG9G7rEx4}|>7-+1cohPg8jK6vByJ#A^8h=hSi1kGqnBa(zRt(5w_ zw7qUevmlBhqvJ4EmSxTu64X=Co!i=}tSYjM*&<66MJyVzT3HD6c$9EcZM#5ORsu5a z-M$4R)$5hH0FPk1w`~z1q(J4^g9m-`r~BUjYO7OZ8@d$KBPVy=^^03hIrW5*1Irth z?<9J%GsP*TS|ZAkQfhH0x#aNyi*McBNhL+1NB~Sjql8Mxxj-33XY<~6Ac`y@2qP8Q zwXKa%MNt*O^tdSy2?&moLRoU>w(V3=y@7xcYuehuRnZ5P%?%pa4W72oNBE+}ecA?Ue1YAv)d9LLoTtsIh( z5^?j?uozMX3l8>v;cZnq&alRJe3v)Uv{u& z>>?wZ4>#vAW8K+8;Xabf@#+d9cawj2lR<|5Y->h~ERN|Y%($7kA}6+P+6HrvWV)Hy zC$YD?s>{!(yVLdT#;u!@W-8Z0fdx8W+!td`Z|(;5&fKwCCahfp88{I{=0S#*Z%LA2 zxZ5q~zDESO*zOjBEf7)U-Qf9++NBZl&gAF)e-M4%zgzmBNas7F{%$f^-kq3x3iG~a zdl%*%cexyNmJo@(Mw8dC1!Q!+v;K=Sf9#$TjN7&nbXF>Jf4=2w(;=5)cpdl088Hm^TR?e<_-Zd1VC|4gK-`)SM}; zoeWP zdQ|n>jry+L>YyQlG2y=757+_Q4|8`FE(AgRcKx2`+tp`gR6Y0i^)DrY|M+qL55C&D z&QmnVjE2i9FB;$lhfg78F4eUU_N3+xDg*$NgGAufr8`)k>VfgjZQh~_2KyyfDlaeD z5v#2F`LKY+m?k8u$$ zo7)*)KWFF&FRV7Lxfm?j-X1C~1S9c9V`z325dt`3kxD+@+}y$N`Z+_#1tDz!0Vppn zm{_X4x4K^S72JPlMWG+>KC;*Rt*up+MaTCEoH>f9CIrih?mdbu+!571YLQPpYtn$i z4J{km(j#m9Wd-z%(PgTDs>-5yK}jJ{+t|4?1-H!}Fr+~IcvQJ6pt`c;I6v_h2Jf0u z_15~v$^pI384)zYWXGzO4|c~+8yYeUQBqNS*JSb5`o@ZZy)GQ#-@Uu=SnvXXM8RZm z+}PgDD_h>!7Mn7>Qu8Sw$VmrPmdSYd#DVIDmW^%cVZDk9WdJUiAlDu>@Wl-+pDXf} z6UzIP1@Anf`jss$EX07Lqhd%+_Wc<-5FzP-M&azOQ&BSU`ED^@qXyDdCtRMn3Ut%H>g|`DypZfuUB=7Ne-PnFtwub;}&}Dw7vxZ=S&?$ zRyDp`hrgUXums`AgZkdvpOy!`*Bw2i_rM_V0}f;VD@+K%xKI=&t)&FY(6IWY4Y5FB ziAOLdfKXy7rBcNk-}~*G+n7I8ESMpL0N_X{m59R{LP{`$B?u6bqDlbPMtNEBSo@-g z>=DA$O(97#&4NkRCB&mD>2zA4oTy*@()xI)xI_WQ1ORX<$y5lQ#l9SN6cBMWpaYVB@v4f#pjU;=ipIc={wK{FV-07xJdQf0^W9sq#g9Q;Awj;|N4Ujm^}fFgh-p#Vgbs4%n? z5ZR+Df^)%zqIzT@IOl*o8H*-$210mz0o8H^>G4R&qv3X)2_Z-z6td=Tk|bHfLxKn z58m;mtjIv*P{>DZ*I+^*@pvphC<=(g+kbj2Z7={DEG$rEl64FukaGxz{5zK~e0&Ln zf&qyDplqQqlu{7D852kd3eG`NJu(0n0s)e-NJ?jjsQLmP1q|I3fXK{PBBpaLfCPde zf*=5>B%wolwFnpjC_x^NCyDCwO2ldc0jPRB03h^^SAPE#$lhQuAUFpAtKf(LoDcwnreOjIW*USj6a^B3Ah-Ytc_I?gO-?9LeZhcF zF?A*Y35s~QLo>M$;0p#+3W5u8YEp29RPjjK1DgB=10NKpuC4T{{#!&U~IXAVIE1Z?ks z91u9SM~Wgx-Q1ckWl>N&!LF~>ZlDb75CJ8<3f(*>dH#z1^@*7?)Sh-10&W|FfqG&LtanskdB+ z*8b_*7?2+f-4!G(UTK~pJi6*C^PS|w^FRdT-_VeyyJqOm;Nq_1<>h z6=l7u`Z54sS`X2w+ZJRXm#s#ez-TIsLb98QC1)dexlIKb+b z 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½<*f5t|U`>D< zR2(@L3DSvdq$q5tq8wPafdL_45^G=pB>?5P_%(`S-zpRiI;=S^x1xvF;~7iAn$s%w zXc)IvzShC??USlYo@h1HF2>q!?bdGX_TOiO5J{3GNg~Pq^+Hjx%oTPD1S24tum;58 zPC|)>t}2u&$x<6}JX9AZ7Hx`>M(jcg0Ki~G2#se#l8Hp9ASq#)LR{Q~#!iWZ!p|GC zrWAM%nGMKnKt?vPR*nLg46);!#!(;?j65=OF}PnZK?eW`fr&>91{0513??2S-P$`N zkIV*S;@jmo+O6IG3k_jVB0;Xx)r-fj`{=!fD0IDea<}NQ=RewUyu8XEm3?)m*R5T% zb>q74j@3B0z$;Hb>dYDQ>tFq1SV{JQ4WF;yzWeL9UijOJt%ZXo*_scnSo_0@ueTNV z8Mk7&Ch=iHETkpBEarH}oT)Eq5F(V>*T+P0)h#5B8eCD0M{blXvYnmY| zi!^+);@iW!H$DH`KOATfO;Xbbum5%3XKPw;jy-t%cfY>vi<8`+-uvM4VTBz>T=B{K zf8tMldHb)Q*nX^W)WYSR!v{Xye%9nLh5SB`#}|o4{2|c> zanIV%K3ehdWB1*&_F&Vjtixtf2%(h7lIRQ5qQ0Zd%||}jy!)fCw&iyp zHhtR2+C86tv1!NpwHvq|6MIP~p8H_KiOO1UFbXPdQjCg{;&b~hp1rhN_~44|rP&## z#@gx@kFWC7;o~Px@r8YdcD1-eQq}&AJ5IT44uAdeapSd%`oI6y2R<+|K!_qoBN3S( zIqW%e`b>RO3*ilQ`&X?wE-bv_su_cGK7Q|;{^KVwLANZpSADgn${8LqcS+aCffd`& zW>|0#<=pweU3K5S^vdd^(O_`sB{z>UpZN3p+l>~JtN@FtC`7|i0b$fscI3?$p7``6 zd;QX>5h>%ktH!T-|2+@uz|oePx+b5qe&7DXmGzO)^@Ns;kr*g{(Aqe4bMLN$32xEdrs$x(`U__KW|j;jv2*+ zMivEL_~VKLXB#BMNMYgh>C^Si?ud*`)bsK)Pd4X_x#zB%1{K?ytE${yf5nLdr%s%0 za(ai%S=Kdt;FB$93iGUcH+;Q*`<^e~`s3@LZtOT{lC}BJCtLP>^!e5<{YT`Rgzr{= z`qqjsN*lu#R;;RS^t^s~TB9%Kn_`^qg7T)~prSrxJZs)*ROS?r5uH06dm0@VC zt!nZ3Dv$3we5%%YYRh};PGA0uU(Xwo`_0NPnq9U3_|uD9SFNs(aNYY28CY!bhUMBr zn>OvQw()?7A_-AZlKgJ(z}d^XMh<+wy)+}!8g4rM-d|o`^~LID#g=WsZl^0GM#G_C zR7NP=@bTYXUiIawX2q6c<0V-kvK)zoWkTgp%h}VX8l0YRD9UD+4C#hGeCr?EckbMG z@L1T~ed(gn8$W)p1z9Y<(^_Q~og>5rM3Q>^g1~5W&W|pU z1kRkm*;_Xu(pN`PouqDGSn=96n(hcq#Var9!k-?htt$OjqfLV>>k!1`Pr_YaY+r*5 zbrU^F%wioN-BuS#QHD-i&562h1raAT0EM{hPfU_IHhxe_fap}Ni6*&2;vzx1DW}8) zly*BOVbRGqc&rZ7l@7Hoj`~L%BnYVUY{_$8@o^J?5S?asLIWb*#7gq9q!lMfHwVzh zh@^D`{bXIjry!#N#yIZUF{TBCVj#F~b}j+(BCL9{h(!{kGiw=2$6tn&=hJyPw}w@ywQ*-7S)V1ww%Wa8z0Gef8rTE1ut8UlE}^28Du= zhwn}{Z>WtLc|ZsZEC2w@fPn!(AVs2|pYV7>(GL%`xI)6`$J`Q&3>Xv&m@4ZIH$1hW z;=L0-!nChNYPWX#FEflFD#H95erYaWx9VU+R)*Q{tS8ysE}1;`_8XQKXPOLVi{0)p zSu8f2#hQ^+MNFTJWy|Iy24_WAUKPa>S%#487P z?8+au=bD;N<-;?|S^j-xe83UU82u#hrTe z>SblowCnGmlvDT3?uH@5E;1o0sF<(1

j@H}63iESv za&vR+CXO*!GCTJgeARD$ZLi*XOz8ITAO5nSk9^N{%UAAgsNeI+l56iF{V#px`TItV znR4~aUMt`IL^NkGQaB{x{-dYgbko&+3yfgOF3OZYeEs!c(fFlv2FoHbnM@|LnMAyN z=P|d;@B7i)AB)BetiHNpzMxaL0o`*OPJ9>28+gT};a4sg-&D45g?mz5!?v>wnHbkQenC&^e`t-_k7zxEDi@j6# z9$h;YWSPX3AAEKBlWz`@4s1WwaOUWdmQeKgo?YMX-ludJed~h0AO7=W*_;vd1ZMx@ zp-I_wUw&6NV)&ri!#i7K)KC|gcjdye-5Z0JoW3PpJ9X|>(zT=6mUGd--mD@TEtY6R znR~-+=CXCG4mM|)Im{X&ewV$=fO#_~UDU5&&yMds5%Kt*oxArPcA?Hs{_dWYkKGj< ze)|oxhDi#}$Z(h}7JG(+=U97IPJUiqw!>sLnnU%6UwPr#r=ED~AFIEQgaZMTJ!{^i zU)_FvuRNmyV753qbt~ywki}cFJ7g*!y!N+X(fDQahJ)hs2{2~*+)*P3br~?>hIxHH z`satD(E&u^%(lF|{M?*uqsdZp{QFSeperT~zv_|+6-R&YAzOykY~n0g84iol81^;W zI}eyYbA10E#T|O!?*HoVv9KYiw3aZnwdUesy0~^MTDf_nfG3g;*f zN?>+rEFEU7;@(t548qL0d3LSw+H*vGj!1M#xA{RSc-V!;9j9Pk0AD&afeVv?{$Dke zuEyIUCZ`-fM}{wu+KkQ_MmH}5afnYRS`O!!B!HNXfp%BLIim3u0y;GqJ!Q8Qu$_oF zNgbzcW#qJFZ$$}DOPbaWq^}PeCnl#zy2mGe67xohc1@LNPf0AP6v?d}AE9(pbNY)Z zKo}$jiJ>bl%O9Jo(Ba4snH;9IXcqFeNW05J?! znCyw8`%IiLju5K)h;Fxk#RwsyD4I+rNa`2u)^6{L$dpeD1G1 ztB(cfutM{RO4lbRT28cx-e7doSZ-(*KBhZ zj{sobSy$L<8)!oYt5Np&SDtcjKkII!T%Sz-`!h~9FKY-Nee;;FccFzpm%okk)K63p z4F;nMj$@3&p`gWVVi-0}NKrN!_zM)eP$|kR%XBYrbjFd#HaCp!lbg#>86#GRJinu9 z@%SFIi_8`dGYC-tmVvX4fe3Fbv9rFgRO6R2ENn0!)JJKqg^76m&+K+h=$=vDB6Kp6 zKkaKC(7~a|G|PfpTKr#DMi=(aUbm;}EVhm=;6(*~uCRQ&{aXwnPzX^J*<|G5Lf$Xi z?SIP@MG1$a7ORyIf)FBv_`Dvh8333~ro%^%uU@}>KzIA5Rcrjjz;j%%v9!!*967MV zmao4$Syo+JTU}pY+tAq9P+wPFQ=i*w#I&(PoJTgi|LKMRVUZlIDnH#4#l&B8sN6SZ z+Dx`~=ifhCEwbjQuiv_s@AqVs zj2Jbjhrgk`qPEG|Sl`gt)Y#ZqQ&k~Z3I_G*wD;?OuH0EYbojs%8$NvZ%kAd;&LrgT zH)fJ0(hL~|OxW4b5;WSgd-WUCy@Rdt^hvkC4H$fp)NtZhb!hy&#luVT{B_6P`R7MY ziRUm4c^b;98Ysd9G2QwN%!rh|_P2M1tnRi@>AUZIe6r4m7z{*iu0Fke=k5SCcPPjx z-M8ht6AebAfd#3es;T>+K`lpjZr^*Ptj5)S@VLpN1~wnw^xkJ%qKJ!n8_!fW$OIL1 z=@BabVf&GKli5HBMF`2FXfN#2v!nI!jt$?J`X|hsiK=(LwQ^HK&DqmUWZb0jMH$Tg zt*ei?O=AWXZuw@_$%@*#`bJ46jtzr(4`E8hNei@8G&>aMJ9i6GY4tA8)aSzgf?q*Qiv=+@CJ zohqyGv^af!|E~3`s)EpT`cMnsdEU%%M#1e7828!TJCD?v%)CsH#bPp;GkW(Q)U!CN z{J_>P*B=-#VLDT>>CbPk={9=KPzP`S$&J&U%-iA{Zbp$gQvnI3EY&MyUCdpTKqB=Zcc)#O2*6luYvZ}sL5M@Wl zu0LncfaGst;l<2#>j5doE+Jd@Xdbk9u18Bm;OcJDe`XEGbqUuvod)n#W| zqCmV=2g|(UXUt@3cD?c8Dw(qg-iETudP3#;n#$^mGc_T@gz>}tmB;EL=E>7%_R3aP zzV${e&6cY7Za-XOGIEMSIV_z%c{;b>s6Khjk%I?n8^c4!j6Cw~TiZ|gCSP*Zh+YN0 zx?^wsV?|3KaP)Z9poz1GmE_l*Il*)qGI?-OgDae$XAMOa=jk85J6dlxap4GzoOS82 zUU~kSqwl}-No7N0$WYKb54Nn?aQbYSD@=O~y4Vpq`{rx!x@4XMMM8Yfe!V4Ud1a%Y zQrX_2YoUdfpE=tyOMFIeeqsgGLX;u6~16g#jLt>>?I(DOu)s})!Bsrx@;1?Pi z6G!K?rD8FSX?^@DD2E36#S@7`fk=bsS_w`A03meZfD#0l1I(c`^vqOC55fHi47x1@ zug%ELDM-AngI%oD zhyn$U!6Mh~iCGL{a2*H^zhvW>}ld8p}%kIvq)Xdqu* zvz<6znOIQk43>F9um8|^-JE`ndry88b-Xd!de_>9KP~I`-L_M^`RoUKvybj_-#H@t zrjJV>ykbD((eks7!Y6y9tG=zje`b$?4vxbJBlyRr)3|Gqsk*kMW5>+Os&|97H^*4- zTHEmQ@_swEm+m75n;`V>-EmPDv+8!{r`3M>19iRV?1MZuLWZm@P@jfMaQD1o6 z#a)(kH;V*#244K~sJCP1XNK7$0<_Np|DQ61K$K)bjAl8kKlxs0w||F;qTqCSa`Ovh zS;iR4vRqwR#%da?0Fa%P`R+$w-t(&)Y-SD{EIbo?s|W?WVL{@qg8&c{L!mGTk%&SOXE52V#&Ez#Ijh}>JzgJgvM54GkO%-WS*%zQLQx500K{7D zHXak7+sj#P5;5QL(4#epDt8WyR=V!}WpL4R135n?QMJC-AXh+?)_ zFalX2lmf;KP&pKiPznfh7K@P*1rR1;)E5XdEQ>H_G4o-6Ku`$6ti@_&h!7Hp)ndjN z$5E|tZAKd4~NZnq&h>JNq~V3Wl{#R%oCb|Z4Ty}ZR? z=20jR2n&kEYBQO5B1L_^Am&Xri-|$R>-91wyVbx_AmKnDDk&^)G_pukkkx7=ih>Z1 zh652n#uxxtyTb-j)E^8{%sVn{QX~`#M+rrkj~<4;tqc>KdXO?mlwJcEf82?oOe z*kZOYL<~g)0AP5di9@1-trjDqk|%7q50MU>?Bq(N^-DKp56b%FdjKSit+c1?v!LSV2Y_}L} z&_g4MZ#AcJfz(zx)=SAI)J1f^XmJon4__n{Y2)}e)g=W9d_|LcOTwOX)=H&7l$A#o z&tl_5N?jUhAjo9+1f|A%{vYP^qt9(zgU%Bs%}fO(V_p}CKC6|UR#y9e`MD!DQ!-dA&5Xt#E2w{~l{|1S(7OeFD(Lk<1%^KQ)bKfcdj z-V~^d$N^WV#A3d@OTGb+-DaB8Ew6JSGpbX@q%LL?YukQGkwoFGz4gT%9CnsgxTCpt z^V}YJMR~?vj;0pBu%|v4DYWgW7ef)@tWO?Vk~6!&SQWILs24fjnrSf%$>K49L}*N* z3czGwO&A$1#(7=yit>!TY>mzcWOC$h>nfkVa>$}CW=iPKlkrOdFoHuB&F>s)Hs|Iz z7$6j}2xNx8bz(Q83BR|aqBPv)!NGPRN&%23C?Jv8Br?2D(St(_m%e^%)~LQYRW*;5 zxvwm6Pzpp*>H?xD6N}w?|MV_gRpX6&8|HND?qFcU?y|K3!}}N6iPSEL)o$(fUuG1r z)ozz%CHDAFsM(fju~BtmO!uM(lmarE?3fCXs6rHiS*zUvoQjoM3N+n-GS9=R23X3n5-EVJ0glg2({QVZ5UBP6hbqM zMn#cXlP%K(1OOwXh=QmfmH`AthYghE*;<7VK$th%GL16DEQ^t%5X72t^DUGpvO=sG zIhhP1it1p3BG!eAIU;krOMHMkP zGC_X#vai1{}l*Z8{R28iPi2rimAOs`2Y$!;Pv%OMxOpC`GYb zA1Kx_pfMz&A3EFs>5yoYgeg%CR*qq7dgLq(u%;eH$=FpZGG78CNqlSQtOl#-kXj8c z1JI)}0BJy?Bvzf4MjUNMI_`DrfVv3J!R*uL>HNPIX#%B1$Kv&pCdmt(r`CX>^I*`B z)V@E(QrN&35>Fy;Nqs9(B`NilQj9pxh}w#_O-qYDryfG-w=cku9?Fcv(CU4T;uv&N z(DThxoHL=M`Uf40A+>TZpeAB?t~RtL;!eqC99&j!OQekfG)4|b@knBW0ELvV^wQR? zGn0OgBHcl4u+nkAY1)|LNo&&q$Wfq z{YgM^hpuVHF{B@(V;dZGApm>qnF1pO6tg(Ph(S{F>_!tnlmL%`P}QlU zDuEqy@CX2uf*Hf%wr=s%S0uwU_^rc0AsM2cuG{>41mh`M5_NCMIxBDm{2$( zVg@IuMT96S{up}+#*#wJR+|zHOGHJiVort>g(xux=m~X0N~t8%%LI_4Q;0-bcvyr2O5I_Kgs_hO45dv!8uvxI*=Z#2IZ4|&5fGV<# z5RQ18&$_6=Xk~x^fFwi_#u&%wXNnMNc10|9hmk=5M3JdN39v?s2|^J8#yyppEC3>wA}QxnAqQ5AF0{^_tc4ah}+5Q8bD zDh7?PI$xv$#WA{M0?g3pnK3YiCcp$;w&DO+3`L3KKXC%07BFQi&iSS~3Let7^x%j- zHPG~`^#Du)5K2*qO@5qI6w1WhXPsw#kydGKK98dF9%v0!wh1ezOF8v}{zde;RRU>G zoeMNRZ$jq5roet@G9=Xxa-=@)6W3QC&gwIt=Ho z!T9tO(xOhTkF*u2zc3|x7uH_d0HITVj(eIzpkKz3row5OUenf1huS`_pViXk1hrX^ z1p1t^#v(bBx)>5=O|GTZJau~RexRSp)5R2<`AbY9AbrCm4fT4plXNxmW5$Fe`g3a# z`#k&cUWQbRS<|hK3#F@$2rxnzu<+*m?Ly9V^X zZi=GFvTQUOQM!mtePoMS06Gd#=o$+K7)Y%=mgJ7?w5 z=(lGB-8*DV>gp&oa~(6yoh+<@#htUQ!@Fhhk?0AJSe$3;n`JN=xW2h&4r7Pa&@$IU^U~P2toh* zG@uCu0}Dqgoo^paT596IG>uGLljXECCsoarXsR0zx$EPCJ!-)-qYn(1du2z9B;q~2n7UG6lIQM0wHD8)H#kw zRk<@_H1ZgMB#H{f3}z4@1}naZ;re^;&-ETTRu|?#i3lPfgn-DhtU{{@V~iOw1E)wrRFqkcLqIXcvLr@D31fy~ z7$CABh!iMgOczaB^vHd;1deSwR2wpJ3`UACV*JH}4`nrecS`8GV0_8RVJyD+L#elb9*roSeb@7^2J4ejAG&5XP)*Lb# zIE+DzMrDdQ4$G2+5W_M^k|h8HM6E>vh#_LMXxQ9`etmt z*+Xu9N)$z*R2D>$W3fLdj+s8s5w0k23L1?Z z1}X?qg(8+^5W);5-iYz0`ya_{{O+XCWx@E8lSfYw&WI>Mn8iq?^(ssm!-G9 zFzrE52p!X_8>`k%;yWo6N{T#*5}5)@w!w)`2G=f7L@Sk6_#@y=xIn6Pa`*(@JM~lo z(r*py{_6y~R+W}M0BZF&`E1f=>mYIHF1d=**Aq?GU0MZAY01Rh(YglDRlL|G2_CeL z`HW(-)hPt%*6?QAkt2OqIuC|S+qz8v(wC`KS~0X#OQ(&TwUs_f+`zQ$YtqdeBpuUr zlsII3jw~b~V-%k(1BB>Ld+F3?oVJ?z(uOQVT18H2+8YY#7rMkI{}Q8Iyj@jd1Jz_w zT2*Q5>`|a;Lg;m(<8y^5^;(pC+oqmC36YoBR6{(g35X);FVfci0K^veKuiP*W5~!# z{4TWHzibS{2!i1CdfVyG?bdE7h7b}2!Dh4lr!(^ZgJFybA&Q~^0K+hGg=oYZE*qGu zZc++`x%OLf?dqxAF4+K}P#D@h2LK4b-2S-$0Gal=nLq)i4=S1-Paq=;00@O?eewW+ z0yASk;SBBMC4CG)X>P7#RxS_I0xX4_@3Y8vr0P3jiQ17SHs)xd4#cH3tAF zm~I|sf*=1d{l8JM2t)-g?vk6I85JSHg-;bBhJoj&b>mQ0Z92qP%Waf3tHdIwsi>%qqGZN*B@-420dQ)!COPAfywA$11 zU1ikg@{3HD?!7t5Ti@gX%!IuD0kdxFMb3P%y9}{r-qEo*)8K5Z4@I%fW)g%5$1&kh z7=aw&J1xI_;;y%!Y>rYBqQyOWL&VeM@?xWvLy7_%rjke)yVWE~GRHB2K%`Tb&P}KH zxcmZ9=)iH)FIljl*#F(9pM4`0O?vF1TUP(|rP06o!()ZNz3Y_?8Cf=>P@oiZJjf!S zSztrqCb!?^moA?=_0-2tJ^RJ6p_kk}p8-QgzTLt%I)hdV=V@{C7Khou5JDK1Q^ar} zEZZ|PFjf2>&&9K@=>=y#*k6~In-vX(4JI?lVlWgoWp?P1Z)>Wn@kJDafsIPgp;La) z?Gy+K`TT?C-d;k>-u>=qW4L1YumN_nfl?|&LWax^U9-4~vMPl)%Hfbbuef`rp{2Rm zSu=ABY>kK3zx-yW=azP55s46{bJxzzXZAIF!@R*@ zHnQPR7yuA!uyNGojdbeXiw!kZHu_8!bI9WwH2>NXa{BLkYDY{jS+!#2oO_`-Pi7BS{C)Sc*3N(TW>bfR9@%HEyxpnE?sJ;^6HkT1*0slpFukDS?AKG#xYw)tMg~8jdy(g60 z$$<%%QP4G$tt_t;vBAh;K`|8-S(<8V%(*=lUvqQgH=Y)HHsW*o1g2|Ae@^t(H+vAv zMZ7H+&Aq-CJ@b~@C^IuFODmlM6{1o!8liv?XRw?2us>kVF0`Uxy)(cd!dPm@*3-7DJ;`X*ss(Z*O#ZW=S^|kuYV8yLNPy?sfX2MgvD>K|sdNJ$qxp*X;5k zDn<>(S1cO4@1x%}MX4>r+`Xhz#M|WZ2B?Z8=vZjFHTiMeOnsG)3vk460}3dq7q?O<*n4*F~8h)L)HZC?B14Q+Ra2ixZyD$j_)FUPw-6knmF?_eqtsjuslUY@r0 z&LK_Q7Q}qs<4N6?rcYG|c>O+WY%_@b*^9L(fVdg$Zxcgs861ALR8f*(e#>Wd`_aZ(RldSsFJJ% z-AXM*m#99=iRHJg+E;hqptyvz+FGspOJXQTF|V>}Srb9^F(P$kj8@y49y+BIFveC} z`&;k-pfL=Slar$;3Tm&_c5Am}qmpO4ngU5b-<*}U`_wEjQBJ8!-FY8faf8de3)_?I~W8U<8ubJ)-Napa# z$DVudlKbDBnA6gr*z0zFyswR^wca;uColBJ9k)TPaw!E{GQ^np$o^9c>Ey)@xA)|^U!u)f2?$cw{n}1UJT{0r0;e!uXo~-v}W>|f0 zm$hTRYk#q%lX&v=e|!wNgO<(e`{^^k^vz`{NfL3h^0c&TQtf4?v8Bdri9Zmsd^* z1Y~3A)KkBGz3<%HZk*Mp+37yL>+5e%;Kv@lCF1m5G_c_LyKk!tS}i>GC=>vL6e8LE zme1<*@pJbm`2$7`?qSa{&RMu{@3wC}FzA;z&LaYKC>1aMeaCNp|LpgFe<5$ijnb|+ z{!&quon;3~R5p00fm83ldB%H>-u#c<((`|PzVeeN{x-Y}tou`A-mz8|>>g(n)cVT0PalNfCJo{u; z#*2V3$FudP4mFz{Q%9M~&zy-+HsA|Qyyi|z<%UmxXc%?LoZ>vYb@=23#;i|1Su^SK zo5yxG8nSYBeeh>z&*ird5B_@6Z15fRNkwhN~~_*28k|6Ax_o@{{`P zNp~-s=<`eF@QFvB`RBr?-kgx*YLM;K+uq+;o87fTmVNm2`NphIR&HK)-!m7P>UVs% zH{d(qk48w&z-6=gta$DoQZR7zkY4s2VeFtyYH}J zRmYDM_byrYw@1IJ$-m>K`HDd7wC>H|Sq`8C z5Kx4R22Q*C=9!;7aqDLX8!g%0etFlga!HHN+q`PUCnu_cV-7b89n(o&LED%w-kT?C7OS#L_{i_Oeu=v zGcgJ@Qc-A1DW!@+kb+~PD5_L6pqM5O#E`NWdL7g1QE7Ns1r=g)BD$=%hQI;h$hpRA zhM2P~&>Wv7!fTM64j0vsJ|o)@~g+i zQ7a#Vt?TG~b^)PjE9@yzMH>A!CC;?qe!OoX9jcqkl1^9P)>%$lkr#qQ>*`q-x-~~S zElf>Q8;+(ayQb-ql9hBAbSy*~6f&uhKSdWM4I4VS(NJ5ZI$w7M33#Jzh=qH&~jB+Uh=9YRPMaLDyUL$!bNyfLl*9q}An! zU7DmGq91;>>?e9Hg80zaX6?ri=wu8!shn+22_*kbS-lZ|`KF1%trhn=8S2(eN9pQb zYj2vGli1Q3wIiTJ(}T_}WqeAEf>!71yMLVUjR1g%;{U)xi+0ml+(~-7wOhNj+yB1d z#Oi232(kLPNHu`A!Qj}#1Eb&7g6qRj06ku;9z@!O7$ZFpt_4J`<3TA&|BOwLW0j`D z%Ic3NAs{FKD9L*wO@1a&G@6nEfV5rpn@~`cSQSwUq7u98=ZnO*Tf4Pe8-_8FDO`5_ zZQQYc-1@@z&%geBR!)|`@<>gXaEhQ9vh3zaZhiqP1)5wwB^unf_u$y9f_1CDJl4YB zd;hgn-`w})XHBoKe1G2HEy!T5*zxBVk97Of4Z~iz;qi6TCOSWV>Fpny?3o=hvvPB| z7LT(r7!`d%dBL^I0{cJTdB$bwIPCi6)4qD-`maxi8OD0+*h>!n@I7y}L?oPTVYs4U zi$~@D?a}AL3QSpiQy(~d_1&*>X4G-m;%M#BGLLMc(Wo)Mz$_owv)5=bMI_XJbDf*J3mBEMPEkRIvBG_tt_{Z@e;Z_FyZIeX@cOqLd)kl4**rc<5xX<>*uE;JmPM7=2hnKJNLY}`-Qh(wwf3!$%InOFf0QezkJEvSNr#VwyT<& z*`x1#@J;c8yyu?&ofl=?{JV!|4vN0Dx_a7@#REQk|NbZ5-oAd#@z-v;;oBott3eiJ zK$u}T6C?& z*;5uRT`;b9{hkw;3Z^a-7LUsM>!aV;vK`yMe1HAO!3|&h`Mq6LIell|bNdzhKYWwv zHU6?iQ?9t@@c|)8oN6xg!yd1^0TvzGZqoviJ?>27SeKJf8(c!Y|drNySz4w)0zxZB;4SoOFU)N6@>TsATAq;OW$j?71`kLIKV8iM6 zKK#1#g1p~7`5eycAd9f@$|ZsQpYN)S+H9VEdykCH$l0*^o1;$t&byaZd~@HED;i(> z^zB)L)&XZayZP=(s$G5+0v}YD(X6NT{9(QwNAgcI+?#X&?cs13gq1Ho>bUx) zCG)18jL3**rJ%xb9Kx&t`B(noQOmMF-!X66r>hUjgd&U?hBL9!`j7uMaM(qe8Md&$ zeDWHJtDom4jil7OarRJzmMO!EW3>sZc#jJr~ ziWE&}ItEMwra)A^b{a=_;t8veE`em4K>|%uVQDoZ8pTd?uoyGVA6o(^isQ9OOT^Z2cHZlDmc2 zWI@VDpJXgu5)*n+&(hX~O`F~GqNgPDFNu^dF z?K~h&t&DH6FU#jmciN2YbEKHf!f|NTy(FxL1^poxp zeGJKPep1ZwI~EeFW`HI(^~JcR@t!=_I~4s_byO`sLSc{v@}&WxD2*T z_u;R8dHZkNg;W3f`X9Qmk@A}6pwD&sWTiKvV2lWmm>M3#$^NEeCo32ur%1BVY_?}) zWZ5kYXUsN9|9tk2KYV)R$_HP%ZB|cf_lYxmitn!6WVG27g&>T8Qc4txkPz@XTRe5O zbzw>J3x*{(Tzz`&+lQN}nFG+~2W6QuAU8EPyIY#78{M3Niv~O{x2L|oJ|t0u5SX%U zCdTJ>M-{3>!)|XtjD~{(oH}*@(?Bf0X6&U`)~Bc=tp1fus9rq01Fah&F|m0i_u{89Q)?BUp?gQF!i<9p6za@Ay31B!?0`9g zffqdW-|yP;(j#{~_SaR`>|zV`*7!*8-d(U1YHn_EyPB#RJsi)pG&i_B{)Woar8Uhg zi^>k~{Px>#SFhVt;i28T7Sx#zs<_3YrRsge+21`{#t@rGrJt@bRd5&OOFh@>zK6T_2<Uf5F;O*kREu<<+%z4u&nQIvYNE$-=0eRxg~VNt8U zvGXVi(u&hB6Ngg5=p#oOdAKbsIN9~1K9x2_Kho9V1)V(KLvwxKj!NlpG`oNyVI@LOU3I+|@O#mr(lnx|Dx(#%W`qVL6bzpP?t<@)`0meGCH)#u0 zG+F;0gM?Lws42L!9u3!A)#;Bza_IO~sl$mrsy06HvLz7i^R;;!&D!doO(D9c5TA8e zb36<#-IWXoV03(dC zx`ARFF(ew}cpt!!a4dk34sK49vDUMRfG|dKVc$vJGbfB2LkMATyA#58Yqxf5xBtAI z+X-Pjj4aElk1YM!P*kk(3WQ-SEK&$n*}Ez$S=}Wx_G7K?>VJBpq9RhnAtY1v!q~5; zHxO+SsKdahmtcelrHVG!uh1Arn6`?XYJ3}nK%rEWh)5BKkv?f9_HqOWUFfsjPjf=3 z3X^Z~O|gr@1?5LDE)Wqk*In8_a*YNt1dqQO0KDymy%EWf#5CZa4pb@)X8iPNjr|6|+PfX!?WeGLtf%*(D^JYvXTD-E&s z97YOLj734TckJEE;eGS1&%t8jSyFMjtYq9J3#N=3*sI9njpXOpBBBBcVK69wi7X-n zz#4;fCy!M5M@+k9=E&})hYmUVPrCWq#RGeFE6iq&e!rzQV(fd-$Z-R*SN`+OqgCFL z8MplI)=8Vc{zlHbcb$o6UYA@t=i-Y;_A=GK z{KhvEuf1ntvGm?wU;1d>0hY&ywtTboaQ%>JmkjUOq1Q$IOV@w!T}8xhVuE3z|M)o* zM-1pv=-9jNYq?~`O^ZegVS$xfHg4Y6cg$p|a`*9uFlWkHcH@%LRc~!Ci`Y#J0F8<; zc+$LC3lAeV*1)0`^ zJ2sqZltxUQKWA)@%BrS`3l>zY`{&lOu+7K-0-x90ZTQsr)5kiL=5IIbA2ey!z>;ny z#ToT}%bm9_c@G9r^V=+0j(47Y^G&YoXDYS-^L zl2hDk!jviU>2LqOp>okpx6d9ov`5#DzUFFU*D-h9diC__V{3POv^U&+et&rNjW4jx z4wO3ExKfA-{Mm{*On_qb0!b(UeXKs8%k!}Fete8y5DWO`~F*l)fK$iB+5jV z6{}JCVb6&XQ>I7Cb{}tum<>4Kbu~9TU2ZR>k|)g1zVylgy*hO+$T+lh&B3bR@EMoP z9M%2IfxWgtvu|89S_lhRYWZ&0o`#lSj}g-rP9H_0;;@Mm%Qw8cy)0xkGLjgz7Y!KR z&9rUjehN}~Q)K!jmrs~Dk!{%Z^7~sxOq&%vwY^L(8s9f_)B0^8bI19YT{@&^PDPb_ z)-|{E%LK~cQ-@CsoIJB?!#mr`!d3%D2>CqTuEVD;m@(EQ`;Hwrcs7!M=d$5{dg4iM z_K<6rE*LmqNKaGqTYrD=NR@x!*eL@_y7umtTUqIve%1AJCJyi3Ip6CEjh;EPYTesA z$|Gi0X0m%fVKEIl1|;XW`PzFB&wor>XJHH$Djx zY|QGuVDZ8tOSrtW+#7*GlNU@K)~&hx_@4czdX8H-Yx0=hopT_g=g7{&+wXjZ?3q~f z`%%W+#g}#~$j!^N9Nw|M$|G?MicRPzNSzu@SO?y;S~wj?cyLUM83-jB=&TZL6N{lW zLM614LqNKCRDXoAr$?+JOMqhl1j1OQOUIPeV!X$s74d|oqCq%;B*)WC0VT9zw?h8X za1&8V?)6B|Ilwn{04Jk+bwhv|KtEwgGHT;MD|GAMgF*i&x(2#{YtfI26X`(z)Z(>L zEjWMq&RKT!qfWF2hf^|eAu#m0=MuDQ&Wl`LD72}w6dJXD7D|tHQu^asET(MGR_D{8 z(AG78Kqow+hf%fJj>McnoQoajv1*U!dPNQ$@Jdl~^7>+@HUUD=+7YHYm6EDC(N+z# zsxPX=0I8#CqN-79MYYLD)=}Z)B?P7HO)E>i?%@ez!6PNVNCNCua6| z{DI#{vdpn8v|GEiTf4Q}f7)bOW?A;ZhaNRrGai5F9u<$)2S_=R*o_3Q{P0YV?%7RE z!6_rUUD?GH3(?A{hW>el#z1QLW^a`zGw13a7JW!}Q_G{fTr-AroZs1+=Hhgga{ffM zTXZ-saxh=*sq|;(F7Iw>E93>@n6fN;{Q;XjgAhU~Wm(qQ)R>!-$@7MkkdiEW1CdO- zO;#w!A_jvZfebPH*ud+mR0c`6%2Uk-Mltma_16_4AQX%|fadF1kdhv-TIZht7`dd# z6Va&XF;c z?i6Tsiy7b;kVMMyiD(4z!aVH!cN#(CWLfh@}yV_BA~ zE6Z4hiEFH7XJx+g(UvDss==XNN_5j^#k zO#!>j81Q%z%TPiQf@nl=6m;&GZEk653X2LQgb+nmWR_*cNHD5U79l{0NP>h--MV!_ zg15=#!wduJvP#S#hQSbH#t>N+WrZ_Z^Kvu2jdhYSGvCe!ql(qYG}YDkqNr<+u9Ca9 z$tM~O9OeubBj;_Z%O8953)lDm-BZt%IRhfW9D_N70c25B2*Ru*D<{*!)>TzTvDsl_ z+%0a#WH%caMIj8sC}KDeQL=LL&5Z01gfW9DC9)*4maI&J-0Tjq42Xou$t$!QX;oQy zP+=`5gDeV?LI86XBO45cFvAi`0Duz88m$HS*%423ZKK|r%WR!@g7|hm!ysVJ7B`hl8a2PWzPyz@MNu->ub5X9})zsqg zV@r0o;=F*f!7nmKM)dkaz#6kNY(c+QL0o1|o`YBF>Y4Y5dgI~r75g5X)-8}MeP^@U?PbEsHz5l;?by*QP3+xIDYJefn<+cVWv)z z;F1KxGz=4RdzWNLMr~b-}@!PBw)g(c2v-V6el)05S z#9COv8Do@jPC2tMZU_8f9ow<4Eu{pS5c06AO@S}Sf&AEaO?Gn~uy#u6fp-!&cFsqi z3I$4zUekQ=;tT#|0NUYWH``7FLqppA;Hi=9Q`o759?t02peqJq4vTw2^;Z^tpR)c$abL zeCud_8akRjp^_?*HZPQpJA-r9%klOULGBvyZhNgufVvIa*R~|YYbRJuV6wIYwk&g6 z&p6MDPUv$o^Q$vdondI`(x1o)KqoG!&Mn>3pLv%}iL0zLG#n-LH|@zgZe9Nqscr3^ zN;Es=d+Mbv?hL5{X&2g5EV_103I#`w{E#SJ8Qj{1a7HIx`S94xNACM!4*=a`J=SAA z_6@Pq1JKsnHEY%^Teb`UX3w5Iefo4tDItW0LsxxR_vST&>W)_2v_1Zv5gEr?)Y5{C zOZxk{rv3fP`VK_AvUK5y++1S5v%Pk2m|r-u*O)BP$}70}NF&P#N~x2Hgb4K_DPtU>xER_0!7O`2#Y27%&FS;Fur@gKBb-Ac8?NxJ5n^ zFaQUYrWB|d=K@K1%MlQ39{|-%ys%j6iUgYuHb%XH3yNgJ1d)Jla7>WUsd50#Oz@Zl z0>D6HAPZocKmmYr(%rE%69@*4CIV&JIJ+zWa62pr2nNGU2wNuVF%z^6SpWcth2w7> zja)H0r}AX;@_KV{P%tIetiB#fK_p5ggp2?HGj*MUK(Mve z+t78BAyJYL;-*1)Vo@-dlu44r88u95J&#e-)C`jdvMdQ!cwLHuI71klx~7{<5JgE6 znQ3x_fl~&EV8l#AH<&1i02~vNmRX2VO*4oni6Y_DP&Gr4WB~yXL6!(Lblspt5D)@p z7&_&WBq89OQB5}mNfIyy&KLu1r9i+)*Hj9`C5zOgL=bG0jZ@R4lyS~65hY3FrmmSx zk|o4URWlGKoKY-@0s&pqIVK*rn;SX>ObFtM;eZfAhOSXSk|YrXni@AbmL-8Piit=t zG7W=+#d^hrV9prloH3Tv>a-1G1dKCNHy9!$F<=pA)G$mU$pW^f7(h~FV$o+g)pRP! zBBPWL0U?ZlGiue(Q6m2^7+O58Q(2Y~XOsgb#99R`2!cQeHFX9=mLx`XT{o~OyCkCN zh9C%>vE;)!;#7^R;L5r9>T3(*hhKYldBlWZpOKTw#q!Fh;tn0ueAIXoZY}Ad0s8oEf@7nIuaH zIAhc>sURz&C?LdiRl}krV9q%r7+VXxFa}*!ITi?FjPV5bECE2uo|prAe53)O#;|X>%^fr4LOn zHoBgs)|#fY%2Qj?B!-jFSNaCWTYg5KoTj+rqm&YH*B>~=4|lvsR^n)>&A8-tC-byU z>e^OEZJqq>rfGJ(QcTZoqn(PmL*mvE>rTh8eNC^SJ6Y#+t>?6wl4t6vx+vx6SD8g3 z?nbrQR%^i6l0@#LgM3DM6sZbR>micL(vCxeQ_!YswaK|Klu!gtNH?J5DhOMH2O%eF z=>(%sgFdI6>IQvA=|7!5b#|YlYn^?R>ZvY#^A!3F_RU60#mG|APYtZ3E`I7d-Fen4 zHBjx(lUMZQ^_f9J{K)oo$%7vvdjpLNFqU?HD0~5GIIV zj8Q_<*-~@1-eZCYN=ZCh^OLszMsjebjYDjwKtkzgyLE?S9l=s?B7_J;5D2k=oLf!udF>;!SJ|3@95$Tf2{rfHFYya4aT@)|HQJaX@#C0$D8-J>+h{UzD-va z6p24se&Tq0{7)Nddza*7M%sV7tr-CR3v$t%BfzHl=d~xE-CAF(TXbCx2sR&XJgUpr zpPlcHwBPpOu?7Y%8O3Az!6r?VAk@@y%ln5nHyLq*RW`?V)yCQl4hZ5p#Td39ZT!4m z0}LmcVkbf-#$Xt0V9jn8XC1`1A`IZ$ZlVb~gCQxpL1%W|%L^Y2#t0qdT2VoG2wP(C0#u0Fp@{ab{ zQ=e5LkD|x*Hl1Sx*3K%2o;#Hu`=%KJ1RO+3kqE{Zi-I5!LM)&fBS2Ub1w#$DwzjF1 zV@wDk)>9^D3=5J=kuCTTV_=K{LY5RB=OD^1mm(toOa#T{mXH~0??6OIK8hgDnMn~A zWmzJL#q?MZ1U(*AO(YPUe6q3RcVw4KmL%&5Hwi-#On@12RmX%_xD)_VTy9CgM36*+ zIY+WfA;2l)lB@_AC}oVZ1PUxF;i{bDC1S}AYm>!A7fEle#4Q(AU zKnNIPi~%OHEDHoErB-;YuM@@?5ha&P5d>nWvG(@1a5N5>U<90TL?lJR@mL%Y!YOqi zHw+L~T#7&tXAF?wa=8S8F-B^*y}rIlHIXEW2oN_7&ET>uCz8EmK~WT9p@e`4Njyk0 z#zo1c2+$FZ0>Qc#kEt35gb)@*5djF2B1^=Adj&xN#u#8hAdFE#RwR)igcX;|&)vga#Y?k~Pgj1Ga6eCfTM1cSxSy5zJmPMk*R78jc4`9g^soMF`$}dEJ zCgu!)MZ;l=MUhx(nz$B^gd-8dq}D_!H+9`)vZC1iD#(f=V9XigfL$IBn5t%iKrmyL z95bVo3!)@o1Sp}W3`wMfC9#ThJ{wP7TGB)*tPx~sZg569r#z+jY>!wQ`E&q-$?Cuo zg9gTcGR{oSOhzfU6wn~43~gycTQGr01QClOAtELMCL+Sb%KBwtWe!Xg9LI9dDILyt z1&^I5a~hR8$-?U@_RtNe#ZQHFA&mZ0th!F?y^`CwgZj!-p?1z8@HD@jeS*?zK0|&d z@8+$Ov%ycj@4wdQBmmZRc^lYde(r2}Qe3)I$E5SsQ^V4JlOSaBP6tSfw$o55>^yOB zj?x0&HO$Wbf`pSv$2)JdYO;$XZlAr*`I@dlCfuGw z#N1v=>m;UgM`@gVoIvR-``bVmYe%P ziR-xyRrz^7zlh2k!gU?&irG1XWPWkq4yGBKtHbeLzHN0zB(9z8F#Bc;0N|1ZghBBr z7nbJs&Q%8b>RNRu@JVHoR|~iLvV#+H-T6ZTzprW^>+@V*k}Cu9`&{$-=JqKd6N`c~ zO585Nx9$)%bnT^WwZ**xKEkWRW}Zvzo9zPtMG_G+zHBxwo0U7<4Q0Fb?`$?E49K3F zuT(~Sdn# z3X)y{rKKVK@Vc67CikgojcsaZp3=*muZRD%r#&EYDJ%P-;jYVHJus+WPCOKwGOFaN ze(spY-7-3KqVd^1phwL&N%KH#bJ+O&%~H-0;UL{KuKSmTf+9K*<~i zM#KXjZan(yBkJ{I3TqnM-Z~QU5H4qBKRDcF6>MpYoIAe%;%t54>xW17%WiG%z+O+0 zK#!@yuP-cZJK6Z#J?(jJ;yhMUV`R>x{%2|0zPgU3hnurT=Jj*v| zVGfSQS5>tZ5As!2w>zho5*TMdDYsx?ga9~WTo4tJAj49RMqn{CZLN6#BTl_V7oAtO zam9)-QbYkbrzYiAZaquXk1~!hiiYDur(NW4*|m00wb!En0HX=YFaRI`i)u|ULWE$1 znW+W(j5@E>wRZhh6ARI(k(r&%w5VnPB4S>Cp-(g`%PTc5NF;?bU_=lCgfVc6C6{6t z`NO7OK5xQ_FIG1~X1wCdy)|J)0Fx)h2GZ6JF#?Mq4yMUCLR4k`l8a^(9jc7YUpTL2=cjKj-ONSV%BPc12C$yP2nNm> zWq=UI1Y@MfW0?ad-f`&#jXRdV`RQgPxd1qrD)seQIIG{LRckc24^!Qsj8X~+5lj#O zH7O8+fl-b`3@TS;XNoKUf@nk?F>QXZeg7ASTl`*0*9^uPW869xW0Z452xgQ5!WbAw2xH9c2Vz~- zdY^Uvg^!PNdy!j0#pl@oIS6fYw6NezOo7Dm&%`g{sk2kgfSu5qBR2{ zE?MEGX)?+v;{af&)K|P<=73GhmbH-lMc=t?NHG4vKi@pkYItOkQfgAuqB?U91UTa$ z%8D#t)3jFUAVLTRpp0_P01!80%-3h(%zm3zuhHB-%nZ|{j047C9T5{Tn4N1u?VM2% zm4J)^0RZ8gsnIZ20zof{Mpc9m=Kxe?-r|cc=(lzC=Mf|kj5wu8atGbmFiav~RmGEL zUm8EQVQ+QRMOciv&b#(o<9fq~ufB4)S(lLMD;hbYR9?UC3zH}aafAs*$U=`XM)9aR zc=EiA_Pt*msCT<0#(^;kfG|Rgag2abn$)DQFlg2ZPC+S*4q@l2WsX=9h2UwZ47Vr2 zY@p0e#*wHIl1s{y8lJ#8P+%B12gEF#m?tug;RMYwagqY(2qDffV~kkIP8q@oQDBq< zAjWL`*h(>x6ymT2MLD;T7G%RDb_=_uD5j7d8=yof9q1&=#W`4D2It8Q-P|`~&i~^N zR8EIe0ZsF+GZLNbRMfR-CxD%IdD|7~>fWP&3u``2VbslD4qj#_pg1)ZV(*m>$0i}S z?(lNnB~S>u33#XdQ?+pmg0qKPN>-tZi`>y!wj1e?x>Xx+0ANXw&(YC{+Y1cRo0DGK zY3^0K0-K!_8_vkiWIvnl+!Cb z`<%Nw-*rZxJHxtZ?^C!s0!XD#a*l)UM|@|8)3N(5?m4}3fU-OppU&)M8xiN=oF+k# z3>HG^Cxlb|F)_oK46%cFY}bpE?Y8cj?0MzHyh%E&>bH=^Nh!F&+bTMccvcqq z=k_L7FS@oieyc1_?h{xRrK0SfKcd&DpkRGHL{$TsT+qy>m;oTR#7zbeQ_WgcFX`(K zZK~eVl)3U?Xz-vCv$nP|ZU8_;HDYlSfHy^rFatGa#F^O89NOH3@F8X zXL%d+cg0kLBVly5_|A?-UoU!+$u|Urw?b+Zpe=5M4e>u7E6%w~7Aj9RJby&}^{nil z@2RVe7~m6=GqI{c0RRAJdjwroU))`tRZ{w3e|*jRCkIY0I)6a!52xe@8E(}@D$NH#z^mHhAO|iOkXa}I8Pxm90Z2Ch2m(r9+0}I6)Zq(qwf*(SkV#+M zT%Faw-~Ij2jUSfh2-)o_n_3tg*URfx!<7~Fx3z0OnLS`!7CxTmE9_M?tB>-7*N>hz zZTRJd=FP7kU7K6r^Ly@@St3`|-?FXl!m=_6A>i!!FRHT!^}D|xy7q&UtNew2pZmUZ z`_$|y|HHwS1=Dldcbuq*=B}-YEu7W2{L99Wmjw+raai#!BLjE8v3uIo;a3!zH@|*# zU2cKT=f3~kKGl25|9HG@QML!mt{npccXO?wytY?q3 zT{3d&) zeDlW@&(i2#U4H(;62hRhsqJ8kddH-^b9%RbdtyO_qeI+MC0(zxUud8ONW0ccaNL(<03s8po2) z@55B>h-jQMB)BCOQAS>Q@BF;`AN&nu=XnIy(H=56cDcQZgfN2kur}}7>qoMUpF|D7 zdMK(QBD!3X8jYHOF#wT0Ubl;?9b&JsH!Ys^@{_9(hW6HwLBZvgFgM~FCm0xj+a+rq z8ek+~EV_Me5$cZZTHg|2m@wjU3Jb24}RzMt@T4E&%R{(NX3_zWghy;PoHZ8 zML?W$ju6Bm9VQ2A=%U;26=GU&#O=2%So6vsHkI?+9{6_U8{0qKTA!bnEn^zisn_Qt zIKgzp7-LQ&;V2Sa9+%h_(q~_L?I^zK{rVOqD^Fx#+7Z_f zFx}w3KtL8zTgaGq!}Vj>rcXcpe8;Gn-6}J%$g(4~t$>;Nl1gX)ExMpA? z`TRa)sO^y$;~*+tRK9D=v1zx>n)cqupBu7Uz|a;l7TkQ}IJDu_`i>v|;-_`*KmPjW zmfZYIW~go97{j99=QAVi8gd0)xV0_j4F4!5p|Ixhd1I0GxJG5S*Q1CSLt98+_^lg%u6gMG$6j3U zgC{2Db0i5LKL4v-YU#sIJld=F)0=+yYa_G&g;!r+7If!lk(Yk;(`|L83u0ogF*jd1 z=P&oYMM|!Ea8ce}_x}cE=J{n54Y#X0mEB&C1g$MmUq+@GX*Y>1f*I2cLI?-!mVjl9 zxa-@OEc@#p4mZY#fX#&Fua)9JZ)$E82lu^X?to?QEvY)XOKo&BK}3ifY9tibiKGO) za($zA_fHF9{e@R>FpI+B-CLru-Nw)Lwm%y@TMEbq7DD3>A2^Y zKW+Hn@mIFA=VeG?o%?)VM72m%w*-q#!w?j&*DV=ZJQ9t8Ajy){Yw)D+-TPp1{jysh ze1?010_LH1ecp{Xj%FL*YiNy zmT}tF+H4q1a(M-0#xkoi~6vsI@;93W{52b-Zw(3h_<_a9k?m58#3;<(Dz*7kvIw8@*5C%jMLJSZ9 zO(?H3Tm66|>-vx)U)o2o4wIHq3^_ftP-JVDG%lje%X8>Fq^D~G8?)>RW*b!huQGbN z2Vaw&Y2#(-glKDj2NczXc==@Gmyu40mv}G_6snGuD>q&QuiAYvt)R z+HBJld}-~L4%sIu)oF}OCyO}+VRQRLK&dY1ju4&L$${c^RuqBGBP$6CI^^0<$%gKX zba#4}j*@q`vxBIda;xiHg`*+e^pc3H68N=|~I6jF;2*cT}{jdh7+XHIt7Y)jfE`8xnjxB{gr)CvXWNIh=YtP-;Zabx&It_;O3evjUi9>Tp_?X1G zozSymQ_8(=jN84&Igdx;o!7tgSdX37td;)3VDKA)>RRY?M@I*xv@3)7o96AQ3?ZcJ zx~}UUkB4*qO?I`%{-2x04x2uG`t<43tu5B-S^&VZ>-sUd*Z?l@;=aA^j?}%dxo-Th z-eY^Y$M)|N+ST$!o$hyw27`rD%G`S!_cf|RiZX&i;!A$wz&w;8NlH$MO9sFT&nhSs zz%0q0O=WPqe>%;4Z%Y{%e7mHq{yrA~OdgbH1|6)3(-rPz4XpEFI)BuNaXl1N6$zywqzw z^ZaKAKjMsoBu_1JuQ}9our0o;K5}6}hII_exGV|)5N&SX*32%=b$!U#(VEt`xHPgP zD+|+xs38K>o~(UzOZdfw{SKdOj%qZRSWL@926||E|1YaMo?CsSbV$ivBYbL%rQLWS zfW*345HK97Zh4zYg9`&^_sN;vC%E=d{hd3Telj)J=MtH~%iGj(S?;iEMh!cWnWG-k z&GZ@w7>-o8yv3vuC0Tg_C@v8Lm>G6A;>4-TD@jM)t`pkc{mPZ4Ch<)u0ibwi(c_GmL;G?~Z%!QF`nf zW(b2};-TlvA5xs%5$f={(V8V6^U^8TP9GDi+O>4W8YOSQv@rv#mM&>*X^uxiy+)k7 zaMon4X7}6gyl>{6wealzo~%N5X#aa_k6(Sw<>QAb4?HUD*tmT4p0?SGuO6HyY+k)| zS9vSb!kNQn&+MoD@}c+R;2tr4=A5acqSbqrt=&6h!qgyi#E>Ue`Q_)^k47}<#_O*- zy7Z;>N82+C%dWWj(*8NZ`cFS>7K_FWFKKHHc|?8F<~_qEotJ^b8u3MrZ`xWP_|EkU zn|H5#Z~0~=r=ab`mz(#MxLgt@LhI3OPj7f5TsZ&Z=Won${kb`YMa%$!s^bY4T$~}$ zK0}67eeuyJ8xD?{HzSX?964Fj(jqjqhO!4uxo_-M4V&NF+7g^rs%%*QMHpm{OGb#P zk%)#obQxAMH?!v42(a#PU0~ZX>T(Nvj?$D{%O&cAr-m~P> z&v?OznZt{yl0CFodgqnbE1KGJM$VnxU;EXMmYB>qdiZe5pk9I?L^ZWw`1J41o}yOo zdi#Ur4G}ba@>e?nvC-36m}fB4P^k*qzgAterw8x z58v5);^^_pdV?coXukgAZ@p|*^X`>ze6+53;`~v;whxzW6mkY#K7YXKk5>-4VDY&l z^0%-4X#M_rk;igJ&Y9g$d-C2-L*CxMdF+!&(M2Es;gX>f=3O#Exc;hppZe^;z2C0* z?r%R`_t}Oy{VWNT$h*%z(a;)y^5suwj4Ix6@_-5AO*dS1=)*s5kN11{)+@#jl^=Oj z`0|TYOE;BIoPFig;RV}QytSdqefyo$-h1(d{Fzr4M)p^j1(QbfX=@AlT(IJUck?FA z$YU)>PE^-NP0eJ69_5@9Q4$eFzM`9NzwxYb(`frzck#$?ee2rh9ZTO`xy|HK?_pEs zo;N|Q+V$R&b(1c-`r?`AG-cnDfA)?gAFpT#b>xnmJEy<#ll$KG^*-y|G5sq)`M9a2 zIUWi39y#OE*^{-J-EY4Ap;>U&oY7_OtX}TW{&&}$y#9vECk~e%dQ95!#mdk2w9UEl zszJHke90&pJhXD%o9nARmyFI`x^%?ik>{|ZO>g}9h?#jRHn%l~<$j-G(zu0>stch1&bw$OBzi&9wQaE_x z+_~o#_=O#xeNCZfc1ti5(lT5OdGAr27aT?TOv)7XR zSHwAVq5`KF!|5bOi?PR0g5-%3+&jzxfFb0-pdBzL!eHydGRrfD5W|d81~jqmzya$e z2z^P0qXUDsmxEiLSzrxM;Z+GG5tJkbLJH4L;8~6}>D{4LN$Vsn^ItQb0xJ_6(j}pt z3dpJb6My+v+}j}M4@&#p1u**Bch3LDt#-F9a&Ca`X>UYXppQ^u-b#^b7?GWuveB|);R07aE9T-gor_(EE7pHYO*wWB;&!^OQ zlYbLy4={F!ICrB8ov6Eu@N@cz=pK0O&VR=kwv~jqtu4eMsZehV98Il`9Qo{q;*C=xZBjwv=0$Z5d_0EK*<=6rjef)If0wu2 z+BX~`@3C)`Ss1io7=~duQxqaeUNj;nTeNN@@C73ZADmWv+r+}LnL=yKlmuvsnlpyw z50U_Y%o<*B=Q+J+7JG1FUKmF8%{nVX8d97&DMw-)%^Z@OFF@~J8Rr$bDdPi*vmQ9F z?=8bKfx}sSvnS<9l*5>^>ZyaS8rqLkM(}78eE|KDW>9Q;W_m z$y_ujgYZN~JHJe}9n@sDdRBle9$P%jgTp2iXL&~y_)7%+vCr$8CHD{y zytS)tU&!>ySRhy?NDzom;G2&%t*eQOid2@V?A=%O=%#u}1fU!Uxn^X}hZ~MQwX&i@ z<5(a!P3SYkjlw4MD+mOP_`3(1YcyVz;SxE`%g_GPypna>PP|{GPwN}lw!8eJ^4QJe z3RZ7Edf&$<3QF>(=E{w&9lu;r{-dp}i$)gs5HQXG;crdsGsJ_#CNItLmHGs0Nk75Z zEg}GzHz;G%p_XC&asU7kA`v7KEC2(*H=dolddsonlqfB@TkylGucRB}oA9zjBU{r;Mt zt~lD_^35&vTt22~m={MVvw!|{I}a0TPgBO7$fA7h=@TE5R&AZ$K-v! z_1L4UDpu9RMd6H+y!2R){m&RipldL3_9auskDEPj-h{E^ii`T*aL?nzr0UN%?Fz+c z$&ir)N{dIGyI|ggLEheDAG-Udqo2JUE1h@G4YQG}^x;SEgWALW&b#59{MhPsTdGeU zTCsG=&VwiWop<9yH_zI$ZpGo6c7j>R3|w{9ye;p)e6-cJKVJ5ERjWDU;wz?4oOtoV z1rx`P88czV#q%zhGGp$X8IvbZo?=#Q-&O?|%{@=yrWvhYwQ_BX$}s{=upVw!gCl$7)X?c%%cD|2bZlP-Pap?jtb?;{}2ffNs)@`DF{wBVe9dNkC*f{Pc=-u~gs2RmHT zX3ig$Cqm}Hg%^yE>+*Mh^pl}t)n}XbMAW#LJ^axp9?Xo_2m4MOlt)_h;5Apz-}?S5 zmAcC-3yPwMf&gaB)o0>k_uh2u^LMp=^Y6Ll+`^Hwe{|ctovS|Dez08kls@#t1Hy^5 zd&9YNXPnI_ce&jH!3YpRG{Q2jyLRrzw_mBHuIhbTb{#so`-{((eZIL}EdJ5Yo+vhJ z^QYbNv)kt!KU6*ImWTiJiw8>NXiLO&dEAO5A_PQ~!!`T1m-7YlFL0T$Hq~|Yw{Pu* zV}s6LJiVX4Wcu|#x?xgz9eeOszaF1Yo7LbA*UsPc&OfRQABi=o!QsDp@>?H2{p)B} zS>=I)vu?S=*!gi2$qygiwQhGM5edRrkH@ozocpW4y+1v(>fJR53Df#czI3dw^0iO* zcyP!1joT}ZA6mNf)9nYU$6Wfo`>&mFvW`CV+oy-f4I$r%U;g2_?_G3u#fjRf7hgVo z!q^Khnm1wGxS<334I4JNu@gAv{J-AA4pDxCay09C`}Wmbe)j`Iv$2U~mn0(KSdb&td$(86`4`Sq%t(a#Z+!5H5pwmXE7pf}Fe0Ji zNtcZARlT)jvz$Nd_6P4%%GV!^=TDw6dffCmlP6A`GjIO*agzoYWvaRf2qi?9IRHnN z0yx4>00dHqYbQwREAEX>@$HxdDpE918}MNkUc`Vgp7^1RG0qrcj3<+GSzwO^Mi7FD zNJv5$+LDUKgkVAtb|4Q9DG=xC?ao=%08m2ffCDf`0ub&fo@z;=4(B^NN{OE&@_~R8 zB%DUVp>y2M@V+yh_uS<(lzQ!Co+i*bC-<-uTk}+Ip5}Pnah|_65BlG@-R_PR`&H5F z)E`dbvty^^vlg&}iCh24(s(~NlMnt{}07<6|D=_UqU-yoEnFH1~?S%WkoslhvU zLUJ>JV*n(F3`$j;Ad@E;`^n1(@7AS+Kz{0Lf_JLgkq$B~;GKtj6706i*#kSNr;)4- zrJ>+<@#OgE#7s}-Vua+RLz1%2fdk{brM`^^dQ$uJ*w?d!3cusp!8v1$Tj_1kR~5Dr z!8^Ax#;m+6_^U3E$%NfWL+M!%zS>(md2^?FoSpz6Ou96LbCy`TaY{F>JVK}XxU2Ks zy4qtsb|!`~#@(fmrHm&}BxiS%1#8;h*BB+L zvb3lOMvQYyUDJ9EfQVhhxibSG2ssap5tz(g@oDdzJTzsTV8l6RfXIJg3I+i(Owdh+ zk?^B={YAochD3~X1Llk`8#7FgnEZ;fdgr*2s`G&**|%r;Dx);duSgPpca7i6|m zeCG@S1GtN_?g)CVnsXI=xhyqkykE8=asK#Juir(UzH~^V#tRC2{UJ9qhDcdP-Y;^4 z4LS_WmOJWO1G&MQ#`Mk>pui{SIuMLB0|xZTx;@id8KwDtB|}2Lp5;>v=-;pK(K4hP z5Xi~?;;xCZNK6B+oLmM7p`sFokZ!=Jfd#+lmD#AHepwPT_-|%;tbz}hA&lX7bNY%V zj2+o$6d==tduI*87(>5W*(G`?1d6ln$VkLNAoz~+2b^q)i!Lc&AwNCeuL$^&dHrPuxx@Pm4Th4n~q^w>AaIOiaWk=i4l*BlcR8M(83Lga;CJaNm_7k~eICGWrT;>RmK zSbhHVrjLH};^&o9u6x|uxbw{wUuJ8c|Lt27^0sW3aBM9efaRWZM(Ms*gz-0_(HAjwU?h=`nh=3t(SN@ z_CI;&cQ5+hlTW|&+KYEzwHBZIkKcax{hxmK&c7_vku>p&dx|4pKDO?t-)Thn`}VtUq7B=O*2ak!{h&|m%NN!k3uNTz z9Z}%iG>u3HFB>+=+q~!P)mw9nb#HkU+B(V)?cRT&ve($fWBPhNSZTy|tUgfQ zTD51zoBMBj=eD6|-E(~y=Ml;nHPv|Bc0&wje^tc&N4S@3Q1 z$SDk93nolgVLlR{y3rJsh>X0eZHLDBWBDzKj0SXzFbz1JQI3{Z~4}{#-y9gb4pE>A31!eW9XQbJk@)CK?kc_Quljh! zxl@}y{@vf!ot$*dQ{KkiZ>-#$6Ce4HTPNgwvGt2j-}&o5-@9YN0yohrD(gC$jcuEE zqO7d&`qzG!%P;=cT|+i6eeN%BkG$mmzVV$etUH#K5v;GNY;6yfAKbC`aEnK(eP#JY zmw)%}1|{dyH~v|6#mJZc{`88^q^obZpzqL8BZ}N>J~zX=R_{Mi=~Do6rfZsR&~RI5 zs@=^Pq{3r=+6kMs zQA5H-UF-Ki!CS=2}eFh|(^9sX%nYSUz27 zk{)x%8*32pWDdZj3rR+~!-d40SU0CH>gqtJImU!Kh6BAy+o>ylZ#T13hdZ!s-s$Km zq}eWJXADWq58At&V*WFAa)E;f?*O0^cyu}jZT(kO02lOFk9{4pChC)DDd$|2-Lgmk zKvQFe$v9(xFvf^6#yKQX!7v5@f~0sQ5{t%Y3UNj*k5|BmQzIHvlkhZS3}K8oX8;%> z&KO77?eS7ArW#BjxRXC;jA`aWFMirwBN+FNYWbWegDZ*v?xwoxBSW-(x-2t$nTAN$1pw z^EC&^3Al2suZaXzw)0tolM|}W;`T|BgsL5Trd}j>CS48<00Qo=X2)w}7yNG+LLd?h z0A50z%OeE=7iTJffSC~2IYCG@xYr|(@B=l$q(B5=P@Z5Kz$I~Tjz}pm4j|aG&>R@T z1M=L!K-EDMi3~vPdtTLm44<3@U^3twoHgqdvix!m0>cCYkY6UI$q~l+ZqQ7~4=M;i z)w$0j2fbjJK-})dLv#9N2rdSy0m%u2G;cY0MMOCef&~D^fdP1B!Wd8hS-?ql2IHU_ z;Pc2qA7};#ggO=USehFG76BLsmxw$0?>v^90A+v$GBDRgDNqi;0TDbP&%-DHg9-g| z&44%CFX}oN0APSK!W2Pijtdy*3_K!c9NZF49$nSB%Owr+fN3U3>pj+E-yq{iaeF1N z41Szy2J?9FS_YA&++9;cGhNO23qP5eR+c4^xeg;uRR(L zMPylW1%g--x!~fO=5`6#UKs!scc7?m|GtIUm8w|Ox45LZC^%@4cYD(XH{XA5 zR?QE#){Pl=Rzp=qtM0k_j_<^Fyz}~oRxC*Q{m#B}%mu;P&0kii1+(+Bva>TYT`?0$ zo?ub`v#&gRrmy1jJ@Jx9etTOVq3MBJuHAXG&g5@if77w~7cKhDQ^Q|bviGW)1K#=7 z1F9Uv@mR#bLnh439(?WK>|LN_6=oQ3{^f-$AN%cZn<#q zTR*#BcV#HR4Frft`9-C}hU8To+8n#=#w%w|$eKO9>E!#LZ*kB2;Ux=a)U_D2J>IAX zCoMSd{EKhCB5(h53;+?Sprl{F!r%#M_^lTWdHtz-byvW}LBeL6$|s#aw;b=SZ91`e zf4$mLzIJD&Tdf&)@eeNRb@+$BJ^a%@{PO<$o;n_jmgZ1X#y)ENm|F#V^xj|Mq>AMSty#AB>Oixg63(dRtXEU;D zzQ3tv+}IH(cCT-tH`Uj4TzKWTj&FH8;?0^euy0YH>;ZiXt90Lx0mZc^s}zq{t7h|W z`JVg4@})Z)16f&SR8c!xe0`?OpEKiVRqeJ7UyPpWKCo>=U9X%bRP^}Ie)!g-KPa92 z{hMaD=@bV7elB3yA7~cEKp-bKFE`sK#$2vQ?XIVPv59dc2wdqkA%e2!%$rhr%`F4u zjRt_?_7|58=v$CgPP2Mt(AS=S?)oQwfAvLsmu-KqU59gK&Od>6wHtw(=MR4CXZIQI zpocTrYBWLW?VRL zdU;caE@w3CUiNas^q+ly@w%-wi{}k_`xp1>u7Cm{VY6N36VIP}LOc?#IkMulmo9t% z{ozMn`01B5_ucIFm7cZup4pjAJ3imIb;6>{qRl7P?l>7h9lo62{mc3mmE`m*&Mp^+ z-g4oPw|;t`<_cnsF)Zfx9d-5C*_m})*6*!4f9{02m*05V+=+jD>sPWbGk@UOSC2X` zqxOq0%R5|Bw&Ks~KX`E7v0Z9M#O3k#F74O1BxiTS!JQ}2)!({K*ide?*Okn?)pK&i zr#tF`K3AxzmS#+vGk?~c>n@kKJYS)Cd=lk|6MrCTrB6&OO$SIk;$v$CwKY9&J(}B6 z&FS!BC&htoDSIjAn+=ojB&!;1u*6=*-c>c(Iy~c$5D2m1oJ3MWgaGj*R)H}>h+~X6 zaz3Kf@0CB4}2=VC4x>U>nW;0-9HbimXoSRaf@Y589PWyDhd6Ume4g}HBl+(C(de0pk z(=HpoA~ydil18U`(%N+jXS(eg$Hl1A_7uLEj8->8>8qP#KaJU_DM~}19oNM4$fDH1 z>{4IqCr!a5ZIw!LWeKFTO;R;FUjrm&?b4QibUJq0q=kcQoTi{*t7Aa=TLh_^lMzU7 zOCsR5`UXy~5F;z`GsXxbY%xhOO73T)(GE+@TP6t3j00z!CzsJM&J*isxc%P}X|mpO z&KL%+X7-(45AP)s)M+Wj^lm$_46qrM%<*FfWBw*niZdIXx8PvCB5B> zjDaIT^0-|XxFEaSiUfe&ZnrGM*0rluUs3NYudZu}n;Fg#Lb|TIT&}KouG3opP6Rnz zf8>iD`;H$z!~#Wy*?viqBuSPf!O#s!M0+-_T(y4N(G!)PoTB`!fG7|~nWVVfE>}nG zq0M`b$HQ$Z@fTzVWLXAg0+GBPw=7H4Fhr5>+_a{_^c7~gDH7eXz_Fl+gaY<@J+jQV ztXUa#7Z&CCMNwdsyWB2j8qB&qL&y>mak*S@`fsit`~QJisv4_TeoZH(ePk_QKEzUqW&{Rt7w3;cmlK23!N+ARQl&4BzgqU4ikc8p+E-<(W z$O-Hx>*UFLAmxUIHADLRdy;CxI8c@t44n!l-}1B~h;g8&IF=O$=gqtoE|Wn?uDjSx zR3mjK=Zpig1Bkjidg7q}N3mywfHFp@=~5*4&pkTy*uQU-(pXIOc)gZ17Go^b-iB=h z0JqDvd+)*3E0zYmVogyB5{a&FdDS5%%nS{+rUOc~ozaiBWxo^k%{0a^5&zrIk- zv-PU2Yj;;EvVcXg^~COj4SdRs=>;Bk_|U=TmZs|J>iU|>+P1h1;Z@64b}$(OA}qRP z@v6Fp+UnZ6+M3#$+M1fWy4srB+WNY>hKBmOh6aQ3Kw;lrF7-e~ z_=1ZsR3Z&1BVUL&)wf1m{;YvRN0#;Sl^;6Ts>{RA9%$l7QaWn#^ob)|_O5>8gEbl!wNS(H%6fz1 zygvP6CpK@~Tjz2~jB|vLsq6lNl778BdpE53;%Iov%vq#*!$02rtiI~l;U+$L`qbV* zvSZDXJuU9ZXBB+*@h1mQR@c6pdk$JUEvEstu(Zl8a$Dez_v@z{_K7Ib(ZDpmI zpDkGy;xa)D3sS79ygVdLn><==Jn`9zl^yP~c{8UdYGX|Y$wrNT`O{yvS8II>Jcsrl zsIIN4tE;c6t*x!CX^$H5_PWC-su?DP2p+e`<8ixOE+bU4zalna{IGp%Ki$0RKt)xh zZqQ)wzP&x>o`dCmM^8I{(pgP=SH1G?8WZ882an_po76u@o1?7x*p`iZYuzrHS^A%* zR(bqza}3e;@}0-pr_7vJ0vj$|D@4WPv zYRERKwyoP!?RLqOgG}g=gGY0ROdOI&_U_tQ*%%)^aoql;e_gpZeBQ###}3E|)$IM- z-`;8tckJ0;F>?Bxu>MlU21fRdu!1 z^>uZ1wY7CM)oqEyiD2Ok7-38>u_Qc`5DGvNDoOiBK&UfVmYUN?DMSPuI>C@a5FC2a zHYLrb=i1_+IEj#0)hB4tN$pk+U@5ZN;I$2TSg=J3VR788I#4I4xJVKX!pVEv)SB|d zUz}`}lQNn3okkx`(j1dm5CCI*^3Z_@FoFLfv!SbX2WOoQL_=K)o%Sx^jBXK-GiO;B z>z+|-1Ng{6IOQlUb6ncKDQCE2<5x8HRK`=8G{2%P#DdING+&~2^V7wtr6cOuQ` z3|=_U*HgRvRn6}Dw3b%A!^O@J^ci)8#Y^UiOG6jUhqTq^sXDvqiEa{DzSH@PKE)8|KGZgwI!(zsz0<9@@^1F+ zOmKF3>v*n8VcP&H^{4c&ptRGQCr@shl5UG@KyuAXiuvr=l2qhK)Mm?a5a3$bj2~Y( z^sxu;GfYzy{;LUNd+h&+nWov&(&F`cIp>@+BDvL??Z0_p$=s{2$IT~vrK5X`jUO-D zkTr1p1>^f~|9t8GIyQ6uT&eZYs*StkoW6bC&F^k*y5*{wJ2q}D95#0J@cvD^KY8NC zwU=IT5kX470@v29drL-5%z>s2TMzdiHI}p=Jyg$!59+md+m51PqYkZky8?=*jUO|1 z%m^70nY0i>kw_#fE30b~!ZdFg6FvUgZSVeh$=>`7|Bx{gQA)aO%50#!!S7K85tQpNeFw)G)+Me9(?!_+3o-F!}sdC-b0p8 z8bZi0^l&up4`eV#IR`-yni}eJvNI$}?zFREn(bjV!|!EZAH?i#q2E{B`8d_f{>^i^ z(}5`GWB-ony4KX(mXnunnkL5BG|kHL;{r(- z0Ayum{QdR!e{|pX@-w{}WxzP&3=4u0kEsSln7G^?k?=?)f+UwBVr$V=G^QdV`vZPN z)tJh>9#=dX2GOmEI35khRa5c$BxHu8aSljwc_c*RI`ViFMoo(?sKvrDRmVhhDWYjm z01l8?F(xV=i6F{2=RnPPM~7;1aJdA`nPZhI0APYK5d;9@_WCe0I>J#bdwp&(77pts z1B4WhmryOL8WmxQ7n9Z`+By*`&LGE)nMB3O3&JT3vTj!-*x1-vrhoJGSOs!jz-mIcr$ z_Ig~LGK7&D4aam7W5ki*_xr$5!;u&#QXt@?@kk`5G5{>dK98bC!v^D6kOMwfJQ5Y% zUJ)f&vXe9*OTv+u9>~ZrqwP@xBmpCg5g?4XAiG5{A{zC2 zT)>%=1&a{U?*6h#7vc)eb3s-aMrDBgfqiG@21hKL|~eO{3ePW5m&0)niF$Y9v( zRv4oIfB<6A2$o!mNB|*2jYeWB5XtZNW2#0q?(@3TXc$RumxSZda7;5@9-oA0Br)dQ zGN!75yj~Z#zOxbLrXGn#HJuGSXWk8qFQ&&=|KX+gnt9d_A9WQ)5AXmMCCT zSHqDQ2ki2A2sa{8l>-Q(tcb{D*z0j&X0*nnJ0E?l>aEBAx~Z-xFI&Vs8V;KbVT@$A zn`_aSYG5pQd|nX)0FOsHVpcCJA~V#EP#DV|pVy6;9*IOv0LA6vrXeaGksuBTW30v^ zstJ-v03n=0dl@34NU+HgE6@^@GlB_82^S`x->r8x8k}6noDxY+ArIi#VB^0j0$=J& z1=&zRGNo5SoX|n+!-*7DNfOhFZP9xIy-XX!^1&D{SnPy>Cf&7B&U4!@rE4)d#3L6WF_=UsR@ zD8;*An@$K30a)KF=`#sQxDs_Kc1Er3+L|QT<-B!1WhlSa5z>_`08%;{>9}%NY~3L< z;kcJio)BriCvV)GFYF$$c%o^_8=XB&om~!)&$*AozXavOp+*Dti~)kAKD8}O%(@L) zXJ9uSzD!+stje9L*0v&t-PY~|aMItQGzU(BK6e61ogX_FfFxW>Tp>CS+%DrL)r*M* z6e!gmZbPYEKxT*F2JhluH*HMX;v$ez+W-zM_0?s6Q$bRBBU!IKyzFU2gZ>A^f_m)# zXO)^WO!jwq`KKl0GU#bgfzN%wZu;~C&*1YiL`ns3--4VSt3Jsn8F+TS7&mxw;lWpXivTzXq9}QCzjgO* zjq6`|es@iYmz^Y8sAE@7|KT|U-5#$`Yj0>%8Q-z$)ptJ+<`-2T+E!IvMLfApr3D3f z{*y-z5`|RP#mjQUH7l2s(8o5G}hmZfLb@P(KaWew{L%EuJ?0=haE=dXpXbXi2=@}#m zLx31(k|f(givN}GFwOyEz_z4D(j)?urct4-Z*R&t!bn1(Q7#IIAfVKqBKwz&AaG^~ zcB0S!yCB`KRQB(&9{b;Di4|Zj7t+nd`gq0!U(kb?8jmwZ873ZIfOE(r#2DpV%654HA!--~6@6Z0n$%i-&nT1KK9>gpXOuBf zOaM}haV!YH7-b1|3Lk7(X8aibhW6UWvIY^=i0E##0_F039Q_6_!$<6mNMj7MYU>3m`V`Lfz<4h2h zK#=GL6+}@%Kp9OAGLJ6+oH7o;x#;re`GS<1j501L0TEHgT;2fUlreC5f<8Yo44oq> zJJ$!CQA!y{J{c%u_MKo-c35HQLp5WmZO<@Zlu4yC>G7^ReRNpVStNRr4o#ZrdbOHGqn z!V&=B_GNej$P$-8f}EA>;ndJgQxHUdMixfE7z0JII>lPAqj&>uY)ug`&N)WN)K%R? z0>RevxQz`1MhRIn8&OKGHF8kKl0>s~EGlscaxeq!WMg27HK!0TTiYY86r>=Iv|NGK zijO3bG9hwmsevG#IB#v1G9UnC-{aW4WenExZAK|am@_Ni2T!FHF#4&V3~Z z8KrpAr*|n?ds0Ov4c@X-tfl*4527@9H-+7v0&PE|C^<1`Z~(4d_`c3He`$Q@ujr62 zU^JvCqxSLb-a1u1DWtE<^Gwps1oX^obkyEE@exbK%5kYcjx(uq*gE$Yq+#d)j$C{8 z7o-hIC!~T<_aW-qXIS$~yv@xLANC;A34G!M^CFV%Mo`qJ{QF z(M}TDO>1}xfwr%t%>z6I=e z7L;d+%eDn5Cqd^#38%8Nlk)7`&Dq-2mc)1hB>uZJtseXTpCzX`03ky+dkq+lK3}r! z;LrmbmhNpb3zQTv#I2Jakjv}$dA&ZL7cni=5yl|)8#<(SuOgR-TPrIKU+MS(6|evG z)j+0y(1;QJ3jBw6?T~^wdOTtfS6TnE>WVKYAjHgYR2^P6KtH-8s+t%}92f$W^5^v4 zTDPHw+TIbt0L)|=dA$q0QIAq;RMbS{CIE!O(ZSPioH4HN?oYS5G785}nxIwhZ|uk) zJ$}3ruijPB9+ZLU5XdhcSPbhAv}SvQexKLl^;qzr8fkB>s%&b_F^HRmPaHaGQpg6* z0AWP+_Ndvnv{zMC+wAkk-}m6N3-0?xu55;k|4QPu9{WFFj5AqrApoy0APE1H>j=Nm zmb|$9_mXyU4gvwgU{Q`dqJsv&cthCqx2sq~!qHV3ZrHNT(AQ&NVx5w;<5oO(%ceODW@h)KB933_9GZ$ zED;F=oKprEBhzGVpO0!WgQn0mD+vf#4>z2d6p|?h7-a}CoiexEO(Z2N=xu9ih{O$q zn59;Pl6Rmyfv_V0&KaW|5aN`|{+yC5PisScD5fKfIHL@}FsaAu=SD0X2??@W5wZ0h zVi8c26;jhg2q-57#l@o8QQy=~IRMj%%a@;lo15Dh!U%wwW(wNpj8bkvmYj3SP1B?v zzfbRIZEB4(&PB!TbG!6dM@J-1B*p9XU~06sH=9Tf_&kWyj@EX~q(o4BUN>-)0&qq_ zkUVZN($Ntz!Rz%P&Z#|}V4<79Ic3yl$a0gj#D@S(kLye<=|7NmG&QtFkRWhwYwU8) z7{h`r6NtxRf;%JEOIlk)fJq`99ROoM2#!TMuT7D_W-?i^RhC+c#(*$4Vr>!T^|}G9CSimSXVj)bQB`AZub1nwP@E7aBJ4I#V zj8WhW0Wi)uLZHS}S9W1>P->{Di5eCjl2YNswvMO`5jzx|fhU+|Hrkrl#|hCT(19d0 zlq#G~yX=JOpyayy}i=W0&vfI)(o^k2)H^@y^|k~Q#$p7 zlABOBRi9!&Is|r5=f-s_745)4d3t5(mzGX48>cmXs%@R*dF=n`!RU0p@l$ksG7gT* z)Tw(Rd8E_$-U)6-Y30%({8JqTIj{YxkGi>frC;W#%vMj#JU>bj;nb0K|lzAATV$Q1jqfen*g=&ElP4GTE}1lb zcvE#vLBF9zIex^A@q%MTd9q z;(@{erA0Y8c^QE~uc9KigqVG&qU*Zb?fxna=)@`E4&)RU6(dd+Z&t6ooXo78ob0Up z!roaf%#e_im!IJgGkceKShzVZ&zLhJBe4)whL4^&X>|XiJ9qFvud=cM)6bhK#3KZ$ zdyckVc-g`LF_QA8lv2)lj|Oy)fkOk@?F~#CKU&j`#6x$FC9sz?L5(xlfIbuBoFjrn zU0wL%)@{slQK?%uIYNkVx_WQTJu6OVf#8HZQK!H;mnHPpx}z(?^0ZvI@%00c6{L;L zzy7khDID9?tPjld_+=ytNEDDrz@%Ifkt85dKmvdXph$^NF$ZeD6$nIHLicT`pF1SO zB_PbffC*aEwkkZ+;+FaiS@vC^AOK&~*k_5C{TH zFb&1!o9=liyKVQLsxSdl)igjD0W&G(oHIrd!Uz*B+>t-_vOBLFyYcglRFJfI%w#|? z=FDUqEG{bs&Jp6&FewLMzTP8mz2$1N=0IJC&IRuUm)~;Lyos^;@y_DF5=6>zU-n2Bez$7G=cCPc+38StJ-4nrd<+3D`6Yj<7(GscR;7jhwOYNB4fGW6$cH zH8Fw3xvyx{fV`^8YLg?zfnbCI7^PScFr%7gU_rnL5GH!Gy5{SiW zXQshG03#~p4Vyi_@1gw%sUV92VWzI?2F3&4q_LF3pHloNS88B4!*g z#t1CNIzk9^UB^Tq1WTfzt8s&4QNRWhCSQEr%%Ooj2abavA&m7%d;aK4@3{P|jh}Ba z1=-MaEC>h~WgH`fz-*66-+AcC;*Omg4mW#UB17`<>6bou-*+SXR`02c%UlD0@mT}% zYb&c6770ew&@|0Nm|%nnq9Ike;em&9+xP6N3S%%egIX!pDP>?SM8E_gu4{3Fazcoy z#tX(?_`@IET$UGTI(e`*q>BUtBoaPZ`WxM9&^pwZlc0=EBu>#Eor1k7z%Zo*o#Z(u z>vfXloWd1$&MYS_(S{qj0})Jf#6p&>^iv74oRce=Op%4Lox?D7z%=xvvq&mWZce1! z!VbyORC=zI0*DhGN@8pmj2|YXwgJG``hHE&tX6DDagVPFc>$dOp=LQ8%x; z^ZC>z)6$`(V~_S$8>dPZaZUxGuRx&w75leuj(FOi&TyXdQ%9SvW_B5!DD5>*Mj*ZI z$$EHlje$)XPC$q(y=kY5SPFDRsp^w*oyn_${ehj)v{OfS8Z#;0bTTXsXOaYA1P)*q zIVQAIPA8W!BpYt8QLqAoASs{WSdHOam61MVc={l>+kA=$bpt)8K1fw;*JS(QXh6Cg zM{?d09IF#ft5ojj6tLEyIAyH6Jtdv!^C_Bi%C`PnCzo?Bv2$mnNoGKTzK}+C21u$z zB|lASZk*Du)HTwgq$7j?ydKoE{J+P(zBw+aNZ0g&0b{NjJ`p%m<1q$h*WNso8d@~2 zk3IjANf-=WEgf;rxkB&kk|D!~4098znQ+aGBTZe6tE%A5pLf}{7`UOU1}nVorcs8b zGE_QpB4O0zfJ{xLXyA>vj-aN_IHsnKON*(d8q~fK`zmaS+YCl#Xzsj0bBb^**5U6x zY-%4cIl{mI4`hZKR{7{DGr6H^hKaCy%Dl@3#9}dZ(wxghL{*)Z^u@M>5H~0cl<{F` zpMmnSONW+aNs+iQ;+#2SrxVVos%rg<7fvVG(Be8pH+*|2H4VnVq;$xDvJFc=TzKQn zWkIZIW)FVUW2d&%S@!?hlW&^+7X!ioxiEkJi)y#u>){D{9Rko9o;9*?e|@Awqt5*) zgXWg@`#%Z|8c}*}KleSa9&q>TckhItX#gRx^H|H~CN&&4%8GL??dLgM(YoYh7)#Qu zq4@(u9Yx zoAK@8ffv^v-HH7VOzu6i#0&Jl8jK$6u^v06A%qQ875sU9bA63VA)?-1 z+t><3h_$zlnDhMs{K(6jk0C6}!NQUZxv9QBsxhBO)^%MJNh})0%utoy*DpSI!`~ij z)WAhhN&g|Bwl%i2W7#Jl(*%NOT%%YpH8Gg)BheNkW5H!tTs(VXeAg#y4<5hj{--V} zIPub#p5Hz9`&$=Xb2u(47&zw)Az37viFy^~wbj=}!tL_FDU%Drw_SfvgS+^r=Pja) z6c+cU?G04)f*NYmA>j96U>sqBSvb_rC2znjn|e%DimqKWb>lyt2#cA1LN!JdSGB0@Z#%ktox*;1y006&22H(yL6xsuRl@Kk)4;Lwl{|&EGs7)sjVNr@XU~* zgM1!I*R+hhf*f~j(bB2@!DvuwJb4ejuSSh~l@~P`z zcqA;A)b9O!I~nqe2Yztu_TPU0!SAm8)32uf@b?dA@)vfBmtAs6VcYt5-d&1h#b`P9 z`s-Wnc;ctNSnaQuolt0W)ciXJu*1)7u9|SuZ8y!yJaPC$i)J>|H46T`!KHzdhYx9D zAS=l0>Y62QM$jijqpHWN7`h?5l#cou*Pt2Gd&jQ7`b3>YdI?X?XpzTC3QufL`4llGPk$7AhnI@MIU=-SJs zZF%j9>Ihjp>-+<+KmMyv4)-d^;|vw`9iX?>)V9RDJ`dA%UrsMUYp-t=&YnE~#@U$_ z$17S?qrSe$oz=TvzOS*ix+6|Srm1q#HJ44@`10fN%)yJVy{Yb#)+Tn0>bkD0s!kDr z%j3gTi)g5KaeixUl?KE#Sz+lwNo_oIqIuk$MGG&wxG1#o?e~@&iWf6gm5Q!eG-cx} zPlbs`0g_+byS1iDBW|yY#8utpa)~+;1wujWU0lRM4U9)Wdg+N``KT zvZO{rDieyz1`BFyLvu@gyLS1^nTKEh@lTc<>)R_&5im=xicYZ8Qep!2=nj{% zY53eQsgP=GcUSLIgSd7to$0OBzl1)cuiByO26UPo(O1-ShK`{#`lt&h)EbC3j_8CV zlg3X~{~5&UKW=G=bGj6TgN1MJ#KDFY?G29CiNC0GRVg$!xdVeF&zGNq%4+@P$esb| z0?MWXhEA!2)Z`1;6G2@EehNM2j%$nE*u*)NoD$-Ws?(9^#EFQK3OK2y3r+~0J0y~M z5`jz(275I_rxZO1fF*!*#M496ZBM2(GZmBc2@{_3scXb}dX;uCYz=T^!9cYA&fDKMZ%l|!l-1}gn^?bQ&W$}qY;h}f_5!# zDbjIfggZ3O0bz^)+O;^w7`PUXaeK-fBhcF0;|N<+9>jG6;eToIIYQjjA_m78Gee8& zNhu=@A&e2kqmcynfU{^g!~qeEjY!BM_c)Mlgb=jryw9+S14d1zrmm_QM@WlB;+z9Q z7$M#0NHwZmO**e>eB8`S3D=`>y$4wAu`@T$7)R)9De5xD;Eap>3-$lsGseLs!TOz5 z?ZNE(bClOx005}<*oF}Z2tj93L8c79fB(?^S5J6gluy&)jv4))*;=>wwd(%Gxlc~X zUBAD28OwZjy#M}H<^A)Aj>z-1Grav+!xQW2pC<=?x2E#mMI%{x)i1UQcNUqy+1d8^ z%o4W<3_)AO7}zJfcHfCV?{Pgb7(cqc?#}c3ezy7eGZ>F94!ESua|+za>|#CEV?Fji zYzSc^9?KeW#hurkcW}$v9cD*MtmvBSt}N^Cz4ym=ulnGhbvYN@eeL-jVbdKu@c1uZ zUGUfo)3aLYsJ~{z8!KzFOA9gsW6!@(+41&!Yp%TO@v~et8#ix{w1-0R7|$Ah)vUqq z|MvbiDovVq({;0kwKO$v{p?fkSr=b4zHeJNBGZnSe)Ht2y^XWKeY5-Is*g9<_<9ez z6SbKB*(Un_jZvOsv+*&IY-N!$B=`Wk{^S{1h$L3uVr;T~$uB-m=lOMbNzXwD? z&Yv-+l^Rc_d_qouYIm(G6X;l;bQ z9hflntY`1N<-_gmv%h_pw|vzn+iNm1GyFaeaE3Tl!FS!AKN#fIM4x~C>%aZ*fN;-4 zcW2Y)j!?sEFTFDQn)@yus?f}VbpJo^dFpSOnLc192aXBuXp2p|?rv|zs`t0lk6(CU zQLf)R_S_4V%(vhEblPRNPAZnA&<+V71CKfSc+)&>23^6*n)Fvl(7HpV%l zq9=RtoevFGzqtOpPvuR!{=S*MyKaBXJNbr(7WV$_3o9?X{tBW~AFuiIpI@zNRcG9I zo%_VfPxmx=1JU<(H=lFu)RWscdWX!APky%Ugg#$Fy~j@J_{+Ud{oeoRB}IZLQoU`* z)-N+lMnkyfcx}7DHI_N_`gucMedY4`m0;=l}TX$Pohr*~+|y3pcNR-^iNt==bOE+xYpHEVjSAsiPx4 z_4@0)<*VM?TsLmP{GuGcckKDIsko&!l`O!+i^iFhU5Uj+W@u>+kYau6$!%?frjzb%M9*P$VO# zW78j(w|;No!22Hj{q^_#uKI&NwrK7J*W6Un=Iv!1`03C8?8?Y?%QynSITJiN3vPd4 zaD2m^5B)v@%7{6)TsLQEQ$zFd?W;dtww~pTxN6Rj4}N`LGxaXK^}bny+>kq{b>qu> z`G`xV4QvZXU9A1tpZ#j^RS%8v)NcG@OLKk0i1RO-JLRm7;B9whe71DOIu*$Xn5`SZ zkrO_$b!!}qUgW^=9IL-9aKqL=PJEoWB-!thpbt-BNGMS{fvq?T+H}1nBFz)DMf*=W z43Z$uao}LuCNIYkw!1=Bd?&)ZqBXX%qlCQ0OnPbmRk>S?4!8^sOQ@5NZ zU(Y=X+EcB;nFs7JLnwJdZ(L6rsMmkWnm}Go?Wz8emAz7A4fCDsBKNE;?yPS3Q}$4T0AcM~U88xsp&Fh-bQLBAKL>i0H+t-AnqxXBVF+PDNMbb^Ld4GNj4>tz6O0Wt-Vq8#;~F4BFhbTo zHWL8jL}6>Yl^~iBVl7ik)oG#H*6*~VqqK|8>Agh>T4JB5%yh@r-;c5%Qc)e>yCAk`@QC|D4%8VyI{x>GQu2Z`>n(;Mg9rHCF`V7Aa? zxBJ+0(-TDMo3JhpICkaTz3=ArH_8xz zX}-O$xw0kv`o5+OCtLP*aF2pr60*W53s@0|vkRgOUpKK&?UBk)YE4;!qQc;>7Y_dC zqW;GZSH4+e6lQql49V%+E3>~BMK!kJaQ%D7!!AXLMAasZpWQEaabNc}qjIb2+CBL> zHw^HuIox!(-7qQdQxKTbTba?vM@(~HZAUOCV@fagl>-CE>%*cVm*sjh-8ijhd#uNL z?0?ueV9}kMnLyL@8KtFOHu2bgmCt%G6rU3cIA z%V%C{;@)`Go;`<79^JFkkTX1rE5oJ!^AC?d`J2Dgbr>MXK98Fqgk3H*rk-=v9cS^K zfBEps?A#1yQfiu%F_SWXMn=p275CozBpyCzRJOWq2F3x7CwU`FQP^PYY2#YJZa-~Iaw>-JV;44QVyxXjmI{|Ngs zBvFzCWEfPEB+j@uBR41DYHg@%kElrUX1dh3pZobwpMI^bE$k~h=aO+5uf6^W@dd#& zC}oHURErgjxp;0r{?uJ}{%J+^MHelYdC3(6VDCfsKJc4oUW^pZxMgoLum&JLZnct!s)+n7??qyW;L2z3|{`pO0=|{_^U5g}JUBo43?el^?1M z<@;gFmYp?~N0)!P{A6P|qv-70?|;N73!`QWc!4udaVdGL>a zd0Qo3MZkUVzyH;9@3wSAeP!n?nvnJKs~;(unU(u@ z95`0Ff9q#U)_l=x!e#UN^T&R0_aBy)Uw!SB0RcR?^_eGrv`;M_I2 z|8)8G3dI-9%grT5q`tAuP$RCANtce#eC4%|y;*_vAHKS3)9xkz_}%aRzI4~d6%|7N zxl>1tnK+?-*M_j19X_=D-us?{0aMSJIOXP>7fI13k~ehrdE?DUT=Dr`qCf@%N@rA#=6BqmvXf!zJ=9^|Nd*(-vJod9?UmOhUWcF3pMZWxC?f#a+kr!M$ zv+NId-}$>&S5qb6myF$8x71gjJan=-J3B-1W#$H5E%kMA-K;sh`{2=v{hL;<-n@?? z0dba~6WWjRw%Pi~obj{_$B>e~u<>Ijh{HK>jyOkYxR(tt*z%o>*>6&Eo{)ff9GRma z3FRcId-k!r06111oC9YTk`9(rj50gptj+PJzA&Z-|7`*oCJ=mr>U@DLIo)urhL@*2yxc zoB9wq;O;IUcQ=*}Hg{8HT6O8F$!WWt_6rNTzj;slyql%@N%%DhLUQN^t?J$p-nsVF z`0ozz?#|!S0oA8$MJIeNwK)y#O-GGSjYKC=ROcv7Lr$%|EfxK)pfhv4V2~`%oC*dk zX<(CFqfrz0u9QpZaxVqb$0B%pMJz)otAG)p-tiNa%?$bwAlbjXBwvVuLx zSC4%yLkLkybzL{k*mPYtOp`K3P17*GPRTQ_pHkZGNd6bR{V%sm*LB0Bl$xf~D_z%h zUH^aGw>|a^HO9D07Pfu9Z0+6}k0KyU6j^Z6XMl4KNR|Zw0{~*CPJwt7VdsX`+mE++ z6d`dpz!(+;MHYZF07M9pWI+@#V_cDiy_?o-K3MOT1z8qkN#KrsBvG)J;9x}-1c6vz zrq&FNHH!m)Bw29D0!ch6aX}JfNgx;@1T1xE&N)Ydpvd3E6nYpy=fdL)hCebPe_%k$ z^Sg)n(e6WyukP<~%P1bzj<&>)Hbvt)5Zn9qh*nsf|ICcMpMSV_S#|u)FUp_W-Cofe zH;7Q+BB8j^95(=HbDRo@eRi}ZH$QV!fK-HZNhBw$Ti!eodv#}HezsROX=(4w$yxaM z4OP`TkEnVFKu9&3<8)B3V5q5WLtXrzheQ1e1AZ`fRJ66k`M z>z)s8zvKSKoEcC5;pfF9biArD8frOo=vZ5v5{y`q+(QJTqkiv!ax96aL0xXIKN!po z`b5Q(s3i-k!w|{qDB81H5H3W)Co4d-ro!Aiz1Y^l~|8fUp{AZ)$F-sjiM0 zMp%=tx%t||%l@&a5j+BLge~TvX>tN)V?$$0OMOLcE5cZm@Zm4F)wOAxSH5?+F%DW= zB(6up5!QO5iS$`G*7fXPmk%5g?ccyK0bt8Hj%XlM?% zHy=KDs9nQ2-u&6BjjrM$8LXwYCCaH`n2aP4B}@nb;Ed|+aplVE7av{m>h31w7C0u@ z(9Gf?BlG-zG900W#v*OFg596(o9e{QkTQGL7}%{XteUoa>GL`u-tDVC`1|eOzI{`Ta?7n(9a;YB zzE&(6k>Yc%xb^&;yKnl={x+ySe0cJuS5__k(>_|9!CR|4AQFz4y4v0r5#64qy({ne z_BDUmDcy9%xw!+U&mBnr@z2jZK|dmrKj6#F$?_?HWkp2n*xv2S-hJt&>%Y6B0hJWx z)K{MH6%WWzT;Wh#b8A~oO?A}7$c)z3Hb&Z;4;?tzp(7fp`E2>prAwBs-+9QD+b0{h z9;h^?%$nINK!89_b_P?!ts&K?n16lp`@ei^_tii8{au%hHx0gbAB_B4TCL9LDT&21g^<(MFhErd1R(Uv#*qM7})*WOw!c_d#>vD{I8A__Aum=ch9w4=SbrM0G} zszU?6tiSyDcYponj>V7s;fGgGs;W5J+8(YydH7gmJp-Hsnv&$fBq)?%J=!pI3cN~U zVgLymTRKtD!C*wGdYKJ3GnV*68KaD`#0FrDTR0fw=~z($mPw%~D5dj}gpg8x*hLVx zlXEc2C}otf#L*z3#bGhvh=oMkG`Iw80qGD+ay`EjqE8SkH~;{)>$K2kgmF3=%K-t> z4IqFqAOa4kC-FOt!rX}=?ZAT^yZ`s?lp+|Xhn1c1^BL-fB*C#W^5^si@BX9CTv6WT z!&9{T>r0fJvfk5dw$*E_PdiaiyLsE)1cSxXw=3XaOVy-n={QQIcI@I6a{6(q35C=Y zOE)tnU)vl9In`8(Q&_#r$m*1e&^Z!NdIZ0Mm2acQ+?l|y(=h1dN1|NX_)44oNWASH z-$dP>V5pmbAZH!U7<7NCCaOtH7NxSWLi+Uv(k8P|msu+3T$&?B-OSB&AI;9EP;yC) zqkhNqB0}kor^O((CMGpCm#Wc1pRqk#mrPrV9SFPqB8f^{5ycq9k>`w)wW*UP_9P+f zu`@J`u^Gg zjqI`<7neK|=Ata9?M;>S9l@*sriNx1EsYIP9lI1s67Y)GpF4p|$Ci2z96TP;AtS@b zO+z<~*2ek{4F&x!4p`t?MMW(qBEc8|(=k?QF8lb0ss3X-v4Y8LI6-i;&+j3MJ&$o4ak)0 znxjoz7?~@tIoR01MK?E@BoD|CO$wrbFd~^=d3aG^VurA%jZQ7{9;#{E(x6^2vS?PJ ztT9xQFyF1{T@kJwp zf*^`Ra@`_euUj5o=o{)I%MLf^_0GL9f?M>yMkg&l%ufvuah?T{LgO!n4b=PF6I{yyja&Gk_CxX!pLMGiFt-{QJ7&QJ+WF z+iPp1!OO0^e8QN~ULFzrImCz|Oms~T^d2%W(Dvd>?}5iJ3%vZu@%~d5UVPq!5d(X- zwZ-$Zd@#@rtxN|SP;kLQcC-f~XQd=w5ZP}k)JoudH=d$A~ z{_)YKxS0RIuYcb^`sK=XIu zjo{3_7cZDUsH{Y6J^az8@~iH+Yp|a&K`P(5_E;=;>d@fYbz4nDN+w)1cYyxqzr2sV z0mM0@x|G%L(nS}Q_+nptzKWDhUUboU6NculdgpIT)*Tu$_2N0xCyW|icJPa}{!w!- znl>UktAMv2`)vJIxnS6(i!RQA##qLP^ZL=}UwR*V1Hggn(U_P$cfo?ugL@y^xcr3K zd-ja6W&H=Dj{5#HZyp(4cFQkT-}TU)Ejw2oXrvR)zi7_nLG5)XDyo~5+yR#@UXY~@YfHp z*N-^WnKWVQ)YyrwM_P<%L%F;Eq(v8qZi$l zb@JV(-`jisqHAYPK6~QCv-d4|`MuTKG+){IQ^%AI7%WBWSnkMMZd^QaaKE4wr&+_M z_0?ba>-)s-SL1a2?8|3O9X)a4*?T{F>D^5g6XskpecbSpeBb8fOI<@Rn1Am0Nt4dr z{lQ;W?y18>8aZwLtVx5~>W-hRYLv43U3$fWOxCn#$L8vI_M$5<8#j8Sg5d0PXOu7h z$GT&YfJba=Y$`ct{@f|Ua&mjAb;p`jjHw0~0m7|KEu$A)HzFIGM6BMsY5T$U$roG@ zKeqWmT~rZqN_c70{V-T8DXT-fSFCsdZ2 zM@Wy!sbYgp5eU@X##4vESv@)xNC~IH!JPmcI@PDA3=;3A2kc~)_LA0cf6@J579b*ed`W&4l!$B~KwcYpf&YoB+oc-*!)L_Q<_=8>T4=ogdwMtjBt+ z$9n94-b~XJ1mS@PAIdH$x#x~sJEEH3BY*VwXYue0h25{d_GNrxKX;Xy_ro9F>;r=$ zQ8JrfeCCg>;O+=%SKNHVsz2PnT`j%q_8Ticd-;(YNL*_j!X zq{0c;&d9s_jvwWnecr4KW{n$OA`^J?4^Kr0FS@wDv3%pc=GqGXusK(ZRlfhd9}k>5 zqwV;SahKn@aIEL|PySNPD6ZYHCilEM?>@UfM&$l-G{G~t1hnM~3!!NUfl2SZz;W*!mfBhh*xHP+X@a!35 ziD~kG1AF6~3xd$pP@j{XAxWKQp$yY(533n|FJoV?TE@97B7`8WahHq$K-EE!l1By2 zNZd-u5&%F<<8Il$BeYwSD8fKBL6Lx&z%dYes<)%D{obu@&&)5C0jL2Kfg~g6)tPEW5BzKu~Mzn?-MCL2j1TT2s*&$;|LZ!VyfYMJFs8 zjrwzo3o=~I^|eu*VQVQp7+P4I$p@!ymgcD?8jJQET7O|>n z900IfSX9WhnCSA;czbO_t2?K-cZO7cqLPaW0&sb}#Eew8ksm+v9NzN$b4zxFBXL2N z5F)ZjR88Z6M3*NoH^&IoSJbunGBV9bYbehAejf(LIKqg9J3>hE<>dt9;dY%Of&l^7 zO_X1d7j13SxIhhE@@4eO&(_*%D{9*muTLhRsv6^5c6q^wsU`^6hNUnGX6FTDR##me zHpP;@eT>%X+BQ`dKnJ;`q!{bry4pHZ3>46i6UD&nFnoZ4pC@s}ux` ztQ;b$W@hy&_7knXp((1e{NmD}sMprF$ZmJ6qg^$bCy*htcqppNZeLzrR;;zYxn0GA z5X{c=V6C>knE?_-iBp{+!n7E;GE0kc!%cM&1A(c=4URD|#)%|nW#@Pmf$H(P>Zg$n)$)4x$?-{XgZo{$uC`td=4ScihN=^_9W*Q83WXww2*5c)n43D6{3S)X z9Zhx3Z6WN=DlN_pH`ay>q9CI^90kFZ74+$9oPk9J#hmIC1VzNErln|H))ON$Oynvq z%x~o@Qb63)sL-cxsnJ?p-4gY9y%GUc(zxSi$6aPo1gphCp#jMxU5L= zxSm(sHz*o4we?~kH^(PNRpyeQtu3UgF`a@$cvD3D@iWh(Ezke?lO2(0oCrknW@fr* zb8AGv2m~cRH^&IoRn~`G9yf3$EA)DYLsZ`OfC#B)}4z|Ctt9{KO63FK&ok? zAdp7du?Tk-P|p%zJp;}W<6P6}L*JVH|FQSp0ajFJ|M>HqGws&xg{AjiL=>c>SO8J% zy=xLnqQ)3YVv4CIdGjWwTVrC0v0d-XpH;=qm}UN_$F^U01!vEm z&(Q7i4Ea4$P!ts6Vwf2&83ZPdoJ1Hm&WKXYVe@2p)0RH)NOo%*jEu-fC3E)VoX`tnNe26FCZOXdpB z;_gJqfWS#S>6T8Oky=>8f*zqIAoc3kYZ#_C|_{&z?FV>14`#)>W z_>HtQVIm#Wtub>hy6OCp-@EObJL}Wa`bjo}ovU8`Bv$_WAK$#@$p@Cb_2GocGs-JY zIcfCZov)>jJMGGw&KdUITkou`?^yBdGey(B`IYJNo!|ZA+Ug7al|#Sw&9C<15KEe> zUnUZkO{JC9K4qsYVsE~_;^dL1$;EwdxalhmOaJiPmQTiEV!z$*x8Jz&tw)+yCK7^F z-7o|I2us&>0I9sZs6Cyo+y2hl4IA6vU3>C1KU*-YdFKrekRE^TsV9r4-|>}c^4;J6 zbD4Z{G_Id8deYdT{UsvtrDX6jM8hNj$QkMe2|$jJHpo$3c4WN(01?s#0ietR_1OQOA=rB3!QFKN6jfDZ5SEd$kuyd_iqCIG8h5q|MfJ%fQpp4|&OlFD zz!++p)X}iNjY+D^(vhZJE%hkLK23_p5?qp<7fzed9|)$}4sUNFRaL;YO&5#O(z0drultj=}FVM@1dTI0dmejxbLti ztd_&IM+j9-4Qg1we~&<}sWJd)WYzBa6eUHKRc6Hx9E>W8lukMctL>J${YQYw5(i`w zLkB+-zybk(^vJ;$8&pLN1fZj#wncy}OGYGuT=HpP#5>Z2oS~lR*t4^RONuOWAiL%8 zfo3KtGG_p`WdJe|f+;>QW4pGuF-hh~gj`}Mh!{g*r0Wmv6G8x>tSCXBsN1s>WGxi( zcN{s?+K95m>IoH9PBa{7JSdo~1Qd)$<6M$5-!vdlR+*jLy>pi&D~c~bR($WSh@>be z(oq4b<^vM#?QM)Zl2#~54%la=1Y^jA3qWSzLnfqN*y9#siIMW8ev=oqE!sSN{6v zkB-=70a&x-*^ZAlHAm8AMSfw~exKTUcyE(HMOBQJ`t~D&BiaPAEK8hmCTs$qOly}v zANzD`d%_6&G(lv=TN~p{=4jc3W~_F1D{>_e^phY!G!h+qb~bZKMg&`!O?CT^Aoppi zKNv{0*KcpKWmyISE=eE=0GOhI9Y0u?@cA^`&;2W~kZC$a0b7a>p zzcG%L9sNaWwzk^CLEyVc-D)sSrB*?C?OLJ3CcB-$eE*%3il_kC6vh%tE?Zzj#sU zET`O4b<85>x$D0$Sm1>|3+hLm*1fnQD8BjN`rnze* zb6<3$W&$!2+b*q`yw&JJ!Pz_a!?{O$T;PdJrQ$>AUhF_ zra~qF5L1F71t6{X6cU1S+`IL?Wp?R^Nz=yne9lv-Mvbb|z zzqpSdZdO&`p4MbPC5P_9_z9HV}<~XDXONp&)ke* zmX;`lAmoZ7fe-?KIjm$rhYlzN$eN}nqDfozs}kcJ07ww$Jo{LVK(-(*Ykp?L;t8MM z&zuDD0KmBmV1aWo0@QqdhiPc)hD`*BTylUpm+XT~)qIR`#yMkL2;z(xv3NY5@@d?( zC=l=?kx#bYTmBML{lx*r76K6f8P7JFOPVAhLMqlFxX-VGEhzgQO$a1xM37|J`z|d2 zWJP6+rIK+Q6|_=GQv}0d1Omo5po2ak=h;_D7m5Q(RwP6uJJu0PTNDfz0XVyZ=JTf$ zv7}8tm2-&^0W#)%Pf4mKXAwCUv=c_Er8UX5Kse}g=9OBOg|fyO5^?|%f*9jYZIDTt zCOL`R08r7ibRw1%s!u}Qw74Y85_39Q04fp(BF@k>Eyg(lGR~NdOj1-uwrxuYRD1!l zjJCE^FdULeFfK_9h=_4T;~+@b0=OjQfiENgndZ}+G;fGtq?3tMIuH!05(+_pC`+s zT+w(Iy%rt-GTS#m0#Ma_03?KPlP+O885i8=SHKpi`Fzd+imJIC!dX6fmx!3G1Qn&> zqqlyxehF9n0l$i1u3r8UQ~aeNH4%*nuK86-QrvEp6iv=R6T(Qx)50InfWWWP%9o!? zm=FktY|3EARw`wHs&OR7HJ{IEPKF80BvrB_@wny>Fa)ls43U6rA(*WAWEUnAltp8Z z%gju)Hbo_$Kj_!oIrc|5 zuYL$XjvOd4l^UkO1j_n83`EQ5F;I!GfM(?w=8 z@0U-f3U{fj4H*U4tV%36BHlSEaE}gcUam)vs|p>8oj%33eWu1NN_Ea`YD2SZEyOX*!mpQN?4PY*zUS20>Siaqi-0p^E=YgL~&F2m! zfWnOc;7(m|7CW`r#UMNXct=-Wa>|@OekT4VM0N^DX5NIi*@8NaVoy>&fPC-e<&C85 zZ6-%n_b~di@js7a^E)Az(lA?HuWm)xo$u|y!fP?N#XF+2*AaThS;5U2JDn-#R6$*2 zxpch(o|~C{;#SklYApbk2>ZNbJPl`{LxFSmcAjuk; z#?Z+NMg*E4eDv>2*KSLjmcQ5NQQ_#%fA`SKYj<*4F0LNjzsO$x@=Lo8w<*Pa7M^wL z+J8Lw*h5e6Z;A>zc)^v|4KC&JwCF$LxM2Fw8!O&vjM>$FYE<@rItFV0A8vb(_1OOd zhKO8}BuV0oApm2XGtQmdtBm{ne$`2H1^|GZbIvlXWX@SKo*FTI!Sqqp$&{JVN<{z! zC!Zf9f-acEC5b!5yP6;lK*TvmWSlc%a?RjjBS(!MHgs@V*pJ>M zW0(0q|_3~SPeBW(D%cQg^5CIuW#8V?@ESNT`+OSx_=X1W! z$iev;2LJ+OoB;si5|~EW@TvFy65`C$C~A zaW2C|JUME{g6Sixgd7?+VnkK3mQI^SI?4RyLkIP?(n-@Yqp_qf6qY#%62O$+1BMQ$ zDbrI)0f>x&t&3p4^Ut3jMoaMpRhc{FFah9nOr|GYPa>kz!%n9m*rrr`-dFGX(LJ{e zFIUqRIlvxeLK0{QW%h#eC-x0Q(tO&f3&+$1Q@VwK$e1$-1p${;pHE}lVeJBAn24uF z&Rj5SOs_~sy!V7tzWd{!Tygp&Fm=rINT%yKV_b3u8}|hQnj$-n1;!ZXS&We}mQ3iQ zXP!B8bhRm1FyP~k3^3;aWK*W4&M1_4W*SenY)MfREl^%wCL;-ffneCL@_0NoYUY9& zV|wYP?RW#+h>idzOx@pS+`02+$hINLij~&;9)HFUfBuWB7n}%s8W|cwnKJjxu{D9T zVQ~b8C`ryJ1waHVZ3p@+I%i%0(gGb{VjI8YcvWLfkrPkA#7!~l3u?K~h0 zJ?KV`%9>+jf{RK4WQ8?y(36WmP)6iO2+C#>%mOr!Q;GIa^t_0621X<#0*AC91c_WD zGdN`Ce#e=UoRCSG1@0N|$ec{0o)$P&5}t}VfJzQ9WDJ;-BwHq)ffw`d*qzy)U7#TO zG}`X=%KHdEW2apEa|>=KCqcW$jTDrc?S#W&H4U1s)TWVpu){Q z=E+3{0N&J--9gphUG5Uz?d+H=WSn0DdZA?2#p!ZCkb}r`8S!$+bY4w7g`?Y$TuT{d z^Rpqit9gidr(X1WIZsOkyC5tV61mBZ|GJdaF2*Dl9#PPbl&u7HaS(b-$_Bpjws;q? zi=on$QC_nP>j}=yjxtrs!<5leTTj%@4Wf0vI^4(^6;`Z3yBV`B%ev3o)=t+scF{oy z`5wzTqbrYKe%ExlgGZh^oAa-Wj&L2BjZPlh3wGXc@^mI*QSErsS;i}0eOf0MHyXd0J z#tkf&70n+EaWm3k7tNhJt#|JM!w2^ZmsE`yKDes7rf*GEMcos9yJVQ!)GfnE19krU4^Y|sDLY$A4SMG}1W6Jn43n+$uB z5Pn(hSdtKa^zn{2-&j^0)M6d&v1F1^(o`vxh^Nx2L?S84yrtc^>YG0-Ygn~%duvh1 zXX=SaBxc$q%Q7M(BY{;DzxkC#o8Nr3A#Nq2?eRnk7$;MY$K!@+q*6MQ6p3Rbk~;mG zZ%qo+y}ot_*?LDuJgpmyK_V7UrPJwD+9H&|j>Zy3T8}1l<}00h*7+w4?>**}%WpVs z$SW_eFlC>k-6t$Po=BN`I+-$k{y?-nKKI(YPA+SF^ywx3VRNrNZSV`vzS3@SRgqHh zs0osyNEti}k#os5l8KZlD=M0CsG4}k*UtWM*$cZ{&45oy#$z_hG83_AG?CJQORB_D ziCEe&60xWun5L4+y%gtDs0Ak0{# zBc4nO;F`h{(T->=mPi?zCe=4YPQU1CzHim~{Sm(++ju z{(HYNa^!K-M;EW#xO?tZcmDVN-)P(P`UiX4M@(OE>DhCq%$a|DwY_%Zc1iO^BguK! z-FZ^cp{L*2a>I9iURJ+q&Gy!CI6zi98i^!zQ&CkT5lL9+m!Kn(;1W;7qe?3AcKGoZWDb3m004jhNkllf3Uwh_&I{wFZ zU9s-@$3LozrW4Ufv?CTz3Y1iZClj$$IvtNEC5bn;8`s@=e_6x3>vy&Wf_^KVj7DRo zO_D4zWMss#dg8ZlK7ZZwk973Qbc&_<%~Z^0iYl>mGLhB|!_f6qGM3aORg)Mb6VYfa zE(p0+bjn3H|LO-{Z~Jihmim-W;kF)!s^jmxanZ)5&+lqZ3nLj#rWH-q6EO>A8Ljr# z=3bM|yJg|<=bm}B-2&C;Gdk++suM4n)qm-d6+-bFiH;+UjY-{P0Gu;39gD@{x@pUb zB1iy>)`{+<4orp#wkytz-Kvor=j7O8HbRr(-iqzU>T=DH6mDjIYxwAPO@OuEQPMkGY z_Bp4*?Ec2WuLjC}oWBuWgvC<`dP#PfQ$RL{U>+QnrAvc{GMufmn?}$pC*r}2Jctjv z)p10woqrB>&aHTcKCwf-DDK=Cu|9fINcNUaTtvhY;eqXN~DHu~jEhUKXv( z`mrk#rw8@NuFLe!)bGOb;VJC&33jn>Uhv?5WRzc+XI4ljVsm!Vyr%}<#urFU=dZdF z00p2}Zj2zyO-IR$J6BzTJgy+`Xo90SHS4PE9D;1wg}8Ya9Z|sIF6h4kBsBj|_M&k@ zviU$;UfdviwNi$w@8#F#2~+1LNKukaL8K^P|V@xn6d}&%rB_k{##y30}Jx+SwKtTtV5g+`y6Z zXjX8yBJY*(MfhC>1FNtC9t9H2-a;@J^dRyMbx+@9edE-c_aq+du^#KO9{Z9SI;m+) z!w`Za<3KhbL$YFiqP`?f!JffNAHR@mJpOoq?lUNzi)|Y8YFC6*pbHlhoai$*PU0!t&Ujk)X8KzP*Pn~jz%h- z%zqaMc>c|gj!ZrI?8>khETD5%H;kHP{`1xlH zH6OU=B^`ZZr<^`-=EOwZN6S`i9dpvGB8a6}AiDG2wTF}o7Yw)5^0EE3ryqX!ncw}w z1o+zb`ycw?g*ICXgAfS9NQe85UvS(&@K+5jGoSm%^G4OMIg^IfEnnW;+Da`gal3NC zRW}c;5KsSO*?=jtQ+wBM+S}p}1{BVOWyX@x^1%~l4+(wv{)W1ga_yCu?0V%-o6-X> zKfC6YrSDBX{Ty@m>P?Mo-X)iftd!n=d+EBJZBtKORK$#d<0iIlS^nzEEipsA>dK4u zEdT4e{V|*E+jF475Qt>yShV2EtH$?M*S`MJ>W^x*vH_P|cGlohwrSOpC2RN1IQyDu zWBZHf!RMd;$CiD&_8n|AYytv?qBSL7d)1{oU-{$4)R4Pxxah=D%Dq33Hm!Se+1mY+ z&$wjfm|h>g@y|7N{+n){_41<+SDt*yU~A{%Wo!2A+S59!h9RYG>E!coJZUg{>F
W&{rZ32 zHMjK1SDO>j$_euq3^#so`zuoxeeLYICpDLTv)81LUVCA2ynN)f*PZT=04H8x=B>+&>)O1oG zJ>%T3oG^ac(9jbd)|`uOUNBbu$6ue^)uJoD()pKOHoBLxX8Gc+O_f()ec_a`+P&YG zHm!SS^_JRrTE684b6#k42#aX>iY4$)wRoCSh3~E^i$8S z3i$>Ms9N>nGpQ-3o^!_ZriyRX9KU(-3ro~dGtQcOV)EceOINH(5=PSUbyr=sPQb4Hr!wrF{1XxMs~dwPs}7))njbMkmggJFr-`Y*I^m4=hSO|BvSn#^e)Ey=cbR zULUS_VZ$M6-@keNwt>EYCWK%pT2s<>S6#Z}l|OFQ2VHT|C{ryPT9W+h6E6)p^&D&0 zJ3H-x=S?2zE_4UTKNaciirw=oKdG||(TsmvPqG{s>TWz}*FWWF`%Ip#rOR+%u zz=k)sw48eJWuq$D`Zt$s_&70P<|$Rwy1Vvpb37f#qWM>UWqcoP{j%p)Y;Kr#+BwxB zU;lwst6zLNHRZIkPM^_Ic4y_p50}5ZwAEl7bLd_c;>cyx%PbRtaCJ8_iqV8w8I24| zjOc|2+@ct`MY-S;Wm86F(J_LYBumC9tJ48_$b|r8L_k?}QOcnw4(>uOH!%ydK~@iz zkjS0(O%4sz^H4+CymW+szyQe=T}2{BBnX8dB;h>12;t;mboL=~m5rSF2|ym6D℘ zq%hBn`|OnbZXjsS2cG??i(RPGN7+4GFLs6c92=Lq>o1z_S-+oc-Ud_Gt4C2F$u`+- zR_1^_fdQ``fhTy;1^Af#?fLP}^3U-*Jw$MiM27e1Ji(3}FF8xV%%@;>^HX?&qq)~T zQT7D6qdmN7mJ=B1^n<`ywzWAah0fiY^|_nZGpE#%mFe&-5eX0??~r_%3r}v(ZU%PO zBNf~vb9tTXEKsK{xdm5gA%94DlshO_Cntj_WCS8a;YcjF9FOTEf=p2YK;%xI9qr_a zvg9N0Ikk|ChGf1%2zXRM$TMjqf46MvSg#IFj-FkRgEQx+>_Q&9*%R65YINpgoC-Rx zoBPn`u&&>*yNHx|FU&3@J%z)Y08o~D0O%g;u^#KOFQXx2$wV9ggr(btZs|!&PdmSb znKsi2%ShX%ZX0RaGK85-#X5|1iflueDLoNMC*#h}w!1UghM9^bVjYH_5=P2QCv8)= z&9rT#ZBw`Ogi~@l-r*c;XZO*QmYy`y`p^l}Z@BTMOXi=%(^1PZgpo|eB1S4<=}BQ3 zRyvl9M@&6sreac{V!;KM-}1Gq$JF?fi8u-~cWP5NlF?)=Vwq`S>9&!!&13#C(!xv| zsdzFGWB;~UJ2ru)z;o*l{$qDSRlrFq$jE;EqlWue?Em|x5y1fo1c55U>Q9d>JDB#X z`03u3=XWJkWvlB;9IjB7IREG>y31kjNGWFcYZI+BGcTWeP${-^+8fp>)Rm!}S z>NcqoaL79mVrHKn0J_I|tUF^2;z@hnwRfMi-B*0`zOiM}@#lQwnwh=!v<0ud z^4tR(-`ck8;MVnTy|L>3X1nAY-~0I}`QVDxo02A`BkcpGo_9j%&@)Tk=b@VGzWsx- z>ft4CynCqKnlb;p=_j5zf5C#ulc$a87j904uDJZH4KMv|Ppdt2#zpshZQ+(T7k}`{ zUaj|W7c81LZO;7pr_4U-gz>?$VL$riPs&maB}1nTuL+s}=id7BX}^a%oq z%fhmyigEWp@Z+MEt>)mAsy>5;59xQ@oP}r4K8|#A?2I|#=w5Ts={H|AH6@C! zyYu@uU%sF!q!EBtRK4J`TfTGKHN6Aa-qtZ_`gtdW>;ArYL)FMBXPq|9O6gNhJ7;7m zR86_`z8g;4wtB^$hK{sOvoHDPEoYB9+{~sd9@$4flWJoQ}pLgJ)lOLio^=OE#61`0MMM=UjE)-0;pnzVyk!a+bv0FTT@{wI#zNE9gl8IA!{Y z$4?qDV)(GZ1CBrC>_u}Xa$%R%3>r0ZggMnE#7`O9@J>tFifi(9r?L(aH<(d6N?FTLx^X|)aFu3!H4xIp9bC2zOu zzz~qJbhKm8wDV60*FE|2#`2+4zkC08idwdrgHOBRqPfSNG_}~zP0npyM8dPT%L6PtyiC1v!^w1?X~CE zu3xcr=Yef&-+29<4^no9{FTFlJP4BWE$*rSWY9R~Fo-$xaDf2;akQc;{A#AO|2i4bI53FwPm5IF~t> zxa2HLJfly9F5gl(3L$n*jspOh5Ozn)L8-9mIbLVB!ks9~g-<I5c&s=x8 zp$hD(%L+V$-F-ma9+La;s2x+FqTo?%$o?hojs@ir5_r;o5&{wB7|?}^!7l$c&jE$q z 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 @DQVM33&>yXuQ0 z*lbFGo&L#RZk98|HfA;AF^H5ds6gb>^^8siC+ zgV9J>qM)S`X+y;F@`4K0QpvP#QdteiXmSz>2Z1vrL|A$vo|F`Yf{|6b=WBbXp3AoyP%*U}hqbv;+i$A>_=KnGl>4NmXR((*4{8mB(1~LAlQFxwKYq z=JoWR?e#`ZI74uCd3{2oIis5E&z*&6a@25rqohlQ&IUE(ZrLfJh_?PJCL9Xohcw^CFCtye5)*P64VXzg@+bNNQhu&=i!%( zEw6d@&DAKY*%gah+2(sjL?SHRvbUU)dX~FNL?SHBvIBm~0q0h6;q%J-H!)~Ds{>kq zjhY+=-*&{mQLwXzna&RMZ*i7Bo8&IQ&u|$$%}4)M=HE$prnfoY;b~9yk&RnyHj!nJ zw~%=gle@Fu${sAvqW7F0V*J(?{4X7GniFysr#WOCak`V5IW4qMQI9SR;M;fR7%lv8 zb=GdxtUrlnd1rs}?^UvE*_QiL4rHENUBBARX|B~mH^*=96lZ97k@FznnR{}JfHO8d zpxO6lNP=_IFwXYqbLm_Ho#V7(;;Wo!Y0;X&ZgE?Bs}(+A3DIM;1ziN|Z{J z$g)hS>ly<##hD2qEG8I;VgM)ZJvv~7O=SVc{fKjJvp#G`C1xYhHhIPN@8O)AjDz5Y zVK`e6LY(Nw=tvhMA~(|+gXcx_C~`u9xV}(`6p4gD0Vx5VOe7f4a4Z&5sHy8f6-AMl zp&OjN*0ZCDbXzeZ0-^Tv-qjV;%J0Y;EV~Rga80% zmdUuJ1SA3i5CzjUT@Wf$1i^GIEs)9-1Q#GoJ);4kvLq1%%g}U-%d#R7bfGdL00ki9 zTp)FjVY_+ld*H*=D8VKYcEm$r2@%ZHO(v_V2L?MkO+pE921Jr508&Cs(?miEW?ReI z9w8WpDNsTbNGNiPaUn^>2~mQ=ja?roD1FVfZhh&Lry(sGvbM- z*@AI4E|0z-w9{QXd5@p=K^ zsLLZkq=0Bz42=}$5DZ1^;&RTotP+CEvYgU$P{XlM6ouf73pwlbj?6NHVJa&MMc|wR zA<=@8Jm7|5a5+>Iv>#JpF$x#2mu1PU_u0o0%1TD z+_EgDC@K?-3j`q1Sf1lY>u#SSv4T8;oHNEDT2K^2v|U{-lLx|4Rgnc}TtHz_F&7{> zw=Bj4iR2YUZ6(h@z$u1pOcM}{=7(Y^II~QXDuIHCLJ4p#3i1PnoSXBK0Kgn%$D3#lv-5Gdyt7Tbdo^14A;CH0 zoO1|7@*|X(reQLohNGbvwXMJb`0B~;O`k9PIBuSFwf?&ipU~|q< z4#X6&2`&O@UQsCm=N9K2LeV@SEFl8o1#mV$0%}K3oSH)8w3U0hCa8^ta9ceV!S| z5m}-`4tm$*Z1F9hTKeM5*F39}L`!AyzVJ91{+wI5nEw=PY4PH--u(Me=zkr3K64w0 z)17_Ot2nYQE1Y!ri zAV7&koKOVJV&LFuAh>W~8W4gBPO_T{Lcolt^uppIrX>v~1fUZx0)=3JNPuav_5-JM z4=(#;l^KjE07M8742eV~+ueWzw=}tM>Q&eG%FlfK)@xr@q&s!#LQ<8-tKxa3Wo`2# z1h|%LY-niIOis`R;HU(gb3jUvF^+^%Ctd}&0c%1CaK?nqb+yG4854pKieRHS-t_Gw zW(yQf&yCM6Tg5Ne0cJy@c;y0$)%*7I6-D38h26(?%Vf9!l;i;A z@iYz@H#N0?(^tn60a-$u$!`0rBC)H<8RwkYiz$ji!|=F;-y2d6@4fQ!-Wpwz2ogdF z3dR}Z;7H*ibl;s;m5FTJ?C#!zKq%aS=bxU2+aFfEgD zZu#R(B0)DMk*#AYQIfW#5tHYn_O9K!zozR26K?HMl-**#SaGML)j0f3b`0$+Ep5Pd& z1RyXDjq#M=oD&2AoLPdZp#UUPn$z`cph9rQT*9Aw>zQS#v7$Cb(Ynf03C*OG=&5*Z zniGY@B4Oa%at#L{00p-kONKy#dO8^{ZriJaT5+nvWQINq40T>Yhofzt1 zLw~{!*u?(5RHV;jV471xCCfB6XcAk zv67BOp}MMyM8-r!)55~iHY`=2&@4&_7u>RJ_BPmzc+0b72w|Bz&_Gmy+L~J3;($^l z8kGraOvDWfg5gL|mGxA-I;n+X`9XzRdb+VL!-0e%(SS@Cvk0PPu}~z!jdWu}9F?FV zp$AfinvvH5$fLT1P_cd*eN2p1Okr`*Nm4i`o=NYO5-e_FZPYps19m>f@S4 z2nqp$`yfKWG|dc0W86qvT!65L7~zb|u1Sn>h5%p(TV#g8rFLDqi$qOjZ9E5Ku~$)u zLI{E)*;r51a8M>fxc*!AgM|nH%+!Sxh=fQwV-UB$g8ewS*r&~V)lC)*hnbc#IAo1r z4tVPumC%b-g#h+YB!o9Xi0q(|qpoS&IgtZLw82yVG~;B_lFhxz9N=~c_p;8A+ybnW zRW@^B8uZNvF7G*uK4Vs)!!_9Y&<=D=)WZAH=g#C!G=3<@f3`P8WUq+cLH1xE5HXam z5IX~I8iwVBeRC550W_pU@+EHQ!V-kK&oAdd)tddEZP=^Lxo8pv078VRS$dioT1!po z$wfq#tDjwuw0QY{qv$Qxym`%>wYkVS zs)-H7S8iV;d`lboTo1gzz`5XD0QU}P+Kk*;hh;BiAKv_B??D95u6Mla*=Bjiy`ss> zZCPJq=RBu5Hx$m)%$|DB=^h7c`UyS5mG5Ko8{=C(3&&N&YaFMc{0- z?B5xE^x% z!yN%E(>zP(l5^=?I+xC+bLoF2`2jC2l}IKM^|dw0L{iHbg6ZkB27(zTlVq7n5|t>S zlHg_{nM%YPYib%y8xk|arzL|s&y5OiqL&Ph}v zfJ*+wH~#GX_gBauuaA(o!3ud9tG(;Sc@XsLKzU2Re`2>~sYNTw1Ewbk*oj=+O9BW%%QTC-554R0zd!oDi=|8>Q;RR0yKwf!3+}q-Cj(1F zCfMo5+it&j+TZg^$1X>5pdiXpCpHbRuJNu(U)nO(cm5E74e2S6drTX@t7> z0+FK2@+DMQTBz*>H-GPzOD@0Z=eJ)K1C0T-@liuJTlEhOKS(Fe;kS1zL@fbCvaci| zOYywh9{SC!zOjlrbKdvvziLdUhT4i9o7Wz#(*iO@VWr}A_4ReSX;Fe;rWoImvhge!?l!#2Sv9`80nK6)3ZfJG2HC5GBDa~kXOpTs*)5xNl z*WX{MF@4LbRe3$f4eFSe)-8e}m1wB0u1Oi(O4Z2i$J}}IC5aQqQl=nYs2N0VYK@KY zctc%nU85y{5@MtpD^4~HoN)1ZtsoKZaoY`Zb}fHv%f2cqN#06QxO<(`JcC)02m4EB zH3kB_pB%8khex}B7=n)r>?Pqlphb1J96E^b5Dx$1&%Khb_`*gYfIC|dw-{N5w7vD>t`w?k#$%S5(KsL#90;&RO}*xh zpN;Jr%NR^pMkbSCTmT5mVvKQSS@!5{=o#I#IAg)WwwK=a$m4fjLo?YUV(%V9Dtd+VOWGxOV6|)I{TNudU)Qn(Sye?{KefjNy)Uv1SQD1Ak_75 zaJvK{L^zf?7T48lethrPZn1dUB#4YN+fv0WBa_iAE&#w53@~(qF#(8_u(%$$^0vE2 zbuTRKH}Ub`|9)ckSW>fOi3&^CH4O-{=M!NWx~_2!ln@kL*EG{KIm(?bnDW@~o|@P_ zme3d>NC``5fvfJgXH@J^08S zmtiJ>l%z98tB&2v@>J7ej9E@+;*4=Y2r+fdu$Ub;iV_|-f>-_Ut`S{J`cJ&{XZJq% zlUpup9b`!sn0Cbve)01k4(gPjN~I(1&ilcSZy!(=NT#&n?n7_A`@Z|`zI8y`h+$fk zN=B-&^!!1TnNsY#W`b^0JLSqtg6Af{D%)-)W5K%F5R|EuQvIrX>q$fGZ~EwWO_m_?K6Aw zaJ{k4ElwTnKLH1|^V4TZ1QF z+^a;Yi)R3lAefqFn3g@zNQA|8^|IT3I=X8#V=!UqnT*Cb2jI-I?>Vzg`(~=4-SZWemfD9K6H>ak%iH3wLvGtE}0qSs&Qr8Y#0wAt8hyadnmnu@#!L(~O^W z4DMi;GrGF#Di67CVgB=(Bi%7q_{@~9xi1Sy`;Qx@^l*oCD#IZ7e0(mQv4Q$3&y2cSjWZn^1-vFC+< zmXX#je{b`N(9{tZ=iop8{Pf8`kKpc3judQ(ZV(UI}*Ctn&%LJJqD=Ad3>7M zwOh#SED`+NBb^fkG}BYdty{LVO>c~AN)oQ=*8R50*;(^Y6Edq;HP=hS6N-auj{~2H z=-V1SSLC7Topmy6QWR)jrfd$)I)f)tDEysUcn%fdaeSL*m`hl8i|6lLO}GkPrrz%@ zuz>y2ecpANKRr22XVLUQXwHK^?eq7oJ>G9P%of%jbMW)I^#6^7&4#0M>0J81J0So7XO@;p3ju^ulgmRV&dx)lW1qg&2fnVY zt2$gw2Xzf?-dWqF4Q}52jisuDNfLor+rAg}Zo>jaz1m7|KL6su8r|mcNQy#{8-|HU zWJTc^96Ww((^7mG3HvtS?XIxMMmZ6yzLqs(YlwDa54k8?lHXPix>B}yW zNC=_U;S<^hcOwI_4%b|E{rN-3lJw?A9ePciJ$u{$y=w3KZ@p0?wOe@8g098N_BD%F z?l#5@>VER$rPbAyHA(sE5rg;s>)yW07tDS29kz~o6l+nNH$gU+g2RTGDTi0#K?;=xz5>GCB z_KBTG%wN6u+IgK@iSjw6wOfAw+6HbVDvap$!w2pA*M0iPTiccvkL)q4q;~V~US4gc zs#2xHu9(*M?cY88b!9r0OsZ-?IQl1Oq%-Z#8`LI0R4`~*=%uX}Oj@9SvtkeHdP)DH z<;zx>1zoSWYF4LK(Gy>;di&!|s0M999e^{@BNEdvT6Y}SD^`Es-#+=-k7vbXUT1)8 z*M-PoS=+FBO%uI`(VlXJ!&u@xZr>iu!otmMio=MU|p+;y+CZPTZ#wjGjH1q4`nCQ{ySa=&&wSllIF zd-Jt-jy9MB#?JZ9paH|XMgA3M14m70C2IE_K2eonrl2&}7f?96pk|LF`d3-mjgoJ3 z?aQP&tD)(W4emm$x!+y0OzKaHDzalB))Y?A|zf+&chtTiQWEJk(!g`EtT$BYLZI z?-D*bk?TQ-zO}dS`OhhVyQ9oDw!M`>w3wxvDO<=W*-(Gp%pY{;d!OC74@p4HFYjC! ztgbkfGDJ9{nz|t?ayrqdaj8T1zOr6-vZ}Fi$A+i=`pRQh^%5Es44!iP^;2H@%d^ve zaPLi!co)tKl%^O|mO@a0Wk9ZMe?Jg8qZtO@~oCZ!g% z>0BTmK6HdD0W*`1wQAR;AW&CbRo4)QKtZ=oty1;X4ULWOKJ$m(eR@U1s_m_ktZV2$ z^O_!f&vRQ(48H2-tEc22*?*{3x2h{^q*&{oonl81>^J1Rq8L)Jz3R~@Nn42DCghT8r! zuj$VBKKt46K@+<#e&h9NcRX^faqJ^){Jh?kf8QMX-Cuuw)75wPn>F|1X@fG`KHP91 z9+1V3Pv6EKbMCw62RGdE)3iW6(C&(PW7fa$fL7RR;Z@h2{Gg^94r&cGbtzWfxtEl# z*nhmCq*bXNuW3w);?iQSr#Y$$WtNZ>q93R;*?xRPQ zCBJ*^-KqS7Ji?Ux)*Xw~qX&;zaww!wQ^@75!nLPP28z2~eC2nl7dO%pp*Fb3%4n z$vNE4(_)4LKqr%#_TBoI6>cK2d|+IF03^VTlgCf4daLqR?+qWZsQZ@pk9_*Vf&F_j zAURnFLjgzs4f22f#P7tK-`uxyYuW-pugOpdEG+9>7z+Tiswz&!lMo68C5jZltUtPX z?dCz@*6+Oi-igW+p>7L*`_xbGzxA%-?pO9Gd+B6j0zqm~2lszAwTMBt_(g6j`hBLp zB_@d1Q(XZT;agfaL(Q@`STre^k67wM@7&da4_j=xt#Zlo%~m>RIP$;JsM&J(^Joqs z{#TQ)S(-zwO^e|aBq!=e_JL`tE9XDPv)$W>VNQ#1zaWmE?qqHA}&SoU+ z#%$3{=3A;_4!G&Kw_vt&;JI`z{a>GK4_DFRi2rXWqn}IX(tk{HW>_WKsY`2#qLr-OvA1^YWj`9N zeem=~96oYfGEv=GFS~w1*&kn9S7hwjc`(_&yihP+dFUIS-|LUSQBkDPz&7-R7>pVP5}dVjFu>rP!egJq-}s*aqf zE-vp}5K)j@b(IxKlM{j3eLI5B^D{e*Ze&CV(oiD!sN$9%s zGaZJ^`uX=}Kl|iwjZicx@~^-9;kL&Yzq#zVWEdTK_UqcQJTqp-G>E?U?uW0wv-Yjm zw>GT&!)1S17m0;1f8ft=z4)Uie{w7%=Z82KKtQAoI%xc?WMb3aboYxc?6h?0mh0|( zFuL^*Pi^_St})en_8mW%-s-It$G-pI!xh)uIAHdzQ`m?9*scug)#(d!@QPftL1*(BU~RaNl77whVkZc}=+0z@;DF6uGnH}_vTEdS80n@-NSw@;_A zvhcd|I~C}E{nf)SzrFtLS2iS9|8eFMyRLll{?38mWj7BgmyW-?zOKBy>)4Afo7%4X z@l`MUwO)@PqyfA7_Ech%FPJg_VTfMAgB z-?pwX&~s*=aw;o4b!x?m6GNuVp-z-Xo8E{>WS%_v>57v>rp%!zf&sek^R+cnx9Ppg zeek^C0>g^6Y0c(2mz_UyRK8rjd+*6wlW(3s=e`l$mTld8V(_BdetP}DhwuK`{^M0F z+W9B<-gWey-|XzNXzI9uA1vPvp&&S{Opug-s>+m7EtwvC#rN-+(dP9}j@^ z&c}cI;I)^3y7u!yp~8X# z&ORf#n}_Tt58<_A4GLk4ednC(gUyAzEpegYocu8BDGwgeHpmT{XSW>yQ1U##F}6 zx$fHO{cEbLx2*UmHgNW=p`9BNseovF@}WojUvcl?$jMdfHYFN9%LJgXAcnwofF6AZ zt93g+-ms-)9{=vF=}*19$wER1nyGmH`P2XOi)+7Fzp-<_Uhn<(p3nGs7mvT7w(zz@ z;EfH{b!{)W^ycrXo%{B9=Z}xUfO$jmE1vzwi(j8g=Enk!^@&)UF1Or%eLH>EQ-6Ai zm-N17X8)HTxKZhU=`Swrc>CQ?U3vFo4evj^G&AOrAI|)0{i^LEwdTvJA3XBMA>kuc z;ePoi7ysa%--)uJmrw2a#;<>xlJoOo;h;hq1sYnq``Ed+EF7CiTA}prM<4rJm+9ZT zc1q9c>iT^f-&_0*x#y=hXQ~_e^=tj>+rN7}SrAr8BNKoGjI=23d&RV#Z#?#6)~fID z^Si~0)M>LX{%p;M_0a#8>t=CX3X)|?|(jgxTr7+g4qL6 z+kO*&e8ZGiAGq=9&E{i&eEjGe5Bz>v<=ww}IKJ|42MWhc?UhGkg$$$NB(Zdv+Pz1-z8QomtOa^mIP-~P+rLnCe@fi|OhMt=3HhYItb5QHcSt=O}@ zCX_dBXyD-fy&6cVcxu!Yw?z(r^3LW{LoS}#t~3@IJaJawi#J|hGH&6`BipM=LGikm ze_Pe{>hBLp{(edA_0!6pdT!Hg_uL-L)N(nnf6eQ!Z|AedonN2--Av)C#mm+-Xr`tc zKxjCqV5H-Ze|kqKRolCL;b#W#FktGVx6gX+=eNAP;ZV1c^Y8l3?STuBC zue@S)#>KNg+wkeC&AXta-&NClzxLRVwUVy4U9+HTx5!WL{n1Bny>hB#;+e$-aD4R^YW?U ziML-pIT1HQ>2Dr<^o7}XKRvdj_LP-(YTdt9oG9torXX+dg);&LZ@sl@!5t3_2pnI( zaciQ!A)ZN#qJE2}_I&TR_taVH@aflFKBZ56P0hAd%R&P#nlYqfLp-JM_)AYcy7H@v z3E#ORa(Kn!%?HEf18(}^ttG6sp`qg4mtH#D$Q7w6jn@?HomBKZ@`6nD(hDbD-96c3r6ySQexC4Gu zpw8nn`@Dp_f!IMYbEYzEIw$#o&L$b#GcISzRHGy~LqZO1cyIHNA3yZ?6G$+VPICc7 z4(QciKk~p+RRL0!5?i;SU$7>~FfJC|f*=ovAJVFd>$hA_RwrO&4WB(^Sed~)BG8WAaXmU;OIrbi0 zk$Y^56B2-qEM|#YZ=Ga&T9%!nf%AcX63)SdV7ycE+4?FleXm zxZk<(Ji06fFGv3ZI14fRSII5iEbsyKO>VNtR@~l(wZJj<4Sw08x}TeNdKXV`Zjm|L zmTBHp-(o5BTc?`rD*RBqCp6~mp@g6O>>SE1cA9>9E}cvNcO++%PpBeGL~e<$Ash|R zbLm|AzbqjE02*pNYW(nMkk;?s@a68R^r_viy#Lb6t4}V;FS`8phex(+{P6S2854Rx z`|D+028|tmUYV6nF0b5O!Sv5Re(Uu&UV~K|xM2+%KYD2I5}_wozWwrkD4#HSVkAiF zc5mEu;PZ6l?$?&Q`meRMtMjQ`+GFIHF%cE2zFv3e(8=!SjTzCWlxvAq@4fMLWk$7y zr-dL?Qe@67Ba_LPCPSj25J(8qw1O^UN3=^^b@RJoSYczg=#UBHPHueT{dHf+0D(>; zhxd>k`uU4n8lhD|ByF5rvG&4-CBJ)a!^u{ihul1Wz+E#3mtB14_ph6I$763_^Sx_o zRzLgE*LB4uc@|@Y5PPQ8(~S)cjTxRvq|Jb+fA%+zE}T92yEk`!_Rs(5dtQH<*~j#{ zWgmXjAVOBv?zfk}@y7a^jYWYpkNo+K=#;Cz-*xliH$Gfv2$f_faQ`v@J>Ne8AW0Gm zZs?kp(J>mSIkNNBKR;fz=!SW-M(adaHJg8Y>$CSg^XiO?E|L0le_;Oj(u;n0pI6(r zW4yM?Xl%?_T0>n;xWfg*%NxIY?Hl^I!n#4_wivgw%5a>WkPy<)n3-_xP5C?jGU5-Z zpWS-<)?IgOuN6Vb2_>W`iiE<{bzRpnl&8qZEmO;6G~LKAik#T+>YYoh4xQQuz>p=% zEkoBe)8auzrYH;PE9&}m)_2|h+{gW|A3e0IPADaW+HGvd{9(*8^mJUO7YrRp(!06Q z@a}7`2l`CyVSGLB*^dT%XY|PK)|YFRE?;+X^*g_LW>a0qR#61OnPuo1U6Y0k8-(d^ zm|nN!y^pGs>C~yp#+uA$TfT(i)_GyYOvmeV2+Ks3#pg?3`|InU3@@8`MQOW9lg{7w z@zaY}ts8OGts;K(%{Ld1P}@HC=o6$>hpP@Qn#a}%wqt7MvU?ya1nDj25nbwzU2~^!!Y#9l%x7Vm z9L|p$Jkv3`Wc|5wHfET0C3KtCL#sW@n&S@cIZHU0xXC0+u_12F`Qf$kt#7a0TOTVQ zc+>UM-?;ON_jadbIr@Wf^S{`}!-BlRqUvqWJn-J@Qw9|z4LWzxm5I;Z zS$8m9R2->_TU>xlg(jkluDs&tdp~*bt*XDi^7o4-9_%}B%*T)2{O<0IjPi94{E>e7 z{B4hIdh+={Mgr6_O)h{^DpPDoShKFXGXB}y8;-nok zA4;tL)0u;V=I2uF|R~Dufh`hSG!*5D>^8ck!Z&M)o}Q*)Ga;wZqs; zh88~a;0KYSytVJWGsE+IO^J)ACQZ>`n`H^hH+=?_Da4>1l19 z`{O_U=*buJBe>zMzkD)oaDHA$a7L9-S?kujjmFBlRPxlG7ytEMhuNjS{Key>sMOSP z&Sh6MZhdRrAw3eQ-@Ik}h=NuheenL5)$*NpUUl&OpFHw*#b4fdY1Rdwf~+3@d~u>N zR#aSQOD#7^LI^5JnRxA*b&bWv1;u$GnG(jV#`?y}x`ZY0ThM0!Bm`0!Ht?d0dc5`O zu6i1agwlk{5;i2P+1Fnk|LpCx2Qpo|#`0ACUr*dybk%P!pE+q)#sY~LCQ}p{P*NfO z(i8XRU-{eHW>5at$2%+`fDl5Z5Y?Cb>#yexJ}*B%oQS6;-*SB~*m2Ddp9-`pQ>;X+ z>!^9di~oNA;~BYd!L>Kgub%tSlbas-%OeGa`3;A@Jd)-L*O^if31}s)T2nJoQQc@| z65Br8KB}2WK2>Nk)*c6<_<6V=L7F&xIE^P>w3YC8*cx-T3Vt~kZBf5%fdb0d*Q0% zJK+T!J^!rL%;q@T4kW&MdwX_x{Wp<17WRCYG-=A7(o<+I|p#J!^H2Qr zc_1Dw(=BFT&YgYOuA`4X_VuRaRSXa$nsvD$O50A|yB3EI8+mOD*)vc5?z>O?_4-S; z-}>wK36Yr{kVWF_Km6zV5AC7_0YISKwsW^`t@HO)G^84;^E+QSY53s%#}1o>1_L1l zz+i^;KLfjb8@Al+i0pAqS1{rX=d_es#<#?2-k)85r$5_;)6Kmmm{+RAy69Ig9s0a0C zA7zhA-;^KS^n(8zJi#o)jJf4$hTyy7ivPnIT2VB)O7nwH7fw**G^y{Nx`qayvBBF4 zxb2wJs3PZ|Gc|_a00D4%@@96G4$y*wgkQ=dH%s428{jlSD$b>I>Hm_1ln~B%>kggf zwCm7pHWY+NW}^C&bvqLlQvB9&{aiYi{?n4+0FXYpZ*k?X-`scQ->?2_ymIr$FKu3IF+m8|J9k%QSy5FvV;T~Q%}bwM{T@R?!_hn$ zzxmr!pEH4qDqA!!7ziYZM8VAHU>)D~$H!M&7DGvihSUx3{e9(|oJevcmKRcG2TWp? zAZpt#Z98^oAMVkkd~eD$OiC#LqAcr)>I5m7Ib~#*Yi>N>_~7?{T08e=3#Jb{nv#Qi zzd5jZpSbGA%cM1jA{gJYtG>9jlol37f>ksaZBtf4xfV~eqQWTVbsRgi{hP0EqoFXf zn2Q9Vu(XtkJqAzA?{P(s;_V_(Se9qK^ZYZH{PgiFr)_+0&4!Uv^Y(qQp}M>@VPGf} z;<6f$F`YJB_iSJL^+&H%j=BH4S8Z9j`s<_!NiH}A*_k^_wn5}v1PfYs?$ohO+k#FV zS|2xJJ-W87JbH=-qA@A;`m&Y7=MJ1ZC(%6`Uv(^X@wBpCTyIQ6zp}_bK3+C_?x2e= zs_#>ZAO8IsbrV2mzOkdd+cw2YIQWQ=)$Snse)_J4j{y7}f#fB5Maawu%*N`7%! zVfU_)?RBj?bg2IFqnE13|Ki3Qzxw4HnY^*HFPb{}>IG%H{**~J>I8r>0VEO)0YETX z+@*WZ4%@0e-}L$U!|CqN)`ki~bqG*+!9_EsPP=+R`8R)%1Ci3wQc(aELF&F-oEOy) z1m_Tl7Io>?v(?s$EgL^Oe}uH_v$ZG7%QK)F$=XQ!kuztEKat4n`FdyR1+%|HSAfThM>O)Iq<0p63^rl$Mqh73O6m^cF!m3pzg` z%fVY6ywim=foE6Y!lSEsj9(8i&0U0M7xo@e1^v!=_IfUhL3>cN$Re}CJ<&bGgM+gh zhi2O;Y}(J8FO=iAW2FBa+n}^`j73ZXbAL;9K z+i>#Gp5yge-(cXtmNmOAxTR;?$|GxZ4u-A^u*0$gHmxD!>*!FvaYx>{&(W5V4y<_D;(37c* zk&4$PG*+CKeCxOOJ^TCx%a;DJ&s&SjE?sbF`Ey@ZLvaBrfpA_yzLg(S6h&1Oz5e9Z zjjOhOuv#+Xu~r?!&~U7=w0FO*_?9Ia}dAKAZS zZS6so06SDKMs;d^Y|k4I=`(g%kL4empcY00^h9knlOuIszIWqyH&0n~%U}OG>-&qY z(n8VFlA^Fmbf%XLnmM(b{>WXQ2J;J9vhw(e%0xZc{ms65xvd?H*LiBFY$htd{PF+` z4*iy8uMmP#NeEF>Rb6??ah0W%NR&wATiwSIEQYHWzx2tw&t?*qNG4L6kxn!=*4FeG zbJ>(G`lI)J8i)oZDt2#LwY?E;>)xhf_d3zGo1vNQdkttEjT2cqxNZHH3HV<3^2(zd z7yu|KG-0)p#+8C z&YVgmD_*&C*I^py!7LUCMq>H-B0nN2p~8^$!o%NR-FM_I_x@qTD|h~WYthsm))RNF z2*zS2#R81C#T{9S^~Yiz^TTi9is@bNHm*G?wiH;M(<^k6FOiqdjNY zY{Jf6I2Jxn`W3yuLU@`;!o{L;z1`hf_#q7Ns_IQ+t`Kn3IV=ZC@xkoiRm7Qnf)RxR z5bxQ)o;GppR7ExuR)n~;jsFnyZ0Td)e_a; z>^mf=(gJk#UtvI>fdqP1tmuF9$8SFYTY8;2ouyF4840t^4mjfpr#T|08=k3n-s&S4 z<7@T>z*)k8|K;Qd*8h)!xw&=oV~V~f({(5HYTm3VvZe!o7Ma$kL2a8-BhIqQ-WuIC z?d4tpTe=WHll%WIo#9*O%bX9n{j24U-D35z*)V}E4gz?ZFTSOTS`Ioc_b zX7SRHzgZ50|jas=m`5(4Max%3~Cgb;*~oxAsK+p#Mc2sEQMBM469K*x5)5^%;v zi>4Yx!j1I7qtymS;`^NtqG|fT0e$-P>SkZ)f4jQp(z%pPoO4R)%9ShEtXWf1R4l7% zBpg;{NpJz&IDT+nb<$ELl1ax8e6xM~mwT!zkL}#KkIRu@Fc44`fpf>H3ZqQ1G{U|g2#{UIM6V1@{DlxmZzV8Gb2So ztKGMIU&^urayh#b8O_@##%*68K3Ugcz{t@<`quAU`R=lfhxY7jP&-T- zKO)NG`wtw_nN@N0U`?7yz@)tLVWY=(Eijk9_VV^4jgmwGJPfOa8I>TKhSk3RsL_2( zE9$g1WwApCj&(SH%$VT=lHV+Ub;*X4hxgS$+1SCIHZOf+#fH!KR~SPtoE)k7?BzE< z+P80S9ceReXqQbN{ADg_|`EG7y{ODeuuzwwKGl~pwX zg{@z^xvcM?hMjBHeE!YBeY^Ia(%QGlZ%okwQoCfuW>iCNGuRLzZ~>}}dvO|flQo(0*3kopt4B_m8c0`SUYVS(+;i|mtZk2; zt>hiszSIM)r(HBvO;wVDHqdyC74;cEu>53oy1Y%nq20R^CfIS!5K$tmuD15XS6kL^ z-^ZyUm}!F2tw)!}Lp!UmWc-B}b}g`$y#DI?t)CyyM27S&TmRAGuMX989WrIX?8z4l z9x;C81y=RJW3?%i1KoOdgZQyED_6%uT_#T$kw>*{Yd`s>Av~;q>$Qs)?>>Cu_{mDf zt)mC_RwqnKDR9P!+P!yoOdMPD>FPwd%d|QkB=P zSMN6J_RqITW#`YIH9kW1%}ZZd_W8leqX*=&er;*RvQO6TJ9M}%X=EBs?K^am6Uo2s z@-KpgZ+D#K`MTe^$9sYg==mHYe#>Ik*YBJha+krmVQf5b*{`JOx0JZKc>xe@2*BNh z3%6`8PMedh^KvOE-on_S79%1O$bq-H>mTS*o6(1SXX7h+1tM+~Lnn@APJR6jusmmJ z@3ypW3m^m%Bt)W=N`z8Jc3N;QIB*VGeGmJ5=QNQebvW7iw=On*!UfME`9ZdPxkYes zcR#7^B+`stmtM?~kAyto`JeAJ7^ooVUhg=X5NjX+R%rp>!gw|Ep z4xM}TfMUs_($TLrZrgPt+`8+6OXsy!>b^cuJNdHfW=t60y&(DAGcQ%fjULl({`C*1 zE_-VkYt{RjtLOLa*}r?J>Q8@st|Aj1IbnS2z?Lr#*TqV^F1T#&d410B5jy$!Q?E_B z>F47+nos}w;TM*CMkKy@#ggS)_Ya$K>4=_fdk-GC^TU6xJ($Xm$f=BV-h^2bh7Rah zmcRLYX9^Sm`R7wt(F1r5m152J+cPJALN&rGP;k
9h1vR&g>wfFx}b=k+IlcO_lnEAlohusjBH=G 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

bKiM5(y%w&KBLJ-9IPQ(Z}<0dt! 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

O22zxSHwrHN{ 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

n3Ly@JCunvDTD8H=8eAXk3Fy5__>qcc>3Nf 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

cR4@VasSJKdDA>9p!rvn!kM0TwkH5%#!`;5 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 eF*iCiF)J`JIxsMf$ozZ&0000 + + + + + + + diff --git a/awesome/.config/awesome/themes/colored/widget/battery.svg b/awesome/.config/awesome/themes/colored/widget/battery.svg new file mode 100644 index 0000000..6dfa8e3 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/battery.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/brightness.svg b/awesome/.config/awesome/themes/colored/widget/brightness.svg new file mode 100644 index 0000000..6560c8b --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/brightness.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/down.svg b/awesome/.config/awesome/themes/colored/widget/down.svg new file mode 100644 index 0000000..ebb6194 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/down.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/awesome/.config/awesome/themes/colored/widget/headphones.svg b/awesome/.config/awesome/themes/colored/widget/headphones.svg new file mode 100644 index 0000000..328c396 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/headphones.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/keyboard.svg b/awesome/.config/awesome/themes/colored/widget/keyboard.svg new file mode 100644 index 0000000..6d79d7d --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/keyboard.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/mail.svg b/awesome/.config/awesome/themes/colored/widget/mail.svg new file mode 100644 index 0000000..9148dd5 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/mail.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/awesome/.config/awesome/themes/colored/widget/monitor.svg b/awesome/.config/awesome/themes/colored/widget/monitor.svg new file mode 100644 index 0000000..7f4060d --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/monitor.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/mute.svg b/awesome/.config/awesome/themes/colored/widget/mute.svg new file mode 100644 index 0000000..f0118d2 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/mute.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/awesome/.config/awesome/themes/colored/widget/onscreen.svg b/awesome/.config/awesome/themes/colored/widget/onscreen.svg new file mode 100644 index 0000000..3a46e7a --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/onscreen.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/package.svg b/awesome/.config/awesome/themes/colored/widget/package.svg new file mode 100644 index 0000000..2f3c6ac --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/package.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/resize/full.svg b/awesome/.config/awesome/themes/colored/widget/resize/full.svg new file mode 100644 index 0000000..8989b51 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/resize/full.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/resize/horizontal.svg b/awesome/.config/awesome/themes/colored/widget/resize/horizontal.svg new file mode 100644 index 0000000..e98cb78 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/resize/horizontal.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/resize/vertical.svg b/awesome/.config/awesome/themes/colored/widget/resize/vertical.svg new file mode 100644 index 0000000..8e74db8 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/resize/vertical.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/search.svg b/awesome/.config/awesome/themes/colored/widget/search.svg new file mode 100644 index 0000000..4b21903 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/search.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/up.svg b/awesome/.config/awesome/themes/colored/widget/up.svg new file mode 100644 index 0000000..b861217 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/up.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/awesome/.config/awesome/themes/colored/widget/updates/daily.svg b/awesome/.config/awesome/themes/colored/widget/updates/daily.svg new file mode 100644 index 0000000..911e820 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/updates/daily.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/updates/normal.svg b/awesome/.config/awesome/themes/colored/widget/updates/normal.svg new file mode 100644 index 0000000..ae6dc47 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/updates/normal.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/updates/silent.svg b/awesome/.config/awesome/themes/colored/widget/updates/silent.svg new file mode 100644 index 0000000..748accb --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/updates/silent.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/updates/weekly.svg b/awesome/.config/awesome/themes/colored/widget/updates/weekly.svg new file mode 100644 index 0000000..c65d6a8 --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/updates/weekly.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colored/widget/wireless.svg b/awesome/.config/awesome/themes/colored/widget/wireless.svg new file mode 100644 index 0000000..54c08ca --- /dev/null +++ b/awesome/.config/awesome/themes/colored/widget/wireless.svg @@ -0,0 +1,3 @@ + + + diff --git a/awesome/.config/awesome/themes/colorless/theme.lua b/awesome/.config/awesome/themes/colorless/theme.lua index 43392c4..27908ce 100644 --- a/awesome/.config/awesome/themes/colorless/theme.lua +++ b/awesome/.config/awesome/themes/colorless/theme.lua @@ -529,14 +529,14 @@ function theme:init() dotcount = {}, -- redflat dotcount style (see theme.gauge.graph.dots) border_width = 0, -- floating widget border width geometry = { height = 40 }, -- floating widget size - screen_gap = 2 * self.useless_gap, -- minimal space from screen edge on floating widget placement + screen_gap = self.useless_gap, -- minimal space from screen edge on floating widget placement shape = nil, -- wibox shape color = { wibox = self.color.wibox, border = self.color.wibox }, -- function to define floating widget position when shown set_position = function(wibox) local geometry = { x = mouse.screen.workarea.x + mouse.screen.workarea.width, - y = mouse.screen.workarea.y + mouse.screen.workarea.height } + y = mouse.screen.workarea.y } wibox:geometry(geometry) end, } diff --git a/awesome/.config/awesome/themes/default/layouts/cornerne.png b/awesome/.config/awesome/themes/default/layouts/cornerne.png deleted file mode 100644 index e7fb61bb6250e5ca65494dfad9979a8957aabe3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 451 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)35=aM#78c%TSpfk$L9 zP{(x;W^~e+T>%tiFY)wsWxvlV%g-Cb)ck=doD5#NZ(MEs2NEK_?dUYj_7bChDsv^5KU zDtJyRo|f94-|Ez{d&;Lt%U*t*UUmJ|?DD&X-&Sqq+i!X$s=YM!{i;<~e}mpf)qdW_ z7V4GTX7<*~dfC0LyVAI)zheYC4*?F`UYmJ__w{=Q4^92#b<^vov(M1#T6BDleL>_j zMmeCmJy*Oue2g96?`N!>_r6_3YpI#@`6|`}Cc;OU5vG7x_KXuaCvnc|^eK3$W|1EM zV%Ax!hMm8h=BG#A7yfdO<@l_K%OMqlObzjy=DnKrj>~^*^PTJ0cd;KStTFCA-74^X zk;XQ?Us3-#Z~R!Fuu3+itkuvFV!?rQhGjDs^x7Oqjek9JL8jb;UHVQLH>;Rjl6HK^ S*?UwFq{`FP&t;ucLK6UD-mh!` diff --git a/awesome/.config/awesome/themes/default/layouts/cornerne.svg b/awesome/.config/awesome/themes/default/layouts/cornerne.svg deleted file mode 100644 index d09d526..0000000 --- a/awesome/.config/awesome/themes/default/layouts/cornerne.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/cornernew.png b/awesome/.config/awesome/themes/default/layouts/cornernew.png deleted file mode 100644 index aeaf3311ad8f87080e8ae5a2474356be9094dd06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 409 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(}T_xaPG;Ay9;~z$3C4 zsN*^aGdgL^t^f+Mmw5WRvfpQw<>y!V`eL^?0|TR)r;B4q#jUrq4)Qh|2(a{bi2b<0 z=<9H5fy*h5&>hV68cIK11v@#P^&G7D)@gCN=Lna+c9X!V$fJJ_8SwOP%iUeyeA%Sa zFzwCnfBRDHw#EF`eQs{%yE*G~XlQ3gN%ZsN(_8P)e(W~i)%?6XOQNJh9uv?V2w>;u zYp1^EG^4?>9=qeGPd{ahip-v$UiV-Gl>=U#E^o#(nI>~oK$);A|ltA>M7L3ipx@hfGm-(M-L zf5(-*^exx>tB!GZMXzZc+26F+>O@Jap(DiL14azFY7$EP9Xs XrzPv}#V=@I3{vFj>gTe~DWM4fkFb*Q diff --git a/awesome/.config/awesome/themes/default/layouts/cornernw.png b/awesome/.config/awesome/themes/default/layouts/cornernw.png deleted file mode 100644 index bac56728fe5ece81d7a57f0e971ee89ae63ccdc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)35=aM#78c%TSpfk$L9 zP{(x;W^~e+T>%tiFY)wsWxvlV%g@go@Q6==fq~J*)5S5Q;?~<)2YH(eMB2I^vCVB@ zw7H}h(bVm}tbnDjDuL;{hI7GVw?hoGUd+AXk$Ev}-+zx=)358-)*qVB)hKXl)1;T} zt5)eny)KeyGue{Xy=cd^(%Pt7>ofn~+we~8(Zg1OB$?yM_rE`1`ghj1_shDSZ2#=O zm-EYX?cLnF%s@vWK!bdgU5|R?Xyg)Vx}AhIx}tbz9AYb+3iofa*RhGx^56 zBdzJ;eTLZ#;n}hO?s81vOlm@yz`$@rjlsy#$kFD2KEv#pT$T64nK#T_8GmN?`&piE z!f%)g_sBJ@&Gh#b5x!&9a3ytFPFn8TUH5zq&VSzhx;Rqv>Ehhmhs|GAeP@u*Z;ieG z<<^y>a3^wT^BY{{Som&@&jok6gkSmm3*SjqGC67F?PXZ$v+u*5drqbxhj_aBxvX - - - diff --git a/awesome/.config/awesome/themes/default/layouts/cornernww.png b/awesome/.config/awesome/themes/default/layouts/cornernww.png deleted file mode 100644 index 93b67067594c5d2eed937cf9974466b3fb38cefc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(}T_xaPG;Ay9;~z$3C4 zsN*^aGdgL^t^f+Mmw5WRvfpQw<>%9{Rt#=pU|{6(ba4!+xb^myAz!lrk3%4PAs7G4 zi?=4HJW#WZGA`iV6?TB3*U|5j?VVOScQ1M@EzSLXcck@~d(1$~;b6hN6RO$K3?AwNmnK#o zc=U72Dk%*{1_p!fjo+B3oMVaJ!I;jrBe+}jfX@Uq4!AA`hxrU=SXyT)*d7p3Fb{fP z&#ZEs%tiFY)wsWxvlV%g=Ac|GZ6ufq~J~)5S5Q;?~<)XL(x`MA)w8aE3fM znfpLAQFmIhu9ze9>yun>4(?s-CSaiOS(ex4tjj;Q)m;KXMOmK@8Sw1SoV9CppVvw+ zmuH1C`^$eV4=QJOaM@NGyS6)P?d#otgIC<1(HoOjbmiK2#rf-QPqAYMIsyy?47^rq zm?mB2<#TXJyWeiJN^teNJncK%-aZSeh@3V{k)c7H@x|}DZL-1JayNfs-1pIT`|+-= z{2Uv&auoa4ZB&T))gY1nE~JUy;>7cJ5_ZzTH`g;oy*~G?bW`qZQHFT+6K)(ZtHAUL z;fC&d{)ew7Gbg;hf8M4#k8|CTnEl!|vY)NlfWgGY?{{HOgYXefBTgnHeG5Do_W2p4 q`e%GyzhS+w&sE`lM-zpd4n5=7 - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/cornersew.png b/awesome/.config/awesome/themes/default/layouts/cornersew.png deleted file mode 100644 index 35e900b8d774e42908894a6a90969e8c6eac1e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 411 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(}T_xaPG;Ay9;~z$3C4 zsN*^aGdgL^t^f+Mmw5WRvfpQw<>xmpv$pGDU|`hnba4!+xb=3{LBVDP5!U^FQ6G}n z%@%4N7SdI|#Ufj=u;Yne5>wrYhBww$A12+D3zopr0ACoI#{d8T diff --git a/awesome/.config/awesome/themes/default/layouts/cornersw.png b/awesome/.config/awesome/themes/default/layouts/cornersw.png deleted file mode 100644 index 0d519b5c6ce9a4b1c8c1ffea2358b6762ece30e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)35=aM#78c%TSpfk$L9 zP{(x;W^~e+T>%tiFY)wsWxvlV%P+vem37mMfq~J~)5S5Q;?~<)2YFi*1Y9rXaE3iN znVZlxBTDD^s%4E|Q&_(}xHr)^g;Dv}zl#qz^nWSOFXU7Fl4AO=wNS=B&1}ubrc^Kf~#`BmC|?kmgoz283L - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/cornersww.png b/awesome/.config/awesome/themes/default/layouts/cornersww.png deleted file mode 100644 index 2d744fd5f9e765d5ec211b17821fc4036da889f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 423 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE(}T_xaPG;Ay9;~z$3C4 zsN*^aGdgL^t^f+Mmw5WRvfpQw>^Irn$516=_I5B}&J zITfxPe)kDOk74zj<{rb}!KIVmvt~`+`i)1@-Z!|No#BBigUgd`+dEGD^N^cRyzyO~ z-A>MBH?}{Yly5)(kFZAR$DPlv?cuD;ig(CSi}))okaQ#J^~cir3^NtfIAHbw=>{{# z7MHjCHeO}su+0B3S3Bm>(hGC`X71c+CkK>u>Gau9#*osK(lkQ>NfW~)h7%Y2XM1h5 sJ+a;Bpos0>og%lJ=PbT1p%}7#-`CW&j}zxU5C*CDboFyt=akR{0DS|Yd;kCd diff --git a/awesome/.config/awesome/themes/default/layouts/dwindle.png b/awesome/.config/awesome/themes/default/layouts/dwindle.png deleted file mode 100644 index 0ec7a35a528d524d6e0d125f6f6824bc63d94015..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4}hy`|Inlwviy-d*%g_mux4x2=g^arf3F>wmTK9vgl9KHK&f z_z5r^m=$=pS;f=u*W+dD*FL{9b>AkN^YTtVdw)7PKL}m$qb+u}x7L2c_zcb|N{$sD}PJSyuxPf z1hY;j+QIaDWyAW)LpIMCFMVdIVqluVuG4+wO4Fw8&O>yq=Xp!p6kSQ$KB{an^LB{Ts5wHu#w diff --git a/awesome/.config/awesome/themes/default/layouts/dwindlew.png b/awesome/.config/awesome/themes/default/layouts/dwindlew.png deleted file mode 100644 index 8457892b1a080aab0105cbcb2b0fe92454717484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 444 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4&&v5vn%~+Ux9?AHU8ClO z$Fei3zWL`e~2q7D{St_t+P>Oz6~CkicuXg)2*62v(b@ z-V*fh7l2v*nk_(Ym)wI5^Agsuw`4P4sC&J94I=}?0i)N9&Rg564k+{n@@v?} - - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/fairh.png b/awesome/.config/awesome/themes/default/layouts/fairh.png deleted file mode 100644 index 3c2d36bbdbc86ccbe28e112c57c62a9e831494a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4v15DgKFsZYyOztm2gx9G$rf0vYJQ{JFVdQ&MBb@0BLw-wg3PC diff --git a/awesome/.config/awesome/themes/default/layouts/fairhw.png b/awesome/.config/awesome/themes/default/layouts/fairhw.png deleted file mode 100644 index 410e292e59b85db88a7eaff05a1bf0660986b048..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4Qye2SBUQK?pBVZ$yIx|^I{kk7i$4?R>9mvxDj5}h`mx~J zubj1el^=aezdmc`XA|G~^M0KwT($L^RiK<;;r;VvSHtUg<8}o0-}`my#eJY9*g%B- z7u~&IYZ+6X)qGMtUAJwuouH)kw!_CYZztYPtZ%}mg+YS*K$%5OyKBmX90lDvf9b{D Qe?aOyUHx3vIVCg!05_UwHvj+t diff --git a/awesome/.config/awesome/themes/default/layouts/fairv.png b/awesome/.config/awesome/themes/default/layouts/fairv.png deleted file mode 100644 index ad99f4b59b0e007ef34d1e2c3f9dd839c5f8749a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 323 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR42?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4+_cKL3$gSpLd?>oqy{doC_VO5aN?D*sjfp+)_@nb-S}zp_AEVBo;@ z_{*GoUu*2OXPCKDrpEa7JwuoE9as8%H`u2NZ{hqU!~#>v5FmO$O~TAkP*Z4jLj5VV p4B;=T9B|16S`EGiIZaAID)QfM*ST#D54H!%dAj2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4cM6LInLc4SZK@}&D^M&hq z6VKRF!R6Uz%o+(hnKBhCgSLbIlEO8UqRIDd@pMA}J&+}3Y4%MB8zw#K9 zdhVS$cK1K4-J7GUkDZypgl0oElgv*G-T%xFR-|{io)h3ye13{)4XcXStbnEnkWx=q KKbLh*2~7Z;*mA%C diff --git a/awesome/.config/awesome/themes/default/layouts/floating.svg b/awesome/.config/awesome/themes/default/layouts/floating.svg deleted file mode 100644 index d6b0d65..0000000 --- a/awesome/.config/awesome/themes/default/layouts/floating.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/awesome/.config/awesome/themes/default/layouts/floatingw.png b/awesome/.config/awesome/themes/default/layouts/floatingw.png deleted file mode 100644 index 7aecb06e4a95879c2daeb0b2a7a79e7f5854b70c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 365 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4-+XR*(g`=y_{+C^d)60LzgpoWC=$de8|~h4KcKm6=k> z{3k>ej!AT}b{Mi5zyAMEf5Y|WEoe44EMq9Q^OM$N-|=zgBhB=VmI-@4u`W4o*kbY` Q_cutbr>mdKI;Vst0J{Tv)&Kwi diff --git a/awesome/.config/awesome/themes/default/layouts/fullscreen.png b/awesome/.config/awesome/themes/default/layouts/fullscreen.png deleted file mode 100644 index d02f6fc339a93c92f0b238c89d1889d3da811381..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmV-o1D*VdP)lCcZQz;03CZsP%%N zFX}ho(MS2V;Ipwe=t2SiW42_n*)BVCrtNG!Cpjs-@=h`8S5d z%Md=Q#!;|cmtq6+mxXXC-tud^uJdYRzA^w$-t+D>*XoMjA6K`yDRNfws0E7+}LSGu)9``0l z;J0V+rtRX5B}n+C$XEzLh<`DZ6q!LuQYi4LB@leY8%vV%rpbBs-p1W0v_uR6a>!|N zry;UK##IyAXydgIdd?^SPD17fJ;A*V+r+zidK3VTLWbC=AhawkTwNCL-*u~ zK?r|z#k+c%6aY<;rjDxjSO^;AxNil%>2*A}=N*O={mgyGrjM@##Ux^OQ}&y@BE$gH s0Q~odrs@+4VP7P5^T9|qHa6M*0ydFz%Ff(hL;wH)07*qoM6N<$f+5&_C;$Ke diff --git a/awesome/.config/awesome/themes/default/layouts/fullscreen.svg b/awesome/.config/awesome/themes/default/layouts/fullscreen.svg deleted file mode 100644 index 573a267..0000000 --- a/awesome/.config/awesome/themes/default/layouts/fullscreen.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/fullscreenw.png b/awesome/.config/awesome/themes/default/layouts/fullscreenw.png deleted file mode 100644 index 5c35bfa8afe6c4f091f3895d92c50f845df52483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 865 zcmV-n1D^beP)DEINg2jB%EarEGlDCI7^0NIKDE~nlw6Yw>-q|E}IwOrD#hdl~f3bJRyW_bzF)=YQ%_^13 zn{v5agdfb97ocr@BminSgW?D7L;-Lx%Ps)o0)Wly$Lsa_*?c~KahMm2#l>2!c9$IY z+$Q?yGXm~YAA|m=@33=IYCA(F92Hli(KyEj&}=r(j}X5;Veye6v|6nTYydRB4r@!7q6%bM ziB0J3K(Vs{U?8~^^3c>vKz6qa{}dD>B~CU5!OIC2uS3`fi1P{?07lZQzT+F}gh|Wu z_i;OX)ni5ae9guza9un0IicbMAz&7`!3N+s&drpF{|^EFO(jCN*Z?q)+{V51B_-l@ z2;Xrv+_5nT{($eL@Y$ar{FDU|0U!VbfB+Bx0zd!=00AHX1b_e#00O`WfR|#yo{dG( zxA@#np?Fs<08*GlI2*N+{);34=?eP>qa3T7+)$MVAfdsx= zf_IWG-dce~P>DRp9nPEjzSaW}p5D0C0^<2aR9h+t24(4p$lIzs9OEa0kCaYCww2?vM9cdB~x - - - - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/magnifier.png b/awesome/.config/awesome/themes/default/layouts/magnifier.png deleted file mode 100644 index 2ea2792ecae9ad31c9fde9e144653415c503f2a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4xv_t8qb*!D6ybwq1C|9&FM+UT?H z5A}q#vc-GP)!ygtU=&PpSaav^gj-6-cz385)cNKL$~esZz;;@OK|zoSWG(|kgD|6n z|C{$4SR9IjIGByi&o}QW4_|s^%B9t7|1uwer~xVaZ+md3-2Hq1^D=5rcu(5T@3B_r z9{Uopd+cx}GTaKOzjID7I;@g=bXxBIyQqYZla?I9kX8v$*yQR~G zsMDFVZf$*C;c8pk@$47p#<$9#SONl - - - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/magnifierw.png b/awesome/.config/awesome/themes/default/layouts/magnifierw.png deleted file mode 100644 index 5cd5e16de6f5627834098a0fdd5bfdd93f4f2845..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4ub-=Gj-udr;csEQemXkGkHd|m4kBb1y zRGqq7gTBYpzwc9Cq_#o#^qJhyQ2Xreq}$=^SMT|LpXpd<$CpoULyvA-e@|DW$71ty z_vBmQOP>QB#lWBuEw6sB((m#WspL6F_^+0pUCvjTy)|f+@*@9>95bH(RDAkpsdHTR z>%H|I`HX9~o;95_d)dp0%t}uhBDPjfxaVZU#FG78VXteC?gC-A4JR2HxD>(WGBE5A zWT;NA|Lx0g=FUA4r~N;^UBACNUbgMv@-MI6{9&+!s$yVx@ZYB(`&jwcJ5#TD#ZLND z=a7|JXs@ufz#gtbL8oELX6`Tg`6A9kfh8!l - - diff --git a/awesome/.config/awesome/themes/default/layouts/max.png b/awesome/.config/awesome/themes/default/layouts/max.png deleted file mode 100644 index 8d208445cde503e0d87b2093e7037837fadeedcb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 574 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4b=pctzcxp`j&fO&(QQ6C>GkF+rq|wF-V;qT%Xi;A z$@3&v@g)BwpSCrIQb4eiVFT|2<^wSivl%mXGn`@ZtGl>NkD>UaFC!DPM{YNN!_42^ zcAYPb%o=ib#;5J;V@(LSP#$i=AZTmx<-RcIfiwEYW*kuz_nz@HQ0l-9iOZinJcJqi zgBap$)#tlQcrnZnxOiKO_kfGBBWnNy7&Rm?9%HzdJ?Fyo_qv-*7-rwzzRDx4hN0#) z=TZiNi=UPD@-iOiQ@$&5z@UCLH|v4Er#rG5-t@n3W-M@wkW`32%q@9f+I7CuY%fG> z?pIl{9c{FIQwqT6hGjm?|P5AJ5mZE_ElZT^0G>fMaK zgKa8K&o3@J?C=Q%(yQ$6qayO?wu2_WHwohM8h6A`XlY)WrHDX0xeW!iHnJ zpRSvtI^n0^zE$bPrFN5E?e^Pus(o^4e$z_l|0}-)F9^O+uHKbAVdnXm?24q%3`$nI ztL`0}#4(rQ#zmh1#zRaU|CX=Z7SN(;od2?aA~48*{$RCRx%I-Xea|lg - - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/maxw.png b/awesome/.config/awesome/themes/default/layouts/maxw.png deleted file mode 100644 index 85f5ce3afaa2270aaf11850ebb6360a02ed3db15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 581 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4jwZ_m&7OIeW7A=9_Z| z?y;Kvo_O{gkEcKe5G-k$xt(zjv%v9VlVmmVXx4b(9RRfI-|p5hWY-EmNS1|NFDHTv2xuUD9G9Q z;v^?STAk+RA0|u<8@c@t$Q;N%YIxlzfKkK&j1ELKNH%O|6aNyqt;>YdKyad;>`5=l zhE0E2f*H=Q{&J12L4l)b(OgwwhQ}qL>D&%Y1u^CacKP+0GPnw8F)yjEFk@Eno$9=p z;f&3h9rvsnSQ77ZFc`-_kI7ecD9Yc>u&XqaPgjqFHcVj6un2)oY18 z|L@-X`b;9nQ>o-#t`^UONBg@Mu5>+mAvO5vhb<3_esDXi;T2>JV1S@(M!SC&QTzt0 ze%&pSmG?E>%KC__Ti)U;-;FCFcMJGy)#IC7M4q0F|Gs>4?|h~+cTQ&{f32}(JKy!~ zL(Dm5zs2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4Faf2ZIt- zoKDyukK=z*SvR3%;ugM`-BUxtLQA_t?nmku^4Pe~*rSsBD{A8_>({Ex%*m>~G4`^| zAHo@dZo&r|?l0x7c$dbSANyin&fEMUkz@~b!f@3YgdWxvKQ=xH(d^8eoV+5+j_r>mdKI;Vst08N#h%>V!Z diff --git a/awesome/.config/awesome/themes/default/layouts/spiral.svg b/awesome/.config/awesome/themes/default/layouts/spiral.svg deleted file mode 100644 index d9c1c07..0000000 --- a/awesome/.config/awesome/themes/default/layouts/spiral.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/spiralw.png b/awesome/.config/awesome/themes/default/layouts/spiralw.png deleted file mode 100644 index d1284610d329fed98af4a56d3cb8513d0638d496..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4C71 zx9D>SI7Ls(QV$6&H9KbW#JKQHtj1EkKoMKppV5C0mFXGoug<7hTl@Iw>HDw5Zy8m+ zX}q<0zZ_FSFcZ*agut@kha2A1d}DZ}o#QU>Y1y0n{bf#((~hM#Keh-8Ue qh^f2q|L={@4T4`wi{>>5L~XOXZ=bf%XnpitkQPr@KbLh*2~7Z#yPWX= diff --git a/awesome/.config/awesome/themes/default/layouts/tile.png b/awesome/.config/awesome/themes/default/layouts/tile.png deleted file mode 100644 index db1ce15ce2b237692877883d8898ceff454c68c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 353 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4 - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/tilebottom.png b/awesome/.config/awesome/themes/default/layouts/tilebottom.png deleted file mode 100644 index 73a72fec53590d7450815fa3106f7b92d7c5b68b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4ZkzCY99QzkgiZ-`G5kyXJ?=%J}os@)=4G=GSayc@V$|G#?5K{$^`!P2_Y4 z*Ekdq8Y=E7we^{r#qOQCfA^T0AG~=s_x1C&dpXUjt9tqRNz&Xmq=s^1f6<~aWlLg_c|1mPavfJ=^5Ov - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/tilebottomw.png b/awesome/.config/awesome/themes/default/layouts/tilebottomw.png deleted file mode 100644 index 64aa289e0c54a233d412603338955fcf1f52b336..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 350 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4%{p~+266wH8P-LYlm6!xupyqV KelF{r5}E*f4uVYp diff --git a/awesome/.config/awesome/themes/default/layouts/tileleft.png b/awesome/.config/awesome/themes/default/layouts/tileleft.png deleted file mode 100644 index 829475a85b64961dffa0fbbc6be2a553ae18c1f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4vXJ^;lxiPDFOXcNzNyv}-$V1C1QzYW$vVuCC} zKaf?+@Pfrv{e^i+la3>U8SmVLr&4ntbX9`62!)TBD&Di0&lTS&Tyob?$SLV5XVkAu{By85}Sb4q9e0P8S;a{vGU diff --git a/awesome/.config/awesome/themes/default/layouts/tileleft.svg b/awesome/.config/awesome/themes/default/layouts/tileleft.svg deleted file mode 100644 index 054c63f..0000000 --- a/awesome/.config/awesome/themes/default/layouts/tileleft.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/tileleftw.png b/awesome/.config/awesome/themes/default/layouts/tileleftw.png deleted file mode 100644 index 24c3941005e39bf5fd98586efd1964e9b7d22afe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR48tz-JwpBh=OxZfER1k_7$igwRIBfJz2}{k g<9k_U#U<~}U&Kt+c=T^vI) z?!CQnkdw(!#P#Cu%Wb+rtdNVb3GTHM=VdQ?`)T1``5ggTR&@U`U5VR zA9~ssrlsz*{eR|Kc*E(obw-Zc<;~od+9wt6A$^O$(YaNskOVx0#p|O(h$siH^uFEp3$)x{xff; zY)WU1x)SyKiOvMey>BGg^Nhd-f)w6teBD@f`mpm!KNUHx3v IIVCg!06R2$-2eap diff --git a/awesome/.config/awesome/themes/default/layouts/tiletop.svg b/awesome/.config/awesome/themes/default/layouts/tiletop.svg deleted file mode 100644 index 0520432..0000000 --- a/awesome/.config/awesome/themes/default/layouts/tiletop.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/awesome/.config/awesome/themes/default/layouts/tiletopw.png b/awesome/.config/awesome/themes/default/layouts/tiletopw.png deleted file mode 100644 index d2eee79e7af93ae9f313f0feabe5236f6b49949f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4FV2Y(rTWq&U?q ze*gQk0nhfApFSjpi978u@hv{DxxR1tvJbDjKFoZ)$!ztWUsoTrnZKG69T)q{yn%s< zLjgv}`T0tJx^?H%JeD)=$ENaUPTv~&lu<)^Zi3BH;VYcKgjHY)ITRLzFj^h-Qs-D8 zu2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4A2G&JqoE`u1C6ua+jv&{eQ+VH5m%4N2BZym_paL^FH zt!wY6NOp|N^)U#i}Hog1$A=69Z{{+!~lIz|Qtj>)sX^ByW~S}VL!I7imXk_ko(4nwpxLnr9VJ#Y5KC)&i~dtH1(q3V2Bfu}^Eg7kD1HmwYmv*#!#;Mjm(ueWD79IgN_xs1DmJ5y6r$Achv z;3}Z!DiA=U(b&>jUjWu!#!a{{gm~Abcqpk4xO?~R%R-1{;Gm}(U$%M+pL&i?9+wH!P_d%^z>lSbx*mz2@4d84M@mcF=Z9p8yhm=w)-EQ}I_G*m@ z!|_dgp67i498*eNDPlsa)w-pWdUA*? zJk&)|G%uyR0vwZ4zHfV7VWG?KztTlvM_Jp7#!q!~+CHGa(VYL_zU!9G`eXJixx`>FKv^?zhT-PN#Df zczu_j3THwQ;y6CxdEPRQi%(e&!*IzI!)QRi-=7%_1~HSf<$p23ARb`kd0uE*J{z0B za5#L;P%cnPU5TP--W1Cf7UBVAg-gA$uV4)Fl9rUEtwWZlFi-}iqu#WETY1i>2c!-StpPy0!jnuFH*YNOHU zn&Q}QiG8!nwZd;cj^mR>CQDDt1R=z?HZiOW7>!2X0b4sRtux-q$^GWzI6mol-m;Xk z(Apu%geUhHw??DUC7b)L449prT?f8Mz7|gVWO|#P5ge9MUQPB0bFoWv_&lkz5$j!H zrPL?DpGAB7^v(15-2MP?xu6N@=x|2}@u}^7nNEiK{r=t}=kq(nPdXjCr<6L|ZnszR zJ|k-#D?1vq5TCL^!JXnPRAN8|@hO#=P`Uv*#HUnZLa7E65T8=I38nl+2Aqh8N27yr zb2BfcWPl^_JJ|rvg<*KZQM`vZH=qRZDW#a;)PR1!zjrVg+y>@c#@)fH@B8zOMq|rd z)DEY8KoA5Elu`>?>yLo@4nuDNpGhfSaVZ{390j5%Iw+;Q09<5zvYgfIk=FW}5aR2> zVDSCi+?;WLFAtSWgnGSRb2uEHVSHA18fY`_;ST^>2(h8H-eA0kcLTU7rTnRizsuLu g)YR0})I7WV2a$Ujsj*Hlx&QzG07*qoM6N<$f{06mX#fBK diff --git a/awesome/.config/awesome/themes/default/titlebar/close_normal.png b/awesome/.config/awesome/themes/default/titlebar/close_normal.png deleted file mode 100644 index 770283937d8bc4abfa0bf791a51c1355eb5fdb2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1419 zcmV;61$6p}P)gnq7KtIVIwx{~7`u+N?s;;Vrf`WpAf`WpF6*Y`X&YnFxy0*6VJTML%0-gc31KWTR z;AZ#lXA!v!ToRFQqA2<;@3!S;z?m~=b_78%4V)5@mw-~r5C-@h_^{n>pFVNoM9X_4 z$-#h`nVGFywrqJ-MBV^)cnbSB@IjI!Z%t26|L!R!;MstgnVGF4BO{A+Qalf?8)NoI zQFPl^K2Mo~yj^!mDhVUMc!Gzq!!;oHt1~6eL;$cVz zKq?c4CLU4_g6Gbidvwr>qA0qelsX11KcLvMQfe}b__S?wHehykcK7P)>SCkO*q^>x z9jevpf-z=-jc11zP_9<13xmdw<9KX!b#<}XY&uWB&ISZQ@H(*17;_ zMYcpF(^MD7@tD^70Z@LGS~xwR`Cgt@T8uQn{ACsU7C#=Eg?{^jEvx-s`e}a>{@p2wve|@c^S)Gof0oE-0m@vWlj&-=53s#d zD!uG-zf%U(>-CGkiyQouITNx_uh$O%^V}=G$9x!uQ??jZ1Deg|<4Ka-pntafFD6*T z1FR)U@`P>qZ0!Q=cKZcOxlv=xg*cAKY_WXdAReF;1i=woEUN*=m~n?TjcTpuhhc)F z_#W1_TMf`!A9AP&x+Y{97;U5!kBA($m9ZKiB2T+i)+M*@kXAf^QtByN8JB4=?Y^G( z?l6e>E<0@n@-P5Anvg*}crri+s2CtnN&TJ zxCl(rIXFqngI1nEJ_dLb-y?$w*$q%i{gk4@C1Ap*_#R;xE^4i(NU_l>A~$ShT&6+S zg-T0A%3&CO=U6^9l}hC*Fo9zxXsxYncj*Ey26#{Vex&IRE)UOYKoA69(mAN?M{a4~ z56A9cwANqSVp$C+m&?BZU-bDo_q6YaLwC4XsZ@To#c|pY5s{BKxSaXPHyVwDSzeYN zlnF|yPh4U+8L)Zt=1+l@b(fZasVq;v(P$hr#>{K2Gp!vemCDr(_83<-ZQ69&<$fmv z%H{GB@P7B-%xPb**AEzDdS?WCwAL5r=H^_M-5at&cX+ScW-HFS!by_64g8pOv~M&T z2l?;2{Z0`%pT&fAv%~dLsq~KPeW^}{;yB)x<$S)E_Vhm;x(Q5n#SBE+HV*A*%t3sQ z<*Yl!X&8zDDa7{}nhCiZFo5_TLop#&12Ty3k-G`Gd?Ev0#6x#>h~wD0xj87gWPm5} z>sdC&9F3yrvZr`=@oqp4;(O#`f>#6LINqkUz6R{|8FwAu-??*VtX8Y7*o(U1bqt82 z=ysAM2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4hzn9UcS

0?x_v>3r{R~0 zC#0&U=g_*pE*aS@o*@%2t3-Kw3AhHsdjli%Z7i<^X+OFc61o#dGTZyajTVm zVkmg>?)uWUROW;zb$$ke%}IW>Ogd7m3EUe38MZM<6Tz5myUl^~*0x&af<0dg)6=#q zwmgrmp8kh7V)yUhyo-~V8Eo%m>exDnvA)>&Z1b+8?=_!I*~`7-_tKennQ!QqUYNMY z+_yM9E8^SNA2L54nsG367{0SPzVr|Knzp<-wGC4)X*L{Q_X~~P reylRwuReF?U4ef676GS@&d2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4PoOlJh04uVdlsUD6-VMHwEj==eu2k4S$-;@88{d)tdV#gP`G+ zm@lm|g5s}aJ*%Fc4|pk7-}XoHmN`BXz*f|^d9nYIoTTDe{guJ>y7$5CjX|zJZ!&ng L`njxgN@xNADcOMG diff --git a/awesome/.config/awesome/themes/default/titlebar/floating_normal_active.png b/awesome/.config/awesome/themes/default/titlebar/floating_normal_active.png deleted file mode 100644 index b9c70ca373a758d31eeef80ff8dec9a38705bc85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4SKW)B%;dzO*z#ljjSEczhg2Kb8D9UfIy~d1`~C0FOJnyho3UMZ zW15*bKf}Aa2$7?qt11l{(~3XZ@2ECfK7*m#jqwIkj!1*<0b&?w({(2R?T~I*+&ewG zeE-T-uU>B7>-~>q&Dl4F85bupGYFnHnI@MYz}gY*^}7CHn{hMi&Aqk!0!|i%-2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4RrB`n2@J{hOQIi%VNnJb#7nG&MN? z*-~kppkc|bom;LgE0lSEWN!HKLyP7uR8nd?v!}5wVDx diff --git a/awesome/.config/awesome/themes/default/titlebar/maximized_focus_active.png b/awesome/.config/awesome/themes/default/titlebar/maximized_focus_active.png deleted file mode 100644 index dad461d33ccffb8cf3e13cfa3cc1a9e05a3bfbcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmV;p0!RIcP)Ji{duw}slu|R-W zz;U4N6{>88O^kRYPVDhGzvaqga>5Gpt=O9@PJ$& zFd?FAX5JH;ua#yEk??^1DEcQm!9o0c0lEJexdHH;IL9tB{xOnUz%esl#@<0Tr~RSu zo<5QL5{NF5lBKQ-jWb}d1g-FZ-XYjqf@XL?w+aL$Xom;%%V4X765)X|eZV&frNRSc zTj83S=R{N^WB5=joVyR`VnRgM&2#ln-qYt2c+I%}7V?IF2@MDeAfhwmm5_^mCFlI3 zOWmeveiuctzkGea-+x#xmzxj^du z3rtOdYj^;U(_o*37F1FlIp-Q?_i>Yw;l6vg+p0pIWd0d9oy zJl`VXZQGa-VkM<~;+)^P)NY#QS66tg^+pKc6`mjnV$45B*Nm|s%}*g#`_9^96g7m9 zFlKmwI1Lic62=Y>5U)kXT0)HQ0CAh721|$)9w2_3T(5+f;Q`V#N_I+!9UdTEtL$GA zQiM+mBCgMxrDu2T9t1?J5V1-<4}u^Ff*}4+-T)v)L`^aQ&@})6002ovPDHLkV1nM4 BGm-!R diff --git a/awesome/.config/awesome/themes/default/titlebar/maximized_normal_active.png b/awesome/.config/awesome/themes/default/titlebar/maximized_normal_active.png deleted file mode 100644 index 0bbbf6abb07aafb8d829a43b14d7702ef0de5dc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 693 zcmV;m0!safP)Q@99R z1QC(KK8}3|L(RAmlNiQ|yWHW-+U5h)2-Gb9gOYNpbJo}bq`!B)*Ipy#f4Ez zzz#SMAzUlf8)SbCweFxHpt{x7qS+$n3NR0!(ULGnfLr*ChJ;!H?%^|YCDaI5O!&+k z2~!0uE_|j|!W03E4WFrz@ZxrYA%x;t$Nx+ba12~+x7#>vN_M1_&P3!Fup0ZDssDh* zN~j4Bb+^FcB-Dn7`ZZuN66S=5d5fUCgt_5ieiv|)pb;K)+Mu}vt?;0?4>$&XipZ%_ zy+K6eR4Y8_z7$;nUlr>Op?ZxMw-cPos~6DvT;M8%a5JZXhJ5gaYSGCbIJfuaQK@L=Bt2PJrf2cLbw6A517 zp?w=1B1>3@5O!YS!A}7Edw>F`@G$NcxNCU*6>Y=cmIjOwu%WGlR@{on#(NT-PN&o9 bbe78lh1(g3JCQ$x00000NkvXXu0mjfz0Mw% diff --git a/awesome/.config/awesome/themes/default/titlebar/maximized_normal_inactive.png b/awesome/.config/awesome/themes/default/titlebar/maximized_normal_inactive.png deleted file mode 100644 index 5f1e98fe3c72896e619d63afa5c472eec935802d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 695 zcmV;o0!aOdP)3@&SS%2!bF86)?s$$K&yH%`s4|7aL<5 z03QLsTKl-$?cUcIM->52!#iq8U>9&HyrYH$RsmDt9o!Pw1o(t^a7thi5E9DfN6TpzFGWwf0ToD-K%gcTXSmeSb3y!=D_h!?Tn>Pc3!E zn7a(&0pM-hwzroWi0D4`JRw@Z+&XWqeHGjH7$SN-(Uv43N>l+w!KwKy^QI17>1vh z!kmcSb8L(O8Dv+W1925gCGck dAP53G{{ZU?L7&Zz#9sga002ovPDHLkV1n1TBJltK diff --git a/awesome/.config/awesome/themes/default/titlebar/minimize_focus.png b/awesome/.config/awesome/themes/default/titlebar/minimize_focus.png deleted file mode 100644 index ff427b36f616c0243ec05544db08ce78fce05340..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHj>ko3Ij7ZnahtP-u~-i(^Q|t+&@UavnAiU=5fn9qyOE zb_VMl&P|SPTYj%7TKeT63p-Ee#pAt0`Wav L{an^LB{Ts5esO19 diff --git a/awesome/.config/awesome/themes/default/titlebar/minimize_normal.png b/awesome/.config/awesome/themes/default/titlebar/minimize_normal.png deleted file mode 100644 index aa4744730757534a7d4be08b406e12fe0f4f9ec1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Y)RhkE)4%caKYZ?lYt_f1s;*b zKpodXn9)gNb_Gz7y~NYkmHj>ko3N_Rzc(ARfI@RUT^vIyZoR#Bkn@m%2-}1GN)<(0 z$^^w%2)|&_yL7SWm1f*httAf@9(`}kdP$|$UU3f#P!|yVbGrWPp^5KwmF+6ek6zi+ zXyvE>I4E1TJ+Weoj?FrYC&3?2AKw1pPU&4+&tQgjQ|b3F(#-$Aet7>r10#n615-w5 zSxETLN`|f13e^>-s9c|4-W0#<@LE&Hm%r=yAU5o&WJ-t<-;%lHP#s9X)78&qol`;+ E08>L`*8l(j diff --git a/awesome/.config/awesome/themes/default/titlebar/ontop_focus_active.png b/awesome/.config/awesome/themes/default/titlebar/ontop_focus_active.png deleted file mode 100644 index d79c8e29f2b1d07b29f395f6d12b710f0c59591e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 609 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4(Yqx1~dU@vyqt`-jYmIl0 zq&4!ECY`V^Jr%|Az2v0IC;M`Xo$4!}8_OU1Ua#<-PrTrqix5 zlkF@u7n3(7R`X}KHGR=OQ`2+ycLl=>-P_Wg+zc0jJ2rj_kU9~0VDB^T4SX9&BBpI_ zxIHy|P2Y`qpY;k>UJjBIjP)>%zI33*?tcE(sQE!&vUArMb!12-+iZSU@LKPA;g_qQ zde_D;aKEh2@P60bchi?Goa6j~W%l=v3Q>cXzWYpp*@%{iOqAM7R1kR$%$q6xQRPg2kQ*=;(+ob#HB9#{w%mTe zc&>`@`K66>Sg&v?hAq3)u!BKKifP7*CsV#w-+VWx_?+c;|MH-$ta2@fKZ?NQz~JfX K=d#Wzp$PyS<_2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4)i=vK3Hyad+B5rb+nJHx`YBWV~go#CWYNRi;f9T+Gh4R@&~x zv0C10{nmfS9tJ*-KVW%mM)JP*`3x3}3-}X~O{8R>7i8{j_*hZHaloqKva$Spt<#^9 zWsbYw`j)x1;bFm!dZU?pSPRO|T~D`~dv3Qy-|k$itzis;KljGHH*N41-N=16ue`To z&3E;68A}~^mWhgHzIQe#w#ys<<#@>%vC6eW| zmrg6Mk`=sbddw#4Q06qZ`m|#+7#UtqymH8P?N@GbyU!VG7?RJFGUPM-_-~oz<+A;d zK}_+2uj0KT6PCSnJ^%S0^9u_p%RsMK?xuvh7x&m(=r7RdD!%;ki*Q48pZkA?g2?Q> zFN;=OW}2j8`QZ0IV+Qxwb8{b7M^5{`SmW2t3pI{6vaj4?zGU*YdfxG(n7`qtHt8(V zIF+;0O5bf-XU0;$vgwXqE886fY*unbil_G6WGc8ZGi-NG=GyAeMyvEj*H{~d2>A^g zY=mz6dNAH$x2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR46D=VQy((DE!*wl!prbj@K?(h zo&{kmL-Z~=P5UjPv`V>}pPxaP;Z;nB?1SIUo3bWx|KRzs{3XLB)+HnnKY2cUe63r@ ze|xU%0f}O{W!)XddJ`Tq?TyPfo`1f)$1pk3>gdBcuf@1pg4d z3nUi$d-PwswKiyF$xN|NmMr}f_O`P(Xg-f==KdMeJk#n=UBdmW-+Sct^Idj5A}XG+ z-cc!P`?Yrh7ei+FU9|b~`!DlLA)tZR6P90|S$^&HHCCNKO41M zJJyNU`kPda*=%LcNjc0j`YxzTDD9HxVQasd_0?AQ_&mm)G4DhUcx_0VD3Lrt<)l)> z)h%<*pMSVCVeO;nXH0h2A9yz?1?`GCklrA*?_bqCQ-7C`$$AT?1bMA|_?7ed)Wpt- T=Z_@=69$8)tDnm{r-UW|eKH7< diff --git a/awesome/.config/awesome/themes/default/titlebar/ontop_normal_inactive.png b/awesome/.config/awesome/themes/default/titlebar/ontop_normal_inactive.png deleted file mode 100644 index 9917b9e54d8d8d2db479802eb0c4a17ea0d3c554..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 769 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4}&0Atpg`|tbQ7F#p;MFg(u`@ZkJeTl9jM>5CZ0!5y~tke096+1*`tbN{* z(L6JI-t)QHX0zpEDl9Y|vTIrF%U%TA*H=w{{`05b^3OZ7rYqGqhjAYMz+k-o@%cxL z50*TyT>tCuzlE!6wR9CYnr!Di->b05_;!q4?CPs=%QAPZ_ga36i=*kl`s=UHGsH*< z@1Br)GiuhdW1l;9wKN-MuDqDBhG|EX!o72w-e?+!Z?X>!a+suY`b?7BrUMX8B#*yK(C64a!KwN{g29aQ zpZ{dsG%`zk=I^z#f7zUk4H{iyof$hl%1$LH?Yf<{Rj!9yvj33FmX@2*HVgvB`ZJwe z@3HblO(<;r$n5NB=(K@#ZCawWrNk15Bzopr0FgRO*8l(j diff --git a/awesome/.config/awesome/themes/default/titlebar/sticky_focus_active.png b/awesome/.config/awesome/themes/default/titlebar/sticky_focus_active.png deleted file mode 100644 index 80194630bef14d6dfee880663c6caf13063f5e64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 717 zcmV;;0y6!HP)WM;~S{!ukl}MfBi~8|)d_Tb9)gAzfZ}*l{&WCYkDDNqwgo=Ro{MZr4P4!F!%=GU7bEewA<_T4um9~$B_EkGMHAXK0{&+pcVcilO6TT)L+$P9R0qwN-e7g9p11i1+1dA`HU zpHa{7SscgP-EQ~0lrA7p1~BvP3b9)A`CL2;#4}*U)h`jx0`UxB<~M7^X?gFjZattV zihJJsPgu|BIWzC{`~9y?>8c`{0p9z!4aA6vNbD?--U3aPvmZA!&Ob;S(9{+a+o~IX z6&C$5!pzUHVD*UT4uB_>_xIlWp9|X7ttT!`u#(tCoO9a%zLf8+Rx9mvI(cXvYFl7B zon|;Mk)5{N?LtF`ngOHH=oCOX>5Pb$trs?m>LEx(+1cX{Ee)y$FmrbHC|>_xg!X6f z0Qk#@;Ak6=0YDT*o0$QXmCr6|CW@*7-urUpH!}k!lgS}~<0MIrGd}jWDBeA2K~RdQ6i;faf_m}f!3ZTtjk`0G9NKCHv9+7$!31m3noVZX z73aH6X5O1OUnaXV0UQp8!{Kl^91e%WkuI1yqm;U;l-g=*4$oHNW?^PeYkeKSX#mf( z);%`nNv!~_^<@Ajs?82&er#hWq*eeC^)LEJz`{;QrGRp|ypfqZf78{$%wr}cq*6eo zQt4Zw+o*(83Sj2le;Hy-LMjCSSZW8UX>)ECMH&8v)MyLbPT`|0P75;t^jxo;CZD| zxt7c2UMEdpRX`L)y`JX{0yqp{jiIz3i0C#Ey_lVyec9F3HQh`yYXYQ{+lXisK)b=T zMIzcOgm`Z%p_PM>QffO9jlt~V-!XHa$;AVf1jKPX1K^9nltm&s;QM}PFedvw$h~sz|zrGFPI^yoxtLi7#1t_I10N7J)GJq>Y)JsHaiLjZuxw%KS zYXd9`kWwBcqJe7jGZFQ7c6JU3A@YBDJ3Q#_?*3}Cwi?z1L{YSvh;HJ?S>p{e?+`-V zsr3gzP+;c$f7l7upZ+zh2nfS)wdZ-m0M-Jy<$2yN-}lECkNe#@ftiPd5F<9~Y8gtY zA*IweDdk{2~bRNASOdRTq$ z|6de~#q~<5lgyl1?pl_G$;rvJ%Uy%R;cz${4u`|xa5x+eM?HK8jdf87>5Eus00000 LNkvXXu0mjfxZjx% diff --git a/awesome/.config/awesome/themes/default/titlebar/sticky_normal_active.png b/awesome/.config/awesome/themes/default/titlebar/sticky_normal_active.png deleted file mode 100644 index 0d003efe1d7ac2fc2e3c92019ccab630ec4277ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 726 zcmV;{0xA88P)~!50ZL8TKNqFCd5)(Sw^^5Eu5i=xhk-_L9L-6Uih~T`sBbk_=2${rRW5 z)2RT8q9}@@D2k#eTL^I%h~xMOz_krhoP}Z7Elbaz>~JN{aTmb#4dPGB60!)xnfxl? z!+;Cn_HU0A3ahJLvU##~ga{c>5Me)AR)Zx8m*JYqi=dPCXgk3>XXsDONXN zTCdlqoO&|!93U+~8Z|&#fHZ1=uR_D&@OFWE)g(!7a_Y(OWGn>sGv5CpS z{#yV5qA1!Uq7Nu$_>_otyWQ>=E?t194j`g~HELA=uy+A_2dw$@GuXSpM+ZFHpiad( zcXj6hNs`>L*1pGPM$fFZd;Na@Q(3z5uy%lR?s*9{0%Hu@UchZYS>x=mq&$DYy$6)F z#MqYV)*pqr{}|aPqJ>Y-T6>F#?q}D|x!1;+uS@b2ohPo0my_Tk;yB&~@G-ltR4O-G zt=2c+I>eShwOSqH*NE)0*=(Lk=nylY(P&%($UgL#h*q5!mWuQyIG(?rNC^-%fQZKP zx9s!(Wr!MJtvv>QGr~LnMF(U?NFdz-V_=Ir0Q0pU1i^N8z+^Hx1#r=Bx6dVYh!RE7 zp=5pOB>-d0ThaQG#R0%McO+R~+<-Jq-$`pw6h%=KMNzhqpWFD7Phrs*nE(I)07*qo IM6N<$f*zPc*8l(j diff --git a/awesome/.config/awesome/themes/default/titlebar/sticky_normal_inactive.png b/awesome/.config/awesome/themes/default/titlebar/sticky_normal_inactive.png deleted file mode 100644 index f1e8789233554358b6a22fd3705573b0a5eea28a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 981 zcmV;`11kK9P)JN6iF1vzps>WLQqjyfnz+ss?a491e%W;cz${j_(lq+6l}>5Cn_z`TQv&IwPfg zXk!gwL(~Mm?~9I(j&nrx8-QC;6m7P#PG$}0>FGHIV5BzeBBD{H)F#vGWYz#?-uu6g zR>49iWYT~nN!9^a-C(MVh;EoPA(IBAY1%u-v{4f>X#f#z|H322Ovt1G0Osm|Iz~*$ zoB>LyLjX3;^YI0nkg0=Et@x8IguYHh%i_B?N*nV`130_Ac! zKRrFY3&1Z#BmpcpB&`8F0B~Cfakjs||8BDaRt-=}braEHX7&IqH6;6lng0TCM+ot^ z=Xoy|B4+Is2*Yp-fH7uXX;5}5P1C-ip`m|F30moZIF5g0=1~AE49Y&PR;z`AyTM*#W&JZn+nn$6;YHrxiKl#>7oXw8HxhST|kwp@p$l#|T-N0VXy zRw|V-D+$e_Ee3>P*hNIgn++Qt9)4>jp;=frpj<957D8OY$G-;EFU1kjReM=|z`6l5 zGc$hz*ijoYfYZ#}4dD44VXrznJFnZ$4X|uL9LECy4%UX#M6_2*d9Ze0@5AReMpY;j z-q_5ojx_^HrP2mwzJT{ Date: Sun, 20 Oct 2019 18:01:55 +0200 Subject: [PATCH 5/5] correct top process place --- awesome/.config/awesome/themes/colored/theme.lua | 2 +- awesome/.config/awesome/themes/default/theme.lua | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/awesome/.config/awesome/themes/colored/theme.lua b/awesome/.config/awesome/themes/colored/theme.lua index b8deb28..bf4c226 100644 --- a/awesome/.config/awesome/themes/colored/theme.lua +++ b/awesome/.config/awesome/themes/colored/theme.lua @@ -174,7 +174,7 @@ function theme:update() ------------------------------------------------------------ self.float.top.set_position = function(wibox) local geometry = { x = mouse.screen.workarea.x + mouse.screen.workarea.width, - y = mouse.screen.workarea.y + mouse.screen.workarea.height } + y = mouse.screen.workarea.y } wibox:geometry(geometry) end diff --git a/awesome/.config/awesome/themes/default/theme.lua b/awesome/.config/awesome/themes/default/theme.lua index c56a605..f99ef51 100644 --- a/awesome/.config/awesome/themes/default/theme.lua +++ b/awesome/.config/awesome/themes/default/theme.lua @@ -44,15 +44,6 @@ theme.widget.wrapper = { tasklist = { 4, 0, 0, 0 }, -- centering tasklist widget } ---icon - -theme.cpu_icon = icon_dir .. "cpu.png" -theme.net_up = icon_dir .. "net_up.png" -theme.net_down = icon_dir .. "net_down.png" -theme.spr_right = icon_dir .. "spr_right.png" -theme.mpd_icon = icon_dir .. "audio.svg" -theme.ram_icon = icon_dir .. "ram.png" - return theme

d7Xk(8p9NF+(9 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%0A0AbI2 z7_yHn^hm^DPCo0nfQ;yoh^MJYyrDvf zbPBGc06~ky2spOQ0U#1jC~iq00MyBtRZBm8$%5)%KJryl(_>LxDp0OzS^^OCXcUEG z+QQQy(IXMXEsKK!&^3)J*W~_fMGS)gAVKB26{F_OSbAQS*8SEWf0h*y9l2xXfG|)J zn4!4kaHRm45vSnTwv5DLb|DKaVrbMZ*aOFQaaQw{oMI;${+js zS1cnQjp_)BTRF$&3XtegLclB(Tm>4_qp>I@NCTmB72v{3DLX&t3Lpd{iE^rJ%QOLz zFvBpSl3Rs*!FwKrQ6&T@AewGOA_4mB$87=;Z*PYAae6<;S^1A!NU$t~03003x2BCcg}07mpkEQTOmyP%L7(YUTtr;y`Z z05Z*BRxX2DTw|mtvl;9F2+Fk`7eGVQnX+AoMs>$@h{kj#EmI-_)hH;b5Iw+wXi<#_ zyWl7Qs%hR95SGT^mT7aK1f+y$B8kGXOcymx(+Ky2vLF>kqEXk(a4xAHi9`&ikduIj zM2p6CLkHnHwhe^ou>_+bzfL)3PAXJNDj`sdG38j6setIw1c-uZ@<=S|y#GJE6-eqP*SS+waSC4JVFOy z2tsiekfM^lN<)B=Az=uC<{knl8FmGrp8-%B$}E0O$&@Gsol2IhhIzAE3Mqt=JdCjq z`H%uaDbqBn>69_T7$Q-AyhdS(TN3OeQmUZ*pjREiw?GL12*G_~vy?&#R|u|@=KU5H zYgR)Rfs@8PW6Uw_hrjaBLk~W93V=S~Cn=ag{Hk!cm^{5uneM5F}ofehHS~neP5?O1Oo5UPxq=5LDdd zNEt;G+;Lqly>6k5QFL7gsbLrll;SSuQUZWxL^PDP?P^9;qeKQoguvRB+@n=Lp`-)^#;D@1kYE^5Mv*&? zD}++OG~K(OkSh~DyFgjh3waPi38ge(bdnJB^NJ?>d0l{n5U(B-APONk_W@HOB!Vz= z1qUFWNXB%`=kwHvM|J8Au95^e?-GE3%IC7E#bOcW6!N)(#UinIED|tjLpmt{KzIY* z=vJ!K2=(7Vz>xG7+HC|0WrR^m86lK-EZY*=ZwOq3#G$ar2nqd@@OZz%)zFIMC7J;c zxJ*Mpv0}n^V5RyW3B9wxT@GFC;3h-ArNmY8hKdYacZHH$1xF>~F^^FTzW6PKKBDx< zgHi|~1@|gyO9;{r!@Da1pnY!{i!Lw#03kjVx)gvG#c@>P+X4_@N2ByU0|s<4fsm9G zVJT8SJk5<@UPvWD2KY0ml7SJ}=|ad$=S_S1{Vkf#Jc^rCAf*&ic^oe9=EG}4KqXy3 zN+?D2h*Q)DqI^YLN{DCmdwC{`Q09#a%BXMpQ|ga|Ku$LFqapmJ;&_G9H$%6kC^h0E z2|jeJ6o3!bDnO-#07Co|N$$D(QgT&{4*E%!A-UQc#vUpVoQHZpdQ&oV=8-T;spPJQ zCkWT!Qc2U}FmE=N(Lm}YBdykP2q@)3F1)X1X9s|!x1r}!X+ zkPr?V!4(in2`B+dc*G00Kc8WCVvmZ8#;sUm^&AQr<)h=2-9$gV;ieM_o+g@HoQWsu8Xs zqJ#k*m=%8XD~u3&m|pQT9?RXsg1tDC0;L3ZIn|?)ScITbQW44sf^Z#|b3&+;TyXC1 zxIqd8fbu&;3NJR}b)7ei0gzCJ#3$(bRs)~{2|y@i0NzZHUMKivETSZYP(&rY zct4;geI#TsR{;s}>O4?J2zWJ82#pv~>AJ3`treQ(!FKGAHgB=_Ws_uZq=#t|f=TZV zT}LVaM!^!=vh%JR*!jlRBN=MYU`eMH)%BIBnBrE)iMG6@0s(q&kM+Wmf!Pw6=-?r~ z3ITvS3J4MeDF6xavOh?mIV*W+P$M9C@N{SbeGteCJFciPskC7#iWlme2|iCFurPw_529{R1i8WY zs8z@sQA&E#(1Q)CD2stSZdr~{GzeOHcSZc|2$Yf^8h|?0PPJ3*R6EuF*_sc8Nh!VR zf1nfsA=KmR1Y|#?1f}N)DjCL92@+%k6cBqsER_nU13!gXQ&&E!E|OfSJvt(-}u9;`{lEc$`m#lpyyU zYb4Thy1l+2A)rGL0R#Rlq0DoZ6@cg5g;_^_imcZyUNW0PBq$uyQjy`K$MZ~gdq-Eg zz^iI&h-=zhC8`=~D^m#4%%unV`_cv8G;%D>cenQyqOo{IZDV;N3exF1aWw7dt)oX| zI*<07!qBOQ26!Nj5Ry;|u5AlN2~kogK*kV&B+4o^MgbIeUC#Z=#)J@%5J^?m)mG*E z+S+=ulG{p4l*RRIwh$y00ss<XU>#z#Fx2rSfU}Zyd zSt6!{)z#LPwI!+mzw{haN|cgPpoj7yc(5AtG;Ik%DZPY7kV*;Hk%|x+u*H#R8UsY6 z3;~2to{LPtF-2_U$8Y`rvG?C`b`)2;FuJO$!_Jd)(nuPmQ5@ww%2`N4A|rAJlcPz- z7-MXlunEQ{+XRzAAQS)z<(%V4BaNiVGdu6z9jfa7(P8hAu)p`c=RN26yH~~h(990q z)!h}=de*a^HM$(V|N85P+L9ix-^BD00GK$Rnf%Te01$#zL#&;5aqQsQO-EaM4WG7n z&e+pimVdlz3m4^d-@w6fQ%0VdBWD6Gsp?dY17qV|jA4X;SdJ3rwu_mvA}uV{WcpZ6 zxm9P+^#4;3qJxg6krV9qoPRC$4%i?`+C|uS3D{q@Jv)xlTtI{zWn8(16`KQIwb;wV)nT;Hpm&NZ*d9cj!EYr{+ zZ09gInUHp$Y;51cUQHOcfH-GB!Qye6gE>WWG@rg6Z*K`RQF0LklroMH z(^;C9r4#-&>pU`3sS5ziUrhe6mW(+nI9yLAH9)2&7y^4|Hscwl{yOE;2Yq?^~9;zmuju7UEqtvR05W-AP#1wG5+`u^|k|bh7Q%%?b5HL;=v-Sa&#s^0T z7^e=y4%w7y^S&~UI0wr{WSnvXfCH8@3yPTPi6_(R7GmKL zU;%*{Xu`+}_jV1ZF@}gNi;|`$IRM6(+i_*anZr>wQB(7lZ~#QXMqQD_5J8x5M)P|P z>zf^0v*i#GMX;7+3>-wC?Db(at^pDRw_uu&X0#H3ai()l0RW34fWeu;m;sz4L>bjM z(;3ycAaN~04UHO_=#mUYz5bD3W;d-l)EE-nZj2Ek2%DPy#QGtE0NgN=F=pt@NHR`D zSp;mxSxl8Bgo#z6L=cIgMnTsvyZiC1)(tz3g=LR~1c7R?f*}iDdG>Y}CjAHWY^*!j zkz}Gs%p$dBp#UskVu!&^tlzG9Vh3aeGbW3P$?Gu5|Mp&EZaS&Bi5(<{vs#LXX)eyp zPEw-QUdkxrrio6u^VX04Vg}rpnKMPLKP_cj#u;UdTA$=8rFL#n7O0sy$EowX%?YJe z0GwGzPV0%i)pv>2{@-o?7s$W=N!R&*w2zKGWCsGR6gh1FAi$1Fn>AU?Tp7T`S|}`< zGfDdZhSW?WU@iRiTejhuZhpa!g*3XFX(=MXk7T-W23A^tZDarVUxI8c%jk0w+# z5sPXDql{x@#FK_dK-HKei4JcPn5HO6Ls#SRr0nvDqRBKtT_6hp1S}bkCRH^a32O|= zvV=`auSf_H1W_OYA%bA;pLX&QW5ic`$?d;*?6&ZZ<+~dbE)i2^;RS#Y;e{ACGut0vrg2WFpRxNSGFhCj~)N6Omvjtm+0K0!Azm zjYOhx3Pcu3A{I#~$yhj?q(~q<9PEt66(E8n5QLFwazn}zNClWp|B>rS>hFHz?KchV zR$5vhA3k(??4@`A_UCs+cCFZXGFmxs%$%7M^76~Czw<8rz;~WumtHbs)Pz~{3;j@h= zz({Ib5I~PBnk2ipp#(cR!{KmJW3nUy0LB<2PQ{Gr7hN`bK=sVU7s@R=PowUS{q|2w z2FRa(`8|_7Ci#aD%nVxCcl5*0{qd5)p5-gnD@+_Z_v)(`j4LWGLy;3lPlve??+7P7 zUUxJpUj5)NFBp>RF09I?&8_a5=YDpJ2a(==ySLXL?o5I#3TE;@!AOZkqS2VD>4t$u zExi7^3v0_NDxvK_N9KgzJax0gQC075O-J^(Ms?09<$w?(2-HL@nou|qWl6M{co+)= z>uNHQPz>Er6qQIa*Aktb!AK;cQbf2OiA0omJZW%QL`l_fx#eUms)Hb69t{SA(U_uY zvMe+H;`J%cN;*@@92OSpgdE_);rVcz>d27=96P3{%^*i9X_qt_fStXc zMyoK-fE~y0Eb4U1ZcU9?M|Q*d3(_&g)TzKi6C6{PqqD4i4rzul>S7ezEI=D6HuF%y zEQObrQtW`k$SJMD?e5rsrIUV$Y$6PD5T6ve%6NZJ%{xRHroUvup(7yA8_>R zEDZ}{`Qzr3F}r6u!D-H}jUzgb$w{L`rfxE2P>@&J)X^eIA^@klmcoCiVd^BA%u;F? zm>?o&R1BX#`IIY>EhnNTgu{v)*|I{M}2bS!ze%VhfMb!rY zgppZEJ^eL{`)tE%$S_pHFaWT5TTF1#NXDe1(L)CHYN_9^fk=qJnPH}b;I4z&yhY5= z7~_Zt7$d5yCb8CXb2#T#DMw_=@^B8Gyq*K*+%>MI;?S1wbmYPaFU&V>meM0HI!bk5Bv1TbA?jA2X= z2CAtxiPC1lGs*>j`OtZ@uDVZdTYvm?hln(iSy@(|A89_tOz~AcNhw7L0i&E#s;g%5 z3g^^v1}zNTWb9FMKrvmVR0jaW8RyIdK4~)QE*&#$SanO?9s`MjfPv|{rePu=Gb}<4 z#=*`t=Tuk0)W$GSQNPhHqb(dwU<{0N&J2@V%>kK9A@G!+>dgMLX!BOCh4TwaEj?!T zk(q{)o+)85tNFP{;Ld903@~egnz8fL<3e3MWoNmtnY?L;fH}Jz`lYirV9c4Wamq}B zD$`Zq2sjE9^&Y^8BDoYW-!K(UCI+9rZUg$dtWJ1wjVs& zqHB?Fg3xY+5=Zpggf?%t@ zI6*I#S`{(oOxJat113a7+|UgJVT7eXx8d_Hxb8l&Wy8^v9WJ+oxIqoW9J-8g1V9ZP z%$3+o1i_dl6Q1(XBS-XaJaQ;$(A=7d~!RVX(2m07SKjPITCT2uvrAcPTMPMIr^OJa@hy!ywsxB;##SrQlr zC)uh?rcs(XliJd489s#4Lh32oB#k$nibdPgG_~8Lg}cFqp&hPr8in~RrgPd6(#f1o zAn>d+rJH8y$yzCsq06Dp;*|cstMRjJf&X7^|Kd8k8ZrO&0O>~Nx!*tQ4QspUs^Hv} zk!#PDG`lG!{s^|BhO-3O>v)Qn0B3J%PHL^a=%j7CXE_1LCJ;G%6NgBB7Sq|GvveV) z{FiRI&8uLD*~T=rlD@iRH6VuUw6W9Q~GGna_kVt8#v^rdhc7Xz=BWoH7705(sC zfK!I5yx!A^r~;mgaO#~g2*`nZe)}WoYB9Ox^k<_rH|iw=R~J! zl8gjNLY%6q$~g!E;Yc1a<$?^NcN&_sT`qwcxg%JO7} zA$ncyN4IR=TQ0jKLpP{|OacnRnCnUIFTeb*rPV{nlEmhiLVHhMJZF4=wdKes?|;~i zOD?{3NsnA%+p5o2?ukwu-lyU7&zqYY+akivwPW}F^?sxFo`KcfK74ig&$liw7`dcp znXq!lDX+)N7(>7n6_1*>Kt25ZVWYf3_;qemna}atUT*;ZaD|Qn1^G= z?5i)!YTfwTx4%>4LFy}s*6-N7x4YZx7Gr$1S3BBny?WxocOKCu z+|#=vXWc2klxX_m?U(m9goa%Hv$5G{7Tx&FRlob>#%t$qy8l&{on=siaY#nO#Whol zGF`r5qomh1jF@?;dT{ko)@||7f>p~`8ks$>Sb9Naq5ss*)gLZfkKI1g>=9XF?LS|6 zrS9|{fBIx_b>(-*>({UTZh8+b z#ADGoFq%^{`^FI&@4fS32jt~u`|G~>=7o=T7^>2L!8j?__{BSasSE1<%p9LAa&B?} zcswbLo`3bo>T=q?|AW;Hm(Cve*&m+W*QSPBPM1$xB*Yp&dE-xq+BI)xjz<TJ(=VwVT(bMSFW2vHl3fyK93#+l)PLOU!95GYp@`3ezWwZ@aNfWhZ{|5w{P#t$z3X644=Q!h}D{;=j?aN?qCNB6Iwp%d@F{f~nUb;nOO zYYc#!;tUKSY^aGq`JmY~mEg(mnVo$9@BeHF^P!V3oH%00n5w|rQGMvdY5A<<=<(An z2}5HDrwH3!ImSQg#Bj^5v>CWOm3_?^$6d@e+Z(biMdakTrQvp9djB?YE6tlu@s83O zg07w%cbvmC1ShS#Hvii3%6L~J`)uGkr5u>%1zL##;FPelIU``zV6kB-=Oi4u_`t}7 zGHs@`W!YPQIRDsB0j1qA+o82PnPQ!v6-#q`W}E(+5->4^d@YKXg?*)n>zr{;O$rvX zbZG!=*cohHKF1vZ;2Z>kMh>gof8qc)k_K{T7L`yXm{bj_tAZy_;PG%MhB0TvmseVz zXm3a=%{!L8(R1W%k4v%=h`T=4RGb6ZAq+EHBvo=S^?Xx|-ZZDgxtGv&gjm;-{^Yuf zVlr+5WlU34IkPCkO_W&JU|1x`&@>{s5oh`RXN?(?(R}PcILTt2t>Dhi&hf?CPitHd zMZtFMfHO^}B#>7jV*N{gf40*FVeC?FlVvx~ZOHIhiESvk2K2ftNRN(e?o7P!G(0T&pFcszaf z^ECX)_CoD>-DPD-TW-=^acn+a4uG8md5f@YsaXL7PB5Gk&`LwGc#05f&+2nb9cKk` zP-f)(lD=9Z0FDU4oNJnnG72jttjB|G2}KJOR1iHF3P#!v{IEH@rq{e~7yxmqsWhXo zo1h0f+k>Jf12YxG3<>K>B7rcmsozMH&xrImz>0ETV+{~cvK$fmVl|+ooS$X;X zVB-lU_(V(@LjVjB7idwP1ad37siBs5ET*ZNC$GYV;%zN0q9;q_I!HcQ;HsKD=W0_E zR8``lFE76+ON|F3!4B-s%_|6mTTdH_=Ivj+(P#8*w@esiMlyz7Ik`m{;noI~32u)^ z*9>nUOO1szotn};z&R4+vSACSPAP0Wvah|pl@M7JL{C-*p-52@%rNX8wu#;>mkSKt zAObN|MN?FNK{q!_w6(Ml$xX1i_;X-}t{VP=N|#_nI@;Bwg5BA9g&EAo=&2W6bIlho{Gxd7UC-Pt-~GpL zb{?94`iB*tZ#b4<1S7E1>!{$$DD9pvi6q)wuNPKdzIbM+GbRywYCrz=hdms75Tgiy za-3h%Jv-n+oSiy)Fmv1$Pv1V_nV-K@*1NY$7VTXLM7J+^eCzi|iXQ#_8&YWBlh3@= zMn#dNE%jYDU$6tp>0#xwGhtF7v$>R~858M37Ad?KY<$_ld{Yt_PS80WxJHgy(G_<_ z>F4fxPV*H6khasEvvQno=eE?|pZ?PSO8~zv)QKN`*D-!k`looxJWiL&u%|-mcW^LV zbdH&1r?REvq-jj0G}GO#zG1_`DDAvmjd1u;jcg;*}3f(3bsmBN{z=LNwM^t`uH3r3kO@Ofv;z`Tmb`(ckDgdG5)gq#w9<0bqlT?HTd(@dn@|% z6A9Ae;imR*c2T!%zs#xL(b5!2Qj8Fz3aSNE?pX1=1(*Mjm76K%4*2=~OTPToeP=W|!)+paOi|JBX$!)U4Ts~sFPPEu z(@)pk^5k>w^}qe~hFzVZ_~45lxo<)F`(Gcs|M}mYT5$33i|(6FKYw|PFls>0t?JOn zZk_Y^PwqZ^ItUmu#!Z1r-o+|NacU5wlz4kq_N;R8rMJ{nW+wmg>tBBLb<614i;0;} zk631(iI3m4X!-N^cg91XeDeK2Kiw7n_D`2Qzr!f?{&1-Lrl(&fjqBgtc!p)v%osUh zP|vbrwZuaV&7h1L9C%bE7mOeD>Vwzzn0mp0lB}933-s8gdZl{FoW5Uw{{0P)J(IWZ zjTMK6+&O#d=bx>nD1Z@12r#0pO~I*GKQ<{)_p^U|f2uJ=^M}mn-7V#KAp{8AZsFLD zbrE-;IRh#frMV?ll@&cF&bxS4S=Gt!-}%!!E6rkhl!9AO*REPIY52vj&A(;sJHK6a zaKok(3vTYf%y^@9U^t`uKy3%HCgo;@)SUQ*XR_ zTO0ODfDuIEeC+InHCZ|pWj)f;aPZjJ>+k7Y_J{pdSI(>*@Lh}Y#M2Kx|KJmq(-+Um zI5>Jx?$=*@KVsSiEp0z^%(>~#3$lOy$5nSf`I9{>KR(!wJuaDGYzdliLm%tvpX`~1^?F6>d|3KR~l8CcxCVDTjvuUz)&_7g#uNYb!V zbdJ)6^@o$@?6_RqQbtZ0fs6sh>Bbdu5I+lHO%akzNY*TaWdP|w7Qc~!5eKjp%WXcF z4Q0XEz2d1K2bWEA?l?~$++CbI1Sv1Ci{l5jJJ{tL7B$)|Mw)g}jy#Czt)>w9w0yyI z4mSeCQfE!Ov5w|L8ZyO^<1*VSa;dB4=^eD?HPTnkG$0pQ&@&;}ks-3MXS32bvvgNk zTEA1W-C#!xx;hz}W+cMxh$VTTYRV-yp>R`Pj{%(x2MT)*J+uD@e`%lNUq8F)2%3KB zQW_0r5A2l@ zPH2MCeDvt4{$r*z?qBCA>UnzYD;w5#xZEyN)K$}H_i@+sE%#_*o^kT~x=^-TFrcKS z-_Xn>8dU)?D~#kBs)iySBt*@u64#p}TP8Si6uXo?7wt zpQ46{&7cVb#*w)uAOxDCR!q8erQ#PPg%Gm5o~wk&VxrIQx;xYzkOw(ykGtDXEq&Xb8fgF1y2|EAAjuAM~~y0 zITu}a`29OpeZRMO!W9=?vhdiR%@xBYZu{dEKOAV4MS)VD8XDj@sSdW|NW`Yo2%UlG zAip-<%i>%iZfOW{W~np);wIwPzRgRpn<#$WJ+jUaH01R{iX-w`l=`!dm6v`(*`RhBQZhoyh+TZNzR}ftN!G{|s zUc6KZwuwC4k__aLHYICVpmS{t?=D8_GkcE+ANu~(@dHQq?(06~rUBi&nyXmZ_uj5x z)pfTnJ-mHWk5Lmh{r;+T2iv?Z(b_2-1P&oBnJlVVJY~kXj#DR;_5%m&waE(?$2;3H z0%*-!&(%i)0_Kcys>VFMW=)$vHy-TF^c$=G{(8-IFZUq(o5Vgv@r|!M`-?coKp6!H z6joPM6dByrd(0f)zVBMpsJCL&gp2PDwLnM}lYc<-e%P>D;${8;f@cg|)L5FNk%t1p@eo zw|=EW0|Mck0isFp51e`BEhu!Rbl|xC?>#P!eYmgZSfkXZFtqlAcR#PW;upQ8gKs|f zXx!bStltQ??5|mPqq^bQw?EuE>7uJ?q%%7|u;K5&5rdf=vZinTpk zBN;gqa!bz%ISD#|03<5%)gzt6yV+lthAYgawz{w(r@ee&2FD5{mHd zRha`PYsWUU)E!PT&WR)+T=m8;i|}Q4{&c{qw_jQv8`Vd;`>uCSF#v#~G1A&k|MA8r zpTQ@eRbTLMZg}t4TlV3^x66Jy2GsYOIwHsR?`Ur5#GVXGE)HX+sd85N%sJCDz2b?@ z%h$HXH+;9UF{DvNFDsG+0qf?vkGQUrzC$OD8&HU}*jq0*OrAAq-?Be#-o9~iRK*0F zlCr?KAh{EbyMOoOdVs87|MRn(X0Ltf-F-rq$FL+xQU-1MbW2CGY?CGh9wX?wpE!); zF0|rwNZH{ypZ$UK7gOk2Y7g%c-#6_lp8kPz_eVJ2{zuw>onZWbu`>=C1f~A!@})Fd zZd&pjqV9#4S-s=R5Aqopr12yA<}oGm-AC^n<)yVVrubyk zabVrPBW>~KgYSO&);r&~tjUwTWdmxbO%Hg4;E~NAtk~XT@Ptu)a#%9DZrR6sniUZf z0}MtP5J40;)iouNNNPHB3zTz=fU1hGa>B^c$UQgxLz#T%{O+#dlWW_ye)P%OEp7xt zMeUfr;*$@*y)6nEZYi2Pwc`63ZJ+$+^-WFr6~lgV#fUp64=h{q$o;o1zU$dfZg}8^ zj`|kh6E1}tA2c6uyp(v+=G7g*q=ZI<8TQF+$SRPQy1`h2Q z+AG@8X2cT)Ga|u`K#x&l%A&Vk|8a6`c4$~BLRLx>#v~bwRZY2S=~&;B_dj|}^?TeH z0oT-IGD*RMOld>2ii{{q1h}pyb&V$!J-mPi2^T65+w-jt|kHr-w9uDgMSyM-T_qUtYZGcN#I{*_92CDnHpppD50jDXAf$E=Y`SC`Au83SG$4s%gcwGMS@u1* zKxLbgZOUIeq-SK4pe^NIM^3{Ay*P3%1f_c7fMpK4hA==%%o00Lxs@JlF*xkV1Gl=1 z0jx=6iwE++edgSlfzD$>>Y=8gRj0;~KKW=ukBy;GH zeyczJwCA{mefz$5aCH-yA{Ca@L%LVN(^2!3njmtdun|f*_-Pr=T?VKXSl|xj-lox~ zF?hh{!lj^W4v6V-oHJt5{8`(dUvMbv+G}R!5R#N+7f_wJGWF)|yBo`g6clg!{Ld{~ z{>;0d@OQrX?kitk@Uss_Oc+lOLeJi%0H}HQvRK8X!+Xkq|K;;Ro%nlQbj5^z%br@? zR($oPOK(iHw4bT3m%Xldf@S3wOE|vs<6nE`{CV1hnVY{|XHWoyfoUkCX5xicB{scs zMywt-cFdZ`e|~DxMcTFxSAV(N4EZV0IyT&Vd7FdV=JQoVIw;)?Z9HoPGVZ z^GXB~l4LihN#e>>8#nJfT|A_)=ca$Y+^R`)ANkPN{@R-_e!AeN?@XBIk!Z)3_kNST zjWjlolwxZN^vK*Zw~lY77XB;OX-!j-gEnb@4rMFTKUC? z$M5>f>pe=Afy);^{KI#fzo^Lf)-1W(+xfv8FMYJ=r|%BPVuse!Thv`rGkon0+g3&@ z#up{)SjU-TMxgKXD{hLcc_EAj4z8VEzoJ61&I z{(Rh&qnaQ_>({T`_*HeeDChSdI)1VQlxZDXKYef051aaCmaYBAD=~nQaWk>jxc&=n={7QkYQCYh2GI*RdUc4N28Q$4}a^y{^ZY zS#H8WZP~W+8{)~#$l^x0v9(>De&e0K_BY=6%f}Zzy?oNFNk`xO0RR&LYa9k#@RLgE z;O|~}{=%o1$+95%GNW~CR&DrXK(FlJ$wOP$tm`+wl3+}B$TkkY_WlPI zGoBkZsCeb4M|+H%T0LP=@wh3w|G4-__O;y?bO)X)uV}4d)@H%DnQ&ywJ|TyW%NfF0 za(e{;U|2*n^v16reglhu02p`hAfTRw_xEE5PW}2f2R5(n&<%uL1R+EXT+y%R>1|*B zrD^hukKFUwvMYW#%y0Y2rLTQk&%?))L~y%3ZUhPukM7>6F1>Zehyf*Yr`GNL7676u zubnmjxOlMR%(3Q(E?~@oW62$F+VkRXHk;iq8+UoYABa&^6KPfeBeUEE;~bDI@im|Q zZOw-iumFsAwuie9nKWX~;H7g%{OWxJY>8S!S2N284eb#)6ZI8|p$*4cK@^xJglDHy z0pe+xmz9=rcAVOd+=I;}Prc~uPTbk99JuOSVGUdF$38w!J5So=O<$GL&64vi)&57A z%0FT?{?DG^fADJm)raGl2QcLZtDvI^~GB<+)3z6D@~XUt#ItUpM7 zho|kLkd}O4Cn}hqNeeZm{7k27klGS0tl4>TPEC2RU$^&KZijz31AEq|_Ft!S=iD+! z0qtKRz>aT{&PuV&f)u=MUJyo{8gyb|$!I})IHpy2J$B2-Y|m)j(7R%vO0z}0Ai7UXBjIaQNKSA2Ny z9?2izj9Q^vK-@^ibkuM3^qhW6`{wROp4^gb`u-~~UjEb{uU)k6_0?;~&CffuWo=7Y zK~zUxuTPO(Ubm1)7-iMnTXrscvt{yg_uaT*)pz@%+$%AQlnRJoN94=aL*UqhmG8e^ zIe7Z8SyO_2GnMa-w3YX&E-x$dRrM-391P)ZwWG>Eeqfj2@ex;MX-U4wwV1-Qa{?Kq z1EvlxYmB%HNN`tEOm9E<{PXH>aTQ(s&BP*}5YN=Zx9TO@|QKiMvdgmK0>AVX>Hh*giC zeo=Xkd9^jmU;4{;yXH-pJHI4*Y{Q;ST7J!vNhN0@?h;pQ)z&R5j^Kec)s1Vu`C-eB z_PiYf#<}-x{JyE8JQ$6Kf=N*n1A@ym@skf!ph2dz8*Z z77ccm4xf9`sO&$z@RrWN<V>;)KNoZ4t!H(5;Wt7_P8scX++e^bvio1jHK$owB14Wz1PA7AuLqXiZV0p@E z>na=UfWCH~eH#3leo{!8d|hj&aY$LRj*)FA|D}->G3xp)o<@+gKgKz-6i>UhG)+o` z5KC9kK+X-dI*4q7qjmMpBT46XTg4i|=^jRaQ}`KA`3h;$vB;*ZTlG~;3A+?S*uMQZ ze{l1oA^lcsJinFK?y zVb_tw2>?j6b_9Bec2+257QdfaDW966L?cv<>s*q&u1Le~)9u>0qWoa<4=MwMFmOE) z)u58%IK`}@XJ8o2>*ibDzH47zzX?l! zIi_RTTd%x!c$rj5bv6nv8fAqR! z>{R{UEjVYC+h}VKh7m%HI%Illelvr+GRyr!w5gSrPZ%zf2Ffr3L+}>n7UrD6f-HJm z{(vlj1TJKU2Y_=Th~Z=F&qScQq_E@UcbSF5qmAoOc2#LvL4!_ZUzQ}`a6GK)fJG_R zbU4(}-nrs+BDp0IccDM0gjG|Xx8s>Z+HgQ9h4vwC3p(3gH3zehEJ9BF;~Yo!Z0>XV zWaX*ytM&~_ElNBk)0qMlQt>-mT0RA)nX4!RQ$+^>Fb162^*IqiTvrXi_FOO*X)KD- z#v`2_O~<}^lSu9W+qu6@#9#!&$zj+yxn~Q>8|yY&+d}a&8gDsW-+6dn%K>TDgxe5j z95@!G@TqNCBd<*Ee!H>of4(?fAyLmy9I&`O3jN-Ew=XkP2uzD+6V{$5Wz%OLI4^d#2Evi900J0v}jvn zL-6R{Ee(R?%d6k{J#faUreg@WJuZKS%MBD{NtTtihNz+w#8pHvOElK)+_3$hYjMW3 zr4N#DP)lIs&gBRJi?0P;#o!^c0uzTRc!1^YB6>(RE;^}!?iHl31@3~sN78;Y7>Do$2SyZ54n zLqC6f{(64j3bstO+?5n3t(}gO+vo4 ztlQfYHmK3m*+I;LV1Nk`Wph!-L_ioLLVzPV*Tb4SKYH%q@goXyi=vAF0*o=^)SFj6 zeb&rAdFR?O1T?+oN-_XF}pgSQvi@U1p~QL;?F7iN2ygy&?=6Q`igl>8~?H^ zm8GctJk2OM-~RjUe*_;!|K>RVApmrm&Rp77)b%4j-c^J!Ae1WfXIA+`1QDzHpHpo! zt@5T-;uD)6a9&Sw7|zP0!)d+42sy-rRDzuSM^~nGR{{3)JC3?uljS;qT|&?a<#LPQ z?63{MQPwn4#lu16X$K{e`1dMa8hFgv|G$TPm zz(v{Z@p{}Y7e)+-==OTuZnr2BMk%N2sbfbv;)X1XM3jC0fY0xD%OYo7l-+K(+bv7j zETd!Y9?al!?u>b}qcZQ&&g#b^^`7K@3dW2b|NM(PgLDagemXZF-b$IhJN@7Vs@8y_Zp zrNhULAJ8Lb&HFEXxvgo`ti^L`2Os$6@1L$c=<#_u2ZS(VD7UDv`OwDAyX)FJLtYQx zw0>LBfT7WY>(=i)bn@7tqm9XKWm%E9kc~UO`F0a>d4O@oIgw?TOU^3pF=R-!+J2Jd zR!<#X(bOIZ-?2&5rGR^^Fh1 zI%E|0>{~4F-hChmQdzIT6UL5^+IPSH#)k<{>4?!|26WF__wnni_B4Ck5~YlB5U_S| z@4?)@!{p{2-~6z@rGDqC^+)=TpOzgz@cLUH#oeVN#*Q7_GyB{3|N7;|!;x@jG#)*$ zee*a?|Ha0f5DY1_FhDH!@-S#!d)ST)nLeVf{q(J6n~pZsACXE1m6GOV%T^yg zTGt*`m0;7sV+|Y&U3kxqtRYVUr4E3@!9vsc*`%O!QXgQ9%%Y9hF>WEne{fRXorb`2 zJZ-^ZoJtH#%PUMzcTJIrY`sM%+ZCL*;m4hfa{%lV7ni5-ZSLeUr#S~{xsF}bC3(t@ zP6NEtGyARcuylcrl(CzBz4kq_P311|m~|ga2r31FJMd~+0wT6c52lzXwoEs(q&KXq zHp>xOPs^!zhQZ?0IJcd14h)z{dqrHK(jJPmQ#7wzVN5q;YQ$U}PzU2*jprr}#8! z4~Bs=0-Z5n-=DNxYcL_XRO)H!t~weFDcMehuo~?U^9T1GFu;4sW$D49`4KM4_H%p2i+O?->;EW#q1_z*V^YTwZvA7cLh)049Al7so7uEEx z9#GhGfYG?VNhz!zKEAwX<;e{n#e`y+D;&7NIOjC0q;GCTb&k-o_S5$w8uJ!ZR}UWQ zanCEtRTM&4?O*MoFe8y7t|dXvvs?HG@jJ z_u-n-ZR{mwIRX`ZdfUN6d-lenov~0yEE)xb7`S?joLyd)r^h>k%}sLA;J!mgiAGa% zORWFw8;S#nNnWM(Fl6;Bt>|9bchH&dU)j0;xFAWEI!f9MMHs2kHmPt}zrh3jnWcUy zw0HgL%<9Qy-TUO_;$-6xYn})ql88Kelc2fnLL>=9F~L zmD<05_r(^))ob|7!lL4=oPzL)@9U1Y_ZW3SS#f6M%&w%Tcdu@N1DjScSEhihxFBIr^J6{oq@2!T0G5Jo6{h^7HgcIt#Z@Xk)P$M%eO)`HZE z)L~LOywBjlMZE{B4QtNC^9PNcP|>&diSOUsec*(@Y+(OkBRpcF zW&d|!vB#iM<1731sbBT#v1nd(Rp#D}YrvBw5>Vs8cqEvJbSgTk8a=PHtgNE{;8Wke zvUN{m^@Mr)$u;#&alZ#z8e7T+�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