From b3530d7c4a102935fa26498a160ee1dc6c1e9c03 Mon Sep 17 00:00:00 2001 From: delta Date: Fri, 4 Jul 2025 00:38:29 +0200 Subject: :3 --- .config/awesome/quarrel/persistent.lua | 62 ++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 .config/awesome/quarrel/persistent.lua (limited to '.config/awesome/quarrel/persistent.lua') 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 +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 -- cgit v1.2.3