-
-
Save luukvbaal/2c697b5e068471ee989bff8a56507142 to your computer and use it in GitHub Desktop.
[Trigger] | |
Operation = Remove | |
Type = Package | |
Target = * | |
[Action] | |
Description = Clearing cache... | |
When = PostTransaction | |
Exec = /home/<user>/.local/bin/tools/removehook |
[Trigger] | |
Operation = Upgrade | |
Type = Package | |
Target = * | |
[Action] | |
Description = Clearing cache... | |
When = PostTransaction | |
Exec = /home/<user>/.local/bin/tools/upgradehook |
#!/bin/sh | |
yaycache="$(find "$HOME"/.cache/yay -maxdepth 1 -type d | awk '{ print "-c " $1 }' | tail -n +2)" | |
yayremoved=$(/usr/bin/paccache -ruvk0 $yaycache | sed '/\.cache\/yay/!d' | cut -d \' -f2 | rev | cut -d / -f2- | rev) | |
[ -z $yayremoved ] || echo "==> Remove all uninstalled package folders" && | |
echo $yayremoved | xargs -rt rm -r |
#!/bin/sh | |
yaycache="$(find "$HOME"/.cache/yay -maxdepth 1 -type d | awk '{ print "-c " $1 }' | tail -n +2)" | |
echo "==> Keep last 2 installed versions" | |
/usr/bin/paccache -rvk2 -c /var/cache/pacman/pkg $yaycache |
Unfortunately paccache
doesn't work recursively as far as I know hence why I pass all sub-folders in yay buildDir
.
But I guess the hard-coded directory could be replaced by $(yay -Pg | jq -r .buildDir)
if you want, e.g. yaycache="$(find $(yay -Pg | jq -r .buildDir) -maxdepth 1 -type d | awk '{ print "-c " $1 }' | tail -n +2)"
Honestly the better option is to just set PKGDIR and have paccache clean that.
Yes I guess it is, thanks.
These hooks are great! Thank you!
Is there any fast way to add this into system? Maybe, AUR package or smth like that?
@Mayurifag in theory yeah but that would require a separate package for each aur helper or some sort of config file to indicate the cache directory. Doesn't get you much further than just manually installing the scripts so I don't feel for it much.
Wouldn't it be more efficient and extensible to use the $HOME variable rather than /home/<user>/
each time?
For the scripts, sure. The hook files however are run as root so that's not going to work.
This is what I've been using:
[Trigger]
Operation = Upgrade
Operation = Remove
Type = Package
Target = *
[Action]
Description = Clearing cache...
When = PostTransaction
Exec = /usr/bin/bash -c 'yay=$(find /home/$SUDO_USER/.cache/yay -mindepth 1 -maxdepth 1 -type d -exec echo -c {} \;); paccache -rk2 -c /var/cache/pacman/pkg $yay; paccache -ruk0 $yay; find /home/$SUDO_USER/.cache/yay -mindepth 1 -maxdepth 1 -type d -exec bash -c "compgen -G {}/*.pkg.tar.zst > /dev/null || rm -r {}" \;'
Edit: Actually now that I'm thinking about it, parsing paccache -ru
isn't reliable because it will remove e.g. /home/user/.cache/yay/mutter-performance/mutter-performance-docs-1:44.3-2-x86_64.pkg.tar.zst
(because mutter-performance-docs
is not installed) thus removing /home/user/.cache/yay/mutter-performance
even though mutter-performance
is installed.
yaycache="$(yay -Pg | jq .buildDir)"
;)