We buy olive oil in large bottles, then fill smaller bottles for easier handling. The caps on those bottles were never meant to last as long as we keep them and the thin, deeply drawn aluminum tends to crack after a while.
So I conjured a cap cover from the vasty digital deep:

Which looks exactly like you’d expect when printed in black PETG:

You can see the raggedy edge of the original cap just inside the cover’s rim. A snippet of double-sided tape holds the cover in place, after de-oiling the cap with alcohol.
Having gotten one to fit, I made enough for All The Bottles:

Only two of those see regular service: one in use and another filled when the first is nearly empty. The remaining pair huddle in the back of the shelf against future need.
The OpenSCAD source code produces those fancy knurls with BOSL2’s textured cyl() :
// Shower soap dish
// Ed Nisley - KE4ZNU
// 2026-01-17
include <BOSL2/std.scad>
/* [Hidden] */
HoleWindage = 0.2;
Protrusion = 0.1;
NumSides = 5*3*4;
$fn=NumSides;
ID = 0;
OD = 1;
LENGTH = 2;
WallThick = 1.0;
BaseThick = 2.0;
CapOD = 36.0;
CoverOA = [CapOD,CapOD + 2*WallThick,20.0 + BaseThick];
//----------
// Build it
render()
difference() {
cyl(BaseThick,d=CoverOA[OD],chamfer1=1.0,anchor=BOTTOM) position(TOP)
cyl(CoverOA[LENGTH] - BaseThick,d=CoverOA[OD],
texture="trunc_pyramids",tex_size=[2,6], style="convex",
anchor=BOTTOM);
up(BaseThick)
cyl(CoverOA[LENGTH],d=CoverOA[ID],anchor=BOTTOM);
}
Spam comments get trashed, so don’t bother. Comment moderation may cause a delay.