commit a0f8b5fa6acdd1c2477fb1881dd9067956bf0ae6 Author: delta Date: Sun Jan 29 09:59:52 2023 +0100 init dots diff --git a/.config/awesome/.gitignore b/.config/awesome/.gitignore new file mode 100644 index 0000000..8a7ff70 --- /dev/null +++ b/.config/awesome/.gitignore @@ -0,0 +1,2 @@ +libs +.luarc.json diff --git a/.config/awesome/components/info_center/init.lua b/.config/awesome/components/info_center/init.lua new file mode 100644 index 0000000..d1c78f2 --- /dev/null +++ b/.config/awesome/components/info_center/init.lua @@ -0,0 +1,8 @@ +local awful = require "awful" +local vars = require "themes.prismite.vars" +local wibox = require "wibox" +local obj = require "gears.object" +local debug = require "gears.debug" +local naughty = require "naughty" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi diff --git a/.config/awesome/components/keybinds/client.lua b/.config/awesome/components/keybinds/client.lua new file mode 100644 index 0000000..35680c4 --- /dev/null +++ b/.config/awesome/components/keybinds/client.lua @@ -0,0 +1,15 @@ +local awful = require "awful" + +client.connect_signal("request::default_mousebindings", function() + awful.mouse.append_client_mousebindings({ + awful.button({ }, 1, function (c) + c:activate { context = "mouse_click" } + end), + awful.button({ modkey }, 1, function (c) + c:activate { context = "mouse_click", action = "mouse_move" } + end), + awful.button({ modkey }, 3, function (c) + c:activate { context = "mouse_click", action = "mouse_resize" } + end) + }) +end) diff --git a/.config/awesome/components/keybinds/global.lua b/.config/awesome/components/keybinds/global.lua new file mode 100644 index 0000000..56e4ea0 --- /dev/null +++ b/.config/awesome/components/keybinds/global.lua @@ -0,0 +1,149 @@ +local awful = require "awful" +local gears = require "gears" +local naughty = require "naughty" +local hkp = require "awful.hotkeys_popup.widget" +local vars = require "themes.prismite.vars" + +local labels = { + Control = "Ctrl", + Mod1 = "Alt", + ISO_Level3_Shift = "Alt Gr", + Mod4 = "Super", + Insert = "Ins", + Delete = "Del", + Next = "PgDn", + Prior = "PgUp", + Left = "", + Up = "", + Right = "", + Down = "", + KP_End = "Num1", + KP_Down = "Num2", + KP_Next = "Num3", + KP_Left = "Num4", + KP_Begin = "Num5", + KP_Right = "Num6", + KP_Home = "Num7", + KP_Up = "Num8", + KP_Prior = "Num9", + KP_Insert = "Num0", + KP_Delete = "Num.", + KP_Divide = "Num/", + KP_Multiply = "Num*", + KP_Subtract = "Num-", + KP_Add = "Num+", + KP_Enter = "NumEnter", + -- Some "obvious" entries are necessary for the Escape sequence + -- and whitespace characters: + Escape = "Esc", + Tab = "Tab", + space = "Space", + Return = "Enter", + -- Dead keys aren't distinct from non-dead keys because no sane + -- layout should have both of the same kind: + dead_acute = "´", + dead_circumflex = "^", + dead_grave = "`", + -- Basic multimedia keys: + XF86MonBrightnessUp = "🔆+", + XF86MonBrightnessDown = "🔅-", + XF86AudioRaiseVolume = "ﱛ", + XF86AudioLowerVolume = "ﱜ", + XF86AudioMute = "ﱝ", + XF86AudioPlay = "⏯", + XF86AudioPrev = "⏮", + XF86AudioNext = "⏭", + XF86AudioStop = "⏹", +} + +local globalkeys = gears.table.join( + -- awesome + awful.key { + modifiers = { modkey, "Control" }, + key = "r", + on_press = awesome.restart, + group = "awesome", + description = "restart awesome" + }, + awful.key { + modifiers = { modkey, "Control" }, + key = "s", + on_press = function() + hkp.new { + shape = vars.shape, + modifiers_fg = "#8893a5", + labels = labels + }:show_help() + end, + group = "awesome", + description = "toggle help" + }, + + -- general + awful.key { + modifiers = {}, + key = "XF86AudioMute", + on_press = function() + naughty.notification { + message = "mute" + } + end, + group = "general", + description = "mute audio" + }, + + -- launcher + awful.key { + modifiers = { modkey }, + key = "Return", + on_press = function () + awful.spawn("kitty") + end, + group = "launcher", + description = "launch kitty" + }, + + -- client + awful.key { + modifiers = { modkey, "Control" }, + key = "q", + on_press = function() + local c = client.focus + if c then + c:kill() + end + end, + group = "client", + description = "kill client" + }, + awful.key { + modifiers = { modkey, "Control" }, + key = "f", + on_press = function() + local c = client.focus + if c then + c.fullscreen = not c.fullscreen + end + end, + group = "client", + description = "toggle fullscreen" + }, + + -- tag + awful.key { + modifiers = { modkey }, + key = "Up", + on_press = awful.tag.viewprev, + group = "tag", + description = "switch to previous tag" + }, + awful.key { + modifiers = { modkey }, + key = "Down", + on_press = awful.tag.viewnext, + group = "tag", + description = "switch to next tag" + } +) + +root.keys(globalkeys) diff --git a/.config/awesome/components/keybinds/init.lua b/.config/awesome/components/keybinds/init.lua new file mode 100644 index 0000000..25b8942 --- /dev/null +++ b/.config/awesome/components/keybinds/init.lua @@ -0,0 +1,4 @@ +modkey = "Mod4" + +require "components.keybinds.global" +require "components.keybinds.client" diff --git a/.config/awesome/components/signals/awesome.lua b/.config/awesome/components/signals/awesome.lua new file mode 100644 index 0000000..37b9bdb --- /dev/null +++ b/.config/awesome/components/signals/awesome.lua @@ -0,0 +1,32 @@ +-- Taken from https://www.reddit.com/r/awesomewm/comments/syjolb/comment/hy0xy35/ + +awesome.connect_signal('exit', function(reason_restart) + if not reason_restart then return end + + local file = io.open('/tmp/awesomewm-last-selected-tags', 'w+') + + for s in screen do + file:write(s.selected_tag.index, '\n') + end + + file:close() +end) + +awesome.connect_signal('startup', function() + local file = io.open('/tmp/awesomewm-last-selected-tags', 'r') + if not file then return end + + local selected_tags = {} + + for line in file:lines() do + table.insert(selected_tags, tonumber(line)) + end + + for s in screen do + local i = selected_tags[s.index] + local t = s.tags[i] + t:view_only() + end + + file:close() +end) diff --git a/.config/awesome/components/signals/client.lua b/.config/awesome/components/signals/client.lua new file mode 100644 index 0000000..0b44d62 --- /dev/null +++ b/.config/awesome/components/signals/client.lua @@ -0,0 +1,104 @@ +local awful = require "awful" +local beautiful = require "beautiful" +-- local cairo = require "lgi".cairo +local gears = require "gears" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi +local wibox = require "wibox" + +client.connect_signal("property::name", function(c) + if not c then return end -- Sometimes c is nil for some reason + if not c.pid then return end + + local out = io.popen("readlink /proc/" .. c.pid .. "/exe") + local name = c.name + if out ~= nil then + name = out:read("*a"):sub(0, -2):match("[^\\/]+$") or name + end + c.name = string.lower(name) +end) + +client.connect_signal("property::urgent", function(c) + if c.class ~= "kitty" then + c:activate({ + switch_to_tag = true + }) + c.urgent = false + end +end) + +client.connect_signal("request::manage", function (c) + local parent = c.transient_for + if parent then + c:move_to_tag(parent.first_tag) + end + + if not c.pid then return end + + awful.spawn.easy_async({ "readlink", "/proc/" .. c.pid .. "/exe" }, function(name) + c.name = string.lower(name:match("[^\\/]+$") or name) + end) + + -- Forcefully set the correct icon for a client + -- Taken from https://discord.com/channels/702548301299580939/893586726885425163/947173452073287722 (Author: Orlando#0171) and modified a little bit + -- local icon_cache = Get_icon(beautiful.get().icon_theme, c) + + -- if type(icon_cache) ~= "userdata" then + -- local s = gears.surface(icon_cache) + -- local img = cairo.ImageSurface.create(cairo.Format.ARGB32, s:get_width(), s:get_height()) + -- local cr = cairo.Context(img) + -- cr:set_source_surface(s, 0, 0) + -- cr:paint() + + -- c.icon = img._native + -- end +end) + +client.connect_signal("property::maximized", function(c) + c.border_width = beautiful.border_width +end) + +client.connect_signal("request::titlebars", function(c) + local buttons = gears.table.join( + awful.button({ }, 1, function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + awful.mouse.client.move(c) + end), + awful.button({ }, 3, function() + c:emit_signal("request::activate", "titlebar", {raise = true}) + awful.mouse.client.resize(c) + end) + ) + + awful.titlebar.enable_tooltip = false + + awful.titlebar(c) : setup { + -- { + -- widget = wibox.container.margin, + -- left = dpi(8), + -- awful.titlebar.widget.titlewidget(c), + -- buttons = buttons + -- }, + nil, + + { + widget = wibox.widget.base.empty_widget(), + buttons = buttons + }, + { + + { + awful.titlebar.widget.maximizedbutton (c), + awful.titlebar.widget.minimizebutton (c), + awful.titlebar.widget.closebutton (c), + + spacing = dpi(4), + layout = wibox.layout.fixed.horizontal + }, + + margins = dpi(5), + widget = wibox.container.margin, + }, + layout = wibox.layout.align.horizontal + } +end) diff --git a/.config/awesome/components/signals/init.lua b/.config/awesome/components/signals/init.lua new file mode 100644 index 0000000..6e42252 --- /dev/null +++ b/.config/awesome/components/signals/init.lua @@ -0,0 +1,5 @@ +require "components.signals.naughty" +require "components.signals.awesome" +require "components.signals.client" +require "components.signals.rules" +require "components.signals.screen" diff --git a/.config/awesome/components/signals/naughty.lua b/.config/awesome/components/signals/naughty.lua new file mode 100644 index 0000000..bab4712 --- /dev/null +++ b/.config/awesome/components/signals/naughty.lua @@ -0,0 +1,64 @@ +local awful = require "awful" +local vars = require "themes.prismite.vars" +local wibox = require "wibox" +local naughty = require "naughty" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi + +function build_notification(n) + + + local popup = awful.popup { + widget = { + { + { + widget = naughty.widget.icon, + image = n.image, + forced_height = 64, + forced_width = 64, + clip_shape = vars.shape + }, + { + { + widget = wibox.widget.textbox, + text = n.title + }, + { + widget = wibox.widget.textbox, + text = n.message + }, + layout = wibox.layout.fixed.vertical + }, + layout = wibox.layout.fixed.horizontal + }, + widget = wibox.container.margin, + margins = dpi(4) + }, + border_color = vars.colors.bright.black, + border_width = vars.border_width, + ontop = true, + placement = function(d) + return awful.placement.bottom_right(d, { + honor_padding = true + }) + end, + bg = vars.colors.bg, + shape = vars.shape, + } + + -- popup.y = screen[1].tiling_area.height - - dpi(4) +end + +-- naughty.connect_signal("request::display", build_notification) + +naughty.connect_signal("request::display", function(n) + naughty.layout.box { notification = n } +end) + +naughty.connect_signal("request::display_error", function(message, startup) + naughty.notification { + urgency = "critical", + title = "Oops, an error happened"..(startup and " during startup!" or "!"), + message = message + } +end) diff --git a/.config/awesome/components/signals/rules.lua b/.config/awesome/components/signals/rules.lua new file mode 100644 index 0000000..65db501 --- /dev/null +++ b/.config/awesome/components/signals/rules.lua @@ -0,0 +1,102 @@ +local ruled = require "ruled" +local beautiful = require "beautiful" +local awful = require "awful" +local vars = require "themes.prismite.vars" + +ruled.client.connect_signal("request::rules", function() + ruled.client.append_rule({ + id = "global", + rule = {}, + properties = { + border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = awful.client.focus.filter, + raise = true, + screen = awful.screen.preferred, + placement = awful.placement.centered+awful.placement.no_offscreen, + floating = false, + shape = vars.shape, + honor_padding = true + -- tag = "1" + } + }) + + ruled.client.append_rule({ + id = "titlebars", + rule_any = { + type = { + "normal", + "dialog" + } + }, + properties = { + titlebars_enabled = true + } + }) + + ruled.client.append_rule({ + id = "steam", + rule_any = { + class = { "Steam" } + }, + properties = { + screen = 1, + tag = screen[1].tags[6] + } + }) + + ruled.client.append_rule({ + id = "browser_tag", + rule_any = { + class = { "firefox" } + }, + properties = { + screen = 1, + tag = screen[1].tags[2] + } + }) + + ruled.client.append_rule({ + id = "chat_tag", + rule_any = { + class = { "discord" } + }, + properties = { + screen = 1, + tag = screen[1].tags[3] + } + }) + + + ruled.client.append_rule({ + id = "music_tag", + rule_any = { + class = { "Spotify" } + }, + properties = { + screen = 1, + tag = screen[1].tags[4] + } + }) + + ruled.client.append_rule({ + id = "code_tag", + rule_any = { + class = { "lite-xl", "code_kitty" } + }, + properties = { + screen = 1, + tag = screen[1].tags[5] + } + }) + + ruled.client.append_rule({ + id = "pip", + rule = { + name = "Picture-in-Picture" + }, + properties = { + ontop = true + } + }) +end) diff --git a/.config/awesome/components/signals/screen.lua b/.config/awesome/components/signals/screen.lua new file mode 100644 index 0000000..3e49a68 --- /dev/null +++ b/.config/awesome/components/signals/screen.lua @@ -0,0 +1,79 @@ +local awful = require "awful" +local wibox = require "wibox" +local beautiful = require "beautiful" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi + +screen.connect_signal("request::wallpaper", function(s) + awful.wallpaper { + screen = s, + widget = { + { + image = beautiful.wallpaper, + upscale = true, + downscale = true, + widget = wibox.widget.imagebox, + }, + valign = "center", + halign = "center", + tiled = false, + widget = wibox.container.tile, + } + } +end) + +screen.connect_signal("request::desktop_decoration", function(s) + -- s.padding = dpi(4) + + awful.tag.add( + "", + { + screen = s, + layout = awful.layout.suit.floating, + selected = true + } + ) + + awful.tag.add( + "󰈹", + { + screen = s, + layout = awful.layout.suit.floating, + + } + ) + + awful.tag.add( + "󰡠", + { + screen = s, + layout = awful.layout.suit.tile.left, + master_width_factor = 0.7 + } + ) + + awful.tag.add( + "", + { + screen = s, + layout = awful.layout.suit.tile + } + ) + + awful.tag.add( + "", + { + screen = s, + layout = awful.layout.suit.tile.right, + master_width_factor = 0.7 + } + ) + + awful.tag.add( + "", + { + screen = s, + layout = awful.layout.suit.floating, + } + ) +end) diff --git a/.config/awesome/components/statusbar/battery.lua b/.config/awesome/components/statusbar/battery.lua new file mode 100644 index 0000000..670b200 --- /dev/null +++ b/.config/awesome/components/statusbar/battery.lua @@ -0,0 +1,78 @@ +local awful = require "awful" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi +local vars = require "themes.prismite.vars" +local wibox = require "wibox" + +local battery_inner = awful.widget.watch("cat /sys/class/power_supply/BAT0/capacity", 1, function(widget, stdout) + local icon = "" + local color = vars.colors.red + + if io.popen("cat /sys/class/power_supply/BAT0/status"):read("*a"):sub(0, -2) == "Charging" then + icon = "" + color = vars.colors.green + widget:set_markup("" .. icon .. "") + return + end + + local percent = tonumber(stdout) + + if percent <= 5 then + icon = "" + color = vars.colors.red + elseif percent <= 10 then + icon = "" + color = vars.colors.red + elseif percent <= 20 then + icon = "" + color = vars.colors.red + elseif percent <= 30 then + icon = "" + color = vars.colors.yellow + elseif percent <= 40 then + icon = "" + color = vars.colors.yellow + elseif percent <= 50 then + icon = "" + color = vars.colors.yellow + elseif percent <= 60 then + icon = "" + color = vars.colors.yellow + elseif percent <= 70 then + icon = "" + color = vars.colors.yellow + elseif percent <= 80 then + icon = "" + color = vars.colors.green + elseif percent <= 90 then + icon = "" + color = vars.colors.green + elseif percent <= 100 then + icon = "" + color = vars.colors.green + end + + widget:set_markup("" .. icon .. "") +end) + +local battery = wibox.widget { + widget = wibox.container.place, + battery_inner +} + +awful.tooltip { + objects = { battery }, + timer_function = function() + return io.popen("cat /sys/class/power_supply/BAT0/capacity"):read("*a"):sub(0, -2) .. "%" + end, + bg = vars.colors.bg, + fg = vars.colors.fg, + border_color = vars.colors.bright.black, + border_width = vars.border_width, + font = vars.font, + shape = vars.shape, + margin_leftright = dpi(6), + margin_topbottom = dpi(6) +} + +return battery diff --git a/.config/awesome/components/statusbar/brightness.lua b/.config/awesome/components/statusbar/brightness.lua new file mode 100644 index 0000000..eb37f06 --- /dev/null +++ b/.config/awesome/components/statusbar/brightness.lua @@ -0,0 +1,33 @@ +local awful = require "awful" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi +local vars = require "themes.prismite.vars" +local wibox = require "wibox" + + +local brightness = wibox.widget { + widget = wibox.container.place, + { + widget = wibox.widget.textbox, + font = vars.font, + text = "" + }, +} + +awful.tooltip { + objects = { brightness }, + timer_function = function() + return math.floor(tonumber(io.popen("brightnessctl g"):read("*a"):sub(0, -2)) / 255 * 100) .. "%" + end, + timeout = 0.5, + bg = vars.colors.bg, + fg = vars.colors.fg, + border_color = vars.colors.bright.black, + border_width = vars.border_width, + font = vars.font, + shape = vars.shape, + margin_leftright = dpi(6), + margin_topbottom = dpi(6) +} + +return brightness diff --git a/.config/awesome/components/statusbar/clock.lua b/.config/awesome/components/statusbar/clock.lua new file mode 100644 index 0000000..c88ea62 --- /dev/null +++ b/.config/awesome/components/statusbar/clock.lua @@ -0,0 +1,32 @@ +local awful = require "awful" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi +local vars = require "themes.prismite.vars" +local wibox = require "wibox" + + +local clock = wibox.widget { + widget = wibox.container.place, + { + format = "%H\n%M", + widget = wibox.widget.textclock, + font = vars.font + }, +} + +awful.tooltip { + objects = { clock }, + timer_function = function() + return os.date("%a %d/%m/%y") + end, + bg = vars.colors.bg, + fg = vars.colors.fg, + border_color = vars.colors.bright.black, + border_width = vars.border_width, + font = vars.font, + shape = vars.shape, + margin_leftright = dpi(6), + margin_topbottom = dpi(6) +} + +return clock diff --git a/.config/awesome/components/statusbar/init.lua b/.config/awesome/components/statusbar/init.lua new file mode 100644 index 0000000..c798669 --- /dev/null +++ b/.config/awesome/components/statusbar/init.lua @@ -0,0 +1,57 @@ +local awful = require "awful" +local beautiful = require "beautiful" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi +local vars = require "themes.prismite.vars" +local wibox = require "wibox" + +local taglist = require "components.statusbar.taglist" +local clock = require "components.statusbar.clock" +local wifi = require "components.statusbar.wifi" +local battery = require "components.statusbar.battery" +local brightness = require "components.statusbar.brightness" + +screen.connect_signal("request::desktop_decoration", function(s) + local bar = awful.wibar({ + -- placement = function(d) + -- local place = awful.placement.left + awful.placement.maximize_vertically + -- return place(d, { + -- margins = beautiful.useless_gap + -- }) + -- end, + margins = dpi(4), + position = "left", + screen = s, + restrict_workarea = true, + height = s.geometry.height - (beautiful.useless_gap * 4 + vars.border_width * 2) - 2, + width = dpi(32), + border_width = vars.border_width, + border_color = vars.colors.bright.black, + shape = vars.shape, + bg = vars.colors.bg, + widget = { + { + margins = dpi(4), + widget = wibox.container.margin, + { + layout = wibox.layout.fixed.vertical, + taglist + } + }, + nil, + { + margins = dpi(4), + widget = wibox.container.margin, + { + layout = wibox.layout.fixed.vertical, + spacing = dpi(8), + brightness, + battery, + wifi, + clock + } + }, + layout = wibox.layout.align.vertical, + } + }) +end) diff --git a/.config/awesome/components/statusbar/taglist.lua b/.config/awesome/components/statusbar/taglist.lua new file mode 100644 index 0000000..8eb8d17 --- /dev/null +++ b/.config/awesome/components/statusbar/taglist.lua @@ -0,0 +1,86 @@ +local awful = require "awful" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi +local vars = require "themes.prismite.vars" +local wibox = require "wibox" +local naughty = require "naughty" + +return awful.widget.taglist({ + screen = screen[1], + filter = awful.widget.taglist.filter.all, + style = { + shape = vars.shape + }, + layout = { + spacing = 8, + layout = wibox.layout.fixed.vertical + }, + widget_template = { + { + { + { + id = "text_role", + widget = wibox.widget.textbox, + }, + widget = wibox.container.place, + }, + { + widget = wibox.container.background, + bg = vars.colors.bright.black, + shape = vars.shape, + forced_height = dpi(2), + forced_width = dpi(16), + id = "indicator_role" + }, + layout = wibox.layout.fixed.vertical + }, + widget = wibox.container.place, + create_callback = function(self, tag) + local indicator = self:get_children_by_id("indicator_role")[1] + local text = self:get_children_by_id("text_role")[1] + -- naughty.notification { + -- message = "b ".. tostring(text.font) + -- } + + -- text.font = "FiraCode Nerd Font Mono SemiBold 12" + + -- naughty.notification { + -- message = "a " .. tostring(text.font) + -- } + + self:connect_signal("mouse::enter", function() + if tag.selected then return end + + indicator.bg = vars.colors.yellow + end) + + self:connect_signal("mouse::leave", function() + if tag.selected then return end + + indicator.bg = vars.colors.bright.black + end) + + if tag.selected then + indicator.bg = vars.colors.yellow + end + end, + update_callback = function(self, tag) + local indicator = self:get_children_by_id("indicator_role")[1] + + if tag.selected then + indicator.bg = vars.colors.yellow + else + indicator.bg = vars.colors.bright.black + end + end + }, + buttons = { + awful.button({ }, 1, function(t) t:view_only() end), + awful.button({ modkey }, 1, function(t) + if client.focus then + client.focus:move_to_tag(t) + end + end), + awful.button({ }, 3, awful.tag.viewtoggle), + } +}) diff --git a/.config/awesome/components/statusbar/wifi.lua b/.config/awesome/components/statusbar/wifi.lua new file mode 100644 index 0000000..e6431ce --- /dev/null +++ b/.config/awesome/components/statusbar/wifi.lua @@ -0,0 +1,60 @@ +local awful = require "awful" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi +local vars = require "themes.prismite.vars" +local wibox = require "wibox" + +local wifi_inner = awful.widget.watch("awk 'NR==3 {printf(\"%.0f\", $3*10/7)}' /proc/net/wireless", 1, function(widget, stdout) + widget.font = "DejaVu Sans Mono wifi ramp Normal 8" + local icon = "" + local color = vars.colors.red + + if stdout == "" then + widget:set_markup("" .. icon .. "") + return + end + + local percent = tonumber(stdout) + + if percent <= 20 then + icon = "" + color = vars.colors.red + elseif percent <= 40 then + icon = "" + color = vars.colors.yellow + elseif percent <= 60 then + icon = "" + color = vars.colors.yellow + elseif percent <= 80 then + icon = "" + color = vars.colors.green + elseif percent <= 100 then + icon = "" + color = vars.colors.green + end + + + widget:set_markup("" .. icon .. "") +end) + +local wifi = wibox.widget { + widget = wibox.container.place, + wifi_inner +} + +awful.tooltip { + objects = { wifi }, + timer_function = function() + return io.popen("iwgetid -r"):read("*a"):sub(0, -2) + end, + bg = vars.colors.bg, + fg = vars.colors.fg, + border_color = vars.colors.bright.black, + border_width = vars.border_width, + font = vars.font, + shape = vars.shape, + margin_leftright = dpi(6), + margin_topbottom = dpi(6) +} + +return wifi diff --git a/.config/awesome/components/window_switcher/init.lua b/.config/awesome/components/window_switcher/init.lua new file mode 100644 index 0000000..2e565f5 --- /dev/null +++ b/.config/awesome/components/window_switcher/init.lua @@ -0,0 +1,172 @@ +local awful = require "awful" +local vars = require "themes.prismite.vars" +local wibox = require "wibox" +local obj = require "gears.object" +local debug = require "gears.debug" +local naughty = require "naughty" +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi + + +local ws = obj { + enable_properties = true, + enable_auto_signals = true +} + +ws.selected = 1 +ws.max = 0 + +local widget = awful.popup { + widget = { + { + widget = awful.widget.tasklist { + screen = screen[1], + filter = awful.widget.tasklist.filter.allscreen, + style = { + shape = vars.shape, + }, + layout = { + forced_num_rows = 1, + layout = wibox.layout.grid.vertical, + spacing = dpi(4) + }, + widget_template = { + { + layout = wibox.layout.align.horizontal, + { + widget = wibox.container.place, + { + widget = wibox.container.margin, + margins = dpi(6), + { + id = "text_role", + widget = wibox.widget.textbox, + } + } + }, + nil, + { + widget = wibox.container.place, + { + widget = wibox.container.margin, + margins = dpi(6), + { + id = "tag_role", + widget = wibox.widget.textbox, + } + } + } + }, + forced_width = dpi(screen[1].geometry.width / 8), + bg = vars.colors.black, + border_width = vars.border_width, + border_color = vars.colors.black, + shape = vars.shape, + widget = wibox.container.background, + create_callback = function(self, client, i) + -- self:get_children_by_id("name_role")[1].text = client.name + self:get_children_by_id("tag_role")[1].text = client.first_tag.name + + ws:connect_signal("property::selected", function(selected) + naughty.notification { + urgency = "critical", + message = tostring(selected) .. " | " .. tostring(i) + } + + if selected == i then + self.border_color = vars.colors.yellow + else + self.border_color = vars.colors.black + end + end) + end + -- update_callback = function(self, _, i) + -- if ws.selected == i then + -- self.border_color = vars.colors.yellow + -- else + -- self.border_color = vars.colors.black + -- end + -- end + } + }, + id = "tasklist" + }, + widget = wibox.container.margin, + margins = dpi(4) + }, + border_color = vars.colors.bright.black, + border_width = vars.border_width, + ontop = true, + placement = awful.placement.centered, + bg = vars.colors.bg, + shape = vars.shape, + visible = false +} + +ws.widget = widget + +ws.max = ws.widget.widget.tasklist.count + + + +-- ws.widget:connect_signal("property::count", function(self) +-- naughty.notification { +-- urgency = "critical", +-- message = tostring(ws.max) +-- } +-- ws.max = self.count +-- end) + +awful.keygrabber { + keybindings = { + awful.key { + modifiers = { "Mod1" }, + key = "Tab", + on_press = function() + -- naughty.notification { + -- urgency = "critical", + -- message = tostring(WS.widget) + -- } + naughty.notification { + urgency = "critical", + message = tostring(ws.selected) + } + -- local file = io.open("/home/delta/.cache/awesome/tasklist_dump.txt", "w+") + -- file:write(debug.dump_return(WS.widget, "tasklist")) + -- file:close() + -- ws.widget:emit_signal_recursive("widget::layout_changed") + -- WS.widget:emit_signal("widget::redraw_needed") + if ws.selected + 1 > ws.max then + ws.selected = 1 + return + end + ws.selected = ws.selected + 1 + end + }, + awful.key { + modifiers = { "Mod1", "Shift" }, + key = "Tab", + on_press = function() + ws.widget:emit_signal("widget::layout_changed") + if ws.selected - 1 == 0 then + ws.selected = ws.max + return + end + ws.selected = ws.selected - 1 + end + }, + }, + stop_key = "Mod1", + stop_event = "release", + start_callback = function() + ws.widget.visible = true + naughty.notification { + urgency = "critical", + message = tostring(ws.max) +} + end, + stop_callback = function() + ws.widget.visible = false + end, + autostart = false +} diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua new file mode 100644 index 0000000..129c931 --- /dev/null +++ b/.config/awesome/rc.lua @@ -0,0 +1,19 @@ +pcall(require, "luarocks.loader") + +local gears = require "gears" +local awful = require "awful" + +local beautiful = require "beautiful" +beautiful.init(gears.filesystem.get_configuration_dir() .. "/themes/prismite/prismite.lua") + + +require "components.signals" +require "components.window_switcher" +require "components.keybinds" +require "components.statusbar" + +tag.connect_signal("request::default_layouts", function() + awful.layout.append_default_layouts({ + awful.layout.suit.floating + }) +end) diff --git a/.config/awesome/themes/prismite/lotus_wallpaper.png b/.config/awesome/themes/prismite/lotus_wallpaper.png new file mode 100644 index 0000000..ea4fe38 Binary files /dev/null and b/.config/awesome/themes/prismite/lotus_wallpaper.png differ diff --git a/.config/awesome/themes/prismite/old_wallpaper.png b/.config/awesome/themes/prismite/old_wallpaper.png new file mode 100644 index 0000000..7469165 Binary files /dev/null and b/.config/awesome/themes/prismite/old_wallpaper.png differ diff --git a/.config/awesome/themes/prismite/prismite.lua b/.config/awesome/themes/prismite/prismite.lua new file mode 100644 index 0000000..d0009c3 --- /dev/null +++ b/.config/awesome/themes/prismite/prismite.lua @@ -0,0 +1,73 @@ +local theme_assets = require("beautiful.theme_assets") +local xresources = require "beautiful.xresources" +local dpi = xresources.apply_dpi + +local g = require("gears") +local naughty = require("naughty") + +local vars = require "themes.prismite.vars" + +local theme = {} + +theme.font = vars.font + +theme.bg_normal = vars.colors.bg +theme.bg_focus = vars.colors.bg +theme.bg_urgent = vars.colors.bg +theme.bg_minimize = vars.colors.bg +theme.bg_systray = vars.colors.bg + +theme.fg_normal = vars.colors.fg +theme.fg_focus = vars.colors.fg +theme.fg_urgent = vars.colors.fg +theme.fg_minimize = vars.colors.fg + +theme.useless_gap = dpi(2) +theme.border_width = vars.border_width +theme.border_normal = vars.colors.bright.black +theme.border_focus = vars.colors.bright.black +theme.border_marked = vars.colors.bright.black + +theme.titlebar_close_button_normal = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.red, "transparent", 4) +theme.titlebar_close_button_focus = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.red, "transparent", 4) +theme.titlebar_close_button_normal_hover = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.bright.red, "transparent", 4) +theme.titlebar_close_button_focus_hover = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.bright.red, "transparent", 4) + +theme.titlebar_minimize_button_normal = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.yellow, "transparent", 4) +theme.titlebar_minimize_button_focus = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.yellow, "transparent", 4) +theme.titlebar_minimize_button_normal_hover = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.bright.yellow, "transparent", 4) +theme.titlebar_minimize_button_focus_hover = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.bright.yellow, "transparent", 4) + +theme.titlebar_maximized_button_normal_inactive = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.green, "transparent", 4) +theme.titlebar_maximized_button_focus_inactive = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.green, "transparent", 4) +theme.titlebar_maximized_button_normal_active = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.bright.green, "transparent", 4) +theme.titlebar_maximized_button_focus_active = g.surface.load_from_shape(15, 15, g.shape.rounded_rect, vars.colors.bright.green, "transparent", 4) + +theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png" +theme.menu_height = dpi(15) +theme.menu_width = dpi(100) + +theme.wallpaper = vars.theme_path.."wallpaper.png" + +theme.awesome_icon = theme_assets.awesome_icon( + theme.menu_height, vars.colors.yellow, vars.colors.red +) + +theme.notification_icon_size = dpi(32) +theme.notification_border_width = vars.border_width +theme.notification_border_color = theme.border_normal +theme.notification_shape = vars.shape + +naughty.config.presets.critical.bg = theme.bg_normal +naughty.config.presets.critical.timeout = 3 +naughty.config.presets.critical.fg = theme.fg_normal +naughty.config.presets.critical.border_color = vars.colors.red +naughty.config.defaults.position = "bottom_right" +naughty.config.defaults.border_width = vars.border_width + +theme.tasklist_plain_task_name = true + +theme.icon_theme = "Papirus-Dark" + +return theme + diff --git a/.config/awesome/themes/prismite/prismite_logo.png b/.config/awesome/themes/prismite/prismite_logo.png new file mode 100644 index 0000000..9a2a659 Binary files /dev/null and b/.config/awesome/themes/prismite/prismite_logo.png differ diff --git a/.config/awesome/themes/prismite/sd_wallpaper.png b/.config/awesome/themes/prismite/sd_wallpaper.png new file mode 100644 index 0000000..49f7fbf Binary files /dev/null and b/.config/awesome/themes/prismite/sd_wallpaper.png differ diff --git a/.config/awesome/themes/prismite/sd_wallpaper_new.png b/.config/awesome/themes/prismite/sd_wallpaper_new.png new file mode 100644 index 0000000..6df8125 Binary files /dev/null and b/.config/awesome/themes/prismite/sd_wallpaper_new.png differ diff --git a/.config/awesome/themes/prismite/vars.lua b/.config/awesome/themes/prismite/vars.lua new file mode 100644 index 0000000..c5b938d --- /dev/null +++ b/.config/awesome/themes/prismite/vars.lua @@ -0,0 +1,51 @@ +local gears = require "gears" +local gfs = require("gears.filesystem") +local xresources = require "beautiful.xresources" +local x_col = xresources.get_current_theme() +local dpi = xresources.apply_dpi + + +local shape = function(cr,w,h) + gears.shape.rounded_rect(cr,w,h,8) +end + +local border_width = dpi(1.5) + +local font = "FiraCode Nerd Font Mono SemiBold 8" + +local theme_path = gfs.get_configuration_dir() .. "themes/prismite/" + +local colors = { + fg = x_col.foreground, + bg = x_col.background, + + black = x_col.color0, + red = x_col.color1, + green = x_col.color2, + yellow = x_col.color3, + blue = x_col.color4, + magenta = x_col.color5, + cyan = x_col.color6, + white = x_col.color7, + + bright = { + black = x_col.color8, + red = x_col.color9, + green = x_col.color10, + yellow = x_col.color11, + blue = x_col.color12, + magenta = x_col.color13, + cyan = x_col.color14, + white = x_col.color15, + } +} + +local vars = { + ["shape"] = shape, + ["colors"] = colors, + ["border_width"] = border_width, + ["font"] = font, + ["theme_path"] = theme_path +} + +return vars diff --git a/.config/awesome/themes/prismite/wallpaper.png b/.config/awesome/themes/prismite/wallpaper.png new file mode 100644 index 0000000..f4b1a23 Binary files /dev/null and b/.config/awesome/themes/prismite/wallpaper.png differ diff --git a/.config/awesome/themes/prismite/wallpaper_clean.png b/.config/awesome/themes/prismite/wallpaper_clean.png new file mode 100644 index 0000000..adbe6be Binary files /dev/null and b/.config/awesome/themes/prismite/wallpaper_clean.png differ