begin astal rewrite in lua; implement workspace widget in statusbar

This commit is contained in:
gnat
2024-10-12 00:46:39 -07:00
parent 9e70891175
commit 9d44a0ef14
42 changed files with 161 additions and 2848 deletions

9
lua/widgets/bar/init.lua Normal file
View File

@ -0,0 +1,9 @@
local workspaces <const> = require(... .. '.workspaces')
return Astal.Window({
namespace = "bar",
name = "bar",
anchor = Astal.WindowAnchor.TOP + Astal.WindowAnchor.LEFT + Astal.WindowAnchor.RIGHT,
exclusivity = "EXCLUSIVE",
child = workspaces,
})

View File

@ -0,0 +1,48 @@
local Hyprland <const> = astal.require("AstalHyprland")
local map, sequence = require('lua.lib').map, require('lua.lib').sequence
local hypr = Hyprland.get_default()
local map, sequence = require('lua.lib').map, require('lua.lib').sequence
local hypr = Hyprland.get_default()
local function workspace_row(start, stop)
return Widget.Box({
children = map(sequence(start, stop), function(i)
return Widget.Button({
setup = function(self)
self:hook(hypr, 'notify::focused-workspace', function(self, workspace)
self:toggle_class_name('focused', workspace:get_id() == i)
end)
self:hook(hypr, 'notify::workspaces', function(self, workspaces)
map(workspaces, function(workspace)
if workspace:get_id() == i then
-- ick
local count = 0
for _ in ipairs(workspace:get_clients()) do
count = count + 1
end
self:toggle_class_name('occupied', workspace:get_id() == i and count > 0)
end
end)
end)
end,
on_click_release = function()
hypr:message_async(string.format("dispatch workspace %d", i))
end
})
end)
})
end
return Widget.Box({
class_name = 'workspaces',
vertical = true,
hexpand = false,
halign = 'START',
children = {
workspace_row(1, 5),
workspace_row(6, 10),
}
})