Yeah, my usual (somewhat lazy) process nowadays is to just install from my package manager (for init support) then grab the actual latest / customized binary from
xcaddy or the download page to my current directory (i.e. NOT
/usr/bin or wherever I end up running it from), then…
chmod +x ./caddy
./caddy version && ./caddy list-modules
mv ./caddy $(which caddy)
In this process I check what I’ve built/downloaded is correct, separate from whatever’s in the
path, and then overwrite the old one.