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