summaryrefslogtreecommitdiff
path: root/pkgs/astal/src/lib.lua
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-06-19 13:12:02 -0400
committerFreya Murphy <freya@freyacat.org>2025-06-19 13:12:02 -0400
commit2cac0bd4c33fb54db8fc4cc2a5fc9d7c49fdb649 (patch)
treeabac1cc70b1d559e34eeef71e5d93cd980314d2b /pkgs/astal/src/lib.lua
parentrefactor time function in astal lib (diff)
downloaddotfiles-nix-2cac0bd4c33fb54db8fc4cc2a5fc9d7c49fdb649.tar.gz
dotfiles-nix-2cac0bd4c33fb54db8fc4cc2a5fc9d7c49fdb649.tar.bz2
dotfiles-nix-2cac0bd4c33fb54db8fc4cc2a5fc9d7c49fdb649.zip
update astal notifications
Diffstat (limited to 'pkgs/astal/src/lib.lua')
-rw-r--r--pkgs/astal/src/lib.lua62
1 files changed, 62 insertions, 0 deletions
diff --git a/pkgs/astal/src/lib.lua b/pkgs/astal/src/lib.lua
index 71a6c65..7fa326a 100644
--- a/pkgs/astal/src/lib.lua
+++ b/pkgs/astal/src/lib.lua
@@ -2,6 +2,7 @@ local astal = require("astal")
local Variable = require("astal").Variable
local Astal = require("astal.gtk3").Astal
local GLib = astal.require("GLib")
+local Gtk = require("astal.gtk3").Gtk
local lib
@@ -149,6 +150,67 @@ lib = {
}, t or {})
return GLib.DateTime.new_from_unix_local(t.time):format(t.format)
end,
+
+ --- astal variable map
+ varmap = function(initial)
+ local map = initial
+ local var = Variable()
+
+ local function notify()
+ local arr = {}
+ for _, value in pairs(map) do
+ table.insert(arr, value)
+ end
+ var:set(arr)
+ end
+
+ local function delete(key)
+ if Gtk.Widget:is_type_of(map[key]) then map[key]:destroy() end
+
+ map[key] = nil
+ end
+
+ notify()
+
+ return setmetatable({
+ set = function(key, value)
+ delete(key)
+ map[key] = value
+ notify()
+ end,
+ delete = function(key)
+ delete(key)
+ notify()
+ end,
+ get = function()
+ return var:get()
+ end,
+ subscribe = function(callback)
+ return var:subscribe(callback)
+ end,
+ }, {
+ __call = function() return var() end,
+ })
+ end,
+
+ --- better or function
+ value_or = function(l, r)
+ if lib.is_true(l) then
+ return l
+ else
+ return r
+ end
+ end,
+
+ --- better and function
+ value_and = function(l, r)
+ if lib.is_false(l) then
+ return l
+ else
+ return r
+ end
+ end,
+
}
return lib