From 0cc74dd9fa19ed4a5a2a256813b8e3734038dc9a Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Wed, 15 Dec 2021 13:09:25 +0000 Subject: [PATCH] Add awesome extras --- .config/awesome/extras/bling/.editorconfig | 24 + .../awesome/extras/bling/helpers/client.lua | 127 ++ .../awesome/extras/bling/helpers/color.lua | 158 +++ .../extras/bling/helpers/filesystem.lua | 53 + .../extras/bling/helpers/icon_theme.lua | 134 +++ .config/awesome/extras/bling/helpers/init.lua | 7 + .../awesome/extras/bling/helpers/shape.lua | 30 + .config/awesome/extras/bling/helpers/time.lua | 24 + .../extras/bling/icons/layouts/centered.png | Bin 0 -> 2638 bytes .../extras/bling/icons/layouts/deck.png | Bin 0 -> 1497 bytes .../extras/bling/icons/layouts/equalarea.png | Bin 0 -> 5502 bytes .../extras/bling/icons/layouts/horizontal.png | Bin 0 -> 768 bytes .../extras/bling/icons/layouts/mstab.png | Bin 0 -> 1706 bytes .../extras/bling/icons/layouts/vertical.png | Bin 0 -> 767 bytes .../extras/bling/images/bling_banner-2x.png | Bin 0 -> 253618 bytes .../extras/bling/images/bling_banner.png | Bin 0 -> 78099 bytes .config/awesome/extras/bling/init.lua | 7 + .../awesome/extras/bling/layout/centered.lua | 84 ++ .config/awesome/extras/bling/layout/deck.lua | 37 + .../awesome/extras/bling/layout/equalarea.lua | 77 ++ .../extras/bling/layout/horizontal.lua | 56 + .config/awesome/extras/bling/layout/init.lua | 44 + .config/awesome/extras/bling/layout/mstab.lua | 249 ++++ .../awesome/extras/bling/layout/vertical.lua | 56 + .../extras/bling/module/flash_focus.lua | 44 + .config/awesome/extras/bling/module/init.lua | 8 + .../extras/bling/module/scratchpad.lua | 374 ++++++ .../awesome/extras/bling/module/tabbed.lua | 274 +++++ .../extras/bling/module/tiled_wallpaper.lua | 56 + .../awesome/extras/bling/module/wallpaper.lua | 339 ++++++ .../extras/bling/module/window_swallowing.lua | 88 ++ .config/awesome/extras/bling/signal/init.lua | 1 + .../extras/bling/signal/playerctl/init.lua | 19 + .../bling/signal/playerctl/playerctl_cli.lua | 151 +++ .../bling/signal/playerctl/playerctl_lib.lua | 350 ++++++ .../extras/bling/widget/app_launcher/init.lua | 1053 +++++++++++++++++ .../bling/widget/app_launcher/prompt.lua | 656 ++++++++++ .config/awesome/extras/bling/widget/init.lua | 7 + .../extras/bling/widget/tabbar/boxes.lua | 57 + .../extras/bling/widget/tabbar/default.lua | 60 + .../extras/bling/widget/tabbar/modern.lua | 271 +++++ .../extras/bling/widget/tabbar/pure.lua | 81 ++ .../widget/tabbed_misc/custom_tasklist.lua | 51 + .../extras/bling/widget/tabbed_misc/init.lua | 9 + .../widget/tabbed_misc/titlebar_indicator.lua | 133 +++ .../extras/bling/widget/tag_preview.lua | 246 ++++ .../extras/bling/widget/task_preview.lua | 199 ++++ .../extras/bling/widget/window_switcher.lua | 454 +++++++ .config/awesome/extras/nice | 1 + 49 files changed, 6149 insertions(+) create mode 100755 .config/awesome/extras/bling/.editorconfig create mode 100755 .config/awesome/extras/bling/helpers/client.lua create mode 100755 .config/awesome/extras/bling/helpers/color.lua create mode 100755 .config/awesome/extras/bling/helpers/filesystem.lua create mode 100755 .config/awesome/extras/bling/helpers/icon_theme.lua create mode 100755 .config/awesome/extras/bling/helpers/init.lua create mode 100755 .config/awesome/extras/bling/helpers/shape.lua create mode 100755 .config/awesome/extras/bling/helpers/time.lua create mode 100755 .config/awesome/extras/bling/icons/layouts/centered.png create mode 100755 .config/awesome/extras/bling/icons/layouts/deck.png create mode 100755 .config/awesome/extras/bling/icons/layouts/equalarea.png create mode 100755 .config/awesome/extras/bling/icons/layouts/horizontal.png create mode 100755 .config/awesome/extras/bling/icons/layouts/mstab.png create mode 100755 .config/awesome/extras/bling/icons/layouts/vertical.png create mode 100755 .config/awesome/extras/bling/images/bling_banner-2x.png create mode 100755 .config/awesome/extras/bling/images/bling_banner.png create mode 100755 .config/awesome/extras/bling/init.lua create mode 100755 .config/awesome/extras/bling/layout/centered.lua create mode 100755 .config/awesome/extras/bling/layout/deck.lua create mode 100755 .config/awesome/extras/bling/layout/equalarea.lua create mode 100755 .config/awesome/extras/bling/layout/horizontal.lua create mode 100755 .config/awesome/extras/bling/layout/init.lua create mode 100755 .config/awesome/extras/bling/layout/mstab.lua create mode 100755 .config/awesome/extras/bling/layout/vertical.lua create mode 100755 .config/awesome/extras/bling/module/flash_focus.lua create mode 100755 .config/awesome/extras/bling/module/init.lua create mode 100755 .config/awesome/extras/bling/module/scratchpad.lua create mode 100755 .config/awesome/extras/bling/module/tabbed.lua create mode 100755 .config/awesome/extras/bling/module/tiled_wallpaper.lua create mode 100755 .config/awesome/extras/bling/module/wallpaper.lua create mode 100755 .config/awesome/extras/bling/module/window_swallowing.lua create mode 100755 .config/awesome/extras/bling/signal/init.lua create mode 100755 .config/awesome/extras/bling/signal/playerctl/init.lua create mode 100755 .config/awesome/extras/bling/signal/playerctl/playerctl_cli.lua create mode 100755 .config/awesome/extras/bling/signal/playerctl/playerctl_lib.lua create mode 100755 .config/awesome/extras/bling/widget/app_launcher/init.lua create mode 100755 .config/awesome/extras/bling/widget/app_launcher/prompt.lua create mode 100755 .config/awesome/extras/bling/widget/init.lua create mode 100755 .config/awesome/extras/bling/widget/tabbar/boxes.lua create mode 100755 .config/awesome/extras/bling/widget/tabbar/default.lua create mode 100755 .config/awesome/extras/bling/widget/tabbar/modern.lua create mode 100755 .config/awesome/extras/bling/widget/tabbar/pure.lua create mode 100755 .config/awesome/extras/bling/widget/tabbed_misc/custom_tasklist.lua create mode 100755 .config/awesome/extras/bling/widget/tabbed_misc/init.lua create mode 100755 .config/awesome/extras/bling/widget/tabbed_misc/titlebar_indicator.lua create mode 100755 .config/awesome/extras/bling/widget/tag_preview.lua create mode 100755 .config/awesome/extras/bling/widget/task_preview.lua create mode 100755 .config/awesome/extras/bling/widget/window_switcher.lua create mode 160000 .config/awesome/extras/nice diff --git a/.config/awesome/extras/bling/.editorconfig b/.config/awesome/extras/bling/.editorconfig new file mode 100755 index 0000000..33997d4 --- /dev/null +++ b/.config/awesome/extras/bling/.editorconfig @@ -0,0 +1,24 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = tab +trim_trailing_whitespace = true + +[*.lua] +indent_size = 4 +indent_style = space +max_line_length = 80 + +[*.yml] +indent_size = 2 +indent_style = space + +[*.{html,css}] +indent_size = 2 +indent_style = space + +[*.md] +trim_trailing_whitespace = false diff --git a/.config/awesome/extras/bling/helpers/client.lua b/.config/awesome/extras/bling/helpers/client.lua new file mode 100755 index 0000000..0e14c51 --- /dev/null +++ b/.config/awesome/extras/bling/helpers/client.lua @@ -0,0 +1,127 @@ +local awful = require("awful") +local gears = require("gears") + +local _client = {} + +--- Turn off passed client +-- Remove current tag from window's tags +-- +-- @param c A client +function _client.turn_off(c, current_tag) + if current_tag == nil then + current_tag = c.screen.selected_tag + end + local ctags = {} + for k, tag in pairs(c:tags()) do + if tag ~= current_tag then + table.insert(ctags, tag) + end + end + c:tags(ctags) + c.sticky = false +end + +--- Turn on passed client (add current tag to window's tags) +-- +-- @param c A client +function _client.turn_on(c) + local current_tag = c.screen.selected_tag + ctags = { current_tag } + for k, tag in pairs(c:tags()) do + if tag ~= current_tag then + table.insert(ctags, tag) + end + end + c:tags(ctags) + c:raise() + client.focus = c +end + +--- Sync two clients +-- +-- @param to_c The client to which to write all properties +-- @param from_c The client from which to read all properties +function _client.sync(to_c, from_c) + if not from_c or not to_c then + return + end + if not from_c.valid or not to_c.valid then + return + end + if from_c.modal then + return + end + to_c.floating = from_c.floating + to_c.maximized = from_c.maximized + to_c.above = from_c.above + to_c.below = from_c.below + to_c:geometry(from_c:geometry()) + -- TODO: Should also copy over the position in a tiling layout +end + +--- Checks whether the passed client is a childprocess of a given process ID +-- +-- @param c A client +-- @param pid The process ID +-- @return True if the passed client is a childprocess of the given PID otherwise false +function _client.is_child_of(c, pid) + -- io.popen is normally discouraged. Should probably be changed + if not c or not c.valid then + return false + end + if tostring(c.pid) == tostring(pid) then + return true + end + local pid_cmd = [[pstree -T -p -a -s ]] + .. tostring(c.pid) + .. [[ | sed '2q;d' | grep -o '[0-9]*$' | tr -d '\n']] + local handle = io.popen(pid_cmd) + local parent_pid = handle:read("*a") + handle:close() + return tostring(parent_pid) == tostring(pid) + or tostring(parent_pid) == tostring(c.pid) +end + +--- Finds all clients that satisfy the passed rule +-- +-- @param rule The rule to be searched for +-- @retrun A list of clients that match the given rule +function _client.find(rule) + local function matcher(c) + return awful.rules.match(c, rule) + end + local clients = client.get() + local findex = gears.table.hasitem(clients, client.focus) or 1 + local start = gears.math.cycle(#clients, findex + 1) + + local matches = {} + for c in awful.client.iterate(matcher, start) do + matches[#matches + 1] = c + end + + return matches +end + +--- Gets the next client by direction from the focused one +-- +-- @param direction it the direction as a string ("up", "down", "left" or "right") +-- @retrun the client in the given direction starting at the currently focused one, nil otherwise +function _client.get_by_direction(direction) + local sel = client.focus + if not sel then + return nil + end + local cltbl = sel.screen:get_clients() + local geomtbl = {} + for i, cl in ipairs(cltbl) do + geomtbl[i] = cl:geometry() + end + local target = gears.geometry.rectangle.get_in_direction( + direction, + geomtbl, + sel:geometry() + ) + return cltbl[target] +end + +return _client diff --git a/.config/awesome/extras/bling/helpers/color.lua b/.config/awesome/extras/bling/helpers/color.lua new file mode 100755 index 0000000..4042360 --- /dev/null +++ b/.config/awesome/extras/bling/helpers/color.lua @@ -0,0 +1,158 @@ +local tonumber = tonumber +local string = string +local math = math +local floor = math.floor +local max = math.max +local min = math.min +local abs = math.abs +local format = string.format + +local _color = {} + +--- Try to guess if a color is dark or light. +-- +-- @string color The color with hexadecimal HTML format `"#RRGGBB"`. +-- @treturn bool `true` if the color is dark, `false` if it is light. +function _color.is_dark(color) + -- Try to determine if the color is dark or light + local numeric_value = 0 + for s in color:gmatch("[a-fA-F0-9][a-fA-F0-9]") do + numeric_value = numeric_value + tonumber("0x" .. s) + end + return (numeric_value < 383) +end + +function _color.is_opaque(color) + if type(color) == "string" then + color = _color.hex_to_rgba(color) + end + + return color.a < 0.01 +end + +--- Lighten a color. +-- +-- @string color The color to lighten with hexadecimal HTML format `"#RRGGBB"`. +-- @int[opt=26] amount How much light from 0 to 255. Default is around 10%. +-- @treturn string The lighter color +function _color.lighten(color, amount) + amount = amount or 26 + local c = { + r = tonumber("0x" .. color:sub(2, 3)), + g = tonumber("0x" .. color:sub(4, 5)), + b = tonumber("0x" .. color:sub(6, 7)), + } + + c.r = c.r + amount + c.r = c.r < 0 and 0 or c.r + c.r = c.r > 255 and 255 or c.r + c.g = c.g + amount + c.g = c.g < 0 and 0 or c.g + c.g = c.g > 255 and 255 or c.g + c.b = c.b + amount + c.b = c.b < 0 and 0 or c.b + c.b = c.b > 255 and 255 or c.b + + return string.format("#%02x%02x%02x", c.r, c.g, c.b) +end + +--- Darken a color. +-- +-- @string color The color to darken with hexadecimal HTML format `"#RRGGBB"`. +-- @int[opt=26] amount How much dark from 0 to 255. Default is around 10%. +-- @treturn string The darker color +function _color.darken(color, amount) + amount = amount or 26 + return _color.lighten(color, -amount) +end + +-- Returns a value that is clipped to interval edges if it falls outside the interval +function _color.clip(num, min_num, max_num) + return max(min(num, max_num), min_num) +end + +-- Converts the given hex color to rgba +function _color.hex_to_rgba(color) + color = color:gsub("#", "") + return { r = tonumber("0x" .. color:sub(1, 2)), + g = tonumber("0x" .. color:sub(3, 4)), + b = tonumber("0x" .. color:sub(5, 6)), + a = #color == 8 and tonumber("0x" .. color:sub(7, 8)) or 255 } +end + +-- Converts the given rgba color to hex +function _color.rgba_to_hex(color) + local r = _color.clip(color.r or color[1], 0, 255) + local g = _color.clip(color.g or color[2], 0, 255) + local b = _color.clip(color.b or color[3], 0, 255) + local a = _color.clip(color.a or color[4] or 255, 0, 255) + return "#" .. format("%02x%02x%02x%02x", + floor(r), + floor(g), + floor(b), + floor(a)) +end + +-- Converts the given hex color to hsv +function _color.hex_to_hsv(color) + local color = _color.hex2rgb(color) + local C_max = max(color.r, color.g, color.b) + local C_min = min(color.r, color.g, color.b) + local delta = C_max - C_min + local H, S, V + if delta == 0 then + H = 0 + elseif C_max == color.r then + H = 60 * (((color.g - color.b) / delta) % 6) + elseif C_max == color.g then + H = 60 * (((color.b - color.r) / delta) + 2) + elseif C_max == color.b then + H = 60 * (((color.r - color.g) / delta) + 4) + end + if C_max == 0 then + S = 0 + else + S = delta / C_max + end + V = C_max + + return { h = H, + s = S * 100, + v = V * 100 } +end + +-- Converts the given hsv color to hex +function _color.hsv_to_hex(H, S, V) + S = S / 100 + V = V / 100 + if H > 360 then H = 360 end + if H < 0 then H = 0 end + local C = V * S + local X = C * (1 - abs(((H / 60) % 2) - 1)) + local m = V - C + local r_, g_, b_ = 0, 0, 0 + if H >= 0 and H < 60 then + r_, g_, b_ = C, X, 0 + elseif H >= 60 and H < 120 then + r_, g_, b_ = X, C, 0 + elseif H >= 120 and H < 180 then + r_, g_, b_ = 0, C, X + elseif H >= 180 and H < 240 then + r_, g_, b_ = 0, X, C + elseif H >= 240 and H < 300 then + r_, g_, b_ = X, 0, C + elseif H >= 300 and H < 360 then + r_, g_, b_ = C, 0, X + end + local r, g, b = (r_ + m) * 255, (g_ + m) * 255, (b_ + m) * 255 + return ("#%02x%02x%02x"):format(floor(r), floor(g), floor(b)) +end + +function _color.multiply(color, amount) + return { _color.clip(color.r * amount, 0, 255), + _color.clip(color.g * amount, 0, 255), + _color.clip(color.b * amount, 0, 255), + 255 } +end + +return _color diff --git a/.config/awesome/extras/bling/helpers/filesystem.lua b/.config/awesome/extras/bling/helpers/filesystem.lua new file mode 100755 index 0000000..9f65d0e --- /dev/null +++ b/.config/awesome/extras/bling/helpers/filesystem.lua @@ -0,0 +1,53 @@ +local Gio = require("lgi").Gio + +local _filesystem = {} + +--- Get a list of files from a given directory. +-- @string path The directory to search. +-- @tparam[opt] table exts Specific extensions to limit the search to. eg:`{ "jpg", "png" }` +-- If ommited, all files are considered. +-- @bool[opt=false] recursive List files from subdirectories +-- @staticfct bling.helpers.filesystem.get_random_file_from_dir +function _filesystem.list_directory_files(path, exts, recursive) + recursive = recursive or false + local files, valid_exts = {}, {} + + -- Transforms { "jpg", ... } into { [jpg] = #, ... } + if exts then + for i, j in ipairs(exts) do + valid_exts[j:lower()] = i + end + end + + -- Build a table of files from the path with the required extensions + local file_list = Gio.File.new_for_path(path):enumerate_children( + "standard::*", + 0 + ) + if file_list then + for file in function() + return file_list:next_file() + end do + local file_type = file:get_file_type() + if file_type == "REGULAR" then + local file_name = file:get_display_name() + if + not exts + or valid_exts[file_name:lower():match(".+%.(.*)$") or ""] + then + table.insert(files, file_name) + end + elseif recursive and file_type == "DIRECTORY" then + local file_name = file:get_display_name() + files = gears.table.join( + files, + list_directory_files(file_name, exts, recursive) + ) + end + end + end + + return files +end + +return _filesystem diff --git a/.config/awesome/extras/bling/helpers/icon_theme.lua b/.config/awesome/extras/bling/helpers/icon_theme.lua new file mode 100755 index 0000000..4a1db92 --- /dev/null +++ b/.config/awesome/extras/bling/helpers/icon_theme.lua @@ -0,0 +1,134 @@ +local Gio = require("lgi").Gio +local Gtk = require("lgi").Gtk +local gobject = require("gears.object") +local gtable = require("gears.table") +local helpers = require("helpers") +local setmetatable = setmetatable +local ipairs = ipairs + +local icon_theme = { mt = {} } + +function icon_theme:get_client_icon_path(client) + local function find_icon(class) + if self._private.client_icon_cache[class] ~= nil then + return self._private.client_icon_cache[class] + end + + for _, app in ipairs(Gio.AppInfo.get_all()) do + local id = Gio.AppInfo.get_id(app) + if id:match(helpers.misc.case_insensitive_pattern(class)) then + self._private.client_icon_cache[class] = self:get_gicon_path(Gio.AppInfo.get_icon(app)) + return self._private.client_icon_cache[class] + end + end + + return nil + end + + local class = client.class + if class == "jetbrains-studio" then + class = "android-studio" + end + + local icon = self:get_icon_path("gnome-window-manager") + + if class ~= nil then + class = class:gsub("[%-]", "%%%0") + icon = find_icon(class) or icon + + class = client.class + class = class:gsub("[%-]", "") + icon = find_icon(class) or icon + + class = client.class + class = class:gsub("[%-]", ".") + icon = find_icon(class) or icon + + class = client.class + class = class:match("(.-)-") or class + class = class:match("(.-)%.") or class + class = class:match("(.-)%s+") or class + class = class:gsub("[%-]", "%%%0") + icon = find_icon(class) or icon + end + + return icon +end + +function icon_theme:choose_icon(icons_names) + local icon_info = Gtk.IconTheme.choose_icon(self.gtk_theme, icons_names, self.icon_size, 0); + if icon_info then + local icon_path = Gtk.IconInfo.get_filename(icon_info) + if icon_path then + return icon_path + end + end + + return "" +end + + +function icon_theme:get_gicon_path(gicon) + if gicon == nil then + return "" + end + + if self._private.icon_cache[gicon] ~= nil then + return self._private.icon_cache[gicon] + end + + local icon_info = Gtk.IconTheme.lookup_by_gicon(self.gtk_theme, gicon, self.icon_size, 0); + if icon_info then + local icon_path = Gtk.IconInfo.get_filename(icon_info) + if icon_path then + self._private.icon_cache[gicon] = icon_path + return icon_path + end + end + + return "" +end + +function icon_theme:get_icon_path(icon_name) + if self._private.icon_cache[icon_name] ~= nil then + return self._private.icon_cache[icon_name] + end + + local icon_info = Gtk.IconTheme.lookup_icon(self.gtk_theme, icon_name, self.icon_size, 0); + if icon_info then + local icon_path = Gtk.IconInfo.get_filename(icon_info) + if icon_path then + self._private.icon_cache[icon_name] = icon_path + return icon_path + end + end + + return "" +end + +local function new(theme_name, icon_size) + local ret = gobject{} + gtable.crush(ret, icon_theme, true) + + ret._private = {} + ret._private.client_icon_cache = {} + ret._private.icon_cache = {} + + ret.name = theme_name or nil + ret.icon_size = icon_size or 48 + + if theme_name then + ret.gtk_theme = Gtk.IconTheme.new() + Gtk.IconTheme.set_custom_theme(ret.gtk_theme, theme_name); + else + ret.gtk_theme = Gtk.IconTheme.get_default() + end + + return ret +end + +function icon_theme.mt:__call(...) + return new(...) +end + +return setmetatable(icon_theme, icon_theme.mt) diff --git a/.config/awesome/extras/bling/helpers/init.lua b/.config/awesome/extras/bling/helpers/init.lua new file mode 100755 index 0000000..f2c898e --- /dev/null +++ b/.config/awesome/extras/bling/helpers/init.lua @@ -0,0 +1,7 @@ +return { + client = require(... .. ".client"), + color = require(... .. ".color"), + filesystem = require(... .. ".filesystem"), + shape = require(... .. ".shape"), + time = require(... .. ".time"), +} diff --git a/.config/awesome/extras/bling/helpers/shape.lua b/.config/awesome/extras/bling/helpers/shape.lua new file mode 100755 index 0000000..9c96d83 --- /dev/null +++ b/.config/awesome/extras/bling/helpers/shape.lua @@ -0,0 +1,30 @@ +local gears = require("gears") + +shape = {} + +-- Create rounded rectangle shape (in one line) + +function shape.rrect(radius) + return function(cr, width, height) + gears.shape.rounded_rect(cr, width, height, radius) + end +end + +-- Create partially rounded rect + +function shape.prrect(radius, tl, tr, br, bl) + return function(cr, width, height) + gears.shape.partially_rounded_rect( + cr, + width, + height, + tl, + tr, + br, + bl, + radius + ) + end +end + +return shape diff --git a/.config/awesome/extras/bling/helpers/time.lua b/.config/awesome/extras/bling/helpers/time.lua new file mode 100755 index 0000000..5ab0f25 --- /dev/null +++ b/.config/awesome/extras/bling/helpers/time.lua @@ -0,0 +1,24 @@ +local time = {} + +--- Parse a time string to seconds (from midnight) +-- +-- @string time The time (`HH:MM:SS`) +-- @treturn int The number of seconds since 00:00:00 +function time.hhmmss_to_seconds(time) + hour_sec = tonumber(string.sub(time, 1, 2)) * 3600 + min_sec = tonumber(string.sub(time, 4, 5)) * 60 + get_sec = tonumber(string.sub(time, 7, 8)) + return (hour_sec + min_sec + get_sec) +end + +--- Get time difference in seconds. +-- +-- @tparam string base The time to compare from (`HH:MM:SS`). +-- @tparam string base The time to compare to (`HH:MM:SS`). +-- @treturn int Number of seconds between the two times. +function time.time_diff(base, compare) + local diff = time.hhmmss_to_seconds(base) - time.hhmmss_to_seconds(compare) + return diff +end + +return time diff --git a/.config/awesome/extras/bling/icons/layouts/centered.png b/.config/awesome/extras/bling/icons/layouts/centered.png new file mode 100755 index 0000000000000000000000000000000000000000..5e4d07fb917c43b240117fdc03b0ab3b608768bb GIT binary patch literal 2638 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 E097>LRR910 literal 0 HcmV?d00001 diff --git a/.config/awesome/extras/bling/icons/layouts/deck.png b/.config/awesome/extras/bling/icons/layouts/deck.png new file mode 100755 index 0000000000000000000000000000000000000000..829d0c2810786eff9e3af49bf6af377204ac80c5 GIT binary patch literal 1497 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o7G?$ph6wkZw+sx-aaAD^B|(Yh3I#>^X_+~x z3MG{VsS2qTnQ06R6}R?=MNfLI!Sgp=bTf;JBFpKAk*3x&p5AYMT$aA;ZvT;$+?`LE z6lF_PHc0>fYkk)~V~Wns1=EuHE-r4BF%sXS^8em3z5L`ShriWiZ?Qi)*Uw;y!>Qa0 zhwQX}|Cn88qrx-SXF^?sLc8?7@|;xp^z;9nuRMPExYqi2{keJ1WVYX(Dj?Waar?^I z)@ozsqg@&&x8+Eh{1JV>?Q74xnvcCr@Av)ex~CyL`G;rYuEkE1*-B5i@k%iBn|VAt zwy9Uu@Z6mv+@2A0)n=!>oYb=Pqrk)mE&MuLex9AZ-;Hygwc}LIV;tW5-o8_Bz5m5> zwtG*aOg|h?J3?2 zjq{xDed=DLf34#5B!>H31}X~?&+C&hc`=9O4nF#9#xW1e%0#$kPvJE9`rFYQ&Z zi*kE;&TYEZ;i|Q2d%5_QeLnJAasHjJyZ-0ANE8XrdVBg!d3eB|v!7Qya%#UPl+NuR zuseLg&qp>@GG{j%TG^`FA6aqi#^V**x1V!p-(Kl|@k;-$+poSY5nF%#R-Mw0^lAIv zwb)orzoV>S^62rRGg8Nn?46%F_elIl$A|8J5!+7%Jw}PPFwn>>zVAKKN*m7T;Ti zM*>@{A_YVXuV{%ZbXqAIRcf&F3->G&6-~XqrtE_U`;V?_?%uqPZ(WnZ55`B&o-KKy zr20=^b4$m^2Rr27zq5UJkI`xIp^(klG6ANiJ=7m1nQhnlwnwSKph@D`gd;w+dQ-g) z71!K7eEj-uiSwWAzCV8v`bmwsM(Lx@W!~Gv(fWyLDej+|KXyi@r|(#Gbed}*rAs`Hfkv{t$Obh?(>`dKV}Yf$pq>QCZrpKhHp zx}M3W)aa_C$SP=*rLmZa+c3&B$Y)8W{kw{+#Ut!sb7zT5|ocC9^G zec&nIh5t*u+n#vT&2n1EuxI{7^QR3TbOmCHtFzxe{=#@7ApE5Cg9icmv$7bIB|HnI|BoQXn;?MYkpBKLw*he14C|Zu9=ycl9JN1XU|#+HgqvC zFff(``2{mLJiCzw;v{*yyD)UH%6c#`FmM)lL>4nJ@LmUDMkkHg6$}gvVV*9IAs)w* z6C^|$OhtHE7HD!DWoQm|WQfa8%39dVRCACstl_+NvnNR85jRhk)&ape9IO_5j8-LZ zXeOvGNqF&eUSr4sFOP#0w63woFdpP8YG7bEx;-*sm%HB@1_lNOPgg&ebxsLQ06++{ AQUCw| literal 0 HcmV?d00001 diff --git a/.config/awesome/extras/bling/icons/layouts/equalarea.png b/.config/awesome/extras/bling/icons/layouts/equalarea.png new file mode 100755 index 0000000000000000000000000000000000000000..47164a98770ef5fa6ce165c8db3b9f5adcbfcf8f GIT binary patch literal 5502 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 literal 0 HcmV?d00001 diff --git a/.config/awesome/extras/bling/icons/layouts/horizontal.png b/.config/awesome/extras/bling/icons/layouts/horizontal.png new file mode 100755 index 0000000000000000000000000000000000000000..217f4eb784e78d8b63c378a576f1ce20d72156af GIT binary patch literal 768 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o7G?$ph6wkZw+svn`>H}BN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsF`aMDra{;P~@gq?(1bra)%)HqZPG$L|Ne+~#*E+d*>ai$GtQ^P33pAO2xdI64jLBKAWz7nzpMjB2eBsKQgr~?(*ylP4Tyc#W+7J1~S=n zYfs4JP5Yq3SsWzUUF#nYc3X?4}D<_>Y*7_@d50|R4Arn7T^r?WH6CkzY~ zb808rdK`9;IT|0`Ex*O$hT~C1=h96IVMhX22efc449mEB@X00pj7t-i?6BZk$I5Om zwwh1x+%BsfTul$yJ0>rlyr_H1kNrz7C>?8lT(@WU_Z`*jKcq#M&59LnSQY7JHB(^I z&d`OwMfXZLNfffEroAd&G^6SHk6rEk>&p%2J*|CrUNG#F8gmWPN1e;O-4)FhRhKVW zz87|n@C@oW-+7#Om%>No>#5W4TZqek`+TNjqUU*G_m0*i_S3RwyxP2MTxCK-dO!V* zoGyAUdd^j^-mULW#!H;a);=Ax+_FhUY$J;xQ_7V9H&(HvEm=!ucwDYKblCpQ57(lT zPqdmRCNqYvm>^^SL;laZYdS~N?=A^o;@EfN+i{Hxd$~l#pP#TR9;Xoy<wOhwu zGEZ2zF39}AK}CbGC2vam%fFX=`}TfjSiODrqoO5cy2ncx7#M^Cd_r6q@^cs%7;pn1`?Mr{Coj${GV$g6WWvc1p_N?mDe%1` Q0|Nttr>mdKI;Vst0AwFY!2kdN literal 0 HcmV?d00001 diff --git a/.config/awesome/extras/bling/icons/layouts/mstab.png b/.config/awesome/extras/bling/icons/layouts/mstab.png new file mode 100755 index 0000000000000000000000000000000000000000..4372846a3d5ddff7872e7e15dee1481a05b6518d GIT binary patch literal 1706 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o7G?$ph6wkZw+sv{rd1&kB|(Yh3I#>^X_+~x z3MG{VsS2qTnQ06R6}OIt=N4&e^88sJ{6=s>i-1h~`Bi%l%GFofB|U$7^qWQg>avcr zGcIQSki%6Q-HCyK0b(`PGJ63s>77S3RNM;l?Rv7yt8LWcHJ-&o=Io5q4_0C-3;aS9FU^)(e@#9JVG~&b10Y-(c}cVcnjJPY(BYGAB>b z?2B8{{Vq8&wyT8ql+^ZP-Z9;LXSHsnuF6uGDlK;Jx$f_pxyEU7Ji&<;$$LI+xv1T& zox4^}KsjyAyz>!^(@z{@&QHAZRys|g<@(9lZyEn(Z11)cT%B;?n?btHhPJXD8OO?V zU+OWm&RuB#<*1$6wUltrBX`&g)+|s^3446xpz9pVRVe}?jWH%(%*;7z%nGWj)Cwjq zR6f&NKBqj|(DK+stp~?VRyNOGB${$G<3j&&9^TO4?zCxVbfY(Vc?SDT3;ML>X-w(Y z7tc=K-7LO7viQuj;BRw^Pj2-HT(V?p$et%bUTbG;c3Tzpv8>f~t?#UDH`XkDrn~)8 zR(nm=n`^<}=T*NfJ#j&>z1O7XNub+Y8%5Pwg|~bzr_W2h#=2HFw(zFc>F~JJtJ2x( ztM_j;k9a)U^ybW4Z~h#Ua=UBpzMK2rtDf9BjfR~($7+)qnx^$`o?z*AbH;58Zr2H- zY7Cju=FQHkehUoz#G-2+zdLs)^&ZE@x}&pW68p?v{bPRCvaIgmTj^`Z!Z?4QyD_mf z+NW9R_q1nPKeFeBq`%tqzvbfj>R-z2ve_S&>aO+EEzf7}k+>~m$SHFFb5o)SZ>8sV zk+L5h4-1>Q{#E-w_g%SgP28~vquA$0A@0ph2LggUFJ#QWHCtg@o!ilpsy&H|uG$;S zJSMs)qu3?)*NUmHy@Fz5u|*Pk|I)d(%}xo;aV z`}pgH>o3jQTlfCu#)G9M(f;Qzt_WkFU2L*pWzB|8W*#r^Hknx(YXYUMzHPl%@gzB~ zM$W6Cdt0-y%kHWB_+B36t2}zETC=4#(){MulEa4zr+$3L^wP1WF7^Ryddbwy;pbjh zieI02F;sp1go~mZV;$YzTUEBaQCf8U#EY#z)+;W~p7}*eGS>g}^Aj)j%GAG^vToS{ z?UXN@Uwz&kTxD)4uei8;@@H4c%KbSt!ESY7W^q#{&R1S+ubc6|c%|;u&5u@GoTesY z%4W7aH~mmxz>2H2*_ZxqG1PnOGym7`i4EtB8Ov65eC(9vk}K4^)WNH@%wPISu}{nA z^Zf?3w(~BC>V&I!zF+d}_wiY+%7q92i~nc(x7;9cO~0Bo0|R4Arn7T^r?WGx0AXOL zm{U8^*5j~)%+dH@SItmC>kf{z6@Fq}T^3oQT>%TPaILkP5%Y`HS89@oxckAa4;~y( zx_arJQg=Wz3J+Zd-T3I2RUF=^w4V@1-N7cCU>7i<>|U0kF1 zc+;WE?#)r_Ha)Zb$=z(3n>zEgNxR^2rD+pdI3z=-1hlnstd-JK3)&+8`2)Y@Kb4&+ zMNoh1o8FKRZv?GId#EuL{D=lAa$+oaVS{!8w-6!p(b zcE(SYz1J=sa(B3IR#15N(i7VUMeGtamsFjLRP22f=d<5C|6=y00|#^kB8scC-#z}q z=n)*=DgEGqfP{9yw_V3~@4j9A`@7HP{qoaTi?(jR9tJAubpw1tT#Hik84?*77#I}6 zKv`K?2{+g&_-G;n0|R48kY6x^!?PP{AWo9Ey9+}HtE>kD0|RG)M`SSr1MhVZW^~e+ zUBSS>VBzWF7~*j}IYC0CL6?_PWx)sG16-E^7_{cwu(GT@z`(qqf$yQgs)Ue(E1CjX j7jv=AXKK3osDYV5V6Wcph`r|1LC*7Z^>bP0l+XkKS}hW0 literal 0 HcmV?d00001 diff --git a/.config/awesome/extras/bling/icons/layouts/vertical.png b/.config/awesome/extras/bling/icons/layouts/vertical.png new file mode 100755 index 0000000000000000000000000000000000000000..356167335c75db3df2598cd7bd7e1a11f7086c7c GIT binary patch literal 767 zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o7G?$ph6wkZw+svnd#gesN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsF`aMDra{;P~@gq?&~>Ugr2RvzNTzeprX@T08lJRDj#c`t!|p z;wl_RL$bEbVHVJxWujv0bK`@|qYum%qgRN}`^U?;w8QH3rJ8+>{^uL3+4HsiuUZHF zRm#63{%ULFgg5yUAEbVI<8|Vf&!(%NrtR{K2$Z+Zi%e}>z06#YyDrl|Vu@00B=epX z+7~i;(>^TXEM8M-;KQ-znb!x!)1NCuUF}!qhgk7mR_$V7U~I{Bb`J1#c7}O`fuUkf z?L=FT!wxb>dDkZtG$1Hx#7I0weQXghJ8|Fu3`G9bD6ihqPe2#@+Hgn z!tN2CK^^BikMr(Q_^5n6b^3h^aoKO5&vZ=mJTL6t(VE15TK0@ro0pBNOlU~&r@xWY zMbAagx$4!s_1(#MiBs9yr(>2|HmQhhWD#Uaxf0;UDweb*Ysn0c%XNni+rRnYT6FS> zR`bMU#?TcLWbA*)|9N*!=ZN~_wv`)+(Yu5n>6x5?{me`|AYpA}a4z!Q_1Tfdd@ zOwFXY{OpU$3+knJ?8wXhBv-JLnaA$sBt^@hhGqK$819{aF}vu%0o@DRpMAS_>-bCN z2@BT+nIAZ)Xb`sKO=*Am_mXel-p>rHx6gi5w4_Y;cnJdogHV7^h$};W4g&*2Zf>rb znVFK3(z9pJ7|v$eFfcGMmIV0)GdMiEk;cHlz**oCSz2Mi2pR>>8PC$Ilu QU|?YIboFyt=akR{0NSBTfB*mh literal 0 HcmV?d00001 diff --git a/.config/awesome/extras/bling/images/bling_banner-2x.png b/.config/awesome/extras/bling/images/bling_banner-2x.png new file mode 100755 index 0000000000000000000000000000000000000000..9e2ab30d3f861912359ab23d6474276cf9da07ba GIT binary patch literal 253618 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

a}%759;Zz0=Dg)|=;9f*bDgzD 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%0A^vZb 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 literal 0 HcmV?d00001 diff --git a/.config/awesome/extras/bling/images/bling_banner.png b/.config/awesome/extras/bling/images/bling_banner.png new file mode 100755 index 0000000000000000000000000000000000000000..43de6c9ceae568c9ffe1d505dfcc9f441ffb5118 GIT binary patch literal 78099 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 literal 0 HcmV?d00001 diff --git a/.config/awesome/extras/bling/init.lua b/.config/awesome/extras/bling/init.lua new file mode 100755 index 0000000..93bde56 --- /dev/null +++ b/.config/awesome/extras/bling/init.lua @@ -0,0 +1,7 @@ +return { + layout = require(... .. ".layout"), + --module = require(... .. ".module"), + --helpers = require(... .. ".helpers"), + --signal = require(... .. ".signal"), + --widget = require(... .. ".widget"), +} diff --git a/.config/awesome/extras/bling/layout/centered.lua b/.config/awesome/extras/bling/layout/centered.lua new file mode 100755 index 0000000..4e1ad24 --- /dev/null +++ b/.config/awesome/extras/bling/layout/centered.lua @@ -0,0 +1,84 @@ +local awful = require("awful") +local math = math + +local mylayout = {} + +mylayout.name = "centered" + +function mylayout.arrange(p) + local area = p.workarea + local t = p.tag or screen[p.screen].selected_tag + local mwfact = t.master_width_factor + local nmaster = math.min(t.master_count, #p.clients) + local nslaves = #p.clients - nmaster + + local master_area_width = area.width * mwfact + local slave_area_width = area.width - master_area_width + local master_area_x = area.x + 0.5 * slave_area_width + + local number_of_left_sided_slaves = math.floor(nslaves / 2) + local number_of_right_sided_slaves = nslaves - number_of_left_sided_slaves + local left_iterator = 0 + local right_iterator = 0 + + -- Special case: no maters -> rrelapse into awesomes fair layout + if t.master_count == 0 then + awful.layout.suit.fair.arrange(p) + return + end + + -- Special case: one slave -> relapse into awesomes masterstack tile layout + if nslaves == 1 then + awful.layout.suit.tile.right.arrange(p) + return + end + + -- Special case: no slaves -> fullscreen master area + if nslaves < 1 then + master_area_width = area.width + master_area_x = area.x + end + + -- iterate through masters + for idx = 1, nmaster do + local c = p.clients[idx] + local g + g = { + x = master_area_x, + y = area.y + (nmaster - idx) * (area.height / nmaster), + width = master_area_width, + height = area.height / nmaster, + } + p.geometries[c] = g + end + + -- iterate through slaves + for idx = 1, nslaves do -- idx=nmaster+1,#p.clients do + local c = p.clients[idx + nmaster] + local g + if idx % 2 == 0 then + g = { + x = area.x, + y = area.y + + left_iterator + * (area.height / number_of_left_sided_slaves), + width = slave_area_width / 2, + height = area.height / number_of_left_sided_slaves, + } + left_iterator = left_iterator + 1 + else + g = { + x = area.x + master_area_width + slave_area_width / 2, + y = area.y + + right_iterator + * (area.height / number_of_right_sided_slaves), + width = slave_area_width / 2, + height = area.height / number_of_right_sided_slaves, + } + right_iterator = right_iterator + 1 + end + p.geometries[c] = g + end +end + +return mylayout diff --git a/.config/awesome/extras/bling/layout/deck.lua b/.config/awesome/extras/bling/layout/deck.lua new file mode 100755 index 0000000..e0500b9 --- /dev/null +++ b/.config/awesome/extras/bling/layout/deck.lua @@ -0,0 +1,37 @@ +local mylayout = {} + +mylayout.name = "deck" + +function mylayout.arrange(p) + local area = p.workarea + local t = p.tag or screen[p.screen].selected_tag + local client_count = #p.clients + + if client_count == 1 then + local c = p.clients[1] + local g = { + x = area.x, + y = area.y, + width = area.width, + height = area.height, + } + p.geometries[c] = g + return + end + + local xoffset = area.width * 0.1 / (client_count - 1) + local yoffset = area.height * 0.1 / (client_count - 1) + + for idx = 1, client_count do + local c = p.clients[idx] + local g = { + x = area.x + (idx - 1) * xoffset, + y = area.y + (idx - 1) * yoffset, + width = area.width - (xoffset * (client_count - 1)), + height = area.height - (yoffset * (client_count - 1)), + } + p.geometries[c] = g + end +end + +return mylayout diff --git a/.config/awesome/extras/bling/layout/equalarea.lua b/.config/awesome/extras/bling/layout/equalarea.lua new file mode 100755 index 0000000..37e972d --- /dev/null +++ b/.config/awesome/extras/bling/layout/equalarea.lua @@ -0,0 +1,77 @@ +local math = math +local screen = screen +local mylayout = {} +mylayout.name = "equalarea" + +local function divide(p, g, low, high, cls, mwfact, mcount) + if low == high then + p.geometries[cls[low]] = g + else + local masters = math.max(0, math.min(mcount, high) - low + 1) + local numblock = high - low + 1 + local slaves = numblock - masters + local smalldiv + if numblock > 5 and (numblock % 5) == 0 then + smalldiv = math.floor(numblock / 5) + else + if (numblock % 3) == 0 then + smalldiv = math.floor(numblock / 3) + else + smalldiv = math.floor(numblock / 2) + end + end + local bigdiv = numblock - smalldiv + local smallmasters = math.min(masters, smalldiv) + local bigmasters = masters - smallmasters + local smallg = {} + local bigg = {} + smallg.x = g.x + smallg.y = g.y + if g.width > (g.height * 1.3) then + smallg.height = g.height + bigg.height = g.height + bigg.width = math.floor( + g.width + * (bigmasters * (mwfact - 1) + bigdiv) + / (slaves + mwfact * masters) + ) + smallg.width = g.width - bigg.width + bigg.y = g.y + bigg.x = g.x + smallg.width + else + smallg.width = g.width + bigg.width = g.width + bigg.height = math.floor( + g.height + * (bigmasters * (mwfact - 1) + bigdiv) + / (slaves + mwfact * masters) + ) + smallg.height = g.height - bigg.height + bigg.x = g.x + bigg.y = g.y + smallg.height + end + divide(p, smallg, low, high - bigdiv, cls, mwfact, mcount) + divide(p, bigg, low + smalldiv, high, cls, mwfact, mcount) + end + return +end + +function mylayout.arrange(p) + local t = p.tag or screen[p.screen].selected_tag + local wa = p.workarea + local cls = p.clients + + if #cls == 0 then + return + end + local mwfact = t.master_width_factor * 2 + local mcount = t.master_count + local g = {} + g.height = wa.height + g.width = wa.width + g.x = wa.x + g.y = wa.y + divide(p, g, 1, #cls, cls, mwfact, mcount) +end + +return mylayout diff --git a/.config/awesome/extras/bling/layout/horizontal.lua b/.config/awesome/extras/bling/layout/horizontal.lua new file mode 100755 index 0000000..23f9c9e --- /dev/null +++ b/.config/awesome/extras/bling/layout/horizontal.lua @@ -0,0 +1,56 @@ +local math = math + +local mylayout = {} + +mylayout.name = "horizontal" + +function mylayout.arrange(p) + local area = p.workarea + local t = p.tag or screen[p.screen].selected_tag + local mwfact = t.master_width_factor + local nmaster = math.min(t.master_count, #p.clients) + local nslaves = #p.clients - nmaster + + local master_area_height = area.height * mwfact + local slave_area_height = area.height - master_area_height + + -- Special case: no slaves + if nslaves == 0 then + master_area_height = area.height + slave_area_height = 0 + end + + -- Special case: no masters + if nmaster == 0 then + master_area_height = 0 + slave_area_height = area.height + end + + -- itearte through masters + for idx = 1, nmaster do + local c = p.clients[idx] + local g = { + x = area.x + (idx - 1) * (area.width / nmaster), + y = area.y, + width = area.width / nmaster, + height = master_area_height, + } + p.geometries[c] = g + end + + -- iterate through slaves + for idx = 1, nslaves do + local c = p.clients[idx + nmaster] + local g = { + x = area.x, + y = area.y + + master_area_height + + (idx - 1) * (slave_area_height / nslaves), + width = area.width, + height = slave_area_height / nslaves, + } + p.geometries[c] = g + end +end + +return mylayout diff --git a/.config/awesome/extras/bling/layout/init.lua b/.config/awesome/extras/bling/layout/init.lua new file mode 100755 index 0000000..a57dd6a --- /dev/null +++ b/.config/awesome/extras/bling/layout/init.lua @@ -0,0 +1,44 @@ +local beautiful = require("beautiful") +local gears = require("gears") + +local M = {} +local relative_lua_path = tostring(...) + +local function get_layout_icon_path(name) + local relative_icon_path = relative_lua_path + :match("^.*bling"):gsub("%.", "/") + .. "/icons/layouts/" .. name .. ".png" + + for p in package.path:gmatch('([^;]+)') do + p = p:gsub("?.*", "") + local absolute_icon_path = p .. relative_icon_path + if gears.filesystem.file_readable(absolute_icon_path) then + return absolute_icon_path + end + end +end + +local function get_icon(icon_raw) + if icon_raw ~= nil then + return gears.color.recolor_image(icon_raw, "#e6e6e6") + else + return nil + end +end + +local layouts = { + "mstab", + "vertical", + "horizontal", + "centered", + "equalarea", + "deck" +} + +for _, layout_name in ipairs(layouts) do + local icon_raw = get_layout_icon_path(layout_name) + beautiful["layout_" .. layout_name] = get_icon(icon_raw) + M[layout_name] = require(... .. "." .. layout_name) +end + +return M diff --git a/.config/awesome/extras/bling/layout/mstab.lua b/.config/awesome/extras/bling/layout/mstab.lua new file mode 100755 index 0000000..93ceb0e --- /dev/null +++ b/.config/awesome/extras/bling/layout/mstab.lua @@ -0,0 +1,249 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") + +local mylayout = {} + +mylayout.name = "mstab" + +local tabbar_disable = beautiful.mstab_bar_disable or false +local tabbar_ontop = beautiful.mstab_bar_ontop or false +local tabbar_padding = beautiful.mstab_bar_padding or "default" +local border_radius = beautiful.mstab_border_radius + or beautiful.border_radius + or 0 +local tabbar_position = beautiful.mstab_tabbar_position + or beautiful.tabbar_position + or "top" + +local bar_style = beautiful.mstab_tabbar_style + or beautiful.tabbar_style + or "default" +local bar = require( + tostring(...):match(".*bling") .. ".widget.tabbar." .. bar_style +) +local tabbar_size = bar.size + or beautiful.mstab_bar_height + or beautiful.tabbar_size + or 40 +local dont_resize_slaves = beautiful.mstab_dont_resize_slaves or false + +-- The top_idx is the idx of the slave clients (excluding all master clients) +-- that should be on top of all other slave clients ("the focused slave") +-- by creating a variable outside of the arrange function, this layout can "remember" that client +-- by creating it as a new property of every tag, this layout can be active on different tags and +-- still have different "focused slave clients" +for idx, tag in ipairs(root.tags()) do + tag.top_idx = 1 +end + +-- Haven't found a signal that is emitted when a new tag is added. That should work though +-- since you can't use a layout on a tag that you haven't selected previously +tag.connect_signal("property::selected", function(t) + if not t.top_idx then + t.top_idx = 1 + end +end) + +function update_tabbar( + clients, + t, + top_idx, + area, + master_area_width, + slave_area_width +) + local s = t.screen + + -- create the list of clients for the tabbar + local clientlist = bar.layout() + for idx, c in ipairs(clients) do + -- focus with right click, kill with mid click, minimize with left click + local buttons = gears.table.join( + awful.button({}, 1, function() + c:raise() + client.focus = c + end), + awful.button({}, 2, function() + c:kill() + end), + awful.button({}, 3, function() + c.minimized = true + end) + ) + local client_box = bar.create(c, (idx == top_idx), buttons) + clientlist:add(client_box) + end + + -- if no tabbar exists, create one + if not s.tabbar then + s.tabbar = wibox({ + ontop = tabbar_ontop, + shape = function(cr, width, height) + gears.shape.rounded_rect(cr, width, height, border_radius) + end, + bg = bar.bg_normal, + visible = true, + }) + + -- Change visibility of the tab bar when layout, selected tag or number of clients (visible, master, slave) changes + local function adjust_visiblity(t) + s.tabbar.visible = (#t:clients() - t.master_count > 1) + and (t.layout.name == mylayout.name) + end + + tag.connect_signal("property::selected", function(t) + adjust_visiblity(t) + end) + tag.connect_signal("property::layout", function(t, layout) + adjust_visiblity(t) + end) + tag.connect_signal("tagged", function(t, c) + adjust_visiblity(t) + end) + tag.connect_signal("untagged", function(t, c) + adjust_visiblity(t) + end) + tag.connect_signal("property::master_count", function(t) + adjust_visiblity(t) + end) + client.connect_signal("property::minimized", function(c) + local t = c.first_tag + adjust_visiblity(t) + end) + end + + -- update the tabbar size and position (to support gap size change on the fly) + if tabbar_position == "top" then + s.tabbar.x = area.x + master_area_width + t.gap + s.tabbar.y = area.y + t.gap + s.tabbar.width = slave_area_width - 2 * t.gap + s.tabbar.height = tabbar_size + elseif tabbar_position == "bottom" then + s.tabbar.x = area.x + master_area_width + t.gap + s.tabbar.y = area.y + area.height - tabbar_size - t.gap + s.tabbar.width = slave_area_width - 2 * t.gap + s.tabbar.height = tabbar_size + elseif tabbar_position == "left" then + s.tabbar.x = area.x + master_area_width + t.gap + s.tabbar.y = area.y + t.gap + s.tabbar.width = tabbar_size + s.tabbar.height = area.height - 2 * t.gap + elseif tabbar_position == "right" then + s.tabbar.x = area.x + + master_area_width + + slave_area_width + - tabbar_size + - t.gap + s.tabbar.y = area.y + t.gap + s.tabbar.width = tabbar_size + s.tabbar.height = area.height - 2 * t.gap + end + + -- update clientlist + s.tabbar:setup({ layout = wibox.layout.flex.horizontal, clientlist }) +end + +function mylayout.arrange(p) + local area = p.workarea + local t = p.tag or screen[p.screen].selected_tag + local s = t.screen + local mwfact = t.master_width_factor + local nmaster = math.min(t.master_count, #p.clients) + local nslaves = #p.clients - nmaster + + local master_area_width = area.width * mwfact + local slave_area_width = area.width - master_area_width + + -- "default" means that it uses standard useless gap size + if tabbar_padding == "default" then + tabbar_padding = 2 * t.gap + end + + -- Special case: No masters -> full screen slave width + if nmaster == 0 then + master_area_width = 1 + slave_area_width = area.width + end + + -- Special case: One or zero slaves -> no tabbar (essentially tile right) + if nslaves <= 1 then + -- since update_tabbar isnt called that way we have to hide it manually + if s.tabbar then + s.tabbar.visible = false + end + -- otherwise just do tile right + awful.layout.suit.tile.right.arrange(p) + return + end + + -- Iterate through masters + for idx = 1, nmaster do + local c = p.clients[idx] + local g = { + x = area.x, + y = area.y + (idx - 1) * (area.height / nmaster), + width = master_area_width, + height = area.height / nmaster, + } + p.geometries[c] = g + end + + local tabbar_size_change = 0 + local tabbar_width_change = 0 + local tabbar_y_change = 0 + local tabbar_x_change = 0 + if not tabbar_disable then + if tabbar_position == "top" then + tabbar_size_change = tabbar_size + tabbar_padding + tabbar_y_change = tabbar_size + tabbar_padding + elseif tabbar_position == "bottom" then + tabbar_size_change = tabbar_size + tabbar_padding + elseif tabbar_position == "left" then + tabbar_width_change = tabbar_size + tabbar_padding + tabbar_x_change = tabbar_size + tabbar_padding + elseif tabbar_position == "right" then + tabbar_width_change = tabbar_size + tabbar_padding + end + end + + -- Iterate through slaves + -- (also creates a list of all slave clients for update_tabbar) + local slave_clients = {} + for idx = 1, nslaves do + local c = p.clients[idx + nmaster] + slave_clients[#slave_clients + 1] = c + if c == client.focus then + t.top_idx = #slave_clients + end + local g = { + x = area.x + master_area_width + tabbar_x_change, + y = area.y + tabbar_y_change, + width = slave_area_width - tabbar_width_change, + height = area.height - tabbar_size_change, + } + if not dont_resize_slaves and idx ~= t.top_idx then + g = { + x = area.x + master_area_width + slave_area_width / 4, + y = area.y + tabbar_size + area.height / 4, + width = slave_area_width / 2, + height = area.height / 4 - tabbar_size, + } + end + p.geometries[c] = g + end + + if not tabbar_disable then + update_tabbar( + slave_clients, + t, + t.top_idx, + area, + master_area_width, + slave_area_width + ) + end +end + +return mylayout diff --git a/.config/awesome/extras/bling/layout/vertical.lua b/.config/awesome/extras/bling/layout/vertical.lua new file mode 100755 index 0000000..8b6811e --- /dev/null +++ b/.config/awesome/extras/bling/layout/vertical.lua @@ -0,0 +1,56 @@ +local math = math + +local mylayout = {} + +mylayout.name = "vertical" + +function mylayout.arrange(p) + local area = p.workarea + local t = p.tag or screen[p.screen].selected_tag + local mwfact = t.master_width_factor + local nmaster = math.min(t.master_count, #p.clients) + local nslaves = #p.clients - nmaster + + local master_area_width = area.width * mwfact + local slave_area_width = area.width - master_area_width + + -- Special case: no slaves + if nslaves == 0 then + master_area_width = area.width + slave_area_width = 0 + end + + -- Special case: no masters + if nmaster == 0 then + master_area_width = 0 + slave_area_width = area.width + end + + -- iterate through masters + for idx = 1, nmaster do + local c = p.clients[idx] + local g = { + x = area.x, + y = area.y + (idx - 1) * (area.height / nmaster), + width = master_area_width, + height = area.height / nmaster, + } + p.geometries[c] = g + end + + -- itearte through slaves + for idx = 1, nslaves do + local c = p.clients[idx + nmaster] + local g = { + x = area.x + + master_area_width + + (idx - 1) * (slave_area_width / nslaves), + y = area.y, + width = slave_area_width / nslaves, + height = area.height, + } + p.geometries[c] = g + end +end + +return mylayout diff --git a/.config/awesome/extras/bling/module/flash_focus.lua b/.config/awesome/extras/bling/module/flash_focus.lua new file mode 100755 index 0000000..2fe3f47 --- /dev/null +++ b/.config/awesome/extras/bling/module/flash_focus.lua @@ -0,0 +1,44 @@ +local gears = require("gears") +local beautiful = require("beautiful") + +local op = beautiful.flash_focus_start_opacity or 0.6 +local stp = beautiful.flash_focus_step or 0.01 + +local flashfocus = function(c) + if c then + c.opacity = op + local q = op + local g = gears.timer({ + timeout = stp, + call_now = false, + autostart = true, + }) + + g:connect_signal("timeout", function() + if not c.valid then + return + end + if q >= 1 then + c.opacity = 1 + g:stop() + else + c.opacity = q + q = q + stp + end + end) + end + + -- Bring the focused client to the top + if c then + c:raise() + end +end + +local enable = function() + client.connect_signal("focus", flashfocus) +end +local disable = function() + client.disconnect_signal("focus", flashfocus) +end + +return { enable = enable, disable = disable, flashfocus = flashfocus } diff --git a/.config/awesome/extras/bling/module/init.lua b/.config/awesome/extras/bling/module/init.lua new file mode 100755 index 0000000..ed127f6 --- /dev/null +++ b/.config/awesome/extras/bling/module/init.lua @@ -0,0 +1,8 @@ +return { + window_swallowing = require(... .. ".window_swallowing"), + tiled_wallpaper = require(... .. ".tiled_wallpaper"), + wallpaper = require(... .. ".wallpaper"), + flash_focus = require(... .. ".flash_focus"), + tabbed = require(... .. ".tabbed"), + scratchpad = require(... .. ".scratchpad"), +} diff --git a/.config/awesome/extras/bling/module/scratchpad.lua b/.config/awesome/extras/bling/module/scratchpad.lua new file mode 100755 index 0000000..6f1bf8b --- /dev/null +++ b/.config/awesome/extras/bling/module/scratchpad.lua @@ -0,0 +1,374 @@ +local awful = require("awful") +local gears = require("gears") +local naughty = require("naughty") +local helpers = require(tostring(...):match(".*bling") .. ".helpers") +local capi = { awesome = awesome, client = client } +local ruled = capi.awesome.version ~= "v4.3" and require("ruled") or nil +local pairs = pairs + +local Scratchpad = { mt = {} } + +--- Called when the turn off animation has ended +local function on_animate_turn_off_end(self, tag) + -- When toggling off a scratchpad that's present on multiple tags + -- depsite still being unminizmied on the other tags it will become invisible + -- as it's position could be outside the screen from the animation + self.client:geometry({ + x = self.geometry.x + self.client.screen.geometry.x, + y = self.geometry.y + self.client.screen.geometry.y, + width = self.geometry.width, + height = self.geometry.height, + }) + + helpers.client.turn_off(self.client, tag) + + self.turning_off = false + + self:emit_signal("turn_off", self.client) +end + +--- The turn off animation +local function animate_turn_off(self, anim, axis) + self.screen_on_toggled_scratchpad = self.client.screen + self.tag_on_toggled_scratchpad = self.screen_on_toggled_scratchpad.selected_tag + + if self.client.floating == false then + -- Save the client geometry before floating it + local non_floating_x = self.client.x + local non_floating_y = self.client.y + local non_floating_width = self.client.width + local non_floating_height = self.client.height + + -- Can't animate non floating clients + self.client.floating = true + + -- Set the client geometry back to what it was before floating it + self.client:geometry({ + x = non_floating_x, + y = non_floating_y, + width = non_floating_width, + height = non_floating_height, + }) + end + + if axis == "x" then + anim.pos = self.client.x + else + anim.pos = self.client.y + end + + anim:set(anim:initial()) +end + +-- Handles changing tag mid animation +local function abort_if_tag_was_switched(self) + -- Check for the following scenerio: + -- Toggle on scratchpad at tag 1 + -- Toggle on scratchpad at tag 2 + -- Toggle off scratchpad at tag 1 + -- Switch to tag 2 + -- Outcome: The client will remain on tag 1 and will instead be removed from tag 2 + if (self.turning_off) and (self.screen_on_toggled_scratchpad and + self.screen_on_toggled_scratchpad.selected_tag) ~= self.tag_on_toggled_scratchpad + then + if self.rubato.x then + self.rubato.x:abort() + end + if self.rubato.y then + self.rubato.y:abort() + end + on_animate_turn_off_end(self, self.tag_on_toggled_scratchpad) + self.screen_on_toggled_scratchpad.selected_tag = nil + self.tag_on_toggled_scratchpad = nil + end +end + +--- The turn on animation +local function animate_turn_on(self, anim, axis) + -- Check for the following scenerio: + -- Toggle on scratchpad at tag 1 + -- Toggle on scratchpad at tag 2 + -- The animation will instantly end + -- as the timer pos is already at the on position + -- from toggling on the scratchpad at tag 1 + if axis == "x" and anim.pos == self.geometry.x then + anim.pos = anim:initial() + else + if anim.pos == self.geometry.y then + anim.pos = anim:initial() + end + end + + if axis == "x" then + anim:set(self.geometry.x) + else + anim:set(self.geometry.y) + end +end + +--- Creates a new scratchpad object based on the argument +-- +-- @param args A table of possible arguments +-- @return The new scratchpad object +function Scratchpad:new(args) + args = args or {} + if args.awestore then + naughty.notify({ + title = "Bling Error", + text = "Awestore is no longer supported! Please take a look at the scratchpad documentation and use rubato for animations instead.", + }) + end + + args.rubato = args.rubato or {} + + local ret = gears.object{} + gears.table.crush(ret, Scratchpad) + gears.table.crush(ret, args) + + if ret.rubato.x then + ret.rubato.x:subscribe(function(pos) + if ret.client and ret.client.valid then + ret.client.x = pos + end + abort_if_tag_was_switched(ret) + end) + + ret.rubato.x.ended:subscribe(function() + if ((ret.rubato.y and ret.rubato.y.state == false) or (ret.rubato.y == nil)) and ret.turning_off == true then + on_animate_turn_off_end(ret) + end + end) + end + if ret.rubato.y then + ret.rubato.y:subscribe(function(pos) + if ret.client and ret.client.valid then + ret.client.y = pos + end + abort_if_tag_was_switched(ret) + end) + + ret.rubato.y.ended:subscribe(function() + if ((ret.rubato.x and ret.rubato.x.state == false) or (ret.rubato.x == nil)) and ret.turning_off == true then + on_animate_turn_off_end(ret) + end + end) + end + + return ret +end + +--- Find all clients that satisfy the the rule +-- +-- @return A list of all clients that satisfy the rule +function Scratchpad:find() + return helpers.client.find(self.rule) +end + +--- Applies the objects scratchpad properties to a given client +-- +-- @param c A client to which to apply the properties +function Scratchpad:apply(c) + if not c or not c.valid then + return + end + c.floating = self.floating + c.sticky = self.sticky + c.fullscreen = false + c.maximized = false + c:geometry({ + x = self.geometry.x + awful.screen.focused().geometry.x, + y = self.geometry.y + awful.screen.focused().geometry.y, + width = self.geometry.width, + height = self.geometry.height, + }) + + if self.autoclose then + c:connect_signal("unfocus", function(c1) + c1.sticky = false -- client won't turn off if sticky + helpers.client.turn_off(c1) + end) + end +end + +--- Turns the scratchpad on +function Scratchpad:turn_on() + self.client = self:find()[1] + + local anim_x = self.rubato.x + local anim_y = self.rubato.y + + local in_anim = false + if (anim_x and anim_x.state == true) or (anim_y and anim_y.state == true) then + in_anim = true + end + + if self.client and not in_anim and self.client.first_tag and self.client.first_tag.selected then + self.client:raise() + capi.client.focus = self.client + return + end + if self.client and not in_anim then + -- if a client was found, turn it on + if self.reapply then + self:apply(self.client) + end + -- c.sticky was set to false in turn_off so it has to be reapplied anyway + self.client.sticky = self.sticky + + if anim_x then + animate_turn_on(self, anim_x, "x") + end + if anim_y then + animate_turn_on(self, anim_y, "y") + end + + helpers.client.turn_on(self.client) + self:emit_signal("turn_on", self.client) + + return + end + if not self.client then + -- if no client was found, spawn one, find the corresponding window, + -- apply the properties only once (until the next closing) + local pid = awful.spawn.with_shell(self.command) + if capi.awesome.version ~= "v4.3" then + ruled.client.append_rule({ + id = "scratchpad", + rule = self.rule, + properties = { + -- If a scratchpad is opened it should spawn at the current tag + -- the same way it will behave if the client was already open + tag = awful.screen.focused().selected_tag, + switch_to_tags = false, + -- Hide the client until the gemoetry rules are applied + hidden = true, + minimized = true, + }, + callback = function(c) + -- For a reason I can't quite get the gemotery rules will fail to apply unless we use this timer + gears.timer({ + timeout = 0.15, + autostart = true, + single_shot = true, + callback = function() + self.client = c + + self:apply(c) + c.hidden = false + c.minimized = false + -- Some clients fail to gain focus + c:activate({}) + + if anim_x then + animate_turn_on(self, anim_x, "x") + end + if anim_y then + animate_turn_on(self, anim_y, "y") + end + + self:emit_signal("inital_apply", c) + + -- Discord spawns 2 windows, so keep the rule until the 2nd window shows + if c.name ~= "Discord Updater" then + ruled.client.remove_rule("scratchpad") + end + -- In a case Discord is killed before the second window spawns + c:connect_signal("request::unmanage", function() + ruled.client.remove_rule("scratchpad") + end) + end, + }) + end, + }) + else + local function inital_apply(c1) + if helpers.client.is_child_of(c1, pid) then + self.client = c1 + + self:apply(c1) + if anim_x then + animate_turn_on(self, anim_x, "x") + end + if anim_y then + animate_turn_on(self, anim_y, "y") + end + self:emit_signal("inital_apply", c1) + self.client.disconnect_signal("manage", inital_apply) + end + end + self.client.connect_signal("manage", inital_apply) + end + end +end + +--- Turns the scratchpad off +function Scratchpad:turn_off() + self.client = self:find()[1] + + -- Get the tweens + local anim_x = self.rubato.x + local anim_y = self.rubato.y + + local in_anim = false + if (anim_x and anim_x.state == true) or (anim_y and anim_y.state == true) then + in_anim = true + end + + if self.client and not in_anim then + if anim_x then + self.turning_off = true + animate_turn_off(self, anim_x, "x") + end + if anim_y then + self.turning_off = true + animate_turn_off(self, anim_y, "y") + end + + if not anim_x and not anim_y then + helpers.client.turn_off(self.client) + self:emit_signal("turn_off", self.client) + end + end +end + +--- Turns the scratchpad off if it is focused otherwise it raises the scratchpad +function Scratchpad:toggle() + local is_turn_off = false + local c = self:find()[1] + if self.dont_focus_before_close then + if c then + if c.sticky and #c:tags() > 0 then + is_turn_off = true + else + local current_tag = c.screen.selected_tag + for k, tag in pairs(c:tags()) do + if tag == current_tag then + is_turn_off = true + break + else + is_turn_off = false + end + end + end + end + else + is_turn_off = capi.client.focus + and awful.rules.match(capi.client.focus, self.rule) + end + + if is_turn_off then + self:turn_off() + else + self:turn_on() + end +end + +--- Make the module callable without putting a `:new` at the end of it +-- +-- @param args A table of possible arguments +-- @return The new scratchpad object +function Scratchpad.mt:__call(...) + return Scratchpad:new(...) +end + +return setmetatable(Scratchpad, Scratchpad.mt) diff --git a/.config/awesome/extras/bling/module/tabbed.lua b/.config/awesome/extras/bling/module/tabbed.lua new file mode 100755 index 0000000..c53ec03 --- /dev/null +++ b/.config/awesome/extras/bling/module/tabbed.lua @@ -0,0 +1,274 @@ +--[[ + +This module currently works by adding a new property to each client that is tabbed. +That new property is called bling_tabbed. +So each client in a tabbed state has the property "bling_tabbed" which is a table. +Each client that is not tabbed doesn't have that property. +In the function themselves, the same object is refered to as "tabobj" which is why +you will often see something like: "local tabobj = some_client.bling_tabbed" at the beginning +of a function. + +--]] + +local awful = require("awful") +local wibox = require("wibox") +local gears = require("gears") +local beautiful = require("beautiful") +local helpers = require(tostring(...):match(".*bling") .. ".helpers") + +local bar_style = beautiful.tabbar_style or "default" +local bar = require( + tostring(...):match(".*bling") .. ".widget.tabbar." .. bar_style +) + +tabbed = {} + +-- helper function to connect to the (un)focus signals +local function update_tabbar_from(c) + if not c or not c.bling_tabbed then + return + end + tabbed.update_tabbar(c.bling_tabbed) +end + +-- used to change focused tab relative to the currently focused one +tabbed.iter = function(idx) + if not idx then + idx = 1 + end + if not client.focus or not client.focus.bling_tabbed then + return + end + local tabobj = client.focus.bling_tabbed + local new_idx = (tabobj.focused_idx + idx) % #tabobj.clients + if new_idx == 0 then + new_idx = #tabobj.clients + end + tabbed.switch_to(tabobj, new_idx) +end + +-- removes a given client from its tab object +tabbed.remove = function(c) + if not c or not c.bling_tabbed then + return + end + local tabobj = c.bling_tabbed + table.remove(tabobj.clients, tabobj.focused_idx) + if not beautiful.tabbar_disable then + awful.titlebar.hide(c, bar.position) + end + c.bling_tabbed = nil + c:disconnect_signal("focus", update_tabbar_from) + c:disconnect_signal("unfocus", update_tabbar_from) + awesome.emit_signal("bling::tabbed::client_removed", tabobj, c) + tabbed.switch_to(tabobj, 1) +end + +-- removes the currently focused client from the tab object +tabbed.pop = function() + if not client.focus or not client.focus.bling_tabbed then + return + end + tabbed.remove(client.focus) +end + +-- adds a client to a given tabobj +tabbed.add = function(c, tabobj) + if c.bling_tabbed then + tabbed.remove(c) + end + c:connect_signal("focus", update_tabbar_from) + c:connect_signal("unfocus", update_tabbar_from) + helpers.client.sync(c, tabobj.clients[tabobj.focused_idx]) + tabobj.clients[#tabobj.clients + 1] = c + tabobj.focused_idx = #tabobj.clients + -- calls update even though switch_to calls update again + -- but the new client needs to have the tabobj property + -- before a clean switch can happen + tabbed.update(tabobj) + awesome.emit_signal("bling::tabbed::client_added", tabobj, c) + tabbed.switch_to(tabobj, #tabobj.clients) +end + +-- use xwininfo to select one client and make it tab in the currently focused tab +tabbed.pick = function() + if not client.focus then + return + end + -- this function uses xwininfo to grab a client window id which is then + -- compared to all other clients window ids + + local xwininfo_cmd = + [[ xwininfo | grep 'xwininfo: Window id:' | cut -d " " -f 4 ]] + awful.spawn.easy_async_with_shell(xwininfo_cmd, function(output) + for _, c in ipairs(client.get()) do + if tonumber(c.window) == tonumber(output) then + if not client.focus.bling_tabbed and not c.bling_tabbed then + tabbed.init(client.focus) + tabbed.add(c, client.focus.bling_tabbed) + end + if not client.focus.bling_tabbed and c.bling_tabbed then + tabbed.add(client.focus, c.bling_tabbed) + end + if client.focus.bling_tabbed and not c.bling_tabbed then + tabbed.add(c, client.focus.bling_tabbed) + end + -- TODO: Should also merge tabs when focus and picked + -- both are tab groups + end + end + end) +end + +-- select a client by direction and make it tab in the currently focused tab +tabbed.pick_by_direction = function(direction) + local sel = client.focus + if not sel then + return + end + if not sel.bling_tabbed then + tabbed.init(sel) + end + local c = helpers.client.get_by_direction(direction) + if not c then + return + end + tabbed.add(c, sel.bling_tabbed) +end + +-- use dmenu to select a client and make it tab in the currently focused tab +tabbed.pick_with_dmenu = function(dmenu_command) + if not client.focus then + return + end + + if not dmenu_command then + dmenu_command = "rofi -dmenu -i" + end + + -- get all clients from the current tag + -- ignores the case where multiple tags are selected + local t = awful.screen.focused().selected_tag + local list_clients = {} + local list_clients_string = "" + for idx, c in ipairs(t:clients()) do + if c.window ~= client.focus.window then + list_clients[#list_clients + 1] = c + if #list_clients ~= 1 then + list_clients_string = list_clients_string .. "\\n" + end + list_clients_string = list_clients_string + .. tostring(c.window) + .. " " + .. c.name + end + end + + if #list_clients == 0 then + return + end + -- calls the actual dmenu + local xprop_cmd = [[ echo -e "]] + .. list_clients_string + .. [[" | ]] + .. dmenu_command + .. [[ | awk '{ print $1 }' ]] + awful.spawn.easy_async_with_shell(xprop_cmd, function(output) + for _, c in ipairs(list_clients) do + if tonumber(c.window) == tonumber(output) then + if not client.focus.bling_tabbed then + tabbed.init(client.focus) + end + local tabobj = client.focus.bling_tabbed + tabbed.add(c, tabobj) + end + end + end) +end + +-- update everything about one tab object +tabbed.update = function(tabobj) + local currently_focused_c = tabobj.clients[tabobj.focused_idx] + -- update tabobj of each client and other things + for idx, c in ipairs(tabobj.clients) do + if c.valid then + c.bling_tabbed = tabobj + helpers.client.sync(c, currently_focused_c) + -- the following handles killing a client while the client is tabbed + c:connect_signal("unmanage", function(c) + tabbed.remove(c) + end) + end + end + + -- Maybe remove if I'm the only one using it? + awesome.emit_signal("bling::tabbed::update", tabobj) + if not beautiful.tabbar_disable then + tabbed.update_tabbar(tabobj) + end +end + +-- change focused tab by absolute index +tabbed.switch_to = function(tabobj, new_idx) + local old_focused_c = tabobj.clients[tabobj.focused_idx] + tabobj.focused_idx = new_idx + for idx, c in ipairs(tabobj.clients) do + if idx ~= new_idx then + helpers.client.turn_off(c) + else + helpers.client.turn_on(c) + c:raise() + if old_focused_c and old_focused_c.valid then + c:swap(old_focused_c) + end + helpers.client.sync(c, old_focused_c) + end + end + awesome.emit_signal("bling::tabbed::changed_focus", tabobj) + tabbed.update(tabobj) +end + +tabbed.update_tabbar = function(tabobj) + local flexlist = bar.layout() + local tabobj_focused_client = tabobj.clients[tabobj.focused_idx] + local tabobj_is_focused = (client.focus == tabobj_focused_client) + -- itearte over all tabbed clients to create the widget tabbed list + for idx, c in ipairs(tabobj.clients) do + local buttons = gears.table.join(awful.button({}, 1, function() + tabbed.switch_to(tabobj, idx) + end)) + local wid_temp = bar.create(c, (idx == tabobj.focused_idx), buttons, + not tabobj_is_focused) + flexlist:add(wid_temp) + end + -- add tabbar to each tabbed client (clients will be hided anyway) + for _, c in ipairs(tabobj.clients) do + local titlebar = awful.titlebar(c, { + bg = bar.bg_normal, + size = bar.size, + position = bar.position, + }) + titlebar:setup({ layout = wibox.layout.flex.horizontal, flexlist }) + end +end + +tabbed.init = function(c) + local tabobj = {} + tabobj.clients = { c } + c:connect_signal("focus", update_tabbar_from) + c:connect_signal("unfocus", update_tabbar_from) + tabobj.focused_idx = 1 + tabbed.update(tabobj) +end + +if beautiful.tabbed_spawn_in_tab then + client.connect_signal("manage", function(c) + local s = awful.screen.focused() + local previous_client = awful.client.focus.history.get(s, 1) + if previous_client and previous_client.bling_tabbed then + tabbed.add(c, previous_client.bling_tabbed) + end + end) +end + +return tabbed diff --git a/.config/awesome/extras/bling/module/tiled_wallpaper.lua b/.config/awesome/extras/bling/module/tiled_wallpaper.lua new file mode 100755 index 0000000..75014cf --- /dev/null +++ b/.config/awesome/extras/bling/module/tiled_wallpaper.lua @@ -0,0 +1,56 @@ +--[[ + This module makes use of cairo surfaces + For documentation take a look at the C docs: + https://www.cairographics.org/ + They can be applied to lua by changing the naming conventions + and adjusting for the missing namespaces (and classes) + for example: + cairo_rectangle(cr, 1, 1, 1, 1) in C would be written as + cr:rectangle(1, 1, 1, 1) in lua + and + cairo_fill(cr) in C would be written as + cr:fill() in lua +--]] + +local cairo = require("lgi").cairo +local gears = require("gears") + +function create_tiled_wallpaper(str, s, args_table) + -- user input + args_table = args_table or {} + local fg = args_table.fg or "#ff0000" + local bg = args_table.bg or "#00ffff" + local offset_x = args_table.offset_x + local offset_y = args_table.offset_y + local font = args_table.font or "Hack" + local font_size = tonumber(args_table.font_size) or 16 + local zickzack_bool = args_table.zickzack or false + local padding = args_table.padding or 100 + + -- create cairo image wallpaper + local img = cairo.ImageSurface(cairo.Format.RGB24, padding, padding) + cr = cairo.Context(img) + + cr:set_source(gears.color(bg)) + cr:paint() + + cr:set_source(gears.color(fg)) + + cr:set_font_size(font_size) + cr:select_font_face(font) + + if zickzack_bool then + cr:set_source(gears.color(fg)) + cr:move_to(padding / 2 + font_size, padding / 2 + font_size) + cr:show_text(str) + end + + cr:set_source(gears.color(fg)) + cr:move_to(font_size, font_size) + cr:show_text(str) + + -- tile cairo image + gears.wallpaper.tiled(img, s, { x = offset_x, y = offset_y }) +end + +return create_tiled_wallpaper diff --git a/.config/awesome/extras/bling/module/wallpaper.lua b/.config/awesome/extras/bling/module/wallpaper.lua new file mode 100755 index 0000000..b8344ff --- /dev/null +++ b/.config/awesome/extras/bling/module/wallpaper.lua @@ -0,0 +1,339 @@ +--------------------------------------------------------------------------- +-- High-level declarative function for setting your wallpaper. +-- +-- +-- An easy way to setup a complex wallpaper with slideshow, random, schedule, extensibility. +-- +-- @usage +-- local wallpaper = require("wallpaper") +-- -- A silly example +-- wallpaper.setup { -- I want a wallpaper +-- change_timer = 500, -- changing every 5 minutes +-- set_function = wallpaper.setters.random, -- in a random way +-- wallpaper = {"#abcdef", +-- "~/Pictures", +-- wallpaper.setters.awesome}, -- from this list (a color, a directory with pictures and the Awesome wallpaper) +-- recursive = false, -- do not read subfolders of "~/Pictures" +-- position = "centered", -- center it on the screen (for pictures) +-- scale = 2, -- 2 time bigger (for pictures) +-- } +-- +-- @author Grumph +-- @copyright 2021 Grumph +-- +--------------------------------------------------------------------------- + +local awful = require("awful") +local beautiful = require("beautiful") +local gears = require("gears") +local helpers = require(tostring(...):match(".*bling") .. ".helpers") + +local setters = {} + +--- Apply a wallpaper. +-- +-- This function is a helper that will apply a wallpaper_object, +-- either using gears.wallpaper.set or gears.wallpaper.* higher level functions when applicable. +-- @param wallpaper_object A wallpaper object, either +-- a `pattern` (see `gears.wallpaper.set`) +-- a `surf` (see `gears.wallpaper.centered`) +-- a function that actually sets the wallpaper. +-- @tparam table args The argument table containing any of the arguments below. +-- @int[opt=nil] args.screen The screen to use (as used in `gears.wallpaper` functions) +-- @string[opt=nil or "centered"] args.position The `gears.wallpaper` position function to use. +-- Must be set when wallpaper is a file. +-- It can be `"centered"`, `"fit"`, `"tiled"` or `"maximized"`. +-- @string[opt=beautiful.bg_normal or "black"] args.background See `gears.wallpaper`. +-- @bool[opt=false] args.ignore_aspect See `gears.wallpaper`. +-- @tparam[opt={x=0,y=0}] table args.offset See `gears.wallpaper`. +-- @int[opt=1] args.scale See `gears.wallpaper`. +function apply(wallpaper_object, args) + args.background = args.background or beautiful.bg_normal or "black" + args.ignore_aspect = args.ignore_aspect or false -- false = keep aspect ratio + args.offset = args.offset or { x = 0, y = 0 } + args.scale = args.scale or 1 + local positions = { + ["centered"] = function() + gears.wallpaper.centered( + wallpaper_object, + args.screen, + args.background, + args.scale + ) + end, + ["tiled"] = function() + gears.wallpaper.tiled(wallpaper_object, args.screen, args.offset) + end, + ["maximized"] = function() + gears.wallpaper.maximized( + wallpaper_object, + args.screen, + args.ignore_aspect, + args.offset + ) + end, + ["fit"] = function() + gears.wallpaper.fit(wallpaper_object, args.screen, args.background) + end, + } + if + type(wallpaper_object) == "string" + and gears.filesystem.file_readable(wallpaper_object) + then + -- path of an image file, we use a position function + local p = args.position or "centered" + positions[p]() + elseif type(wallpaper_object) == "function" then + -- function + wallpaper_object(args) + elseif + (not gears.color.ensure_pango_color(wallpaper_object, nil)) + and args.position + then + -- if the user sets a position function, wallpaper_object should be a cairo surface + positions[args.position]() + else + gears.wallpaper.set(wallpaper_object) + end +end + +--- Converts `args.wallpaper` to a list of `wallpaper_objects` readable by `apply` function). +-- +-- @tparam table args The argument table containing the argument below. +-- @param[opt=`beautiful.wallpaper_path` or `"black"`] args.wallpaper A wallpaper object. +-- It can be a color or a cairo pattern (what `gears.wallpaper.set` understands), +-- a cairo suface (set with gears.wallpaper.set if `args.position` is nil, or with +-- `gears.wallpaper` position functions, see `args.position`), +-- a function similar to args.set_function that will effectively set a wallpaper (usually +-- with `gears.wallpaper` functions), +-- a path to a file, +-- path to a directory containing images, +-- or a list with any of the previous choices. +-- @tparam[opt=`{"jpg", "jpeg", "png", "bmp"}`] table args.image_formats A list of +-- file extensions to filter when `args.wallpaper` is a directory. +-- @bool[opt=true] args.recursive Either to recurse or not when `args.wallpaper` is a directory. +-- @treturn table A list of `wallpaper_objects` (what `apply` can read). +-- @see apply +function prepare_list(args) + args.image_formats = args.image_formats or { "jpg", "jpeg", "png", "bmp" } + args.recursive = args.recursive or true + + local wallpapers = (args.wallpaper or beautiful.wallpaper_path or "black") + local res = {} + if type(wallpapers) ~= "table" then + wallpapers = { wallpapers } + end + for _, w in ipairs(wallpapers) do + -- w is either: + -- - a directory path (string) + -- - an image path or a color (string) + -- - a cairo surface or a cairo pattern + -- - a function for setting the wallpaper + if type(w) == "string" and gears.filesystem.dir_readable(w) then + local file_list = helpers.filesystem.list_directory_files( + w, + args.image_formats, + args.recursive + ) + for _, f in ipairs(file_list) do + res[#res + 1] = w .. "/" .. f + end + else + res[#res + 1] = w + end + end + return res +end + +local simple_index = 0 +--- Set the next wallpaper in a list. +-- +-- @tparam table args See `prepare_list` and `apply` arguments +-- @see apply +-- @see prepare_list +function setters.simple(args) + local wallpapers = prepare_list(args) + simple_index = (simple_index % #wallpapers) + 1 + apply(wallpapers[simple_index], args) +end + +--- Set a random wallpaper from a list. +-- +-- @tparam table args See `prepare_list` and `apply` arguments +-- @see apply +-- @see prepare_list +function setters.random(args) + local wallpapers = prepare_list(args) + apply(wallpapers[math.random(#wallpapers)], args) +end + +local simple_schedule_object = nil +--- A schedule setter. +-- +-- This simple schedule setter was freely inspired by [dynamic-wallpaper](https://github.com/manilarome/awesome-glorious-widgets/blob/master/dynamic-wallpaper/init.lua). +-- @tparam table args The argument table containing any of the arguments below. +-- @tparam table args.wallpaper The schedule table, with the form +-- { +-- ["HH:MM:SS"] = wallpaper, +-- ["HH:MM:SS"] = wallpaper2, +-- } +-- The wallpapers definition can be anything the `schedule_set_function` can read +-- (what you would place in `args.wallpaper` for this function), +-- @tparam[opt=`setters.simple`] function args.wallpaper_set_function The set_function used by default +function setters.simple_schedule(args) + local function update_wallpaper() + local fake_args = gears.table.join(args, { + wallpaper = args.wallpaper[simple_schedule_object.closest_lower_time], + }) + simple_schedule_object.schedule_set_function(fake_args) + end + if not simple_schedule_object then + simple_schedule_object = {} + -- initialize the schedule object, so we don't do it for every call + simple_schedule_object.schedule_set_function = args.schedule_set_function + or setters.simple + -- we get the sorted time keys + simple_schedule_object.times = {} + for k in pairs(args.wallpaper) do + table.insert(simple_schedule_object.times, k) + end + table.sort(simple_schedule_object.times) + -- now we get the closest time which is below current time (the current applicable period) + local function update_timer() + local current_time = os.date("%H:%M:%S") + local next_time = simple_schedule_object.times[1] + simple_schedule_object.closest_lower_time = + simple_schedule_object.times[#simple_schedule_object.times] + for _, k in ipairs(simple_schedule_object.times) do + if k > current_time then + next_time = k + break + end + simple_schedule_object.closest_lower_time = k + end + simple_schedule_object.timer.timeout = helpers.time.time_diff( + next_time, + current_time + ) + if simple_schedule_object.timer.timeout < 0 then + -- the next_time is the day after, so we add 24 hours to the timer + simple_schedule_object.timer.timeout = simple_schedule_object.timer.timeout + + 86400 + end + simple_schedule_object.timer:again() + update_wallpaper() + end + simple_schedule_object.timer = gears.timer({ + callback = update_timer, + }) + update_timer() + else + -- if called again (usually when the change_timer is set), we just change the wallpaper depending on current parameters + update_wallpaper() + end +end + +--- Set the AWESOME wallpaper. +-- +-- @tparam table args The argument table containing the argument below. +-- @param[opt=`beautiful.bg_normal`] args.colors.bg The bg color. +-- If the default is used, the color is darkened if `beautiful.bg_normal` is light +-- or lightned if `beautiful.bg_normal` is dark. +-- @param[opt=`beautiful.fg_normal`] args.colors.fg The fg color. +-- @param[opt=`beautiful.fg_focus`] args.colors.alt_fg The alt_fg color. +-- +-- see beautiful.theme_assets.wallpaper +function setters.awesome_wallpaper(args) + local colors = { + bg = beautiful.bg_normal, + fg = beautiful.fg_normal, + alt_fg = beautiful.bg_focus, + } + colors.bg = helpers.color.is_dark(beautiful.bg_normal) + and helpers.color.lighten(colors.bg) + or helpers.color.darken(colors.bg) + if type(args.colors) == "table" then + colors.bg = args.colors.bg or colors.bg + colors.fg = args.colors.fg or colors.fg + colors.alt_fg = args.colors.alt_fg or colors.alt_fg + end + -- Generate wallpaper: + if not args.screen then + for s in screen do + gears.wallpaper.set( + beautiful.theme_assets.wallpaper( + colors.bg, + colors.fg, + colors.alt_fg, + s + ) + ) + end + else + gears.wallpaper.set( + beautiful.theme_assets.wallpaper( + colors.bg, + colors.fg, + colors.alt_fg, + args.screen + ) + ) + end +end + +--- Setup a wallpaper. +-- +-- @tparam table args Parameters for the wallpaper. It may also contain all parameters your `args.set_function` needs +-- @int[opt=nil] args.screen The screen to use (as used in `gears.wallpaper` functions) +-- @int[opt=nil] args.change_timer Time in seconds for wallpaper changes +-- @tparam[opt=`setters.awesome` or `setters.simple`] function args.set_function A function to set the wallpaper +-- It takes args as parameter (the same args as the setup function). +-- This function is called at `"request::wallpaper"` `screen` signals and at `args.change_timer` timeouts. +-- There is no obligation, but for consistency, the function should use `args.wallpaper` as a feeder. +-- If `args.wallpaper` is defined, the default function is `setters.simple`, else it will be `setters.awesome`. +-- +-- @usage +-- local wallpaper = require("wallpaper") +-- wallpaper.setup { +-- change_timer = 631, -- Prime number is better +-- set_function = wallpaper.setters.random, +-- -- parameters for the random setter +-- wallpaper = '/data/pictures/wallpapers', +-- position = "maximized", +-- } +-- +-- @see apply +-- @see prepare_list +-- @see setters.simple +function setup(args) + local config = args or {} + config.set_function = config.set_function + or (config.wallpaper and setters.simple or setters.awesome_wallpaper) + local function set_wallpaper(s) + config.screen = s or config.screen + config.set_function(config) + end + + if config.change_timer and config.change_timer > 0 then + gears.timer({ + timeout = config.change_timer, + call_now = false, + autostart = true, + callback = function() + set_wallpaper() + end, + }) + end + if awesome.version == "v4.3" then + awful.screen.connect_for_each_screen(set_wallpaper) + else + screen.connect_signal("request::wallpaper", set_wallpaper) + end +end + +return { + setup = setup, + setters = setters, + apply = apply, + prepare_list = prepare_list, +} diff --git a/.config/awesome/extras/bling/module/window_swallowing.lua b/.config/awesome/extras/bling/module/window_swallowing.lua new file mode 100755 index 0000000..368541b --- /dev/null +++ b/.config/awesome/extras/bling/module/window_swallowing.lua @@ -0,0 +1,88 @@ +local awful = require("awful") +local gears = require("gears") +local beautiful = require("beautiful") + +local helpers = require(tostring(...):match(".*bling") .. ".helpers") + +-- It might actually swallow too much, that's why there is a filter option by classname +-- without the don't-swallow-list it would also swallow for example +-- file pickers or new firefox windows spawned by an already existing one + +local window_swallowing_activated = false + +-- you might want to add or remove applications here +local dont_swallow_classname_list = beautiful.dont_swallow_classname_list + or { "firefox", "Gimp", "Google-chrome" } +local activate_dont_swallow_filter = beautiful.dont_swallow_filter_activated + or true + +-- checks if client classname matches with any entry of the dont-swallow-list +local function check_if_swallow(c) + if not activate_dont_swallow_filter then + return true + end + for _, classname in ipairs(dont_swallow_classname_list) do + if classname == c.class then + return false + end + end + return true +end + +-- the function that will be connected to / disconnected from the spawn client signal +local function manage_clientspawn(c) + -- get the last focused window to check if it is a parent window + local parent_client = awful.client.focus.history.get(c.screen, 1) + if not parent_client then + return + end + + -- io.popen is normally discouraged. Should probably be changed + local handle = io.popen( + [[pstree -T -p -a -s ]] + .. tostring(c.pid) + .. [[ | sed '2q;d' | grep -o '[0-9]*$' | tr -d '\n']] + ) + local parent_pid = handle:read("*a") + handle:close() + + if + (tostring(parent_pid) == tostring(parent_client.pid)) + and check_if_swallow(c) + then + c:connect_signal("unmanage", function() + helpers.client.turn_on(parent_client) + helpers.client.sync(parent_client, c) + end) + + helpers.client.sync(c, parent_client) + helpers.client.turn_off(parent_client) + end +end + +-- without the following functions that module would be autoloaded by require("bling") +-- a toggle window swallowing hotkey is also possible that way + +local function start() + client.connect_signal("manage", manage_clientspawn) + window_swallowing_activated = true +end + +local function stop() + client.disconnect_signal("manage", manage_clientspawn) + window_swallowing_activated = false +end + +local function toggle() + if window_swallowing_activated then + stop() + else + start() + end +end + +return { + start = start, + stop = stop, + toggle = toggle, +} diff --git a/.config/awesome/extras/bling/signal/init.lua b/.config/awesome/extras/bling/signal/init.lua new file mode 100755 index 0000000..a953d59 --- /dev/null +++ b/.config/awesome/extras/bling/signal/init.lua @@ -0,0 +1 @@ +return { playerctl = require(... .. ".playerctl") } diff --git a/.config/awesome/extras/bling/signal/playerctl/init.lua b/.config/awesome/extras/bling/signal/playerctl/init.lua new file mode 100755 index 0000000..1d586ed --- /dev/null +++ b/.config/awesome/extras/bling/signal/playerctl/init.lua @@ -0,0 +1,19 @@ +local beautiful = require("beautiful") + +-- Use CLI backend as default as it is supported on most if not all systems +local backend_config = beautiful.playerctl_backend or "playerctl_cli" +local backends = { + playerctl_cli = require(... .. ".playerctl_cli"), + playerctl_lib = require(... .. ".playerctl_lib"), +} + +local function enable_wrapper(args) + backend_config = (args and args.backend) or backend_config + backends[backend_config].enable(args) +end + +local function disable_wrapper() + backends[backend_config].disable() +end + +return { enable = enable_wrapper, disable = disable_wrapper } diff --git a/.config/awesome/extras/bling/signal/playerctl/playerctl_cli.lua b/.config/awesome/extras/bling/signal/playerctl/playerctl_cli.lua new file mode 100755 index 0000000..93959f7 --- /dev/null +++ b/.config/awesome/extras/bling/signal/playerctl/playerctl_cli.lua @@ -0,0 +1,151 @@ +-- +-- Provides: +-- bling::playerctl::status +-- playing (boolean) +-- bling::playerctl::title_artist_album +-- title (string) +-- artist (string) +-- album_path (string) +-- bling::playerctl::position +-- interval_sec (number) +-- length_sec (number) +-- bling::playerctl::no_players +-- +local awful = require("awful") +local beautiful = require("beautiful") + +local interval = beautiful.playerctl_position_update_interval or 1 + +local function emit_player_status() + local status_cmd = "playerctl status -F" + + -- Follow status + awful.spawn.easy_async({ + "pkill", + "--full", + "--uid", + os.getenv("USER"), + "^playerctl status", + }, function() + awful.spawn.with_line_callback(status_cmd, { + stdout = function(line) + local playing = false + if line:find("Playing") then + playing = true + else + playing = false + end + awesome.emit_signal("bling::playerctl::status", playing) + end, + }) + collectgarbage("collect") + end) +end + +local function emit_player_info() + local art_script = [[ +sh -c ' + +tmp_dir="$XDG_CACHE_HOME/awesome/" + +if [ -z ${XDG_CACHE_HOME} ]; then + tmp_dir="$HOME/.cache/awesome/" +fi + +tmp_cover_path=${tmp_dir}"cover.png" + +if [ ! -d $tmp_dir ]; then + mkdir -p $tmp_dir +fi + +link="$(playerctl metadata mpris:artUrl)" + +curl -s "$link" --output $tmp_cover_path + +echo "$tmp_cover_path" +']] + + -- Command that lists artist and title in a format to find and follow + local song_follow_cmd = + "playerctl metadata --format 'artist_{{artist}}title_{{title}}' -F" + + -- Progress Cmds + local prog_cmd = "playerctl position" + local length_cmd = "playerctl metadata mpris:length" + + awful.widget.watch(prog_cmd, interval, function(_, interval) + awful.spawn.easy_async_with_shell(length_cmd, function(length) + local length_sec = tonumber(length) -- in microseconds + local interval_sec = tonumber(interval) -- in seconds + if length_sec and interval_sec then + if interval_sec >= 0 and length_sec > 0 then + awesome.emit_signal( + "bling::playerctl::position", + interval_sec, + length_sec / 1000000 + ) + end + end + end) + collectgarbage("collect") + end) + + -- Follow title + awful.spawn.easy_async({ + "pkill", + "--full", + "--uid", + os.getenv("USER"), + "^playerctl metadata", + }, function() + awful.spawn.with_line_callback(song_follow_cmd, { + stdout = function(line) + local album_path = "" + awful.spawn.easy_async_with_shell(art_script, function(out) + -- Get album path + album_path = out:gsub("%\n", "") + -- Get title and artist + local artist = line:match("artist_(.*)title_") + local title = line:match("title_(.*)") + -- If the title is nil or empty then the players stopped + if title and title ~= "" then + awesome.emit_signal( + "bling::playerctl::title_artist_album", + title, + artist, + album_path + ) + else + awesome.emit_signal("bling::playerctl::no_players") + end + end) + collectgarbage("collect") + end, + }) + collectgarbage("collect") + end) +end + +-- Emit info +-- emit_player_status() +-- emit_player_info() + +local enable = function(args) + interval = (args and args.interval) or interval + emit_player_status() + emit_player_info() +end + +local disable = function() + awful.spawn.with_shell( + "pkill --full --uid " .. os.getenv("USER") .. " '^playerctl status -F'" + ) + + awful.spawn.with_shell( + "pkill --full --uid " + .. os.getenv("USER") + .. " '^playerctl metadata --format'" + ) +end + +return { enable = enable, disable = disable } diff --git a/.config/awesome/extras/bling/signal/playerctl/playerctl_lib.lua b/.config/awesome/extras/bling/signal/playerctl/playerctl_lib.lua new file mode 100755 index 0000000..5e67f1f --- /dev/null +++ b/.config/awesome/extras/bling/signal/playerctl/playerctl_lib.lua @@ -0,0 +1,350 @@ +-- Playerctl signals +-- +-- Provides: +-- bling::playerctl::status +-- playing (boolean) +-- player_name (string) +-- bling::playerctl::title_artist_album +-- title (string) +-- artist (string) +-- album_path (string) +-- player_name (string) +-- bling::playerctl::position +-- interval_sec (number) +-- length_sec (number) +-- player_name (string) +-- bling::playerctl::no_players +-- (No parameters) + +local gears = require("gears") +local awful = require("awful") +local beautiful = require("beautiful") +local Playerctl = nil + +local manager = nil +local metadata_timer = nil +local position_timer = nil + +local ignore = {} +local priority = {} +local update_on_activity = true +local interval = 1 + +-- Track position callback +local last_position = -1 +local last_length = -1 +local function position_cb() + local player = manager.players[1] + if player then + local position = player:get_position() / 1000000 + local length = (player.metadata.value["mpris:length"] or 0) / 1000000 + if position ~= last_position or length ~= last_length then + awesome.emit_signal( + "bling::playerctl::position", + position, + length, + player.player_name + ) + last_position = position + last_length = length + end + end +end + +local function get_album_art(url) + return awful.util.shell + .. [[ -c ' + +tmp_dir="$XDG_CACHE_HOME/awesome/" + +if [ -z "$XDG_CACHE_HOME" ]; then + tmp_dir="$HOME/.cache/awesome/" +fi + +tmp_cover_path="${tmp_dir}cover.png" + +if [ ! -d "$tmp_dir" ]; then + mkdir -p $tmp_dir +fi + +curl -s ']] + .. url + .. [[' --output $tmp_cover_path + +echo "$tmp_cover_path" +']] +end + +-- Metadata callback for title, artist, and album art +local last_player = nil +local last_title = "" +local last_artist = "" +local last_artUrl = "" +local function metadata_cb(player, metadata) + if update_on_activity then + manager:move_player_to_top(player) + end + + local data = metadata.value + + local title = data["xesam:title"] or "" + local artist = data["xesam:artist"][1] or "" + for i = 2, #data["xesam:artist"] do + artist = artist .. ", " .. data["xesam:artist"][i] + end + local artUrl = data["mpris:artUrl"] or "" + -- Spotify client doesn't report its art URL's correctly... + if player.player_name == "spotify" then + artUrl = artUrl:gsub("open.spotify.com", "i.scdn.co") + end + + if player == manager.players[1] then + -- Callback can be called even though values we care about haven't + -- changed, so check to see if they have + if + player ~= last_player + or title ~= last_title + or artist ~= last_artist + or artUrl ~= last_artUrl + then + if title == "" and artist == "" and artUrl == "" then + return + end + + if metadata_timer ~= nil then + if metadata_timer.started then + metadata_timer:stop() + end + end + + metadata_timer = gears.timer({ + timeout = 0.3, + autostart = true, + single_shot = true, + callback = function() + if artUrl ~= "" then + awful.spawn.with_line_callback(get_album_art(artUrl), { + stdout = function(line) + awesome.emit_signal( + "bling::playerctl::title_artist_album", + title, + artist, + line, + player.player_name + ) + end, + }) + else + awesome.emit_signal( + "bling::playerctl::title_artist_album", + title, + artist, + "", + player.player_name + ) + end + end, + }) + + -- Re-sync with position timer when track changes + position_timer:again() + last_player = player + last_title = title + last_artist = artist + last_artUrl = artUrl + end + end +end + +-- Playback status callback +-- Reported as PLAYING, PAUSED, or STOPPED +local function playback_status_cb(player, status) + if update_on_activity then + manager:move_player_to_top(player) + end + + if player == manager.players[1] then + if status == "PLAYING" then + awesome.emit_signal( + "bling::playerctl::status", + true, + player.player_name + ) + else + awesome.emit_signal( + "bling::playerctl::status", + false, + player.player_name + ) + end + end +end + +-- Determine if player should be managed +local function name_is_selected(name) + if ignore[name.name] then + return false + end + + if #priority > 0 then + for _, arg in pairs(priority) do + if arg == name.name or arg == "%any" then + return true + end + end + return false + end + + return true +end + +-- Create new player and connect it to callbacks +local function init_player(name) + if name_is_selected(name) then + local player = Playerctl.Player.new_from_name(name) + manager:manage_player(player) + player.on_playback_status = playback_status_cb + player.on_metadata = metadata_cb + + -- Start position timer if its not already running + if not position_timer.started then + position_timer:again() + end + end +end + +-- Determine if a player name comes before or after another according to the +-- priority order +local function player_compare_name(name_a, name_b) + local any_index = math.huge + local a_match_index = nil + local b_match_index = nil + + if name_a == name_b then + return 0 + end + + for index, name in ipairs(priority) do + if name == "%any" then + any_index = (any_index == math.huge) and index or any_index + elseif name == name_a then + a_match_index = a_match_index or index + elseif name == name_b then + b_match_index = b_match_index or index + end + end + + if not a_match_index and not b_match_index then + return 0 + elseif not a_match_index then + return (b_match_index < any_index) and 1 or -1 + elseif not b_match_index then + return (a_match_index < any_index) and -1 or 1 + elseif a_match_index == b_match_index then + return 0 + else + return (a_match_index < b_match_index) and -1 or 1 + end +end + +-- Sorting function used by manager if a priority order is specified +local function player_compare(a, b) + local player_a = Playerctl.Player(a) + local player_b = Playerctl.Player(b) + return player_compare_name(player_a.player_name, player_b.player_name) +end + +local function start_manager() + manager = Playerctl.PlayerManager() + if #priority > 0 then + manager:set_sort_func(player_compare) + end + + -- Timer to update track position at specified interval + position_timer = gears.timer({ + timeout = interval, + callback = position_cb, + }) + + -- Manage existing players on startup + for _, name in ipairs(manager.player_names) do + init_player(name) + end + + -- Callback to manage new players + function manager:on_name_appeared(name) + init_player(name) + end + + -- Callback to check if all players have exited + function manager:on_name_vanished(name) + if #manager.players == 0 then + metadata_timer:stop() + position_timer:stop() + awesome.emit_signal("bling::playerctl::no_players") + end + end +end + +-- Parse arguments +local function parse_args(args) + if args then + update_on_activity = args.update_on_activity or update_on_activity + interval = args.interval or interval + + if type(args.ignore) == "string" then + ignore[args.ignore] = true + elseif type(args.ignore) == "table" then + for _, name in pairs(args.ignore) do + ignore[name] = true + end + end + + if type(args.player) == "string" then + priority[1] = args.player + elseif type(args.player) == "table" then + priority = args.player + end + end +end + +local function playerctl_enable(args) + args = args or {} + -- Grab settings from beautiful variables if not set explicitly + args.ignore = args.ignore or beautiful.playerctl_ignore + args.player = args.player or beautiful.playerctl_player + args.update_on_activity = args.update_on_activity + or beautiful.playerctl_update_on_activity + args.interval = args.interval + or beautiful.playerctl_position_update_interval + parse_args(args) + + -- Grab playerctl library + Playerctl = require("lgi").Playerctl + + -- Ensure main event loop has started before starting player manager + gears.timer.delayed_call(start_manager) +end + +local function playerctl_disable() + -- Remove manager and timer + manager = nil + metadata_timer:stop() + metadata_timer = nil + position_timer:stop() + position_timer = nil + -- Restore default settings + ignore = {} + priority = {} + update_on_activity = true + interval = 1 + -- Reset default values + last_position = -1 + last_length = -1 + last_player = nil + last_title = "" + last_artist = "" + last_artUrl = "" +end + +return { enable = playerctl_enable, disable = playerctl_disable } diff --git a/.config/awesome/extras/bling/widget/app_launcher/init.lua b/.config/awesome/extras/bling/widget/app_launcher/init.lua new file mode 100755 index 0000000..7eeaf17 --- /dev/null +++ b/.config/awesome/extras/bling/widget/app_launcher/init.lua @@ -0,0 +1,1053 @@ +local Gio = require("lgi").Gio +local awful = require("awful") +local gobject = require("gears.object") +local gtable = require("gears.table") +local gtimer = require("gears.timer") +local gfilesystem = require("gears.filesystem") +local wibox = require("wibox") +local beautiful = require("beautiful") +local color = require(tostring(...):match(".*bling") .. ".helpers.color") +local prompt = require(... .. ".prompt") +local dpi = beautiful.xresources.apply_dpi +local string = string +local table = table +local math = math +local ipairs = ipairs +local pairs = pairs +local root = root +local capi = { screen = screen, mouse = mouse } +local path = ... + +local app_launcher = { mt = {} } + +local terminal_commands_lookup = +{ + alacritty = "alacritty -e", + termite = "termite -e", + rxvt = "rxvt -e", + terminator = "terminator -e" +} + +local function string_levenshtein(str1, str2) + local len1 = string.len(str1) + local len2 = string.len(str2) + local matrix = {} + local cost = 0 + + -- quick cut-offs to save time + if (len1 == 0) then + return len2 + elseif (len2 == 0) then + return len1 + elseif (str1 == str2) then + return 0 + end + + -- initialise the base matrix values + for i = 0, len1, 1 do + matrix[i] = {} + matrix[i][0] = i + end + for j = 0, len2, 1 do + matrix[0][j] = j + end + + -- actual Levenshtein algorithm + for i = 1, len1, 1 do + for j = 1, len2, 1 do + if (str1:byte(i) == str2:byte(j)) then + cost = 0 + else + cost = 1 + end + + matrix[i][j] = math.min(matrix[i-1][j] + 1, matrix[i][j-1] + 1, matrix[i-1][j-1] + cost) + end + end + + -- return the last value - this is the Levenshtein distance + return matrix[len1][len2] +end + +local function case_insensitive_pattern(pattern) + -- find an optional '%' (group 1) followed by any character (group 2) + local p = pattern:gsub("(%%?)(.)", function(percent, letter) + if percent ~= "" or not letter:match("%a") then + -- if the '%' matched, or `letter` is not a letter, return "as is" + return percent .. letter + else + -- else, return a case-insensitive character class of the matched letter + return string.format("[%s%s]", letter:lower(), letter:upper()) + end + end) + + return p +end + +local function has_value(tab, val) + for index, value in pairs(tab) do + if val:find(case_insensitive_pattern(value)) then + return true + end + end + return false +end + +local function select_app(self, x, y) + local widgets = self._private.grid:get_widgets_at(x, y) + if widgets then + self._private.active_widget = widgets[1] + if self._private.active_widget ~= nil then + self._private.active_widget.selected = true + self._private.active_widget:get_children_by_id("background")[1].bg = self.app_selected_color + local name_widget = self._private.active_widget:get_children_by_id("name")[1] + if name_widget then + name_widget.markup = string.format("%s", self.app_name_selected_color, name_widget.text) + end + local generic_name_widget = self._private.active_widget:get_children_by_id("generic_name")[1] + if generic_name_widget then + generic_name_widget.markup = string.format("%s", self.app_name_selected_color, generic_name_widget.text) + end + end + end +end + +local function unselect_app(self) + if self._private.active_widget ~= nil then + self._private.active_widget.selected = false + self._private.active_widget:get_children_by_id("background")[1].bg = self.app_normal_color + local name_widget = self._private.active_widget:get_children_by_id("name")[1] + if name_widget then + name_widget.markup = string.format("%s", self.app_name_normal_color, name_widget.text) + end + local generic_name_widget = self._private.active_widget:get_children_by_id("generic_name")[1] + if generic_name_widget then + generic_name_widget.markup = string.format("%s", self.app_name_normal_color, generic_name_widget.text) + end + self._private.active_widget = nil + end +end + +local function create_app_widget(self, entry) + local icon = self.app_show_icon == true and + { + widget = wibox.widget.imagebox, + halign = self.app_icon_halign, + forced_width = self.app_icon_width, + forced_height = self.app_icon_height, + image = entry.icon + } or nil + + local name = self.app_show_name == true and + { + widget = wibox.widget.textbox, + id = "name", + font = self.app_name_font, + markup = entry.name + } or nil + + local generic_name = entry.generic_name ~= nil and self.app_show_generic_name == true and + { + widget = wibox.widget.textbox, + id = "generic_name", + font = self.app_name_font, + markup = entry.generic_name ~= "" and " (" .. entry.generic_name .. ")" or "" + } or nil + + local app = wibox.widget + { + widget = wibox.container.background, + id = "background", + forced_width = self.app_width, + forced_height = self.app_height, + shape = self.app_shape, + bg = self.app_normal_color, + { + widget = wibox.container.margin, + margins = self.app_content_padding, + { + -- Using this hack instead of container.place because that will fuck with the name/icon halign + layout = wibox.layout.align.vertical, + expand = "outside", + nil, + { + layout = wibox.layout.fixed.vertical, + spacing = self.app_content_spacing, + icon, + { + widget = wibox.container.place, + halign = self.app_name_halign, + { + layout = wibox.layout.fixed.horizontal, + spacing = self.app_name_generic_name_spacing, + name, + generic_name + } + } + }, + nil + } + } + } + + function app.spawn() + if entry.terminal == true then + if self.terminal ~= nil then + local terminal_command = terminal_commands_lookup[self.terminal] or self.terminal + awful.spawn(terminal_command .. " " .. entry.executable) + else + awful.spawn.easy_async("gtk-launch " .. entry.executable, function(stdout, stderr) + if stderr then + awful.spawn(entry.executable) + end + end) + end + else + awful.spawn(entry.executable) + end + + if self.hide_on_launch then + self:hide() + end + end + + app:connect_signal("mouse::enter", function(_self) + local widget = capi.mouse.current_wibox + if widget then + widget.cursor = "hand2" + end + + local app = _self + if app.selected then + app:get_children_by_id("background")[1].bg = self.app_selected_hover_color + else + local is_opaque = color.is_opaque(self.app_normal_color) + local is_dark = color.is_dark(self.app_normal_color) + local app_normal_color = color.hex_to_rgba(self.app_normal_color) + local hover_color = (is_dark or is_opaque) and + color.rgba_to_hex(color.multiply(app_normal_color, 2.5)) or + color.rgba_to_hex(color.multiply(app_normal_color, 0.5)) + app:get_children_by_id("background")[1].bg = self.app_normal_hover_color + end + end) + + app:connect_signal("mouse::leave", function(_self) + local widget = capi.mouse.current_wibox + if widget then + widget.cursor = "left_ptr" + end + + local app = _self + if app.selected then + app:get_children_by_id("background")[1].bg = self.app_selected_color + else + app:get_children_by_id("background")[1].bg = self.app_normal_color + end + end) + + app:connect_signal("button::press", function(_self, lx, ly, button, mods, find_widgets_result) + if button == 1 then + local app = _self + if self._private.active_widget == app or not self.select_before_spawn then + app.spawn() + else + -- Unmark the previous app + unselect_app(self) + + -- Mark this app + local pos = self._private.grid:get_widget_position(app) + select_app(self, pos.row, pos.col) + end + end + end) + + return app +end + +local function search(self, text) + unselect_app(self) + + local pos = self._private.grid:get_widget_position(self._private.active_widget) + + -- Reset all the matched entries + self._private.matched_entries = {} + -- Remove all the grid widgets + self._private.grid:reset() + + if text == "" then + self._private.matched_entries = self._private.all_entries + else + for index, entry in pairs(self._private.all_entries) do + text = text:gsub( "%W", "" ) + + -- Check if there's a match by the app name or app command + if string.find(entry.name, case_insensitive_pattern(text)) ~= nil or + self.search_commands and string.find(entry.commandline, case_insensitive_pattern(text)) ~= nil + then + table.insert(self._private.matched_entries, { + name = entry.name, + generic_name = entry.generic_name, + commandline = entry.commandline, + executable = entry.executable, + terminal = entry.terminal, + icon = entry.icon + }) + end + end + + -- Sort by string similarity + table.sort(self._private.matched_entries, function(a, b) + return string_levenshtein(text, a.name) < string_levenshtein(text, b.name) + end) + end + for index, entry in pairs(self._private.matched_entries) do + -- Only add the widgets for apps that are part of the first page + if #self._private.grid.children + 1 <= self._private.max_apps_per_page then + self._private.grid:add(create_app_widget(self, entry)) + end + end + + -- Recalculate the apps per page based on the current matched entries + self._private.apps_per_page = math.min(#self._private.matched_entries, self._private.max_apps_per_page) + + -- Recalculate the pages count based on the current apps per page + self._private.pages_count = math.ceil(math.max(1, #self._private.matched_entries) / math.max(1, self._private.apps_per_page)) + + -- Page should be 1 after a search + self._private.current_page = 1 + + -- This is an option to mimic rofi behaviour where after a search + -- it will reselect the app whose index is the same as the app index that was previously selected + -- and if matched_entries.length < current_index it will instead select the app with the greatest index + if self.try_to_keep_index_after_searching then + if self._private.grid:get_widgets_at(pos.row, pos.col) == nil then + local app = self._private.grid.children[#self._private.grid.children] + pos = self._private.grid:get_widget_position(app) + end + select_app(self, pos.row, pos.col) + -- Otherwise select the first app on the list + else + select_app(self, 1, 1) + end +end + +local function page_backward(self, direction) + if self._private.current_page > 1 then + self._private.current_page = self._private.current_page - 1 + elseif self.wrap_page_scrolling and #self._private.matched_entries >= self._private.max_apps_per_page then + self._private.current_page = self._private.pages_count + elseif self.wrap_app_scrolling then + local rows, columns = self._private.grid:get_dimension() + unselect_app(self) + select_app(self, math.min(rows, #self._private.grid.children % self.apps_per_row), columns) + return + else + return + end + + local pos = self._private.grid:get_widget_position(self._private.active_widget) + + -- Remove the current page apps from the grid + self._private.grid:reset() + + local max_app_index_to_include = self._private.apps_per_page * self._private.current_page + local min_app_index_to_include = max_app_index_to_include - self._private.apps_per_page + + for index, entry in pairs(self._private.matched_entries) do + -- Only add widgets that are between this range (part of the current page) + if index > min_app_index_to_include and index <= max_app_index_to_include then + self._private.grid:add(create_app_widget(self, entry)) + end + end + + local rows, columns = self._private.grid:get_dimension() + if self._private.current_page < self._private.pages_count then + if direction == "up" then + select_app(self, rows, columns) + else + -- Keep the same row from last page + select_app(self, pos.row, columns) + end + elseif self.wrap_page_scrolling then + if direction == "up" then + select_app(self, math.min(rows, #self._private.grid.children % self.apps_per_row), columns) + else + -- Keep the same row from last page + select_app(self, math.min(pos.row, #self._private.grid.children % self.apps_per_row), columns) + end + end +end + +local function page_forward(self, direction) + local min_app_index_to_include = 0 + local max_app_index_to_include = self._private.apps_per_page + + if self._private.current_page < self._private.pages_count then + min_app_index_to_include = self._private.apps_per_page * self._private.current_page + self._private.current_page = self._private.current_page + 1 + max_app_index_to_include = self._private.apps_per_page * self._private.current_page + elseif self.wrap_page_scrolling and #self._private.matched_entries >= self._private.max_apps_per_page then + self._private.current_page = 1 + min_app_index_to_include = 0 + max_app_index_to_include = self._private.apps_per_page + elseif self.wrap_app_scrolling then + unselect_app(self) + select_app(self, 1, 1) + return + else + return + end + + local pos = self._private.grid:get_widget_position(self._private.active_widget) + + -- Remove the current page apps from the grid + self._private.grid:reset() + + for index, entry in pairs(self._private.matched_entries) do + -- Only add widgets that are between this range (part of the current page) + if index > min_app_index_to_include and index <= max_app_index_to_include then + self._private.grid:add(create_app_widget(self, entry)) + end + end + + if self._private.current_page > 1 or self.wrap_page_scrolling then + if direction == "down" then + select_app(self, 1, 1) + else + local last_col_max_row = math.min(pos.row, #self._private.grid.children % self.apps_per_row) + if last_col_max_row ~= 0 then + select_app(self, last_col_max_row, 1) + else + select_app(self, pos.row, 1) + end + end + end +end + +local function scroll_up(self) + if #self._private.grid.children < 1 then + self._private.active_widget = nil + return + end + + local rows, columns = self._private.grid:get_dimension() + local pos = self._private.grid:get_widget_position(self._private.active_widget) + local is_bigger_than_first_app = pos.col > 1 or pos.row > 1 + + -- Check if the current marked app is not the first + if is_bigger_than_first_app then + unselect_app(self) + if pos.row == 1 then + select_app(self, rows, pos.col - 1) + else + select_app(self, pos.row - 1, pos.col) + end + else + page_backward(self, "up") + end +end + +local function scroll_down(self) + if #self._private.grid.children < 1 then + self._private.active_widget = nil + return + end + + local rows, columns = self._private.grid:get_dimension() + local pos = self._private.grid:get_widget_position(self._private.active_widget) + local is_less_than_max_app = self._private.grid:index(self._private.active_widget) < #self._private.grid.children + + -- Check if we can scroll down the app list + if is_less_than_max_app then + -- Unmark the previous app + unselect_app(self) + if pos.row == rows then + select_app(self, 1, pos.col + 1) + else + select_app(self, pos.row + 1, pos.col) + end + else + page_forward(self, "down") + end +end + +local function scroll_left(self) + if #self._private.grid.children < 1 then + self._private.active_widget = nil + return + end + + local pos = self._private.grid:get_widget_position(self._private.active_widget) + local is_bigger_than_first_column = pos.col > 1 + + -- Check if the current marked app is not the first + if is_bigger_than_first_column then + unselect_app(self) + select_app(self, pos.row, pos.col - 1) + else + page_backward(self, "left") + end +end + +local function scroll_right(self) + if #self._private.grid.children < 1 then + self._private.active_widget = nil + return + end + + local rows, columns = self._private.grid:get_dimension() + local pos = self._private.grid:get_widget_position(self._private.active_widget) + local is_less_than_max_column = pos.col < columns + local is_less_than_max_page = self._private.current_page < self._private.pages_count + + -- Check if we can scroll down the app list + if is_less_than_max_column then + -- Unmark the previous app + unselect_app(self) + + -- Scroll up to the max app if there are directly to the right of previous app + if self._private.grid:get_widgets_at(pos.row, pos.col + 1) == nil then + local app = self._private.grid.children[#self._private.grid.children] + pos = self._private.grid:get_widget_position(app) + select_app(self, pos.row, pos.col) + else + select_app(self, pos.row, pos.col + 1) + end + + else + page_forward(self, "right") + end +end + +local function reset(self) + self._private.grid:reset() + self._private.matched_entries = self._private.all_entries + self._private.apps_per_page = self._private.max_apps_per_page + self._private.pages_count = math.ceil(#self._private.all_entries / self._private.apps_per_page) + self._private.current_page = 1 + + for index, entry in pairs(self._private.all_entries) do + -- Only add the apps that are part of the first page + if index <= self._private.apps_per_page then + self._private.grid:add(create_app_widget(self, entry)) + else + break + end + end + + select_app(self, 1, 1) +end + +local function generate_apps(self) + self._private.all_entries = {} + self._private.matched_entries = {} + + local app_info = Gio.AppInfo + local apps = app_info.get_all() + if self.sort_alphabetically then + table.sort(apps, function(a, b) + local app_a_score = app_info.get_name(a):lower() + if has_value(self.favorites, app_info.get_name(a)) then + app_a_score = "aaaaaaaaaaa" .. app_a_score + end + local app_b_score = app_info.get_name(b):lower() + if has_value(self.favorites, app_info.get_name(b)) then + app_b_score = "aaaaaaaaaaa" .. app_b_score + end + + return app_a_score < app_b_score + end) + elseif self.reverse_sort_alphabetically then + table.sort(apps, function(a, b) + local app_a_score = app_info.get_name(a):lower() + if has_value(self.favorites, app_info.get_name(a)) then + app_a_score = "zzzzzzzzzzz" .. app_a_score + end + local app_b_score = app_info.get_name(b):lower() + if has_value(self.favorites, app_info.get_name(b)) then + app_b_score = "zzzzzzzzzzz" .. app_b_score + end + + return app_a_score > app_b_score + end) + else + table.sort(apps, function(a, b) + local app_a_favorite = has_value(self.favorites, app_info.get_name(a)) + local app_b_favorite = has_value(self.favorites, app_info.get_name(b)) + + if app_a_favorite and not app_b_favorite then + return true + elseif app_b_favorite and not app_a_favorite then + return false + elseif app_a_favorite and app_b_favorite then + return app_info.get_name(a):lower() < app_info.get_name(b):lower() + else + return false + end + end) + end + + local icon_theme = require(tostring(path):match(".*bling") .. ".helpers.icon_theme")(self.icon_theme, self.icon_size) + + for _, app in ipairs(apps) do + if app.should_show(app) then + local name = app_info.get_name(app) + local commandline = app_info.get_commandline(app) + local executable = app_info.get_executable(app) + local icon = icon_theme:get_gicon_path(app_info.get_icon(app)) + + -- Check if this app should be skipped, depanding on the skip_names / skip_commands table + if not has_value(self.skip_names, name) and not has_value(self.skip_commands, commandline) then + -- Check if this app should be skipped becuase it's iconless depanding on skip_empty_icons + if icon ~= "" or self.skip_empty_icons == false then + if icon == "" then + if self.default_app_icon_name ~= nil then + icon = icon_theme:get_icon_path(self.default_app_icon_name) + elseif self.default_app_icon_path ~= nil then + icon = self.default_app_icon_path + else + icon = icon_theme:choose_icon({"application-all", "application", "application-default-icon", "app"}) + end + end + + local desktop_app_info = Gio.DesktopAppInfo.new(app_info.get_id(app)) + local terminal = Gio.DesktopAppInfo.get_string(desktop_app_info, "Terminal") == "true" and true or false + local generic_name = Gio.DesktopAppInfo.get_string(desktop_app_info, "GenericName") or nil + + table.insert(self._private.all_entries, { + name = name, + generic_name = generic_name, + commandline = commandline, + executable = executable, + terminal = terminal, + icon = icon + }) + end + end + end + end +end + +--- Shows the app launcher +function app_launcher:show() + local screen = self.screen + if self.show_on_focused_screen then + screen = awful.screen.focused() + end + + screen.app_launcher = self._private.widget + screen.app_launcher.screen = screen + self._private.prompt:start() + + local animation = self.rubato + if animation ~= nil then + if self._private.widget.goal_x == nil then + self._private.widget.goal_x = self._private.widget.x + end + if self._private.widget.goal_y == nil then + self._private.widget.goal_y = self._private.widget.y + self._private.widget.placement = nil + end + + if animation.x then + animation.x.ended:unsubscribe() + animation.x:set(self._private.widget.goal_x) + gtimer { + timeout = 0.01, + call_now = false, + autostart = true, + single_shot = true, + callback = function() + screen.app_launcher.visible = true + end + } + end + if animation.y then + animation.y.ended:unsubscribe() + animation.y:set(self._private.widget.goal_y) + gtimer { + timeout = 0.01, + call_now = false, + autostart = true, + single_shot = true, + callback = function() + screen.app_launcher.visible = true + end + } + end + else + screen.app_launcher.visible = true + end + + self:emit_signal("bling::app_launcher::visibility", true) +end + +--- Hides the app launcher +function app_launcher:hide() + local screen = self.screen + if self.show_on_focused_screen then + screen = awful.screen.focused() + end + + if screen.app_launcher == nil or screen.app_launcher.visible == false then + return + end + + self._private.prompt:stop() + + local animation = self.rubato + if animation ~= nil then + if animation.x then + animation.x:set(animation.x:initial()) + end + if animation.y then + animation.y:set(animation.y:initial()) + end + + local anim_x_duration = (animation.x and animation.x.duration) or 0 + local anim_y_duration = (animation.y and animation.y.duration) or 0 + local turn_off_on_anim_x_end = (anim_x_duration >= anim_y_duration) and true or false + + if turn_off_on_anim_x_end then + animation.x.ended:subscribe(function() + if self.reset_on_hide == true then reset(self) end + screen.app_launcher.visible = false + screen.app_launcher = nil + animation.x.ended:unsubscribe() + end) + else + animation.y.ended:subscribe(function() + if self.reset_on_hide == true then reset(self) end + screen.app_launcher.visible = false + screen.app_launcher = nil + animation.y.ended:unsubscribe() + end) + end + else + if self.reset_on_hide == true then reset(self) end + screen.app_launcher.visible = false + screen.app_launcher = nil + end + + self:emit_signal("bling::app_launcher::visibility", false) +end + +--- Toggles the app launcher +function app_launcher:toggle() + local screen = self.screen + if self.show_on_focused_screen then + screen = awful.screen.focused() + end + + if screen.app_launcher and screen.app_launcher.visible then + self:hide() + else + self:show() + end +end + +-- Returns a new app launcher +local function new(args) + args = args or {} + + args.terminal = args.terminal or nil + args.favorites = args.favorites or {} + args.search_commands = args.search_commands == nil and true or args.search_commands + args.skip_names = args.skip_names or {} + args.skip_commands = args.skip_commands or {} + args.skip_empty_icons = args.skip_empty_icons ~= nil and args.skip_empty_icons or false + args.sort_alphabetically = args.sort_alphabetically == nil and true or args.sort_alphabetically + args.reverse_sort_alphabetically = args.reverse_sort_alphabetically ~= nil and args.reverse_sort_alphabetically or false + args.select_before_spawn = args.select_before_spawn == nil and true or args.select_before_spawn + args.hide_on_left_clicked_outside = args.hide_on_left_clicked_outside == nil and true or args.hide_on_left_clicked_outside + args.hide_on_right_clicked_outside = args.hide_on_right_clicked_outside == nil and true or args.hide_on_right_clicked_outside + args.hide_on_launch = args.hide_on_launch == nil and true or args.hide_on_launch + args.try_to_keep_index_after_searching = args.try_to_keep_index_after_searching ~= nil and args.try_to_keep_index_after_searching or false + args.reset_on_hide = args.reset_on_hide == nil and true or args.reset_on_hide + args.save_history = args.save_history == nil and true or args.save_history + args.wrap_page_scrolling = args.wrap_page_scrolling == nil and true or args.wrap_page_scrolling + args.wrap_app_scrolling = args.wrap_app_scrolling == nil and true or args.wrap_app_scrolling + + args.default_app_icon_name = args.default_app_icon_name or nil + args.default_app_icon_path = args.default_app_icon_path or nil + args.icon_theme = args.icon_theme or nil + args.icons_size = args.icons_size or nil + + args.show_on_focused_screen = args.show_on_focused_screen == nil and true or args.show_on_focused_screen + args.screen = args.screen or capi.screen.primary + args.placement = args.placement or awful.placement.centered + args.rubato = args.rubato or nil + args.shirnk_width = args.shirnk_width ~= nil and args.shirnk_width or false + args.shrink_height = args.shrink_height ~= nil and args.shrink_height or false + args.background = args.background or "#000000" + args.shape = args.shape or nil + + args.prompt_height = args.prompt_height or dpi(100) + args.prompt_margins = args.prompt_margins or dpi(0) + args.prompt_paddings = args.prompt_paddings or dpi(30) + args.prompt_shape = args.prompt_shape or nil + args.prompt_color = args.prompt_color or beautiful.fg_normal or "#FFFFFF" + args.prompt_border_width = args.prompt_border_width or beautiful.border_width or dpi(0) + args.prompt_border_color = args.prompt_border_color or beautiful.border_color or args.prompt_color + args.prompt_text_halign = args.prompt_text_halign or "left" + args.prompt_text_valign = args.prompt_text_valign or "center" + args.prompt_icon_text_spacing = args.prompt_icon_text_spacing or dpi(10) + args.prompt_show_icon = args.prompt_show_icon == nil and true or args.prompt_show_icon + args.prompt_icon_font = args.prompt_icon_font or beautiful.font + args.prompt_icon_color = args.prompt_icon_color or beautiful.bg_normal or "#000000" + args.prompt_icon = args.prompt_icon or "" + args.prompt_icon_markup = args.prompt_icon_markup or string.format("%s", args.prompt_icon_color, args.prompt_icon) + args.prompt_text = args.prompt_text or "Search: " + args.prompt_start_text = args.prompt_start_text or "" + args.prompt_font = args.prompt_font or beautiful.font + args.prompt_text_color = args.prompt_text_color or beautiful.bg_normal or "#000000" + args.prompt_cursor_color = args.prompt_cursor_color or beautiful.bg_normal or "#000000" + + args.apps_per_row = args.apps_per_row or 5 + args.apps_per_column = args.apps_per_column or 3 + args.apps_margin = args.apps_margin or dpi(30) + args.apps_spacing = args.apps_spacing or dpi(30) + + args.expand_apps = args.expand_apps == nil and true or args.expand_apps + args.app_width = args.app_width or dpi(300) + args.app_height = args.app_height or dpi(120) + args.app_shape = args.app_shape or nil + args.app_normal_color = args.app_normal_color or beautiful.bg_normal or "#000000" + args.app_normal_hover_color = args.app_normal_hover_color or (color.is_dark(args.app_normal_color) or color.is_opaque(args.app_normal_color)) and + color.rgba_to_hex(color.multiply(color.hex_to_rgba(args.app_normal_color), 2.5)) or + color.rgba_to_hex(color.multiply(color.hex_to_rgba(args.app_normal_color), 0.5)) + args.app_selected_color = args.app_selected_color or beautiful.fg_normal or "#FFFFFF" + args.app_selected_hover_color = args.app_selected_hover_color or (color.is_dark(args.app_normal_color) or color.is_opaque(args.app_normal_color)) and + color.rgba_to_hex(color.multiply(color.hex_to_rgba(args.app_selected_color), 2.5)) or + color.rgba_to_hex(color.multiply(color.hex_to_rgba(args.app_selected_color), 0.5)) + args.app_content_padding = args.app_content_padding or dpi(10) + args.app_content_spacing = args.app_content_spacing or dpi(10) + args.app_show_icon = args.app_show_icon == nil and true or args.app_show_icon + args.app_icon_halign = args.app_icon_halign or "center" + args.app_icon_width = args.app_icon_width or dpi(70) + args.app_icon_height = args.app_icon_height or dpi(70) + args.app_show_name = args.app_show_name == nil and true or args.app_show_name + args.app_name_generic_name_spacing = args.app_name_generic_name_spacing or dpi(0) + args.app_name_halign = args.app_name_halign or "center" + args.app_name_font = args.app_name_font or beautiful.font + args.app_name_normal_color = args.app_name_normal_color or beautiful.fg_normal or "#FFFFFF" + args.app_name_selected_color = args.app_name_selected_color or beautiful.bg_normal or "#000000" + args.app_show_generic_name = args.app_show_generic_name ~= nil and args.app_show_generic_name or false + + local ret = gobject({}) + ret._private = {} + ret._private.text = "" + + gtable.crush(ret, app_launcher) + gtable.crush(ret, args) + + -- Calculate the grid width and height + local grid_width = ret.shirnk_width == false + and dpi((ret.app_width * ret.apps_per_column) + ((ret.apps_per_column - 1) * ret.apps_spacing)) + or nil + local grid_height = ret.shrink_height == false + and dpi((ret.app_height * ret.apps_per_row) + ((ret.apps_per_row - 1) * ret.apps_spacing)) + or nil + + -- These widgets need to be later accessed + ret._private.prompt = prompt + { + prompt = ret.prompt_text, + text = ret.prompt_start_text, + font = ret.prompt_font, + reset_on_stop = ret.reset_on_hide, + bg_cursor = ret.prompt_cursor_color, + history_path = ret.save_history == true and gfilesystem.get_cache_dir() .. "/history" or nil, + changed_callback = function(text) + if text == ret._private.text then + return + end + + if ret._private.search_timer ~= nil and ret._private.search_timer.started then + ret._private.search_timer:stop() + end + + ret._private.search_timer = gtimer { + timeout = 0.05, + autostart = true, + single_shot = true, + callback = function() + search(ret, text) + end + } + + ret._private.text = text + end, + keypressed_callback = function(mod, key, cmd) + if key == "Escape" then + ret:hide() + end + if key == "Return" then + if ret._private.active_widget ~= nil then + ret._private.active_widget.spawn() + end + end + if key == "Up" then + scroll_up(ret) + end + if key == "Down" then + scroll_down(ret) + end + if key == "Left" then + scroll_left(ret) + end + if key == "Right" then + scroll_right(ret) + end + end + } + ret._private.grid = wibox.widget + { + layout = wibox.layout.grid, + forced_width = grid_width, + forced_height = grid_height, + orientation = "horizontal", + homogeneous = true, + expand = ret.expand_apps, + spacing = ret.apps_spacing, + forced_num_rows = ret.apps_per_row, + buttons = + { + awful.button({}, 4, function() scroll_up(ret) end), + awful.button({}, 5, function() scroll_down(ret) end) + } + } + ret._private.widget = awful.popup + { + type = "dock", + visible = false, + ontop = true, + placement = ret.placement, + shape = ret.shape, + bg = ret.background, + widget = + { + layout = wibox.layout.fixed.vertical, + { + widget = wibox.container.margin, + margins = ret.prompt_margins, + { + widget = wibox.container.background, + forced_height = ret.prompt_height, + shape = ret.prompt_shape, + bg = ret.prompt_color, + fg = ret.prompt_text_color, + border_width = ret.prompt_border_width, + border_color = ret.prompt_border_color, + { + widget = wibox.container.margin, + margins = ret.prompt_paddings, + { + widget = wibox.container.place, + halign = ret.prompt_text_halign, + valign = ret.prompt_text_valign, + { + layout = wibox.layout.fixed.horizontal, + spacing = ret.prompt_icon_text_spacing, + { + widget = wibox.widget.textbox, + font = ret.prompt_icon_font, + markup = ret.prompt_icon_markup + }, + ret._private.prompt.textbox + } + } + } + } + }, + { + widget = wibox.container.margin, + margins = ret.apps_margin, + ret._private.grid + } + } + } + + -- Private variables to be used to be used by the scrolling and searching functions + ret._private.max_apps_per_page = ret.apps_per_column * ret.apps_per_row + ret._private.apps_per_page = ret._private.max_apps_per_page + ret._private.pages_count = 0 + ret._private.current_page = 1 + + generate_apps(ret) + reset(ret) + + if ret.rubato and ret.rubato.x then + ret.rubato.x:subscribe(function(pos) + ret._private.widget.x = pos + end) + end + if ret.rubato and ret.rubato.y then + ret.rubato.y:subscribe(function(pos) + ret._private.widget.y = pos + end) + end + + if ret.hide_on_left_clicked_outside then + awful.mouse.append_client_mousebinding( + awful.button({ }, 1, function (c) + ret:hide() + end) + ) + + awful.mouse.append_global_mousebinding( + awful.button({ }, 1, function (c) + ret:hide() + end) + ) + end + if ret.hide_on_right_clicked_outside then + awful.mouse.append_client_mousebinding( + awful.button({ }, 3, function (c) + ret:hide() + end) + ) + + awful.mouse.append_global_mousebinding( + awful.button({ }, 3, function (c) + ret:hide() + end) + ) + end + + local kill_old_inotify_process_script = [[ ps x | grep "inotifywait -e modify /usr/share/applications" | grep -v grep | awk '{print $1}' | xargs kill ]] + local subscribe_script = [[ bash -c "while (inotifywait -e modify /usr/share/applications -qq) do echo; done" ]] + + awful.spawn.easy_async_with_shell(kill_old_inotify_process_script, function() + awful.spawn.with_line_callback(subscribe_script, {stdout = function(_) + generate_apps(ret) + end}) + end) + + return ret +end + +function app_launcher.text(args) + args = args or {} + + args.prompt_height = args.prompt_height or dpi(50) + args.prompt_margins = args.prompt_margins or dpi(30) + args.prompt_paddings = args.prompt_paddings or dpi(15) + args.app_width = args.app_width or dpi(400) + args.app_height = args.app_height or dpi(40) + args.apps_spacing = args.apps_spacing or dpi(10) + args.apps_per_row = args.apps_per_row or 15 + args.apps_per_column = args.apps_per_column or 1 + args.app_name_halign = args.app_name_halign or "left" + args.app_show_icon = args.app_show_icon ~= nil and args.app_show_icon or false + args.app_show_generic_name = args.app_show_generic_name == nil and true or args.app_show_generic_name + args.apps_margin = args.apps_margin or { left = dpi(40), right = dpi(40), bottom = dpi(30) } + + return new(args) +end + +function app_launcher.mt:__call(...) + return new(...) +end + +return setmetatable(app_launcher, app_launcher.mt) diff --git a/.config/awesome/extras/bling/widget/app_launcher/prompt.lua b/.config/awesome/extras/bling/widget/app_launcher/prompt.lua new file mode 100755 index 0000000..fae3b86 --- /dev/null +++ b/.config/awesome/extras/bling/widget/app_launcher/prompt.lua @@ -0,0 +1,656 @@ +--------------------------------------------------------------------------- +--- Modified Prompt module. +-- @author Julien Danjou <julien@danjou.info> +-- @copyright 2008 Julien Danjou +--------------------------------------------------------------------------- + +local akey = require("awful.key") +local keygrabber = require("awful.keygrabber") +local gobject = require("gears.object") +local gdebug = require('gears.debug') +local gtable = require("gears.table") +local gcolor = require("gears.color") +local gstring = require("gears.string") +local gfs = require("gears.filesystem") +local wibox = require("wibox") +local beautiful = require("beautiful") +local io = io +local table = table +local math = math +local ipairs = ipairs +local unpack = unpack or table.unpack -- luacheck: globals unpack (compatibility with Lua 5.1) +local capi = { selection = selection } + +local prompt = { mt = {} } + +--- Private data +local data = {} +data.history = {} + +local function itera(inc,a, i) + i = i + inc + local v = a[i] + if v then return i,v end +end + +local function history_check_load(id, max) + if id and id ~= "" and not data.history[id] then + data.history[id] = { max = 50, table = {} } + + if max then + data.history[id].max = max + end + + local f = io.open(id, "r") + if not f then return end + + -- Read history file + for line in f:lines() do + if gtable.hasitem(data.history[id].table, line) == nil then + table.insert(data.history[id].table, line) + if #data.history[id].table >= data.history[id].max then + break + end + end + end + f:close() + end +end + +local function is_word_char(c) + if string.find(c, "[{[(,.:;_-+=@/ ]") then + return false + else + return true + end +end + +local function cword_start(s, pos) + local i = pos + if i > 1 then + i = i - 1 + end + while i >= 1 and not is_word_char(s:sub(i, i)) do + i = i - 1 + end + while i >= 1 and is_word_char(s:sub(i, i)) do + i = i - 1 + end + if i <= #s then + i = i + 1 + end + return i +end + +local function cword_end(s, pos) + local i = pos + while i <= #s and not is_word_char(s:sub(i, i)) do + i = i + 1 + end + while i <= #s and is_word_char(s:sub(i, i)) do + i = i + 1 + end + return i +end + +local function history_save(id) + if data.history[id] then + gfs.make_parent_directories(id) + local f = io.open(id, "w") + if not f then + gdebug.print_warning("Failed to write the history to "..id) + return + end + for i = 1, math.min(#data.history[id].table, data.history[id].max) do + f:write(data.history[id].table[i] .. "\n") + end + f:close() + end +end + +local function history_items(id) + if data.history[id] then + return #data.history[id].table + else + return -1 + end +end + +local function history_add(id, command) + if data.history[id] and command ~= "" then + local index = gtable.hasitem(data.history[id].table, command) + if index == nil then + table.insert(data.history[id].table, command) + + -- Do not exceed our max_cmd + if #data.history[id].table > data.history[id].max then + table.remove(data.history[id].table, 1) + end + + history_save(id) + else + -- Bump this command to the end of history + table.remove(data.history[id].table, index) + table.insert(data.history[id].table, command) + history_save(id) + end + end +end + +local function have_multibyte_char_at(text, position) + return text:sub(position, position):wlen() == -1 +end + +local function prompt_text_with_cursor(args) + local char, spacer, text_start, text_end, ret + local text = args.text or "" + local _prompt = args.prompt or "" + local underline = args.cursor_ul or "none" + + if args.select_all then + if #text == 0 then char = " " else char = gstring.xml_escape(text) end + spacer = " " + text_start = "" + text_end = "" + elseif #text < args.cursor_pos then + char = " " + spacer = "" + text_start = gstring.xml_escape(text) + text_end = "" + else + local offset = 0 + if have_multibyte_char_at(text, args.cursor_pos) then + offset = 1 + end + char = gstring.xml_escape(text:sub(args.cursor_pos, args.cursor_pos + offset)) + spacer = " " + text_start = gstring.xml_escape(text:sub(1, args.cursor_pos - 1)) + text_end = gstring.xml_escape(text:sub(args.cursor_pos + 1 + offset)) + end + + local cursor_color = gcolor.ensure_pango_color(args.cursor_color) + local text_color = gcolor.ensure_pango_color(args.text_color) + + if args.highlighter then + text_start, text_end = args.highlighter(text_start, text_end) + end + + ret = _prompt .. text_start .. "" .. char .. "" .. text_end .. spacer + + return ret +end + +local function update(self) + self.textbox:set_font(self.font) + self.textbox:set_markup(prompt_text_with_cursor{ + text = self.command, text_color = self.fg_cursor, cursor_color = self.bg_cursor, + cursor_pos = self._private_cur_pos, cursor_ul = self.ul_cursor, select_all = self.select_all, + prompt = self.prompt, highlighter = self.highlighter }) +end + +local function exec(self, cb, command_to_history) + self.textbox:set_markup("") + history_add(self.history_path, command_to_history) + keygrabber.stop(self._private.grabber) + if cb then cb(self.command) end + if self.done_callback then + self.done_callback() + end +end + +function prompt:start() + -- The cursor position + if self.reset_on_stop == true or self._private_cur_pos == nil then + self._private_cur_pos = (self.select_all and 1) or self.text:wlen() + 1 + end + if self.reset_on_stop == true then self.text = "" self.command = "" end + + self.textbox:set_font(self.font) + self.textbox:set_markup(prompt_text_with_cursor{ + text = self.reset_on_stop and self.text or self.command, text_color = self.fg_cursor, cursor_color = self.bg_cursor, + cursor_pos = self._private_cur_pos, cursor_ul = self.ul_cursor, select_all = self.select_all, + prompt = self.prompt, highlighter = self.highlighter}) + + self._private.search_term = nil + + history_check_load(self.history_path, self.history_max) + local history_index = history_items(self.history_path) + 1 + + -- The completion element to use on completion request. + local ncomp = 1 + + local command_before_comp + local cur_pos_before_comp + + self._private.grabber = keygrabber.run(function(modifiers, key, event) + -- Convert index array to hash table + local mod = {} + for _, v in ipairs(modifiers) do mod[v] = true end + + if event ~= "press" then + if self.keyreleased_callback then + self.keyreleased_callback(mod, key, self.command) + end + return + end + + -- Call the user specified callback. If it returns true as + -- the first result then return from the function. Treat the + -- second and third results as a new command and new prompt + -- to be set (if provided) + if self.keypressed_callback then + local user_catched, new_command, new_prompt = + self.keypressed_callback(mod, key, self.command) + if new_command or new_prompt then + if new_command then + self.command = new_command + end + if new_prompt then + self.prompt = new_prompt + end + update(self) + end + if user_catched then + if self.changed_callback then + self.changed_callback(self.command) + end + return + end + end + + local filtered_modifiers = {} + + -- User defined cases + if self.hooks[key] then + -- Remove caps and num lock + for _, m in ipairs(modifiers) do + if not gtable.hasitem(akey.ignore_modifiers, m) then + table.insert(filtered_modifiers, m) + end + end + + for _,v in ipairs(self.hooks[key]) do + if #filtered_modifiers == #v[1] then + local match = true + for _,v2 in ipairs(v[1]) do + match = match and mod[v2] + end + if match then + local cb + local ret, quit = v[3](self.command) + local original_command = self.command + + -- Support both a "simple" and a "complex" way to + -- control if the prompt should quit. + quit = quit == nil and (ret ~= true) or (quit~=false) + + -- Allow the callback to change the command + self.command = (ret ~= true) and ret or self.command + + -- Quit by default, but allow it to be disabled + if ret and type(ret) ~= "boolean" then + cb = self.exe_callback + if not quit then + self._private_cur_pos = ret:wlen() + 1 + update(self) + end + elseif quit then + -- No callback. + cb = function() end + end + + -- Execute the callback + if cb then + exec(self, cb, original_command) + end + + return + end + end + end + end + + -- Get out cases + if (mod.Control and (key == "c" or key == "g")) + or (not mod.Control and key == "Escape") then + self:stop() + return false + elseif (mod.Control and (key == "j" or key == "m")) + -- or (not mod.Control and key == "Return") + -- or (not mod.Control and key == "KP_Enter") + then + exec(self, self.exe_callback, self.command) + -- We already unregistered ourselves so we don't want to return + -- true, otherwise we may unregister someone else. + return + end + + -- Control cases + if mod.Control then + self.select_all = nil + if key == "v" then + local selection = capi.selection() + if selection then + -- Remove \n + local n = selection:find("\n") + if n then + selection = selection:sub(1, n - 1) + end + self.command = self.command:sub(1, self._private_cur_pos - 1) .. selection .. self.command:sub(self._private_cur_pos) + self._private_cur_pos = self._private_cur_pos + #selection + end + elseif key == "a" then + self._private_cur_pos = 1 + elseif key == "b" then + if self._private_cur_pos > 1 then + self._private_cur_pos = self._private_cur_pos - 1 + if have_multibyte_char_at(self.command, self._private_cur_pos) then + self._private_cur_pos = self._private_cur_pos - 1 + end + end + elseif key == "d" then + if self._private_cur_pos <= #self.command then + self.command = self.command:sub(1, self._private_cur_pos - 1) .. self.command:sub(self._private_cur_pos + 1) + end + elseif key == "p" then + if history_index > 1 then + history_index = history_index - 1 + + self.command = data.history[self.history_path].table[history_index] + self._private_cur_pos = #self.command + 2 + end + elseif key == "n" then + if history_index < history_items(self.history_path) then + history_index = history_index + 1 + + self.command = data.history[self.history_path].table[history_index] + self._private_cur_pos = #self.command + 2 + elseif history_index == history_items(self.history_path) then + history_index = history_index + 1 + + self.command = "" + self._private_cur_pos = 1 + end + elseif key == "e" then + self._private_cur_pos = #self.command + 1 + elseif key == "r" then + self._private.search_term = self._private.search_term or self.command:sub(1, self._private_cur_pos - 1) + for i,v in (function(a,i) return itera(-1,a,i) end), data.history[self.history_path].table, history_index do + if v:find(self._private.search_term,1,true) ~= nil then + self.command=v + history_index=i + self._private_cur_pos=#self.command+1 + break + end + end + elseif key == "s" then + self._private.search_term = self._private.search_term or self.command:sub(1, self._private_cur_pos - 1) + for i,v in (function(a,i) return itera(1,a,i) end), data.history[self.history_path].table, history_index do + if v:find(self._private.search_term,1,true) ~= nil then + self.command=v + history_index=i + self._private_cur_pos=#self.command+1 + break + end + end + elseif key == "f" then + if self._private_cur_pos <= #self.command then + if have_multibyte_char_at(self.command, self._private_cur_pos) then + self._private_cur_pos = self._private_cur_pos + 2 + else + self._private_cur_pos = self._private_cur_pos + 1 + end + end + elseif key == "h" then + if self._private_cur_pos > 1 then + local offset = 0 + if have_multibyte_char_at(self.command, self._private_cur_pos - 1) then + offset = 1 + end + self.command = self.command:sub(1, self._private_cur_pos - 2 - offset) .. self.command:sub(self._private_cur_pos) + self._private_cur_pos = self._private_cur_pos - 1 - offset + end + elseif key == "k" then + self.command = self.command:sub(1, self._private_cur_pos - 1) + elseif key == "u" then + self.command = self.command:sub(self._private_cur_pos, #self.command) + self._private_cur_pos = 1 + elseif key == "Prior" then + self._private.search_term = self.command:sub(1, self._private_cur_pos - 1) or "" + for i,v in (function(a,i) return itera(-1,a,i) end), data.history[self.history_path].table, history_index do + if v:find(self._private.search_term,1,true) == 1 then + self.command=v + history_index=i + break + end + end + elseif key == "Next" then + self._private.search_term = self.command:sub(1, self._private_cur_pos - 1) or "" + for i,v in (function(a,i) return itera(1,a,i) end), data.history[self.history_path].table, history_index do + if v:find(self._private.search_term,1,true) == 1 then + self.command=v + history_index=i + break + end + end + elseif key == "w" or key == "BackSpace" then + local wstart = 1 + local wend = 1 + local cword_start_pos = 1 + local cword_end_pos = 1 + while wend < self._private_cur_pos do + wend = self.command:find("[{[(,.:;_-+=@/ ]", wstart) + if not wend then wend = #self.command + 1 end + if self._private_cur_pos >= wstart and self._private_cur_pos <= wend + 1 then + cword_start_pos = wstart + cword_end_pos = self._private_cur_pos - 1 + break + end + wstart = wend + 1 + end + self.command = self.command:sub(1, cword_start_pos - 1) .. self.command:sub(cword_end_pos + 1) + self._private_cur_pos = cword_start_pos + elseif key == "Delete" then + -- delete from history only if: + -- we are not dealing with a new command + -- the user has not edited an existing entry + if self.command == data.history[self.history_path].table[history_index] then + table.remove(data.history[self.history_path].table, history_index) + if history_index <= history_items(self.history_path) then + self.command = data.history[self.history_path].table[history_index] + self._private_cur_pos = #self.command + 2 + elseif history_index > 1 then + history_index = history_index - 1 + + self.command = data.history[self.history_path].table[history_index] + self._private_cur_pos = #self.command + 2 + else + self.command = "" + self._private_cur_pos = 1 + end + end + end + elseif mod.Mod1 or mod.Mod3 then + if key == "b" then + self._private_cur_pos = cword_start(self.command, self._private_cur_pos) + elseif key == "f" then + self._private_cur_pos = cword_end(self.command, self._private_cur_pos) + elseif key == "d" then + self.command = self.command:sub(1, self._private_cur_pos - 1) .. self.command:sub(cword_end(self.command, self._private_cur_pos)) + elseif key == "BackSpace" then + local wstart = cword_start(self.command, self._private_cur_pos) + self.command = self.command:sub(1, wstart - 1) .. self.command:sub(self._private_cur_pos) + self._private_cur_pos = wstart + end + else + if self.completion_callback then + if key == "Tab" or key == "ISO_Left_Tab" then + if key == "ISO_Left_Tab" or mod.Shift then + if ncomp == 1 then return end + if ncomp == 2 then + self.command = command_before_comp + self.textbox:set_font(self.font) + self.textbox:set_markup(prompt_text_with_cursor{ + text = command_before_comp, text_color = self.fg_cursor, cursor_color = self.bg_cursor, + cursor_pos = self._private_cur_pos, cursor_ul = self.ul_cursor, select_all = self.select_all, + prompt = self.prompt }) + self._private_cur_pos = cur_pos_before_comp + ncomp = 1 + return + end + + ncomp = ncomp - 2 + elseif ncomp == 1 then + command_before_comp = self.command + cur_pos_before_comp = self._private_cur_pos + end + local matches + self.command, self._private_cur_pos, matches = self.completion_callback(command_before_comp, cur_pos_before_comp, ncomp) + ncomp = ncomp + 1 + key = "" + -- execute if only one match found and autoexec flag set + if matches and #matches == 1 and args.autoexec then + exec(self, self.exe_callback) + return + end + elseif key ~= "Shift_L" and key ~= "Shift_R" then + ncomp = 1 + end + end + + -- Typin cases + if mod.Shift and key == "Insert" then + local selection = capi.selection() + if selection then + -- Remove \n + local n = selection:find("\n") + if n then + selection = selection:sub(1, n - 1) + end + self.command = self.command:sub(1, self._private_cur_pos - 1) .. selection .. self.command:sub(self._private_cur_pos) + self._private_cur_pos = self._private_cur_pos + #selection + end + elseif key == "Home" then + self._private_cur_pos = 1 + elseif key == "End" then + self._private_cur_pos = #self.command + 1 + elseif key == "BackSpace" then + if self._private_cur_pos > 1 then + local offset = 0 + if have_multibyte_char_at(self.command, self._private_cur_pos - 1) then + offset = 1 + end + self.command = self.command:sub(1, self._private_cur_pos - 2 - offset) .. self.command:sub(self._private_cur_pos) + self._private_cur_pos = self._private_cur_pos - 1 - offset + end + elseif key == "Delete" then + self.command = self.command:sub(1, self._private_cur_pos - 1) .. self.command:sub(self._private_cur_pos + 1) + elseif key == "Left" then + self._private_cur_pos = self._private_cur_pos - 1 + elseif key == "Right" then + self._private_cur_pos = self._private_cur_pos + 1 + elseif key == "Prior" then + if history_index > 1 then + history_index = history_index - 1 + + self.command = data.history[self.history_path].table[history_index] + self._private_cur_pos = #self.command + 2 + end + elseif key == "Next" then + if history_index < history_items(self.history_path) then + history_index = history_index + 1 + + self.command = data.history[self.history_path].table[history_index] + self._private_cur_pos = #self.command + 2 + elseif history_index == history_items(self.history_path) then + history_index = history_index + 1 + + self.command = "" + self._private_cur_pos = 1 + end + else + -- wlen() is UTF-8 aware but #key is not, + -- so check that we have one UTF-8 char but advance the cursor of # position + if key:wlen() == 1 then + if self.select_all then self.command = "" end + self.command = self.command:sub(1, self._private_cur_pos - 1) .. key .. self.command:sub(self._private_cur_pos) + self._private_cur_pos = self._private_cur_pos + #key + end + end + if self._private_cur_pos < 1 then + self._private_cur_pos = 1 + elseif self._private_cur_pos > #self.command + 1 then + self._private_cur_pos = #self.command + 1 + end + self.select_all = nil + end + + update(self) + if self.changed_callback then + self.changed_callback(self.command) + end + end) +end + +function prompt:stop() + keygrabber.stop(self._private.grabber) + history_save(self.history_path) + if self.done_callback then self.done_callback() end + return false +end + +local function new(args) + args = args or {} + + args.command = args.text or "" + args.prompt = args.prompt or "" + args.text = args.text or "" + args.font = args.font or beautiful.prompt_font or beautiful.font + args.bg_cursor = args.bg_cursor or beautiful.prompt_bg_cursor or beautiful.bg_focus or "white" + args.fg_cursor = args.fg_cursor or beautiful.prompt_fg_cursor or beautiful.fg_focus or "black" + args.ul_cursor = args.ul_cursor or nil + args.reset_on_stop = args.reset_on_stop == nil and true or args.reset_on_stop + args.select_all = args.select_all or nil + args.highlighter = args.highlighter or nil + args.hooks = args.hooks or {} + args.keypressed_callback = args.keypressed_callback or nil + args.changed_callback = args.changed_callback or nil + args.done_callback = args.done_callback or nil + args.history_max = args.history_max or nil + args.history_path = args.history_path or nil + args.completion_callback = args.completion_callback or nil + args.exe_callback = args.exe_callback or nil + args.textbox = args.textbox or wibox.widget.textbox() + + -- Build the hook map + local hooks = {} + for _,v in ipairs(args.hooks) do + if #v == 3 then + local _,key,callback = unpack(v) + if type(callback) == "function" then + hooks[key] = hooks[key] or {} + hooks[key][#hooks[key]+1] = v + else + gdebug.print_warning("The hook's 3rd parameter has to be a function.") + end + else + gdebug.print_warning("The hook has to have 3 parameters.") + end + end + args.hooks = hooks + + local ret = gobject({}) + ret._private = {} + gtable.crush(ret, prompt) + gtable.crush(ret, args) + + return ret +end + +function prompt.mt:__call(...) + return new(...) +end + +return setmetatable(prompt, prompt.mt) \ No newline at end of file diff --git a/.config/awesome/extras/bling/widget/init.lua b/.config/awesome/extras/bling/widget/init.lua new file mode 100755 index 0000000..d3c6ebd --- /dev/null +++ b/.config/awesome/extras/bling/widget/init.lua @@ -0,0 +1,7 @@ +return { + tag_preview = require(... .. ".tag_preview"), + task_preview = require(... .. ".task_preview"), + window_switcher = require(... .. ".window_switcher"), + tabbed_misc = require(... .. ".tabbed_misc"), + app_launcher = require(... .. ".app_launcher"), +} diff --git a/.config/awesome/extras/bling/widget/tabbar/boxes.lua b/.config/awesome/extras/bling/widget/tabbar/boxes.lua new file mode 100755 index 0000000..720f420 --- /dev/null +++ b/.config/awesome/extras/bling/widget/tabbar/boxes.lua @@ -0,0 +1,57 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") + +local beautiful = require("beautiful") + +local bg_normal = beautiful.tabbar_bg_normal or beautiful.bg_normal or "#ffffff" +local fg_normal = beautiful.tabbar_fg_normal or beautiful.fg_normal or "#000000" +local bg_focus = beautiful.tabbar_bg_focus or beautiful.bg_focus or "#000000" +local fg_focus = beautiful.tabbar_fg_focus or beautiful.fg_focus or "#ffffff" +local bg_focus_inactive = beautiful.tabbar_bg_focus_inactive or bg_focus +local fg_focus_inactive = beautiful.tabbar_fg_focus_inactive or fg_focus +local bg_normal_inactive = beautiful.tabbar_bg_normal_inactive or bg_normal +local fg_normal_inactive = beautiful.tabbar_fg_normal_inactive or fg_normal +local font = beautiful.tabbar_font or beautiful.font or "Hack 15" +local size = beautiful.tabbar_size or 40 +local position = beautiful.tabbar_position or "bottom" + +local function create(c, focused_bool, buttons, inactive_bool) + local bg_temp = inactive_bool and bg_normal_inactive or bg_normal + local fg_temp = inactive_bool and fg_normal_inactive or fg_normal + if focused_bool then + bg_temp = inactive_bool and bg_focus_inactive or bg_focus + fg_temp = inactive_bool and fg_focus_inactive or fg_focus + end + local wid_temp = wibox.widget({ + { + { + awful.widget.clienticon(c), + left = 10, + right = 10, + bottom = 10, + top = 10, + widget = wibox.container.margin(), + }, + widget = wibox.container.place(), + }, + buttons = buttons, + bg = bg_temp, + widget = wibox.container.background(), + }) + return wid_temp +end + +local layout = wibox.layout.fixed.horizontal +if position == "left" or position == "right" then + layout = wibox.layout.fixed.vertical +end + +return { + layout = layout, + create = create, + position = position, + size = size, + bg_normal = bg_normal, + bg_focus = bg_normal, +} diff --git a/.config/awesome/extras/bling/widget/tabbar/default.lua b/.config/awesome/extras/bling/widget/tabbar/default.lua new file mode 100755 index 0000000..ad6b0b1 --- /dev/null +++ b/.config/awesome/extras/bling/widget/tabbar/default.lua @@ -0,0 +1,60 @@ +local gears = require("gears") +local wibox = require("wibox") + +local beautiful = require("beautiful") + +local bg_normal = beautiful.tabbar_bg_normal or beautiful.bg_normal or "#ffffff" +local fg_normal = beautiful.tabbar_fg_normal or beautiful.fg_normal or "#000000" +local bg_focus = beautiful.tabbar_bg_focus or beautiful.bg_focus or "#000000" +local fg_focus = beautiful.tabbar_fg_focus or beautiful.fg_focus or "#ffffff" +local bg_focus_inactive = beautiful.tabbar_bg_focus_inactive or bg_focus +local fg_focus_inactive = beautiful.tabbar_fg_focus_inactive or fg_focus +local bg_normal_inactive = beautiful.tabbar_bg_normal_inactive or bg_normal +local fg_normal_inactive = beautiful.tabbar_fg_normal_inactive or fg_normal +local font = beautiful.tabbar_font or beautiful.font or "Hack 15" +local size = beautiful.tabbar_size or 20 +local position = beautiful.tabbar_position or "top" + +local function create(c, focused_bool, buttons, inactive_bool) + local flexlist = wibox.layout.flex.horizontal() + local title_temp = c.name or c.class or "-" + local bg_temp = inactive_bool and bg_normal_inactive or bg_normal + local fg_temp = inactive_bool and fg_normal_inactive or fg_normal + if focused_bool then + bg_temp = inactive_bool and bg_focus_inactive or bg_focus + fg_temp = inactive_bool and fg_focus_inactive or fg_focus + end + local text_temp = wibox.widget.textbox() + text_temp.align = "center" + text_temp.valign = "center" + text_temp.font = font + text_temp.markup = "" + .. title_temp + .. "" + c:connect_signal("property::name", function(_) + local title_temp = c.name or c.class or "-" + text_temp.markup = "" + .. title_temp + .. "" + end) + local wid_temp = wibox.widget({ + text_temp, + buttons = buttons, + bg = bg_temp, + widget = wibox.container.background(), + }) + return wid_temp +end + +return { + layout = wibox.layout.flex.horizontal, + create = create, + position = position, + size = size, + bg_normal = bg_normal, + bg_focus = bg_focus, +} diff --git a/.config/awesome/extras/bling/widget/tabbar/modern.lua b/.config/awesome/extras/bling/widget/tabbar/modern.lua new file mode 100755 index 0000000..5f48066 --- /dev/null +++ b/.config/awesome/extras/bling/widget/tabbar/modern.lua @@ -0,0 +1,271 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") +local xresources = require("beautiful.xresources") +local dpi = xresources.apply_dpi +local helpers = require(tostring(...):match(".*bling") .. ".helpers") + +local bg_normal = beautiful.tabbar_bg_normal or beautiful.bg_normal or "#ffffff" +local fg_normal = beautiful.tabbar_fg_normal or beautiful.fg_normal or "#000000" +local bg_focus = beautiful.tabbar_bg_focus or beautiful.bg_focus or "#000000" +local fg_focus = beautiful.tabbar_fg_focus or beautiful.fg_focus or "#ffffff" +local bg_focus_inactive = beautiful.tabbar_bg_focus_inactive or bg_focus +local fg_focus_inactive = beautiful.tabbar_fg_focus_inactive or fg_focus +local bg_normal_inactive = beautiful.tabbar_bg_normal_inactive or bg_normal +local fg_normal_inactive = beautiful.tabbar_fg_normal_inactive or fg_normal +local font = beautiful.tabbar_font or beautiful.font or "Hack 15" +local size = beautiful.tabbar_size or dpi(40) +local border_radius = beautiful.mstab_border_radius + or beautiful.border_radius + or 6 +local position = beautiful.tabbar_position or "top" +local close_color = beautiful.tabbar_color_close + or beautiful.xcolor1 + or "#f9929b" +local min_color = beautiful.tabbar_color_min or beautiful.xcolor3 or "#fbdf90" +local float_color = beautiful.tabbar_color_float + or beautiful.xcolor5 + or "#ccaced" + +-- Helper to create buttons +local function create_title_button(c, color_focus, color_unfocus) + local tb_color = wibox.widget({ + wibox.widget.textbox(), + forced_width = dpi(8), + forced_height = dpi(8), + bg = color_focus, + shape = gears.shape.circle, + widget = wibox.container.background, + }) + + local tb = wibox.widget({ + tb_color, + width = dpi(25), + height = dpi(25), + strategy = "min", + layout = wibox.layout.constraint, + }) + + local function update() + if client.focus == c then + tb_color.bg = color_focus + else + tb_color.bg = color_unfocus + end + end + update() + c:connect_signal("focus", update) + c:connect_signal("unfocus", update) + + tb:connect_signal("mouse::enter", function() + tb_color.bg = color_focus .. "70" + end) + + tb:connect_signal("mouse::leave", function() + tb_color.bg = color_focus + end) + + tb.visible = true + return tb +end + +local function create(c, focused_bool, buttons, inactive_bool) + -- local flexlist = wibox.layout.flex.horizontal() + local title_temp = c.name or c.class or "-" + local bg_temp = inactive_bool and bg_normal_inactive or bg_normal + local fg_temp = inactive_bool and fg_normal_inactive or fg_normal + if focused_bool then + bg_temp = inactive_bool and bg_focus_inactive or bg_focus + fg_temp = inactive_bool and fg_focus_inactive or fg_focus + end + local text_temp = wibox.widget.textbox() + text_temp.align = "center" + text_temp.valign = "center" + text_temp.font = font + text_temp.markup = "" + .. title_temp + .. "" + c:connect_signal("property::name", function(_) + local title_temp = c.name or c.class or "-" + text_temp.markup = "" + .. title_temp + .. "" + end) + + local tab_content = wibox.widget({ + { + awful.widget.clienticon(c), + top = dpi(6), + left = dpi(15), + bottom = dpi(6), + widget = wibox.container.margin, + }, + text_temp, + nill, + expand = "none", + layout = wibox.layout.align.horizontal, + }) + + local close = create_title_button(c, close_color, bg_normal) + close:connect_signal("button::press", function() + c:kill() + end) + + local floating = create_title_button(c, float_color, bg_normal) + floating:connect_signal("button::press", function() + c.floating = not c.floating + end) + + local min = create_title_button(c, min_color, bg_normal) + min:connect_signal("button::press", function() + c.minimized = true + end) + + if focused_bool then + tab_content = wibox.widget({ + { + awful.widget.clienticon(c), + top = dpi(10), + left = dpi(15), + bottom = dpi(10), + widget = wibox.container.margin, + }, + text_temp, + { + { min, floating, close, layout = wibox.layout.fixed.horizontal }, + top = dpi(10), + right = dpi(10), + bottom = dpi(10), + widget = wibox.container.margin, + }, + expand = "none", + layout = wibox.layout.align.horizontal, + }) + end + + local main_content = nil + local left_shape = nil + local right_shape = nil + + if position == "top" then + main_content = wibox.widget({ + { + tab_content, + bg = bg_temp, + shape = helpers.shape.prrect( + border_radius, + true, + true, + false, + false + ), + widget = wibox.container.background, + }, + top = dpi(8), + widget = wibox.container.margin, + }) + + left_shape = helpers.shape.prrect( + border_radius, + false, + false, + true, + false + ) + right_shape = helpers.shape.prrect( + border_radius, + false, + false, + false, + true + ) + else + main_content = wibox.widget({ + { + tab_content, + bg = bg_temp, + shape = helpers.shape.prrect( + border_radius, + false, + false, + true, + true + ), + widget = wibox.container.background, + }, + bottom = dpi(8), + widget = wibox.container.margin, + }) + + left_shape = helpers.shape.prrect( + border_radius, + false, + true, + false, + false + ) + right_shape = helpers.shape.prrect( + border_radius, + true, + false, + false, + false + ) + end + + local wid_temp = wibox.widget({ + buttons = buttons, + { + { + { + wibox.widget.textbox(), + bg = bg_normal, + shape = left_shape, + widget = wibox.container.background, + }, + bg = bg_temp, + shape = gears.rectangle, + widget = wibox.container.background, + }, + width = border_radius + (border_radius / 2), + height = size, + strategy = "exact", + layout = wibox.layout.constraint, + }, + main_content, + { + { + { + wibox.widget.textbox(), + bg = bg_normal, + shape = right_shape, + widget = wibox.container.background, + }, + bg = bg_temp, + shape = gears.rectangle, + widget = wibox.container.background, + }, + width = border_radius + (border_radius / 2), + height = size, + strategy = "exact", + layout = wibox.layout.constraint, + }, + + layout = wibox.layout.align.horizontal, + }) + return wid_temp +end + +return { + layout = wibox.layout.flex.horizontal, + create = create, + position = position, + size = size, + bg_normal = bg_normal, + bg_focus = bg_focus, +} diff --git a/.config/awesome/extras/bling/widget/tabbar/pure.lua b/.config/awesome/extras/bling/widget/tabbar/pure.lua new file mode 100755 index 0000000..5be82e5 --- /dev/null +++ b/.config/awesome/extras/bling/widget/tabbar/pure.lua @@ -0,0 +1,81 @@ +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local gcolor = require("gears.color") +local beautiful = require("beautiful") + +local bg_normal = beautiful.tabbar_bg_normal or beautiful.bg_normal or "#ffffff" +local fg_normal = beautiful.tabbar_fg_normal or beautiful.fg_normal or "#000000" +local bg_focus = beautiful.tabbar_bg_focus or beautiful.bg_focus or "#000000" +local fg_focus = beautiful.tabbar_fg_focus or beautiful.fg_focus or "#ffffff" +local bg_focus_inactive = beautiful.tabbar_bg_focus_inactive or bg_focus +local fg_focus_inactive = beautiful.tabbar_fg_focus_inactive or fg_focus +local bg_normal_inactive = beautiful.tabbar_bg_normal_inactive or bg_normal +local fg_normal_inactive = beautiful.tabbar_fg_normal_inactive or fg_normal +local font = beautiful.tabbar_font or beautiful.font or "Hack 15" +local size = beautiful.tabbar_size or 20 +local position = beautiful.tabbar_position or "top" + +local function create(c, focused_bool, buttons, inactive_bool) + local bg_temp = inactive_bool and bg_normal_inactive or bg_normal + local fg_temp = inactive_bool and fg_normal_inactive or fg_normal + if focused_bool then + bg_temp = inactive_bool and bg_focus_inactive or bg_focus + fg_temp = inactive_bool and fg_focus_inactive or fg_focus + end + + local wid_temp = wibox.widget({ + { + { -- Left + wibox.widget.base.make_widget( + awful.titlebar.widget.iconwidget(c) + ), + buttons = buttons, + layout = wibox.layout.fixed.horizontal, + }, + { -- Title + wibox.widget.base.make_widget( + awful.titlebar.widget.titlewidget(c) + ), + buttons = buttons, + widget = wibox.container.place, + }, + { -- Right + focused_bool and wibox.widget.base.make_widget( + awful.titlebar.widget.floatingbutton(c) + ) or nil, + focused_bool and wibox.widget.base.make_widget( + awful.titlebar.widget.stickybutton(c) + ) or nil, + focused_bool and wibox.widget.base.make_widget( + awful.titlebar.widget.ontopbutton(c) + ) or nil, + focused_bool and wibox.widget.base.make_widget( + awful.titlebar.widget.maximizedbutton(c) + ) or nil, + focused_bool and wibox.widget.base.make_widget( + awful.titlebar.widget.minimizebutton(c) + ) or nil, + focused_bool and wibox.widget.base.make_widget( + awful.titlebar.widget.closebutton(c) + ) or nil, + layout = wibox.layout.fixed.horizontal, + }, + layout = wibox.layout.align.horizontal, + }, + bg = bg_temp, + fg = fg_temp, + widget = wibox.container.background, + }) + + return wid_temp +end + +return { + layout = wibox.layout.flex.horizontal, + create = create, + position = position, + size = size, + bg_normal = bg_normal, + bg_focus = bg_focus, +} diff --git a/.config/awesome/extras/bling/widget/tabbed_misc/custom_tasklist.lua b/.config/awesome/extras/bling/widget/tabbed_misc/custom_tasklist.lua new file mode 100755 index 0000000..ac22377 --- /dev/null +++ b/.config/awesome/extras/bling/widget/tabbed_misc/custom_tasklist.lua @@ -0,0 +1,51 @@ +local wibox = require("wibox") +local awful = require("awful") +local gears = require("gears") +local beautiful = require("beautiful") +local dpi = require("beautiful.xresources").apply_dpi + +local function tabobj_support(self, c, index, clients) + -- Self is the background widget in this context + if not c.bling_tabbed and #c.bling_tabbed.clients > 1 then + return + end + + local group = c.bling_tabbed + + -- TODO: Allow customization here + local layout_v = wibox.widget { + vertical_spacing = dpi(2), + horizontal_spacing = dpi(2), + layout = wibox.layout.grid.horizontal, + forced_num_rows = 2, + forced_num_cols = 2, + homogeneous = true + } + + local wrapper = wibox.widget({ + layout_v, + id = "click_role", + widget = wibox.container.margin, + margins = dpi(5), + }) + + -- To get the ball rolling. + for idx, c in ipairs(group.clients) do + if not (c and c.icon) then goto skip end + + -- Add to the last layout + layout_v:add(wibox.widget { + { + widget = awful.widget.clienticon, + client = c + }, + widget = wibox.container.constraint, + width = dpi(24), + height = dpi(24) + }) + ::skip:: + end + self.widget = wrapper +end + +return tabobj_support diff --git a/.config/awesome/extras/bling/widget/tabbed_misc/init.lua b/.config/awesome/extras/bling/widget/tabbed_misc/init.lua new file mode 100755 index 0000000..1de3fbb --- /dev/null +++ b/.config/awesome/extras/bling/widget/tabbed_misc/init.lua @@ -0,0 +1,9 @@ +return { + titlebar_indicator = require( + tostring(...):match(".*bling") + .. ".widget.tabbed_misc.titlebar_indicator" + ), + custom_tasklist = require( + tostring(...):match(".*bling") .. ".widget.tabbed_misc.custom_tasklist" + ), +} diff --git a/.config/awesome/extras/bling/widget/tabbed_misc/titlebar_indicator.lua b/.config/awesome/extras/bling/widget/tabbed_misc/titlebar_indicator.lua new file mode 100755 index 0000000..46959cd --- /dev/null +++ b/.config/awesome/extras/bling/widget/tabbed_misc/titlebar_indicator.lua @@ -0,0 +1,133 @@ +local wibox = require("wibox") +local awful = require("awful") +local gears = require("gears") +local beautiful = require("beautiful") +local dpi = require("beautiful.xresources").apply_dpi +local tabbed_module = require( + tostring(...):match(".*bling") .. ".module.tabbed" +) + +-- Just check if a table contains a value. +local function tbl_contains(tbl, item) + for _, v in ipairs(tbl) do + if v == item then + return true + end + end + return false +end + +-- Needs to be run, every time a new titlbear is created +return function(c, opts) + -- Args & Fallback -- Widget templates are in their original loactions + opts = gears.table.crush({ + layout_spacing = dpi(4), + icon_size = dpi(20), + icon_margin = dpi(4), + bg_color_focus = "#ff0000", + bg_color = "#00000000", + fg_color = "#fafafa", + fg_color_focus = "#e0e0e0", + icon_shape = function(cr, w, h) + gears.shape.rounded_rect(cr, w, h, 0) + end, + layout = wibox.layout.fixed.horizontal, + }, gears.table.join( + opts, + beautiful.bling_tabbed_misc_titlebar_indicator + )) + + -- Container to store icons + local tabbed_icons = wibox.widget({ + layout = opts.layout, + spacing = opts.layout_spacing, + }) + + awesome.connect_signal("bling::tabbed::client_removed", function(_, removed_c) + -- Remove from list + for idx, icon in ipairs(tabbed_icons.children) do + if icon._client == removed_c then + tabbed_icons:remove(idx) + end + end + + -- Empty list + if removed_c == c then + tabbed_icons:reset() + end + end) + + local function recreate(group) + if tbl_contains(group.clients, c) then + tabbed_icons:reset() + local focused = group.clients[group.focused_idx] + + -- Autohide? + if #group.clients == 1 then + return + end + + for idx, client in ipairs(group.clients) do + local widget = wibox.widget( + opts.widget_template or { + { + { + { + id = "icon_role", + forced_width = opts.icon_size, + forced_height = opts.icon_size, + widget = awful.widget.clienticon, + }, + margins = opts.icon_margin, + widget = wibox.container.margin, + }, + shape = opts.icon_shape, + id = "bg_role", + widget = wibox.container.background, + }, + halign = "center", + valign = "center", + widget = wibox.container.place, + }) + + widget._client = client + + -- No creation call back since this would be called on creation & every time the widget updated. + if opts.widget_template and opts.widget_template.update_callback then + opts.widget_template.update_callback(widget, client, group) + end + + -- Add icons & etc + for _, w in ipairs(widget:get_children_by_id("icon_role")) do + -- TODO: Allow fallback icon? + w.image = client.icon + w.client = client + end + + for _, w in ipairs(widget:get_children_by_id("bg_role")) do + w:add_button(awful.button({}, 1, function() + tabbed_module.switch_to(group, idx) + end)) + if client == focused then + w.bg = opts.bg_color_focus + w.fg = opts.fg_color_focus + else + w.bg = opts.bg_color + w.fg = opts.fg_color + end + end + + for _, w in ipairs(widget:get_children_by_id("text_role")) do + w.text = client.name + end + + tabbed_icons:add(widget) + end + end + end + + awesome.connect_signal("bling::tabbed::client_added", recreate) + awesome.connect_signal("bling::tabbed::changed_focus", recreate) + + return tabbed_icons +end diff --git a/.config/awesome/extras/bling/widget/tag_preview.lua b/.config/awesome/extras/bling/widget/tag_preview.lua new file mode 100755 index 0000000..2a181b4 --- /dev/null +++ b/.config/awesome/extras/bling/widget/tag_preview.lua @@ -0,0 +1,246 @@ +-- +-- Provides: +-- bling::tag_preview::update -- first line is the signal +-- t (tag) -- indented lines are function parameters +-- bling::tag_preview::visibility +-- s (screen) +-- v (boolean) +-- +local awful = require("awful") +local wibox = require("wibox") +local helpers = require(tostring(...):match(".*bling") .. ".helpers") +local gears = require("gears") +local beautiful = require("beautiful") +local dpi = beautiful.xresources.apply_dpi +local cairo = require("lgi").cairo + +local function draw_widget( + t, + tag_preview_image, + scale, + screen_radius, + client_radius, + client_opacity, + client_bg, + client_border_color, + client_border_width, + widget_bg, + widget_border_color, + widget_border_width, + geo, + margin, + background_image +) + local client_list = wibox.layout.manual() + client_list.forced_height = geo.height + client_list.forced_width = geo.width + local tag_screen = t.screen + for i, c in ipairs(t:clients()) do + if not c.hidden and not c.minimized then + + + local img_box = wibox.widget ({ + resize = true, + forced_height = 100 * scale, + forced_width = 100 * scale, + widget = wibox.widget.imagebox, + }) + + -- If fails to set image, fallback to a awesome icon + if not pcall(function() img_box.image = gears.surface.load(c.icon) end) then + img_box.image = beautiful.theme_assets.awesome_icon (24, "#222222", "#fafafa") + end + + if tag_preview_image then + if c.prev_content or t.selected then + local content + if t.selected then + content = gears.surface(c.content) + else + content = gears.surface(c.prev_content) + end + local cr = cairo.Context(content) + local x, y, w, h = cr:clip_extents() + local img = cairo.ImageSurface.create( + cairo.Format.ARGB32, + w - x, + h - y + ) + cr = cairo.Context(img) + cr:set_source_surface(content, 0, 0) + cr.operator = cairo.Operator.SOURCE + cr:paint() + + img_box = wibox.widget({ + image = gears.surface.load(img), + resize = true, + opacity = client_opacity, + forced_height = math.floor(c.height * scale), + forced_width = math.floor(c.width * scale), + widget = wibox.widget.imagebox, + }) + end + end + + local client_box = wibox.widget({ + { + nil, + { + nil, + img_box, + nil, + expand = "outside", + layout = wibox.layout.align.horizontal, + }, + nil, + expand = "outside", + widget = wibox.layout.align.vertical, + }, + forced_height = math.floor(c.height * scale), + forced_width = math.floor(c.width * scale), + bg = client_bg, + shape_border_color = client_border_color, + shape_border_width = client_border_width, + shape = helpers.shape.rrect(client_radius), + widget = wibox.container.background, + }) + + client_box.point = { + x = math.floor((c.x - geo.x) * scale), + y = math.floor((c.y - geo.y) * scale), + } + + client_list:add(client_box) + end + end + + return wibox.widget { + { + background_image, + { + { + { + { + client_list, + forced_height = geo.height, + forced_width = geo.width, + widget = wibox.container.place, + }, + layout = wibox.layout.align.horizontal, + }, + layout = wibox.layout.align.vertical, + }, + margins = margin, + widget = wibox.container.margin, + }, + layout = wibox.layout.stack + }, + bg = widget_bg, + shape_border_width = widget_border_width, + shape_border_color = widget_border_color, + shape = helpers.shape.rrect(screen_radius), + widget = wibox.container.background, + } +end + +local enable = function(opts) + local opts = opts or {} + + local tag_preview_image = opts.show_client_content or false + local widget_x = opts.x or dpi(20) + local widget_y = opts.y or dpi(20) + local scale = opts.scale or 0.2 + local work_area = opts.honor_workarea or false + local padding = opts.honor_padding or false + local placement_fn = opts.placement_fn or nil + local background_image = opts.background_widget or nil + + local margin = beautiful.tag_preview_widget_margin or dpi(0) + local screen_radius = beautiful.tag_preview_widget_border_radius or dpi(0) + local client_radius = beautiful.tag_preview_client_border_radius or dpi(0) + local client_opacity = beautiful.tag_preview_client_opacity or 0.5 + local client_bg = beautiful.tag_preview_client_bg or "#000000" + local client_border_color = beautiful.tag_preview_client_border_color + or "#ffffff" + local client_border_width = beautiful.tag_preview_client_border_width + or dpi(3) + local widget_bg = beautiful.tag_preview_widget_bg or "#000000" + local widget_border_color = beautiful.tag_preview_widget_border_color + or "#ffffff" + local widget_border_width = beautiful.tag_preview_widget_border_width + or dpi(3) + + local tag_preview_box = awful.popup({ + type = "dropdown_menu", + visible = false, + ontop = true, + placement = placement_fn, + widget = wibox.container.background, + input_passthrough = true, + bg = "#00000000", + }) + + tag.connect_signal("property::selected", function(t) + -- Awesome switches up tags on startup really fast it seems, probably depends on what rules you have set + -- which can cause the c.content to not show the correct image + gears.timer + { + timeout = 0.1, + call_now = false, + autostart = true, + single_shot = true, + callback = function() + if t.selected == true then + for _, c in ipairs(t:clients()) do + c.prev_content = gears.surface.duplicate_surface(c.content) + end + end + end + } + end) + + awesome.connect_signal("bling::tag_preview::update", function(t) + local geo = t.screen:get_bounding_geometry({ + honor_padding = padding, + honor_workarea = work_area, + }) + + tag_preview_box.maximum_width = scale * geo.width + margin * 2 + tag_preview_box.maximum_height = scale * geo.height + margin * 2 + + + tag_preview_box.widget = draw_widget( + t, + tag_preview_image, + scale, + screen_radius, + client_radius, + client_opacity, + client_bg, + client_border_color, + client_border_width, + widget_bg, + widget_border_color, + widget_border_width, + geo, + margin, + background_image + ) + end) + + awesome.connect_signal("bling::tag_preview::visibility", function(s, v) + if not placement_fn then + tag_preview_box.x = s.geometry.x + widget_x + tag_preview_box.y = s.geometry.y + widget_y + end + + if v == false then + tag_preview_box.widget = nil + collectgarbage("collect") + end + + tag_preview_box.visible = v + end) +end + +return {enable = enable, draw_widget = draw_widget} diff --git a/.config/awesome/extras/bling/widget/task_preview.lua b/.config/awesome/extras/bling/widget/task_preview.lua new file mode 100755 index 0000000..3b54867 --- /dev/null +++ b/.config/awesome/extras/bling/widget/task_preview.lua @@ -0,0 +1,199 @@ +-- +-- Provides: +-- bling::task_preview::visibility +-- s (screen) +-- v (boolean) +-- c (client) +-- +local awful = require("awful") +local wibox = require("wibox") +local helpers = require(tostring(...):match(".*bling") .. ".helpers") +local gears = require("gears") +local beautiful = require("beautiful") +local dpi = beautiful.xresources.apply_dpi +local cairo = require("lgi").cairo + +-- TODO: rename structure to something better? +local function draw_widget( + c, + widget_template, + screen_radius, + widget_bg, + widget_border_color, + widget_border_width, + margin, + widget_width, + widget_height +) + if not pcall(function() + return type(c.content) + end) then + return + end + + local content = nil + if c.active then + content = gears.surface(c.content) + elseif c.prev_content then + content = gears.surface(c.prev_content) + end + + local img = nil + if content ~= nil then + local cr = cairo.Context(content) + local x, y, w, h = cr:clip_extents() + img = cairo.ImageSurface.create(cairo.Format.ARGB32, w - x, h - y) + cr = cairo.Context(img) + cr:set_source_surface(content, 0, 0) + cr.operator = cairo.Operator.SOURCE + cr:paint() + end + + local widget = wibox.widget({ + (widget_template or { + { + { + { + { + id = "icon_role", + resize = true, + forced_height = dpi(20), + forced_width = dpi(20), + widget = wibox.widget.imagebox, + }, + { + { + id = "name_role", + align = "center", + widget = wibox.widget.textbox, + }, + left = dpi(4), + right = dpi(4), + widget = wibox.container.margin, + }, + layout = wibox.layout.align.horizontal, + }, + { + { + { + id = "image_role", + resize = true, + clip_shape = helpers.shape.rrect(screen_radius), + widget = wibox.widget.imagebox, + }, + valign = "center", + halign = "center", + widget = wibox.container.place, + }, + top = margin * 0.25, + widget = wibox.container.margin, + }, + fill_space = true, + layout = wibox.layout.fixed.vertical, + }, + margins = margin, + widget = wibox.container.margin, + }, + bg = widget_bg, + shape_border_width = widget_border_width, + shape_border_color = widget_border_color, + shape = helpers.shape.rrect(screen_radius), + widget = wibox.container.background, + }), + width = widget_width, + height = widget_height, + widget = wibox.container.constraint, + }) + + -- TODO: have something like a create callback here? + + for _, w in ipairs(widget:get_children_by_id("image_role")) do + w.image = img -- TODO: copy it with gears.surface.xxx or something + end + + for _, w in ipairs(widget:get_children_by_id("name_role")) do + w.text = c.name + end + + for _, w in ipairs(widget:get_children_by_id("icon_role")) do + w.image = c.icon -- TODO: detect clienticon + end + + return widget +end + +local enable = function(opts) + local opts = opts or {} + + local widget_x = opts.x or dpi(20) + local widget_y = opts.y or dpi(20) + local widget_height = opts.height or dpi(200) + local widget_width = opts.width or dpi(200) + local placement_fn = opts.placement_fn or nil + + local margin = beautiful.task_preview_widget_margin or dpi(0) + local screen_radius = beautiful.task_preview_widget_border_radius or dpi(0) + local widget_bg = beautiful.task_preview_widget_bg or "#000000" + local widget_border_color = beautiful.task_preview_widget_border_color + or "#ffffff" + local widget_border_width = beautiful.task_preview_widget_border_width + or dpi(3) + + local task_preview_box = awful.popup({ + type = "dropdown_menu", + visible = false, + ontop = true, + placement = placement_fn, + widget = wibox.container.background, -- A dummy widget to make awful.popup not scream + input_passthrough = true, + bg = "#00000000", + }) + + tag.connect_signal("property::selected", function(t) + -- Awesome switches up tags on startup really fast it seems, probably depends on what rules you have set + -- which can cause the c.content to not show the correct image + gears.timer + { + timeout = 0.1, + call_now = false, + autostart = true, + single_shot = true, + callback = function() + if t.selected == true then + for _, c in ipairs(t:clients()) do + c.prev_content = gears.surface.duplicate_surface(c.content) + end + end + end + } + end) + + awesome.connect_signal("bling::task_preview::visibility", function(s, v, c) + if v then + -- Update task preview contents + task_preview_box.widget = draw_widget( + c, + opts.structure, + screen_radius, + widget_bg, + widget_border_color, + widget_border_width, + margin, + widget_width, + widget_height + ) + else + task_preview_box.widget = nil + collectgarbage("collect") + end + + if not placement_fn then + task_preview_box.x = s.geometry.x + widget_x + task_preview_box.y = s.geometry.y + widget_y + end + + task_preview_box.visible = v + end) +end + +return { enable = enable, draw_widget = draw_widget } diff --git a/.config/awesome/extras/bling/widget/window_switcher.lua b/.config/awesome/extras/bling/widget/window_switcher.lua new file mode 100755 index 0000000..ac835a5 --- /dev/null +++ b/.config/awesome/extras/bling/widget/window_switcher.lua @@ -0,0 +1,454 @@ +local cairo = require("lgi").cairo +local awful = require("awful") +local gears = require("gears") +local wibox = require("wibox") +local beautiful = require("beautiful") +local helpers = require(tostring(...):match(".*bling") .. ".helpers") +local dpi = beautiful.xresources.apply_dpi + +local window_switcher_first_client -- The client that was focused when the window_switcher was activated +local window_switcher_minimized_clients = {} -- The clients that were minimized when the window switcher was activated +local window_switcher_grabber + +local get_num_clients = function() + local minimized_clients_in_tag = 0 + local matcher = function(c) + return awful.rules.match( + c, + { + minimized = true, + skip_taskbar = false, + hidden = false, + first_tag = awful.screen.focused().selected_tag, + } + ) + end + for c in awful.client.iterate(matcher) do + minimized_clients_in_tag = minimized_clients_in_tag + 1 + end + return minimized_clients_in_tag + #awful.screen.focused().clients +end + +local window_switcher_hide = function(window_switcher_box) + -- Add currently focused client to history + if client.focus then + local window_switcher_last_client = client.focus + awful.client.focus.history.add(window_switcher_last_client) + -- Raise client that was focused originally + -- Then raise last focused client + if + window_switcher_first_client and window_switcher_first_client.valid + then + window_switcher_first_client:raise() + window_switcher_last_client:raise() + end + end + + -- Minimize originally minimized clients + local s = awful.screen.focused() + for _, c in pairs(window_switcher_minimized_clients) do + if c and c.valid and not (client.focus and client.focus == c) then + c.minimized = true + end + end + -- Reset helper table + window_switcher_minimized_clients = {} + + -- Resume recording focus history + awful.client.focus.history.enable_tracking() + -- Stop and hide window_switcher + awful.keygrabber.stop(window_switcher_grabber) + window_switcher_box.visible = false + window_switcher_box.widget = nil + collectgarbage("collect") +end + +local function draw_widget( + type, + background, + border_width, + border_radius, + border_color, + clients_spacing, + client_icon_horizontal_spacing, + client_width, + client_height, + client_margins, + thumbnail_margins, + thumbnail_scale, + name_margins, + name_valign, + name_forced_width, + name_font, + name_normal_color, + name_focus_color, + icon_valign, + icon_width, + mouse_keys +) + local tasklist_widget = type == "thumbnail" + and awful.widget.tasklist({ + screen = awful.screen.focused(), + filter = awful.widget.tasklist.filter.currenttags, + buttons = mouse_keys, + style = { + font = name_font, + fg_normal = name_normal_color, + fg_focus = name_focus_color, + }, + layout = { + layout = wibox.layout.flex.horizontal, + spacing = clients_spacing, + }, + widget_template = { + widget = wibox.container.background, + id = "bg_role", + forced_width = client_width, + forced_height = client_height, + create_callback = function(self, c, _, __) + local content = gears.surface(c.content) + local cr = cairo.Context(content) + local x, y, w, h = cr:clip_extents() + local img = cairo.ImageSurface.create( + cairo.Format.ARGB32, + w - x, + h - y + ) + cr = cairo.Context(img) + cr:set_source_surface(content, 0, 0) + cr.operator = cairo.Operator.SOURCE + cr:paint() + self:get_children_by_id("thumbnail")[1].image = + gears.surface.load( + img + ) + end, + { + { + { + horizontal_fit_policy = thumbnail_scale == true + and "fit" + or "auto", + vertical_fit_policy = thumbnail_scale == true + and "fit" + or "auto", + id = "thumbnail", + widget = wibox.widget.imagebox, + }, + margins = thumbnail_margins, + widget = wibox.container.margin, + }, + { + { + { + id = "icon_role", + widget = wibox.widget.imagebox, + }, + forced_width = icon_width, + valign = icon_valign, + widget = wibox.container.place, + }, + { + { + forced_width = name_forced_width, + valign = name_valign, + id = "text_role", + widget = wibox.widget.textbox, + }, + margins = name_margins, + widget = wibox.container.margin, + }, + spacing = client_icon_horizontal_spacing, + layout = wibox.layout.fixed.horizontal, + }, + layout = wibox.layout.flex.vertical, + }, + }, + }) + or awful.widget.tasklist({ + screen = awful.screen.focused(), + filter = awful.widget.tasklist.filter.currenttags, + buttons = mouse_keys, + style = { + font = name_font, + fg_normal = name_normal_color, + fg_focus = name_focus_color, + }, + layout = { + layout = wibox.layout.fixed.vertical, + spacing = clients_spacing, + }, + widget_template = { + widget = wibox.container.background, + id = "bg_role", + forced_width = client_width, + forced_height = client_height, + { + { + { + id = "icon_role", + widget = wibox.widget.imagebox, + }, + forced_width = icon_width, + valign = icon_valign, + widget = wibox.container.place, + }, + { + { + forced_width = name_forced_width, + valign = name_valign, + id = "text_role", + widget = wibox.widget.textbox, + }, + margins = name_margins, + widget = wibox.container.margin, + }, + spacing = client_icon_horizontal_spacing, + layout = wibox.layout.fixed.horizontal, + }, + }, + }) + + return wibox.widget({ + { + tasklist_widget, + margins = client_margins, + widget = wibox.container.margin, + }, + shape_border_width = border_width, + shape_border_color = border_color, + bg = background, + shape = helpers.shape.rrect(border_radius), + widget = wibox.container.background, + }) +end + +local enable = function(opts) + local opts = opts or {} + + local type = opts.type or "thumbnail" + local background = beautiful.window_switcher_widget_bg or "#000000" + local border_width = beautiful.window_switcher_widget_border_width or dpi(3) + local border_radius = beautiful.window_switcher_widget_border_radius + or dpi(0) + local border_color = beautiful.window_switcher_widget_border_color + or "#ffffff" + local clients_spacing = beautiful.window_switcher_clients_spacing or dpi(20) + local client_icon_horizontal_spacing = beautiful.window_switcher_client_icon_horizontal_spacing + or dpi(5) + local client_width = beautiful.window_switcher_client_width + or dpi(type == "thumbnail" and 150 or 500) + local client_height = beautiful.window_switcher_client_height + or dpi(type == "thumbnail" and 250 or 50) + local client_margins = beautiful.window_switcher_client_margins or dpi(10) + local thumbnail_margins = beautiful.window_switcher_thumbnail_margins + or dpi(5) + local thumbnail_scale = beautiful.thumbnail_scale or false + local name_margins = beautiful.window_switcher_name_margins or dpi(10) + local name_valign = beautiful.window_switcher_name_valign or "center" + local name_forced_width = beautiful.window_switcher_name_forced_width + or dpi(type == "thumbnail" and 200 or 550) + local name_font = beautiful.window_switcher_name_font or beautiful.font + local name_normal_color = beautiful.window_switcher_name_normal_color + or "#FFFFFF" + local name_focus_color = beautiful.window_switcher_name_focus_color + or "#FF0000" + local icon_valign = beautiful.window_switcher_icon_valign or "center" + local icon_width = beautiful.window_switcher_icon_width or dpi(40) + + local hide_window_switcher_key = opts.hide_window_switcher_key or "Escape" + + local select_client_key = opts.select_client_key or 1 + local minimize_key = opts.minimize_key or "n" + local unminimize_key = opts.unminimize_key or "N" + local kill_client_key = opts.kill_client_key or "q" + + local cycle_key = opts.cycle_key or "Tab" + + local previous_key = opts.previous_key or "Left" + local next_key = opts.next_key or "Right" + + local vim_previous_key = opts.vim_previous_key or "h" + local vim_next_key = opts.vim_next_key or "l" + + local scroll_previous_key = opts.scroll_previous_key or 4 + local scroll_next_key = opts.scroll_next_key or 5 + + local window_switcher_box = awful.popup({ + bg = "#00000000", + visible = false, + ontop = true, + placement = awful.placement.centered, + screen = awful.screen.focused(), + widget = wibox.container.background, -- A dummy widget to make awful.popup not scream + widget = { + { + draw_widget(), + margins = client_margins, + widget = wibox.container.margin, + }, + shape_border_width = border_width, + shape_border_color = border_color, + bg = background, + shape = helpers.shape.rrect(border_radius), + widget = wibox.container.background, + }, + }) + + local mouse_keys = gears.table.join( + awful.button({ + modifiers = { "Any" }, + button = select_client_key, + on_press = function(c) + client.focus = c + end, + }), + + awful.button({ + modifiers = { "Any" }, + button = scroll_previous_key, + on_press = function() + awful.client.focus.byidx(-1) + end, + }), + + awful.button({ + modifiers = { "Any" }, + button = scroll_next_key, + on_press = function() + awful.client.focus.byidx(1) + end, + }) + ) + + local keyboard_keys = { + [hide_window_switcher_key] = function() + window_switcher_hide(window_switcher_box) + end, + + [minimize_key] = function() + if client.focus then + client.focus.minimized = true + end + end, + [unminimize_key] = function() + if awful.client.restore() then + client.focus = awful.client.restore() + end + end, + [kill_client_key] = function() + if client.focus then + client.focus:kill() + end + end, + + [cycle_key] = function() + awful.client.focus.byidx(1) + end, + + [previous_key] = function() + awful.client.focus.byidx(1) + end, + [next_key] = function() + awful.client.focus.byidx(-1) + end, + + [vim_previous_key] = function() + awful.client.focus.byidx(1) + end, + [vim_next_key] = function() + awful.client.focus.byidx(-1) + end, + } + + window_switcher_box:connect_signal("property::width", function() + if window_switcher_box.visible and get_num_clients() == 0 then + window_switcher_hide(window_switcher_box) + end + end) + + window_switcher_box:connect_signal("property::height", function() + if window_switcher_box.visible and get_num_clients() == 0 then + window_switcher_hide(window_switcher_box) + end + end) + + awesome.connect_signal("bling::window_switcher::turn_on", function() + local number_of_clients = get_num_clients() + if number_of_clients == 0 then + return + end + + -- Store client that is focused in a variable + window_switcher_first_client = client.focus + + -- Stop recording focus history + awful.client.focus.history.disable_tracking() + + -- Go to previously focused client (in the tag) + awful.client.focus.history.previous() + + -- Track minimized clients + -- Unminimize them + -- Lower them so that they are always below other + -- originally unminimized windows + local clients = awful.screen.focused().selected_tag:clients() + for _, c in pairs(clients) do + if c.minimized then + table.insert(window_switcher_minimized_clients, c) + c.minimized = false + c:lower() + end + end + + -- Start the keygrabber + window_switcher_grabber = awful.keygrabber.run(function(_, key, event) + if event == "release" then + -- Hide if the modifier was released + -- We try to match Super or Alt or Control since we do not know which keybind is + -- used to activate the window switcher (the keybind is set by the user in keys.lua) + if + key:match("Super") + or key:match("Alt") + or key:match("Control") + then + window_switcher_hide(window_switcher_box) + end + -- Do nothing + return + end + + -- Run function attached to key, if it exists + if keyboard_keys[key] then + keyboard_keys[key]() + end + end) + + window_switcher_box.widget = draw_widget( + type, + background, + border_width, + border_radius, + border_color, + clients_spacing, + client_icon_horizontal_spacing, + client_width, + client_height, + client_margins, + thumbnail_margins, + thumbnail_scale, + name_margins, + name_valign, + name_forced_width, + name_font, + name_normal_color, + name_focus_color, + icon_valign, + icon_width, + mouse_keys + ) + window_switcher_box.visible = true + end) +end + +return { enable = enable } diff --git a/.config/awesome/extras/nice b/.config/awesome/extras/nice new file mode 160000 index 0000000..810aa72 --- /dev/null +++ b/.config/awesome/extras/nice @@ -0,0 +1 @@ +Subproject commit 810aa72bbebfee15d3375fdcb8d8a09f5c7741c8