shell-completion/zsh: complete hidden images when word starts with "." Show hidden images in the completion results, but only if the current word starts with ".", such that - `machinectl clone <Tab>` will only offer non-hidden images, but - `machinectl clone .<Tab>` will offer both hidden and non-hidden images
meson: Always build bootctl bootctl is rather useful to have, even if on a system without UEFI, as it has a number of verbs that are unrelated to UEFI (e.g kernel-identify), and more importantly, it supports --root to operate on directory trees (which could be intended to be deployed on UEFI) so let's make sure we always build it.
zsh: busctl: fix flags parsing for properties I'm not quite sure what the original intent of this line was, but it doesn't work in the one call-site the "required" argument is actually used. The "writable" flag was indexed as a scalar leaving only the "e" to compare against. Instead, let's just sort the parsed flags and compare the whole thing. Also substitute "required" as a pattern, so that pattern based comparisons may be supported.
zsh: reintroduce pattern argument to uncached verbs The systemctl completion previously made use of PREFIX as a pattern argument to list-unit-files and list-units. This had the problem of erroneously filtering the results that were stored in the cache, and erroneously filtering results that might have been requested according to the users configuration (e.g. _correct completer, certain matcher-lists or tag-orders, etc.). Unfortunately, the runtime of list-unit-files increases when no pattern argument is provided, and systemctl show, used to filter those units, can become unacceptably slow when provided with too many units to describe. Let's re-introduce the pattern argument to list-unit-files and list-units where necessary in order to alleviate these bottlenecks without poisining the cache. A 'use-pattern' style is introduced that may be used to disable this behavior if it is undesired. We can still expect that certain completions, like `systemctl start <TAB>` will be slow, like before. To fix this we will need systemd to learn a more efficient way of filtering the units than parsing systemctl show.
Drop split-usr and unmerged-usr support As previously announced, execute order 66: https://lists.freedesktop.org/archives/systemd-devel/2022-September/048352.html The meson options split-usr, rootlibdir and rootprefix become no-ops that print a warning if they are set to anything other than the default values. We can remove them in a future release.
zsh: remove unit property caching The existing caching policy isn't very sensible for this cache. We could write a different policy, but I don't think there is much value in caching these values, as in my experience the command used to generate them is quick.
zsh: update default caching policy for units The existing caching policy was completely bogus. In the first stanza, despite the comment, the pattern given would consider the cache invalid if it was more than 1 hour old. The second stanza was also incorrect, since the output of `systemctl --all` is not unit file paths, but unit names. When they were being tested against the cachefile mtime, the test would always fail becuase of the nonexistant file (hopefully). In fact it's not very useful to test if the unit files have newer mtime in this case anyway, since we are only caching their names. Also, `systemctl --all` is an unfortunately slow operation to be used in testing for the cache validity — we want this operation to at least be faster than rebuilding the cache. I've rewritten this stanza with my best guess at its original intent. It now checks against the mtime of the parent directories in the search path, which should be updated and cause the cache to rebuild when we add, remove, or rename any unit files.
zsh: default to system manager when not specified This used to work correctly, before the change was reverted in e09d0d46c297. In fact it is important to specify the manager explicity in the completion because the argument is reused in the caching policies. An empty argument here caused the completion to create separate caches with and without the --system parameter. We can simplify the given pattern a little here too.