summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.config/yay/hooks/install_log.lua30
-rw-r--r--.config/yay/hooks/maintainer_change.lua75
-rw-r--r--.config/yay/hooks/recently_modified.lua18
-rw-r--r--.config/yay/init.lua4
4 files changed, 127 insertions, 0 deletions
diff --git a/.config/yay/hooks/install_log.lua b/.config/yay/hooks/install_log.lua
new file mode 100644
index 0000000..e07183e
--- /dev/null
+++ b/.config/yay/hooks/install_log.lua
@@ -0,0 +1,30 @@
1-- Copypasted from https://github.com/Jguer/yay/blob/next/doc/examples/install_log.lua
2
3
4local log_path = (os.getenv("XDG_STATE_HOME") or (os.getenv("HOME") .. "/.local/state")) .. "/yay/install.log"
5local log_dir = log_path:match("^(.+)/[^/]+$")
6
7yay.create_autocmd("PostInstall", {
8 desc = "append every installed/upgraded package to a persistent log",
9 callback = function(event)
10 yay.log.info("install_log: writing to ", log_path)
11 os.execute("mkdir -p " .. log_dir)
12 local f, err = io.open(log_path, "a")
13 if not f then
14 yay.log.warn("install_log: cannot open log file: ", err)
15 return
16 end
17
18 local ts = os.date("%Y-%m-%dT%H:%M:%S")
19
20 for _, pkg in ipairs(event.data.packages) do
21 local upgrade = pkg.local_version ~= ""
22 local action = upgrade and "upgrade" or "install"
23 local version_change = upgrade and (pkg.local_version .. " -> " .. pkg.version) or pkg.version
24 f:write(string.format("%s %-9s %-7s %-14s %-12s %s\n",
25 ts, action, pkg.source, pkg.reason, pkg.name, version_change))
26 end
27
28 f:close()
29 end,
30})
diff --git a/.config/yay/hooks/maintainer_change.lua b/.config/yay/hooks/maintainer_change.lua
new file mode 100644
index 0000000..9f8be2d
--- /dev/null
+++ b/.config/yay/hooks/maintainer_change.lua
@@ -0,0 +1,75 @@
1-- Copypasted from https://github.com/Jguer/yay/blob/next/doc/examples/maintainer_change.lua
2--
3-- Warn when an AUR package's maintainer changes between upgrades.
4--
5-- The known maintainer for each package is stored in a plain text cache file
6-- inside the yay cache directory (build_dir). On the first upgrade for a
7-- package the current maintainer is recorded without any warning. On
8-- subsequent upgrades:
9-- * same maintainer → debug "match correct"
10-- * different maintainer → error "new maintainer, double check build files"
11--
12-- The cache is updated whenever a new or changed maintainer is seen.
13--
14-- Cache file location: <cache_dir>/maintainer_cache
15-- Format: one "pkgname=maintainer" entry per line.
16
17-- missing reliable cfg getter
18local cache_dir = (os.getenv("XDG_CACHE_HOME") or (os.getenv("HOME") .. "/.cache")) .. "/yay"
19local cache_file = cache_dir .. "/maintainer_cache"
20
21local function load_cache()
22 local cache = {}
23 local f = io.open(cache_file, "r")
24 if not f then return cache end
25 for line in f:lines() do
26 local name, maintainer = line:match("^([^=]+)=(.*)$")
27 if name then
28 cache[name] = maintainer
29 end
30 end
31 f:close()
32 return cache
33end
34
35local function save_cache(cache)
36 local f = assert(io.open(cache_file, "w"))
37 for name, maintainer in pairs(cache) do
38 f:write(name .. "=" .. maintainer .. "\n")
39 end
40 f:close()
41end
42
43yay.create_autocmd("UpgradeSelect", {
44 desc = "warn on AUR maintainer changes",
45 callback = function(event)
46 yay.log.info("checking for AUR maintainer changes")
47 local cache = load_cache()
48 local dirty = false
49
50 for _, pkg in ipairs(event.data.upgrades) do
51 if pkg.repository == "aur" and pkg.maintainer ~= "" then
52 local cached = cache[pkg.name]
53 if cached == nil then
54 -- First time seeing this package: seed the cache silently.
55 cache[pkg.name] = pkg.maintainer
56 dirty = true
57 elseif cached == pkg.maintainer then
58 yay.log.debug("match correct: " .. pkg.name .. " " .. pkg.maintainer)
59 else
60 yay.log.error("new maintainer, double check build files: ", pkg.name,
61 "(was: " .. cached .. ", now: " .. pkg.maintainer .. ")")
62 cache[pkg.name] = pkg.maintainer
63 dirty = true
64 end
65 end
66 end
67
68 if dirty then
69 yay.log.info("saving maintainer cache:", cache_file)
70 save_cache(cache)
71 end
72
73 return { exclude = {}, skip_menu = false }
74 end,
75})
diff --git a/.config/yay/hooks/recently_modified.lua b/.config/yay/hooks/recently_modified.lua
new file mode 100644
index 0000000..561d87e
--- /dev/null
+++ b/.config/yay/hooks/recently_modified.lua
@@ -0,0 +1,18 @@
1-- Copypasted from https://github.com/Jguer/yay/blob/next/doc/examples/recently_modified.lua
2
3yay.create_autocmd("UpgradeSelect", {
4 desc = "skip recently modified AUR upgrades",
5 callback = function(event)
6 yay.log.info("pre-excluding AUR packages modified in the last 3 days")
7 local exclude = {}
8 local recent_cutoff = os.time() - (3 * 24 * 60 * 60)
9 for _, pkg in ipairs(event.data.upgrades) do
10 if pkg.repository == "aur" and pkg.last_modified >= recent_cutoff then
11 yay.log.warn("pre-excluding recently modified AUR package: ", pkg.name)
12 table.insert(exclude, pkg.name)
13 end
14 end
15
16 return { exclude = exclude, skip_menu = false }
17 end,
18})
diff --git a/.config/yay/init.lua b/.config/yay/init.lua
index 18c3b97..721762c 100644
--- a/.config/yay/init.lua
+++ b/.config/yay/init.lua
@@ -5,3 +5,7 @@ yay.opt.sudo_loop = true -- Do not expire sudo prompt
5yay.opt.answer_clean = "None" 5yay.opt.answer_clean = "None"
6yay.opt.answer_diff = "All" 6yay.opt.answer_diff = "All"
7yay.opt.remove_make = "no" 7yay.opt.remove_make = "no"
8
9require("hooks/install_log")
10require("hooks/recently_modified")
11require("hooks/maintainer_change")