I saw ProteanMan's "Proteus Key Holder" https://www.thingiverse.com/thing:2749745, but my keys would not fit in it. I tried to improve his design to automatically generate spacers, have text, and have a ton of other customized stuff that makes me feel overwhelmed.
My older version has text that was "engraved" https://photos.app.goo.gl/R7EbuJgKD9n5Mcq78, but I learned that my printer (Prusa i3 MK2) has Prusa Control where I can tell the printer which layer I want to stop and change out the filament. Now the text is WAY easier to read because it is "embossed."
I made a low-quality movie that is 18 seconds if you are interested: https://youtu.be/Y8NdhHFux54
I still am working on the computation time for this project. I have never got the customizer to work yet. I only have it working on my computer. You might need to download OpenSCAD http://www.openscad.org/downloads.html and run it on your computer. I think the issue is the number of surfaces generated, but even when I have the circle fragments low for the finger indentation as well as the sphere fragments low for the minkowski function, it still takes a while to compile. I expect that I need a better way of rounding the edges with a bevel (but the few beveling scripts I have tried cannot bevel a rounded object to my satisfaction).
I chose a higher infill because this is something that will take a lot of wear and tear in the years to come. The resolution doesn't really matter that much because the objects are so simple. The biggest thing that the resolution affects is the height of the spacers (because the height is small and needs to be a multiple of the z-resolution).
Choosing the screw length
Are you wondering what length of screw you should get? At the stores near me I realistically only have the choice between the M3x12 and the M3x16, so I don't have a lot of choice. Because the length ("12" after the M3) doesn't account for the head, this might vary a little, but generally heads are about 2mm. This means you should do the following:
1) Measure the thickness of all the keys that will be adjacent to one another
2) Measure (or approximate) the thickness of your nut
3) The MINIMUM length you need is 2 (height - nut_height) + [# of spacers per 1 bolt] spacer_height + [step 1 measurement] + [step 2 measurement] + 2 (because of head)
Example: I have 4 keys. 2 of them next to each other measure at 4.5 (step 1) and my nut has a thickness of 2.34 (step 2). I plan to use 1 spacer on one side.
With the defaults (height = 6, nut_height = 3, spacer_height = 0.7) I have:
MINIMUM = 2 (6 - 3) + 1 0.7 + 4.5 + 2.34 + 2 = 15.54
This means I will need to buy an M3x16 bolt because that is the next largest length after 15.54
My design was for an M3 bolt and an M3 nut. I do not know if the head of the bolt or the outer dimensions of the nut are standard. I would recommend using a caliper to find the apothem diameter (the length from flat part to flat part) of the nut as well as the diameter of the head of the screw to make sure that everything fits. I doubt that you will need to measure the diameter of the bolt shaft unless you decide to use something other than M3.
I designed this so that the screw will have a lot of tension on the shaft of the bolt (it digs into the print), but if you want more control over the tension on the keys, then set screw_tight to "no". With screw_tight = "yes", the key holder will function if you don't have the nuts, but they are there for security.