diff options
Diffstat (limited to '.config/awesome/quarrel/persistent.lua')
-rw-r--r-- | .config/awesome/quarrel/persistent.lua | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/.config/awesome/quarrel/persistent.lua b/.config/awesome/quarrel/persistent.lua new file mode 100644 index 0000000..2b15c89 --- /dev/null +++ b/.config/awesome/quarrel/persistent.lua @@ -0,0 +1,62 @@ +local gdebug = require "gears.debug" +local qfs = require "quarrel.fs" +local qjson = require "quarrel.json" + +awesome.register_xproperty("is_restart", "boolean") + +---@alias QPersistentValue string|number|table|nil|boolean + +---@class QuarrelPersistent +local qpersistent = {} + +---@type table<string, QPersistentValue> +local inner = {} + +--- Store a key-value pair in a persistent store +---@param key string +---@param value QPersistentValue +function qpersistent.store(key, value) + inner[key] = value +end + +--- Get a key-value pair in a persistent store +---@param key string +---@return QPersistentValue +function qpersistent.get(key) + return inner[key] +end + +--- Check if there was a restart +---@return boolean +function qpersistent.is_restart() + return awesome.get_xproperty "is_restart" ~= nil +end + +do + local ok, content = pcall(qfs.read, "/tmp/qpersistent-store") + + if not ok and not qpersistent.is_restart() then + gdebug.print_error "failed to read persistent store" + inner = {} + else + inner = qjson.decode(content) + end +end + +awesome.connect_signal("exit", function(restart) + if not restart then + return + end -- we probably errored + + local ok = pcall(qfs.write, qjson.encode(inner), "/tmp/qpersistent-store") + if not ok then + gdebug.print_error "failed to open persistent store" + return + end + + if not qpersistent.is_restart() then + awesome.set_xproperty("is_restart", true) + end +end) + +return qpersistent |